Commit bd47a000 by Clinton Blackburn

Merge pull request #179 from edx/clintonb/spec-cleanup

Updated specs
parents d5a1919e 0ec1250d
...@@ -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
......
require 'spec_helper' require 'spec_helper'
require 'unicode_shared_examples' require 'unicode_shared_examples'
describe "app" do describe 'app' do
describe "commentables" do describe 'commentables' do
before(:each) { set_api_key_header }
let(:commentable_id) { Faker::Lorem.word }
before(:each) do describe 'DELETE /api/v1/:commentable_id/threads' do
init_without_subscriptions it 'delete all associated threads and comments of a commentable' do
set_api_key_header thread_count = 2
create_list(:comment_thread, thread_count, commentable_id: commentable_id)
expect(Commentable.find(commentable_id).comment_threads.count).to eq thread_count
delete "/api/v1/#{commentable_id}/threads"
expect(last_response).to be_ok
expect(Commentable.find(commentable_id).comment_threads.count).to eq 0
end end
describe "DELETE /api/v1/:commentable_id/threads" do context 'if the commentable does not exist' do
it "delete all associated threads and comments of a commentable" do subject { delete '/api/v1/does_not_exist/threads' }
delete '/api/v1/question_1/threads'
last_response.should be_ok it { should be_ok }
Commentable.find("question_1").comment_threads.count.should == 0
end end
it "handle normally when commentable does not exist" do end
delete '/api/v1/does_not_exist/threads'
last_response.should be_ok describe 'GET /api/v1/:commentable_id/threads' do
let(:returned_threads) { parse(subject.body)['collection'] }
subject { get "/api/v1/#{commentable_id}/threads" }
shared_examples_for 'a filterable API endpoint' do
let!(:ignored_threads) { create_list(:comment_thread, 3, commentable_id: commentable_id) }
subject { get "/api/v1/#{commentable_id}/threads", parameters }
it { should be_ok }
it 'returns the correct CommentThreads' do
expect(returned_threads.length).to eq threads.length
threads.sort_by!(&:_id).reverse!
threads.each_with_index do |thread, index|
expect(returned_threads[index]).to include('id' => thread.id.to_s, 'body' => thread.body)
end end
end end
describe "GET /api/v1/:commentable_id/threads" do end
def thread_result(commentable_id, params={})
get "/api/v1/#{commentable_id}/threads", params context 'without filtering' do
last_response.should be_ok let(:parameters) { {} }
parse(last_response.body)["collection"] let!(:threads) { ignored_threads + create_list(:comment_thread, 3, :with_group_id, commentable_id: commentable_id) }
end
it "get all comment threads associated with a commentable object" do it_behaves_like 'a filterable API endpoint'
threads = thread_result "question_1" end
threads.length.should == 2
threads.index{|c| c["body"] == "can anyone help me?"}.should_not be_nil context 'when filtering by the standalone context' do
threads.index{|c| c["body"] == "it is unsolvable"}.should_not be_nil let(:parameters) { {context: :standalone} }
end let!(:threads) { create_list(:comment_thread, 3, commentable_id: commentable_id, context: :standalone) }
it "returns standalone threads if explicitly requested" do
threads = thread_result "question_1", context: "standalone" it_behaves_like 'a filterable API endpoint'
threads.length.should == 1 end
threads[0]["body"].should == "no one can see us"
end context 'when filtering by course_id' do
it "filters by course_id" do let(:course_id) { Faker::Lorem.word }
course1_threads = thread_result "question_1", course_id: "1" let(:parameters) { {course_id: course_id} }
course1_threads.length.should == 1 let!(:threads) { create_list(:comment_thread, 3, commentable_id: commentable_id, course_id: course_id) }
course2_threads = thread_result "question_1", course_id: "2"
course2_threads.length.should == 1
course1_threads.should_not == course2_threads it_behaves_like 'a filterable API endpoint'
end end
it "filters by group_id" do
group_thread = Commentable.find("question_1").comment_threads.sort(_id: 1).first context 'when filtering by group_id' do
threads = thread_result "question_1", group_id: 42 let(:group_id) { Faker::Number.number(4) }
threads.length.should == 2 let(:parameters) { {group_id: group_id} }
group_thread.group_id = 43 let!(:threads) { create_list(:comment_thread, 3, commentable_id: commentable_id, group_id: group_id) }
group_thread.save!
threads = thread_result "question_1", group_id: 42
threads.length.should == 1 it_behaves_like 'a filterable API endpoint'
group_thread.group_id = 42 end
group_thread.save!
threads = thread_result "question_1", group_id: 42 context 'when filtering by multiple group_id values' do
threads.length.should == 2 let(:group_ids) { [Faker::Number.number(4), Faker::Number.number(4)] }
end let(:parameters) { {group_ids: group_ids.join(',')} }
it "filters by group_ids" do
group_thread = Commentable.find("question_1").comment_threads.sort(_id: 1).first
group_thread.group_id = 42 it_behaves_like 'a filterable API endpoint' do
group_thread.save! let!(:threads) do
threads = thread_result "question_1", group_ids: "42,43" threads = []
threads.length.should == 2
group_thread.group_id = 43 group_ids.each do |group_id|
group_thread.save! threads += create_list(:comment_thread, 3, commentable_id: commentable_id, group_id: group_id)
threads = thread_result "question_1", group_ids: "42,43" end
threads.length.should == 2
group_thread.group_id = 44 threads
group_thread.save end
threads = thread_result "question_1", group_ids: "42,43" end
threads.length.should == 1 end
end
it "returns an empty array when the commentable object does not exist (no threads)" do context 'when the commentable does not exist' do
threads = thread_result "does_not_exist" subject { get '/api/v1/does_not_exist/threads' }
threads.length.should == 0
it { should be_ok }
it 'should not return any results' do
expect(returned_threads.length).to eq 0
end
end end
def test_unicode_data(text) def test_unicode_data(text)
commentable_id = "unicode_commentable" commentable_id = 'unicode_commentable'
thread = make_thread(User.first, text, "unicode_course", commentable_id) thread = create(:comment_thread, commentable_id: commentable_id, body: text)
make_comment(User.first, thread, text) create(:comment, comment_thread: thread, body: text)
get "/api/v1/#{commentable_id}/threads" get "/api/v1/#{commentable_id}/threads"
last_response.should be_ok last_response.should be_ok
result = parse(last_response.body)["collection"] result = parse(last_response.body)['collection']
result.should_not be_empty result.should_not be_empty
check_thread_result_json(nil, thread, result.first) check_thread_result_json(nil, thread, result.first)
end end
include_examples "unicode data" include_examples 'unicode data'
end end
describe "POST /api/v1/:commentable_id/threads" do
let(:default_params) do describe 'POST /api/v1/:commentable_id/threads' do
{title: "Interesting question", body: "cool", course_id: "1", user_id: "1"} let(:commentable_id) { Faker::Lorem.word }
let(:user) { create(:user) }
let(:parameters) { attributes_for(:comment_thread, user_id: user.id) }
subject { post "/api/v1/#{commentable_id}/threads", parameters }
shared_examples_for 'CommentThread creation API' do |context='course'|
it 'creates a new CommentThread' do
expect(CommentThread.count).to eq 0
body = parse(subject.body)
expect(body).to include('read' => false,
'unread_comments_count' => 0,
'endorsed' => false,
'resp_total' => 0)
expect(CommentThread.count).to eq 1
thread = CommentThread.find(body['id'])
expect(thread).to_not be_nil
expect(thread.context).to eq context
end end
it "create a new comment thread for the commentable object" do
old_count = CommentThread.count
post '/api/v1/question_1/threads', default_params
last_response.should be_ok
result = parse(last_response.body)
result["read"].should == false
result["unread_comments_count"].should == 0
result["endorsed"].should == false
result["resp_total"].should == 0
CommentThread.count.should == old_count + 1
thread = CommentThread.where(title: "Interesting question").first
thread.should_not be_nil
thread.context.should == "course"
end
it "can create a standalone thread" do
old_count = CommentThread.count
post '/api/v1/question_1/threads', default_params.merge(:context => "standalone")
CommentThread.count.should == old_count + 1
thread = CommentThread.where(title: "Interesting question").first
thread.should_not be_nil
thread.context.should == "standalone"
end end
it { should be_ok }
it_behaves_like 'CommentThread creation API'
it_behaves_like 'CommentThread creation API', 'standalone' do
let(:parameters) { attributes_for(:comment_thread, user_id: user.id, context: 'standalone') }
end
CommentThread.thread_type.values.each do |thread_type| CommentThread.thread_type.values.each do |thread_type|
it "can create a #{thread_type} thread" do it "can create a #{thread_type} thread" do
old_count = CommentThread.where(thread_type: thread_type).count old_count = CommentThread.where(thread_type: thread_type).count
post "/api/v1/question_1/threads", default_params.merge(thread_type: thread_type.to_s) post '/api/v1/question_1/threads', parameters.merge(thread_type: thread_type.to_s)
last_response.should be_ok last_response.should be_ok
parse(last_response.body)["thread_type"].should == thread_type.to_s parse(last_response.body)['thread_type'].should == thread_type.to_s
CommentThread.where(thread_type: thread_type).count.should == old_count + 1 CommentThread.where(thread_type: thread_type).count.should == old_count + 1
end end
end end
it "allows anonymous thread" do
old_count = CommentThread.count it 'allows anonymous thread' do
post '/api/v1/question_1/threads', default_params.merge(anonymous: true) post '/api/v1/question_1/threads', parameters.merge!(anonymous: true)
last_response.should be_ok
CommentThread.count.should == old_count + 1
c = CommentThread.where(title: "Interesting question").first
c.should_not be_nil
c["anonymous"].should be_true
end
it "create a new comment thread for a new commentable object" do
post '/api/v1/does_not_exist/threads', default_params
last_response.should be_ok last_response.should be_ok
Commentable.find("does_not_exist").comment_threads.length.should == 1 body = parse(subject.body)
Commentable.find("does_not_exist").comment_threads.first.body.should == "cool"
thread = CommentThread.find(body['id'])
expect(thread).to_not be_nil
expect(thread['anonymous']).to be_true
end end
it "returns error when title, body or course id does not exist" do
params = default_params.dup it 'returns error when title, body or course id does not exist' do
params.delete(:title) [:title, :body, :course_id].each do |parameter|
post '/api/v1/question_1/threads', params params = parameters.dup
last_response.status.should == 400 params.delete(parameter)
params = default_params.dup
params.delete(:body)
post '/api/v1/question_1/threads', params
last_response.status.should == 400
params = default_params.dup
params.delete(:course_id)
post '/api/v1/question_1/threads', params post '/api/v1/question_1/threads', params
last_response.status.should == 400 last_response.status.should == 400
end end
end
it "returns error when title or body is blank (only consists of spaces and new lines)" do it "returns error when title or body is blank (only consists of spaces and new lines)" do
post '/api/v1/question_1/threads', default_params.merge(title: " ") post '/api/v1/question_1/threads', parameters.merge(title: " ")
last_response.status.should == 400 last_response.status.should == 400
post '/api/v1/question_1/threads', default_params.merge(body: " \n \n") post '/api/v1/question_1/threads', parameters.merge(body: " \n \n")
last_response.status.should == 400 last_response.status.should == 400
end end
it "returns 503 and does not create when the post content is blocked" do
post '/api/v1/question_1/threads', default_params.merge(body: "BLOCKED POST") it 'returns 503 and does not create when the post content is blocked' do
body = 'BLOCKED POST'
hash = block_post_body
post '/api/v1/question_1/threads', parameters.merge!(body: body)
last_response.status.should == 503 last_response.status.should == 503
parse(last_response.body).first.should == I18n.t(:blocked_content_with_body_hash, :hash => Digest::MD5.hexdigest("blocked post")) parse(last_response.body).first.should == I18n.t(:blocked_content_with_body_hash, :hash => hash)
CommentThread.where(body: "BLOCKED POST").to_a.should be_empty expect(CommentThread.where(body: body).length).to eq 0
end end
def test_unicode_data(text) def test_unicode_data(text)
commentable_id = "unicode_commentable" commentable_id = 'unicode_commentable'
post "/api/v1/#{commentable_id}/threads", default_params.merge(body: text, title: text) post "/api/v1/#{commentable_id}/threads", parameters.merge!(body: text, title: text)
last_response.should be_ok last_response.should be_ok
CommentThread.where(commentable_id: commentable_id, body: text, title: text).should_not be_empty expect(CommentThread.where(commentable_id: commentable_id, body: text, title: text)).to_not be_empty
end end
include_examples "unicode data" include_examples 'unicode data'
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