+ changeset1 = create(:changeset, :closed, :user => user2)
+ comment11 = create(:changeset_comment, :changeset => changeset1, :author => user1, :created_at => "2023-01-01", :body => "changeset 1 question")
+ comment12 = create(:changeset_comment, :changeset => changeset1, :author => user2, :created_at => "2023-02-01", :body => "changeset 1 answer")
+ changeset2 = create(:changeset, :closed, :user => user1)
+ comment21 = create(:changeset_comment, :changeset => changeset2, :author => user1, :created_at => "2023-03-01", :body => "changeset 2 note")
+ comment22 = create(:changeset_comment, :changeset => changeset2, :author => user1, :created_at => "2023-04-01", :body => "changeset 2 extra note")
+ comment23 = create(:changeset_comment, :changeset => changeset2, :author => user2, :created_at => "2023-05-01", :body => "changeset 2 review")
+
+ get api_changeset_comments_path
+ assert_response :success
+ assert_comments_in_order [comment23, comment22, comment21, comment12, comment11]
+
+ get api_changeset_comments_path(:limit => 3)
+ assert_response :success
+ assert_comments_in_order [comment23, comment22, comment21]
+
+ get api_changeset_comments_path(:from => "2023-03-15T00:00:00Z")
+ assert_response :success
+ assert_comments_in_order [comment23, comment22]
+
+ get api_changeset_comments_path(:from => "2023-01-15T00:00:00Z", :to => "2023-04-15T00:00:00Z")
+ assert_response :success
+ assert_comments_in_order [comment22, comment21, comment12]
+
+ get api_changeset_comments_path(:user => user1.id)
+ assert_response :success
+ assert_comments_in_order [comment22, comment21, comment11]
+
+ get api_changeset_comments_path(:from => "2023-03-15T00:00:00Z", :format => "json")
+ assert_response :success
+ js = ActiveSupport::JSON.decode(@response.body)
+ assert_not_nil js
+ assert_equal 2, js["comments"].count
+ assert_equal comment23.id, js["comments"][0]["id"]
+ assert_equal comment22.id, js["comments"][1]["id"]
+ end
+
+ 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)