+ def test_create_by_unauthorized
+ assert_no_difference "ChangesetComment.count" do
+ post changeset_comment_path(create(:changeset, :closed), :text => "This is a comment")
+ assert_response :unauthorized
+ end
+ end
+
+ def test_create_on_missing_changeset
+ assert_no_difference "ChangesetComment.count" do
+ post changeset_comment_path(999111, :text => "This is a comment"), :headers => bearer_authorization_header
+ assert_response :not_found
+ end
+ end
+
+ def test_create_on_open_changeset
+ assert_no_difference "ChangesetComment.count" do
+ post changeset_comment_path(create(:changeset), :text => "This is a comment"), :headers => bearer_authorization_header
+ assert_response :conflict
+ end
+ end
+
+ def test_create_without_text
+ assert_no_difference "ChangesetComment.count" do
+ post changeset_comment_path(create(:changeset, :closed)), :headers => bearer_authorization_header
+ assert_response :bad_request
+ end
+ end
+
+ def test_create_with_empty_text
+ assert_no_difference "ChangesetComment.count" do
+ post changeset_comment_path(create(:changeset, :closed), :text => ""), :headers => bearer_authorization_header
+ assert_response :bad_request
+ end
+ end
+
+ def test_create_when_not_agreed_to_terms
+ user = create(:user, :terms_agreed => nil)
+ auth_header = bearer_authorization_header user
+ changeset = create(:changeset, :closed)
+
+ assert_difference "ChangesetComment.count", 0 do
+ post changeset_comment_path(changeset), :params => { :text => "This is a comment" }, :headers => auth_header
+ assert_response :forbidden
+ end
+ end
+
+ def test_create_with_write_api_scope
+ user = create(:user)
+ auth_header = bearer_authorization_header user, :scopes => %w[write_api]
+ changeset = create(:changeset, :closed)
+
+ assert_difference "ChangesetComment.count", 1 do
+ post changeset_comment_path(changeset), :params => { :text => "This is a comment" }, :headers => auth_header
+ assert_response :success
+ end
+
+ comment = ChangesetComment.last
+ assert_equal changeset.id, comment.changeset_id
+ assert_equal user.id, comment.author_id
+ assert_equal "This is a comment", comment.body
+ assert comment.visible
+ end
+