Commit 072d0409 by Clinton Blackburn

Partially Cleaned Comment Thread API tests

- Creating only the requisite data needed for tests
- Using subject and expect
- Replaced double quotes with single quotes
parent 3f335264
...@@ -103,7 +103,7 @@ describe "app" do ...@@ -103,7 +103,7 @@ describe "app" do
@threads["t1"].group_id = 123 @threads["t1"].group_id = 123
@threads["t1"].save! @threads["t1"].save!
rs = thread_result course_id: DFLT_COURSE_ID, group_id: 321 rs = thread_result course_id: DFLT_COURSE_ID, group_id: 321
rs.each.map {|res| res["group_id"].should be_nil } rs.each.map { |res| res["group_id"].should be_nil }
end end
context "when filtering flagged posts" do context "when filtering flagged posts" do
it "returns threads that are flagged" do it "returns threads that are flagged" do
...@@ -231,19 +231,19 @@ describe "app" do ...@@ -231,19 +231,19 @@ describe "app" do
def thread_result_order (sort_key, sort_order) def thread_result_order (sort_key, sort_order)
results = thread_result course_id: DFLT_COURSE_ID, sort_key: sort_key, sort_order: sort_order results = thread_result course_id: DFLT_COURSE_ID, sort_key: sort_key, sort_order: sort_order
results.length.should == 10 results.length.should == 10
results.map {|t| t["title"]} results.map { |t| t["title"] }
end end
def move_to_end(ary, *vals) def move_to_end(ary, *vals)
vals.each do |val| vals.each do |val|
ary = ary.select {|v| v!=val } << val ary = ary.select { |v| v!=val } << val
end end
ary ary
end end
def move_to_front(ary, *vals) def move_to_front(ary, *vals)
vals.reverse.each do |val| vals.reverse.each do |val|
ary = ary.select {|v| v!=val }.insert(0, val) ary = ary.select { |v| v!=val }.insert(0, val)
end end
ary ary
end end
...@@ -383,7 +383,7 @@ describe "app" do ...@@ -383,7 +383,7 @@ describe "app" do
result["num_pages"].should == num_pages result["num_pages"].should == num_pages
end end
result["page"].should == page result["page"].should == page
actual_order += result["collection"].map {|v| v["title"]} actual_order += result["collection"].map { |v| v["title"] }
end end
actual_order.should == expected_order actual_order.should == expected_order
end end
...@@ -393,7 +393,7 @@ describe "app" do ...@@ -393,7 +393,7 @@ describe "app" do
@threads["t7"].pinned = true @threads["t7"].pinned = true
@threads["t7"].save! @threads["t7"].save!
expected_order = move_to_front(move_to_end(@default_order, "t5"), "t7") expected_order = move_to_front(move_to_end(@default_order, "t5"), "t7")
test_paged_order({'sort_key'=>'comments', 'sort_dir'=>'asc', 'per_page'=>3}, expected_order) test_paged_order({'sort_key' => 'comments', 'sort_dir' => 'asc', 'per_page' => 3}, expected_order)
end end
it "orders correctly acrosss pages with unread filter" do it "orders correctly acrosss pages with unread filter" do
...@@ -405,7 +405,7 @@ describe "app" do ...@@ -405,7 +405,7 @@ describe "app" do
@threads["t7"].save! @threads["t7"].save!
expected_order = move_to_front(move_to_end(@default_order[1..8], "t5"), "t7") expected_order = move_to_front(move_to_end(@default_order[1..8], "t5"), "t7")
test_paged_order( test_paged_order(
{'sort_key'=>'comments', 'sort_dir'=>'asc', 'per_page'=>3}, {'sort_key' => 'comments', 'sort_dir' => 'asc', 'per_page' => 3},
expected_order, expected_order,
["unread"], ["unread"],
user.id user.id
...@@ -417,9 +417,9 @@ describe "app" do ...@@ -417,9 +417,9 @@ describe "app" do
end end
def test_unicode_data(text) def test_unicode_data(text)
course_id = "unicode_course" course_id = 'unicode_course'
thread = make_thread(User.first, text, course_id, "unicode_commentable") thread = create(:comment_thread, body: text, course_id: course_id)
make_comment(User.first, thread, text) create(:comment, comment_thread: thread, body: text)
result = thread_result(course_id: course_id).first result = thread_result(course_id: course_id).first
check_thread_result_json(nil, thread, result) check_thread_result_json(nil, thread, result)
end end
...@@ -427,39 +427,45 @@ describe "app" do ...@@ -427,39 +427,45 @@ describe "app" do
include_examples "unicode data" include_examples "unicode data"
end end
describe "GET /api/v1/threads/:thread_id" do describe 'GET /api/v1/threads/:thread_id' do
let(:thread) do
before(:each) { init_without_subscriptions } comment = create(:comment)
comment.comment_thread
end
it "returns JSON" do subject do
thread = CommentThread.first
get "/api/v1/threads/#{thread.id}" get "/api/v1/threads/#{thread.id}"
last_response.should be_ok
last_response.content_type.should == "application/json;charset=utf-8"
end end
it "get information of a single comment thread" do it { should be_ok }
thread = CommentThread.first
get "/api/v1/threads/#{thread.id}" it 'returns JSON' do
last_response.should be_ok expect(subject.content_type).to eq 'application/json;charset=utf-8'
response_thread = parse last_response.body
check_thread_result_json(nil, thread, response_thread)
end end
it "computes endorsed correctly" do it 'get information of a single comment thread' do
thread = CommentThread.first check_thread_result_json(nil, thread, parse(subject.body))
comment = thread.root_comments[1] end
it 'computes endorsed correctly' do
comment = thread.root_comments[0]
comment.endorsed = true comment.endorsed = true
comment.save! comment.save!
get "/api/v1/threads/#{thread.id}"
last_response.should be_ok expect(subject).to be_ok
response_thread = parse last_response.body parsed = parse(subject.body)
response_thread["endorsed"].should == true expect(parsed).to include('endorsed' => true)
# re-request the thread from the database before checking it. thread.reload
thread = CommentThread.find(thread.id) check_thread_result_json(nil, thread, parsed)
check_thread_result_json(nil, thread, response_thread) end
context 'when marking as read' do
subject do
get "/api/v1/threads/#{thread.id}", {:user_id => thread.author.id, :mark_as_read => true}
end end
it { should be_ok }
# This is a test to ensure that the username is included even if the # This is a test to ensure that the username is included even if the
# thread's author is the one looking at the comment. This is because of a # thread's author is the one looking at the comment. This is because of a
# regression in which we used User.only(:id, :read_states). This worked # regression in which we used User.only(:id, :read_states). This worked
...@@ -467,67 +473,72 @@ describe "app" do ...@@ -467,67 +473,72 @@ describe "app" do
# missing the username and was not refetched. # missing the username and was not refetched.
# BBEGGS - Note 8/4/2015: Identify map has been removed during the mongoid 4.x upgrade. # BBEGGS - Note 8/4/2015: Identify map has been removed during the mongoid 4.x upgrade.
# Should no longer be an issue. # Should no longer be an issue.
it "includes the username even if the thread is being marked as read for the thread author" do it 'includes the username even if the thread is being marked as read for the thread author' do
thread = CommentThread.first expect(parse(subject.body)).to include('username' => thread.author.username)
expected_username = thread.author.username end
get "/api/v1/threads/#{thread.id}", {:user_id => thread.author_id, :mark_as_read => true}
last_response.should be_ok
response_thread = parse last_response.body
response_thread["username"].should == expected_username
end end
it "get information of a single comment thread with its comments" do context 'with comments' do
thread = CommentThread.first subject do
get "/api/v1/threads/#{thread.id}", recursive: true get "/api/v1/threads/#{thread.id}", recursive: true
last_response.should be_ok
check_thread_result_json(nil, thread, parse(last_response.body))
check_thread_response_paging_json(thread, parse(last_response.body))
end end
it "returns 404 when the thread does not exist" do it { should be_ok }
thread = CommentThread.first
path = "/api/v1/threads/#{thread.id}" it 'get information of a single comment thread with its comments' do
get path parsed = parse(subject.body)
last_response.should be_ok check_thread_result_json(nil, thread, parsed)
check_thread_response_paging_json(thread, parsed)
end
end
it 'returns 404 when the thread does not exist' do
thread.destroy thread.destroy
get path expect(subject.status).to eq 404
last_response.status.should == 404 expect(parse(last_response.body).first).to eq I18n.t(:requested_object_not_found)
parse(last_response.body).first.should == I18n.t(:requested_object_not_found)
end end
it "marks thread as read and confirms its value on returned response" do context 'with user specified' do
user = create_test_user(123) let(:user) { create(:user) }
thread = CommentThread.first
subject do
user.mark_as_read(thread) user.mark_as_read(thread)
get "/api/v1/threads/#{thread.id}", user_id: user.id get "/api/v1/threads/#{thread.id}", user_id: user.id
last_response.should be_ok last_response
json_response = parse(last_response.body) end
changed_thread = CommentThread.find(thread.id)
check_thread_result_json(user, changed_thread, json_response) it { should be_ok }
json_response["read"].should == true
it 'marks thread as read and confirms its value on returned response' do
parsed = parse(subject.body)
thread.reload
check_thread_result_json(user, thread, parsed)
expect(parsed).to include('read' => true)
end
end end
def test_unicode_data(text) def test_unicode_data(text)
thread = make_thread(User.first, text, "unicode_course", "unicode_commentable") thread = create(:comment_thread, body: text)
make_comment(User.first, thread, text) create(:comment, comment_thread: thread, body: text)
get "/api/v1/threads/#{thread.id}", recursive: true get "/api/v1/threads/#{thread.id}", recursive: true
last_response.should be_ok expect(last_response).to be_ok
result = parse last_response.body
check_thread_result_json(nil, thread, result) parsed = parse(last_response.body)
check_thread_response_paging_json(thread, result) check_thread_result_json(nil, thread, parsed)
check_thread_response_paging_json(thread, parsed)
end end
include_examples "unicode data" include_examples 'unicode data'
context "response pagination" do context "response pagination" do
before(:each) do before(:each) do
User.all.delete User.all.delete
Content.all.delete Content.all.delete
@user = create_test_user(999) @user = create_test_user(999)
@threads = {} @threads = {}
@comments = {} @comments = {}
[20,10,3,2,1,0].each do |n| [20, 10, 3, 2, 1, 0].each do |n|
thread_key = "t#{n}" thread_key = "t#{n}"
thread = make_thread(@user, thread_key, DFLT_COURSE_ID, "pdq") thread = make_thread(@user, thread_key, DFLT_COURSE_ID, "pdq")
@threads[n] = thread @threads[n] = thread
...@@ -676,7 +687,7 @@ describe "app" do ...@@ -676,7 +687,7 @@ describe "app" do
last_response.should be_ok last_response.should be_ok
changed_thread = CommentThread.find(thread.id) changed_thread = CommentThread.find(thread.id)
changed_thread.comment_count.should == orig_count + 1 changed_thread.comment_count.should == orig_count + 1
comment = changed_thread.comments.select{|c| c["body"] == "new comment"}.first comment = changed_thread.comments.select { |c| c["body"] == "new comment" }.first
comment.should_not be_nil comment.should_not be_nil
comment.author_id.should == user.id comment.author_id.should == user.id
end end
...@@ -688,7 +699,7 @@ describe "app" do ...@@ -688,7 +699,7 @@ describe "app" do
last_response.should be_ok last_response.should be_ok
changed_thread = CommentThread.find(thread.id) changed_thread = CommentThread.find(thread.id)
changed_thread.comment_count.should == orig_count + 1 changed_thread.comment_count.should == orig_count + 1
comment = changed_thread.comments.select{|c| c["body"] == "new comment"}.first comment = changed_thread.comments.select { |c| c["body"] == "new comment" }.first
comment.should_not be_nil comment.should_not be_nil
comment.anonymous.should be_true comment.anonymous.should be_true
end end
...@@ -720,18 +731,29 @@ describe "app" do ...@@ -720,18 +731,29 @@ describe "app" do
include_examples "unicode data" include_examples "unicode data"
end end
describe "DELETE /api/v1/threads/:thread_id" do
before(:each) { init_without_subscriptions } describe 'DELETE /api/v1/threads/:thread_id' do
it "delete the comment thread and its comments" do let(:thread) { create_comment_thread_and_comments }
thread = CommentThread.first.to_hash
delete "/api/v1/threads/#{thread['id']}" subject { delete "/api/v1/threads/#{thread.id}" }
last_response.should be_ok
CommentThread.where(title: thread["title"]).first.should be_nil it { should be_ok }
it 'deletes the comment thread and its comments' do
expect(CommentThread.where(id: thread.id).count).to eq 1
expect(Comment.where(comment_thread: thread).count).to eq 2
subject
expect(CommentThread.where(id: thread.id).count).to eq 0
expect(Comment.where(comment_thread: thread).count).to eq 0
end
context 'when thread does not exist' do
subject { delete '/api/v1/threads/does_not_exist' }
it 'returns 400 when the thread does not exist' do
expect(subject.status).to eq 400
expect(parse(subject.body).first).to eq I18n.t(:requested_object_not_found)
end end
it "returns 400 when the thread does not exist" do
delete "/api/v1/threads/does_not_exist"
last_response.status.should == 400
parse(last_response.body).first.should == I18n.t(:requested_object_not_found)
end end
end end
end end
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment