summaryrefslogtreecommitdiff
path: root/spec/controllers/projects/notes_controller_spec.rb
diff options
context:
space:
mode:
authorDouwe Maan <douwe@selenight.nl>2017-03-17 13:25:52 -0600
committerLuke "Jared" Bennett <lbennett@gitlab.com>2017-04-05 17:44:14 +0100
commit79889a6aa3dc878d196d0f2f445ab6b10ef10c74 (patch)
tree25367a69b4a529335e106d0d65c2d9a38e97f092 /spec/controllers/projects/notes_controller_spec.rb
parent80b2e18fb62b8da7410f90b3e5340b9e63e765a3 (diff)
downloadgitlab-ce-79889a6aa3dc878d196d0f2f445ab6b10ef10c74.tar.gz
Add specs
Diffstat (limited to 'spec/controllers/projects/notes_controller_spec.rb')
-rw-r--r--spec/controllers/projects/notes_controller_spec.rb186
1 files changed, 154 insertions, 32 deletions
diff --git a/spec/controllers/projects/notes_controller_spec.rb b/spec/controllers/projects/notes_controller_spec.rb
index a3b0e8a252e..b276f9321c7 100644
--- a/spec/controllers/projects/notes_controller_spec.rb
+++ b/spec/controllers/projects/notes_controller_spec.rb
@@ -15,14 +15,163 @@ describe Projects::NotesController do
end
describe 'GET index' do
- # It renders the discussion partial for any threaded note
- # TODO: Test
+ let(:last_fetched_at) { '1487756246' }
+ let(:request_params) do
+ {
+ namespace_id: project.namespace,
+ project_id: project,
+ target_type: 'issue',
+ target_id: issue.id,
+ format: 'json'
+ }
+ end
+
+ let(:parsed_response) { JSON.parse(response.body).with_indifferent_access }
+ let(:note_json) { parsed_response[:notes].first }
+
+ before do
+ sign_in(user)
+ project.team << [user, :developer]
+ end
+
+ it 'passes last_fetched_at from headers to NotesFinder' do
+ request.headers['X-Last-Fetched-At'] = last_fetched_at
+
+ expect(NotesFinder).to receive(:new)
+ .with(anything, anything, hash_including(last_fetched_at: last_fetched_at))
+ .and_call_original
+
+ get :index, request_params
+ end
+
+ context 'for a discussion note' do
+ let!(:note) { create(:discussion_note_on_issue, noteable: issue, project: project) }
+
+ it 'includes the ID' do
+ get :index, request_params
+
+ expect(note_json[:id]).to eq(note.id)
+ end
+
+ it 'includes discussion_html' do
+ get :index, request_params
+
+ expect(note_json[:discussion_html]).not_to be_nil
+ end
+
+ it "doesn't include diff_discussion_html" do
+ get :index, request_params
+
+ expect(note_json[:diff_discussion_html]).to be_nil
+ end
+ end
+
+ context 'for a diff discussion note' do
+ let(:project) { create(:project, :repository) }
+ let!(:note) { create(:diff_note_on_merge_request, project: project) }
+
+ let(:params) { request_params.merge(target_type: 'merge_request', target_id: note.noteable_id) }
+
+ it 'includes the ID' do
+ get :index, params
+
+ expect(note_json[:id]).to eq(note.id)
+ end
+
+ it 'includes discussion_html' do
+ get :index, params
+
+ expect(note_json[:discussion_html]).not_to be_nil
+ end
+
+ it 'includes diff_discussion_html' do
+ get :index, params
+
+ expect(note_json[:diff_discussion_html]).not_to be_nil
+ end
+ end
+
+ context 'for a commit note' do
+ let(:project) { create(:project, :repository) }
+ let!(:note) { create(:note_on_commit, project: project) }
+
+ context 'when displayed on a merge request' do
+ let(:merge_request) { create(:merge_request, source_project: project) }
+
+ let(:params) { request_params.merge(target_type: 'merge_request', target_id: merge_request.id) }
+
+ it 'includes the ID' do
+ get :index, params
+
+ expect(note_json[:id]).to eq(note.id)
+ end
+
+ it 'includes discussion_html' do
+ get :index, params
+
+ expect(note_json[:discussion_html]).not_to be_nil
+ end
+
+ it "doesn't include diff_discussion_html" do
+ get :index, params
+
+ expect(note_json[:diff_discussion_html]).to be_nil
+ end
+ end
+
+ context 'when displayed on the commit' do
+ let(:params) { request_params.merge(target_type: 'commit', target_id: note.commit_id) }
+
+ it 'includes the ID' do
+ get :index, params
+
+ expect(note_json[:id]).to eq(note.id)
+ end
+
+ it "doesn't include discussion_html" do
+ get :index, params
+
+ expect(note_json[:discussion_html]).to be_nil
+ end
+
+ it "doesn't include diff_discussion_html" do
+ get :index, params
+
+ expect(note_json[:diff_discussion_html]).to be_nil
+ end
+ end
+ end
+
+ context 'for a regular note' do
+ let!(:note) { create(:note, noteable: issue, project: project) }
+
+ it 'includes the ID' do
+ get :index, request_params
+
+ expect(note_json[:id]).to eq(note.id)
+ end
+
+ it 'includes html' do
+ get :index, request_params
+
+ expect(note_json[:html]).not_to be_nil
+ end
+
+ it "doesn't include discussion_html" do
+ get :index, request_params
+
+ expect(note_json[:discussion_html]).to be_nil
+ end
+
+ it "doesn't include diff_discussion_html" do
+ get :index, request_params
+
+ expect(note_json[:diff_discussion_html]).to be_nil
+ end
+ end
end
describe 'POST create' do
- # Test :type, :new_discussion, :in_reply_to_discussion_id (in_reply_to_id?)
- # TODO: Test
-
let(:merge_request) { create(:merge_request) }
let(:project) { merge_request.source_project }
let(:request_params) do
@@ -210,31 +359,4 @@ describe Projects::NotesController do
end
end
end
-
- describe 'GET index' do
- let(:last_fetched_at) { '1487756246' }
- let(:request_params) do
- {
- namespace_id: project.namespace,
- project_id: project,
- target_type: 'issue',
- target_id: issue.id
- }
- end
-
- before do
- sign_in(user)
- project.team << [user, :developer]
- end
-
- it 'passes last_fetched_at from headers to NotesFinder' do
- request.headers['X-Last-Fetched-At'] = last_fetched_at
-
- expect(NotesFinder).to receive(:new)
- .with(anything, anything, hash_including(last_fetched_at: last_fetched_at))
- .and_call_original
-
- get :index, request_params
- end
- end
end