From 7649937452b659852c33da17e50d42c615f49f1f Mon Sep 17 00:00:00 2001 From: Douglas Barbosa Alexandre Date: Mon, 1 Aug 2016 13:09:41 -0300 Subject: Initial issues board page --- spec/controllers/projects/boards_controller_spec.rb | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 spec/controllers/projects/boards_controller_spec.rb (limited to 'spec/controllers') diff --git a/spec/controllers/projects/boards_controller_spec.rb b/spec/controllers/projects/boards_controller_spec.rb new file mode 100644 index 00000000000..7382a2a5c43 --- /dev/null +++ b/spec/controllers/projects/boards_controller_spec.rb @@ -0,0 +1,20 @@ +require 'spec_helper' + +describe Projects::BoardsController do + let(:project) { create(:empty_project) } + let(:user) { create(:user) } + + before do + project.team << [user, :master] + sign_in(user) + end + + describe 'GET #show' do + it 'renders HTML template' do + get :show, namespace_id: project.namespace.to_param, project_id: project.to_param + + expect(response).to render_template :show + expect(response.content_type).to eq 'text/html' + end + end +end -- cgit v1.2.1 From a84176bada3e2519026f903f45251723332885c8 Mon Sep 17 00:00:00 2001 From: Douglas Barbosa Alexandre Date: Mon, 1 Aug 2016 13:31:58 -0300 Subject: Creates a new board when project does not have one --- spec/controllers/projects/boards_controller_spec.rb | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'spec/controllers') diff --git a/spec/controllers/projects/boards_controller_spec.rb b/spec/controllers/projects/boards_controller_spec.rb index 7382a2a5c43..e03d3519b67 100644 --- a/spec/controllers/projects/boards_controller_spec.rb +++ b/spec/controllers/projects/boards_controller_spec.rb @@ -10,6 +10,10 @@ describe Projects::BoardsController do end describe 'GET #show' do + it 'creates a new board when project does not have one' do + expect { get :show, namespace_id: project.namespace.to_param, project_id: project.to_param }.to change(Board, :count).by(1) + end + it 'renders HTML template' do get :show, namespace_id: project.namespace.to_param, project_id: project.to_param -- cgit v1.2.1 From e1998844781b92d118f25cb8f8c0cbd293a25708 Mon Sep 17 00:00:00 2001 From: Douglas Barbosa Alexandre Date: Mon, 1 Aug 2016 15:41:30 -0300 Subject: Projects::BoardsController#show returns a list of board lists --- .../controllers/projects/boards_controller_spec.rb | 39 ++++++++++++++++++---- 1 file changed, 33 insertions(+), 6 deletions(-) (limited to 'spec/controllers') diff --git a/spec/controllers/projects/boards_controller_spec.rb b/spec/controllers/projects/boards_controller_spec.rb index e03d3519b67..2392ee18602 100644 --- a/spec/controllers/projects/boards_controller_spec.rb +++ b/spec/controllers/projects/boards_controller_spec.rb @@ -10,15 +10,42 @@ describe Projects::BoardsController do end describe 'GET #show' do - it 'creates a new board when project does not have one' do - expect { get :show, namespace_id: project.namespace.to_param, project_id: project.to_param }.to change(Board, :count).by(1) + context 'when project does not have a board' do + it 'creates a new board' do + expect { get :show, namespace_id: project.namespace.to_param, project_id: project.to_param }.to change(Board, :count).by(1) + end end - it 'renders HTML template' do - get :show, namespace_id: project.namespace.to_param, project_id: project.to_param + context 'when format is HTML' do + it 'renders HTML template' do + get :show, namespace_id: project.namespace.to_param, project_id: project.to_param - expect(response).to render_template :show - expect(response.content_type).to eq 'text/html' + expect(response).to render_template :show + expect(response.content_type).to eq 'text/html' + end + end + + context 'when format is JSON' do + it 'returns a successful 200 response' do + get :show, namespace_id: project.namespace.to_param, project_id: project.to_param, format: :json + + expect(response).to have_http_status(200) + expect(response.content_type).to eq 'application/json' + end + + it 'returns a list of board lists' do + board = project.create_board + create(:backlog_list, board: board) + create(:list, board: board) + create(:done_list, board: board) + + get :show, namespace_id: project.namespace.to_param, project_id: project.to_param, format: :json + + parsed_response = JSON.parse(response.body) + + expect(response).to match_response_schema('list', array: true) + expect(parsed_response.length).to eq 3 + end end end end -- cgit v1.2.1 From ed9943d0130f4a581156afcf038f2b51fd9cea9f Mon Sep 17 00:00:00 2001 From: Douglas Barbosa Alexandre Date: Mon, 1 Aug 2016 16:23:16 -0300 Subject: Add endpoint to allow users to create a new board list --- .../projects/board_lists_controller_spec.rb | 49 ++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 spec/controllers/projects/board_lists_controller_spec.rb (limited to 'spec/controllers') diff --git a/spec/controllers/projects/board_lists_controller_spec.rb b/spec/controllers/projects/board_lists_controller_spec.rb new file mode 100644 index 00000000000..906edeb1c17 --- /dev/null +++ b/spec/controllers/projects/board_lists_controller_spec.rb @@ -0,0 +1,49 @@ +require 'spec_helper' + +describe Projects::BoardListsController do + let(:project) { create(:project_with_board) } + let(:user) { create(:user) } + + before do + project.team << [user, :master] + sign_in(user) + end + + describe 'POST #create' do + context 'with valid params' do + let(:label) { create(:label, project: project, name: 'Development') } + + it 'returns a successful 200 response' do + post :create, namespace_id: project.namespace.to_param, + project_id: project.to_param, + list: { label_id: label.id }, + format: :json + + expect(response).to have_http_status(200) + end + + it 'returns the created list' do + post :create, namespace_id: project.namespace.to_param, + project_id: project.to_param, + list: { label_id: label.id }, + format: :json + + expect(response).to match_response_schema('list') + end + end + + context 'with invalid params' do + it 'returns an error' do + post :create, namespace_id: project.namespace.to_param, + project_id: project.to_param, + list: { label_id: nil }, + format: :json + + parsed_response = JSON.parse(response.body) + + expect(parsed_response['label']).to contain_exactly "can't be blank" + expect(response).to have_http_status(422) + end + end + end +end -- cgit v1.2.1 From 0fb9210dbb38cd45fc8da052317a9aaf830e1db9 Mon Sep 17 00:00:00 2001 From: Douglas Barbosa Alexandre Date: Mon, 1 Aug 2016 17:11:56 -0300 Subject: Add endpoint to allow users to move lists --- .../projects/board_lists_controller_spec.rb | 52 ++++++++++++++++++++++ 1 file changed, 52 insertions(+) (limited to 'spec/controllers') diff --git a/spec/controllers/projects/board_lists_controller_spec.rb b/spec/controllers/projects/board_lists_controller_spec.rb index 906edeb1c17..c34e815c164 100644 --- a/spec/controllers/projects/board_lists_controller_spec.rb +++ b/spec/controllers/projects/board_lists_controller_spec.rb @@ -46,4 +46,56 @@ describe Projects::BoardListsController do end end end + + describe 'PATCH #update' do + let!(:planning) { create(:list, board: project.board, position: 1) } + let!(:development) { create(:list, board: project.board, position: 2) } + + context 'with valid position' do + it 'returns a successful 200 response' do + patch :update, namespace_id: project.namespace.to_param, + project_id: project.to_param, + id: planning.to_param, + list: { position: 2 }, + format: :json + + expect(response).to have_http_status(200) + end + + it 'moves the list to the desired position' do + patch :update, namespace_id: project.namespace.to_param, + project_id: project.to_param, + id: planning.to_param, + list: { position: 2 }, + format: :json + + expect(planning.reload.position).to eq 2 + end + end + + context 'with invalid position' do + it 'returns a unprocessable entity 422 response' do + patch :update, namespace_id: project.namespace.to_param, + project_id: project.to_param, + id: planning.to_param, + list: { position: 6 }, + format: :json + + expect(response).to have_http_status(422) + end + end + + context 'with invalid list id' do + it 'returns a not found 404 response' do + patch :update, namespace_id: project.namespace.to_param, + project_id: project.to_param, + id: 999, + list: { position: 2 }, + format: :json + + expect(response).to have_http_status(404) + end + end + end + end end -- cgit v1.2.1 From 547d218e6bb25fb2b2fa13cd86f08c3ac1e69b8b Mon Sep 17 00:00:00 2001 From: Douglas Barbosa Alexandre Date: Mon, 1 Aug 2016 18:44:33 -0300 Subject: Add endpoint to allow users to remove lists --- .../projects/board_lists_controller_spec.rb | 34 ++++++++++++++++++++++ 1 file changed, 34 insertions(+) (limited to 'spec/controllers') diff --git a/spec/controllers/projects/board_lists_controller_spec.rb b/spec/controllers/projects/board_lists_controller_spec.rb index c34e815c164..aa9eb958d26 100644 --- a/spec/controllers/projects/board_lists_controller_spec.rb +++ b/spec/controllers/projects/board_lists_controller_spec.rb @@ -97,5 +97,39 @@ describe Projects::BoardListsController do end end end + + describe 'DELETE #destroy' do + context 'with valid list id' do + let!(:planning) { create(:list, board: project.board, position: 1) } + + it 'returns a successful 200 response' do + delete :destroy, namespace_id: project.namespace.to_param, + project_id: project.to_param, + id: planning.to_param, + format: :json + + expect(response).to have_http_status(200) + end + + it 'removes list from board' do + expect do + delete :destroy, namespace_id: project.namespace.to_param, + project_id: project.to_param, + id: planning.to_param, + format: :json + end.to change(project.board.lists, :size).by(-1) + end + end + + context 'with invalid list id' do + it 'returns a not found 404 response' do + delete :destroy, namespace_id: project.namespace.to_param, + project_id: project.to_param, + id: 999, + format: :json + + expect(response).to have_http_status(404) + end + end end end -- cgit v1.2.1 From 296bcbd6640ddeb06093c2505ed749be07362975 Mon Sep 17 00:00:00 2001 From: Douglas Barbosa Alexandre Date: Tue, 2 Aug 2016 21:19:13 -0300 Subject: Add endpoint to list issues for a specific board list --- .../projects/board_issues_controller_spec.rb | 46 ++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 spec/controllers/projects/board_issues_controller_spec.rb (limited to 'spec/controllers') diff --git a/spec/controllers/projects/board_issues_controller_spec.rb b/spec/controllers/projects/board_issues_controller_spec.rb new file mode 100644 index 00000000000..64c98443caa --- /dev/null +++ b/spec/controllers/projects/board_issues_controller_spec.rb @@ -0,0 +1,46 @@ +require 'spec_helper' + +describe Projects::BoardIssuesController do + let(:project) { create(:project_with_board) } + let(:user) { create(:user) } + + before do + project.team << [user, :master] + sign_in(user) + end + + describe 'GET #index' do + context 'with valid list id' do + it 'returns issues that have the list label applied' do + label1 = create(:label, project: project, name: 'Planning') + label2 = create(:label, project: project, name: 'Development') + + create(:labeled_issue, project: project, labels: [label1]) + create(:labeled_issue, project: project, labels: [label2]) + create(:labeled_issue, project: project, labels: [label2]) + + create(:list, board: project.board, label: label1, position: 1) + development = create(:list, board: project.board, label: label2, position: 2) + + get :index, namespace_id: project.namespace.to_param, + project_id: project.to_param, + list_id: development.to_param + + parsed_response = JSON.parse(response.body) + + expect(response).to match_response_schema('issue', array: true) + expect(parsed_response.length).to eq 2 + end + end + + context 'with invalid list id' do + it 'returns a not found 404 response' do + get :index, namespace_id: project.namespace.to_param, + project_id: project.to_param, + id: 999 + + expect(response).to have_http_status(404) + end + end + end +end -- cgit v1.2.1 From 75f0bc4af87b418b6b27f69c03bf9fa4756cedfc Mon Sep 17 00:00:00 2001 From: Douglas Barbosa Alexandre Date: Tue, 2 Aug 2016 22:53:44 -0300 Subject: Add endpoint to allow users to move issues between lists --- .../projects/board_issues_controller_spec.rb | 60 ++++++++++++++++++---- 1 file changed, 50 insertions(+), 10 deletions(-) (limited to 'spec/controllers') diff --git a/spec/controllers/projects/board_issues_controller_spec.rb b/spec/controllers/projects/board_issues_controller_spec.rb index 64c98443caa..9be754bb27b 100644 --- a/spec/controllers/projects/board_issues_controller_spec.rb +++ b/spec/controllers/projects/board_issues_controller_spec.rb @@ -4,6 +4,12 @@ describe Projects::BoardIssuesController do let(:project) { create(:project_with_board) } let(:user) { create(:user) } + let(:planning) { create(:label, project: project, name: 'Planning') } + let(:development) { create(:label, project: project, name: 'Development') } + + let!(:list1) { create(:list, board: project.board, label: planning, position: 1) } + let!(:list2) { create(:list, board: project.board, label: development, position: 2) } + before do project.team << [user, :master] sign_in(user) @@ -12,19 +18,13 @@ describe Projects::BoardIssuesController do describe 'GET #index' do context 'with valid list id' do it 'returns issues that have the list label applied' do - label1 = create(:label, project: project, name: 'Planning') - label2 = create(:label, project: project, name: 'Development') - - create(:labeled_issue, project: project, labels: [label1]) - create(:labeled_issue, project: project, labels: [label2]) - create(:labeled_issue, project: project, labels: [label2]) - - create(:list, board: project.board, label: label1, position: 1) - development = create(:list, board: project.board, label: label2, position: 2) + create(:labeled_issue, project: project, labels: [planning]) + create(:labeled_issue, project: project, labels: [development]) + create(:labeled_issue, project: project, labels: [development]) get :index, namespace_id: project.namespace.to_param, project_id: project.to_param, - list_id: development.to_param + list_id: list2.to_param parsed_response = JSON.parse(response.body) @@ -43,4 +43,44 @@ describe Projects::BoardIssuesController do end end end + + describe 'PATCH #update' do + let(:issue) { create(:labeled_issue, project: project, labels: [planning]) } + + context 'with valid params' do + it 'returns a successful 200 response' do + move issue: issue, from: list1.id, to: list2.id + + expect(response).to have_http_status(200) + end + + it 'moves issue to the desired list' do + move issue: issue, from: list1.id, to: list2.id + + expect(issue.reload.labels).to contain_exactly(development) + end + end + + context 'with invalid params' do + it 'returns a unprocessable entity 422 response for invalid lists' do + move issue: issue, from: nil, to: nil + + expect(response).to have_http_status(422) + end + + it 'returns a not found 404 response for invalid issue id' do + move issue: 999, from: list1.id, to: list2.id + + expect(response).to have_http_status(404) + end + end + + def move(issue:, from:, to:) + patch :update, namespace_id: project.namespace.to_param, + project_id: project.to_param, + id: issue.to_param, + issue: { from: from, to: to }, + format: :json + end + end end -- cgit v1.2.1 From 64d7559532cf033845bbfdc942ee9ea02076e602 Mon Sep 17 00:00:00 2001 From: Douglas Barbosa Alexandre Date: Tue, 2 Aug 2016 23:01:45 -0300 Subject: Refactor spec for Projects::BoardListsController --- .../projects/board_lists_controller_spec.rb | 85 +++++++++------------- 1 file changed, 36 insertions(+), 49 deletions(-) (limited to 'spec/controllers') diff --git a/spec/controllers/projects/board_lists_controller_spec.rb b/spec/controllers/projects/board_lists_controller_spec.rb index aa9eb958d26..41d0432e14f 100644 --- a/spec/controllers/projects/board_lists_controller_spec.rb +++ b/spec/controllers/projects/board_lists_controller_spec.rb @@ -2,6 +2,7 @@ require 'spec_helper' describe Projects::BoardListsController do let(:project) { create(:project_with_board) } + let(:board) { project.board } let(:user) { create(:user) } before do @@ -14,19 +15,13 @@ describe Projects::BoardListsController do let(:label) { create(:label, project: project, name: 'Development') } it 'returns a successful 200 response' do - post :create, namespace_id: project.namespace.to_param, - project_id: project.to_param, - list: { label_id: label.id }, - format: :json + create_board_list label_id: label.id expect(response).to have_http_status(200) end it 'returns the created list' do - post :create, namespace_id: project.namespace.to_param, - project_id: project.to_param, - list: { label_id: label.id }, - format: :json + create_board_list label_id: label.id expect(response).to match_response_schema('list') end @@ -34,10 +29,7 @@ describe Projects::BoardListsController do context 'with invalid params' do it 'returns an error' do - post :create, namespace_id: project.namespace.to_param, - project_id: project.to_param, - list: { label_id: nil }, - format: :json + create_board_list label_id: nil parsed_response = JSON.parse(response.body) @@ -45,29 +37,28 @@ describe Projects::BoardListsController do expect(response).to have_http_status(422) end end + + def create_board_list(label_id:) + post :create, namespace_id: project.namespace.to_param, + project_id: project.to_param, + list: { label_id: label_id }, + format: :json + end end describe 'PATCH #update' do - let!(:planning) { create(:list, board: project.board, position: 1) } - let!(:development) { create(:list, board: project.board, position: 2) } + let!(:planning) { create(:list, board: board, position: 1) } + let!(:development) { create(:list, board: board, position: 2) } context 'with valid position' do it 'returns a successful 200 response' do - patch :update, namespace_id: project.namespace.to_param, - project_id: project.to_param, - id: planning.to_param, - list: { position: 2 }, - format: :json + move list: planning, position: 2 expect(response).to have_http_status(200) end it 'moves the list to the desired position' do - patch :update, namespace_id: project.namespace.to_param, - project_id: project.to_param, - id: planning.to_param, - list: { position: 2 }, - format: :json + move list: planning, position: 2 expect(planning.reload.position).to eq 2 end @@ -75,11 +66,7 @@ describe Projects::BoardListsController do context 'with invalid position' do it 'returns a unprocessable entity 422 response' do - patch :update, namespace_id: project.namespace.to_param, - project_id: project.to_param, - id: planning.to_param, - list: { position: 6 }, - format: :json + move list: planning, position: 6 expect(response).to have_http_status(422) end @@ -87,49 +74,49 @@ describe Projects::BoardListsController do context 'with invalid list id' do it 'returns a not found 404 response' do - patch :update, namespace_id: project.namespace.to_param, - project_id: project.to_param, - id: 999, - list: { position: 2 }, - format: :json + move list: 999, position: 2 expect(response).to have_http_status(404) end end + + def move(list:, position:) + patch :update, namespace_id: project.namespace.to_param, + project_id: project.to_param, + id: list.to_param, + list: { position: position }, + format: :json + end end describe 'DELETE #destroy' do context 'with valid list id' do - let!(:planning) { create(:list, board: project.board, position: 1) } + let!(:planning) { create(:list, board: board, position: 1) } it 'returns a successful 200 response' do - delete :destroy, namespace_id: project.namespace.to_param, - project_id: project.to_param, - id: planning.to_param, - format: :json + remove_board_list list: planning expect(response).to have_http_status(200) end it 'removes list from board' do - expect do - delete :destroy, namespace_id: project.namespace.to_param, - project_id: project.to_param, - id: planning.to_param, - format: :json - end.to change(project.board.lists, :size).by(-1) + expect { remove_board_list list: planning }.to change(board.lists, :size).by(-1) end end context 'with invalid list id' do it 'returns a not found 404 response' do - delete :destroy, namespace_id: project.namespace.to_param, - project_id: project.to_param, - id: 999, - format: :json + remove_board_list list: 999 expect(response).to have_http_status(404) end end + + def remove_board_list(list) + delete :destroy, namespace_id: project.namespace.to_param, + project_id: project.to_param, + id: list.to_param, + format: :json + end end end -- cgit v1.2.1 From 2c00d5928c69744138c9a411c533ff3a098f2804 Mon Sep 17 00:00:00 2001 From: Douglas Barbosa Alexandre Date: Wed, 3 Aug 2016 10:57:24 -0300 Subject: Move endpoint to list issues under lists resources --- spec/controllers/projects/board_issues_controller_spec.rb | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) (limited to 'spec/controllers') diff --git a/spec/controllers/projects/board_issues_controller_spec.rb b/spec/controllers/projects/board_issues_controller_spec.rb index 9be754bb27b..c7fccfbce6c 100644 --- a/spec/controllers/projects/board_issues_controller_spec.rb +++ b/spec/controllers/projects/board_issues_controller_spec.rb @@ -22,9 +22,7 @@ describe Projects::BoardIssuesController do create(:labeled_issue, project: project, labels: [development]) create(:labeled_issue, project: project, labels: [development]) - get :index, namespace_id: project.namespace.to_param, - project_id: project.to_param, - list_id: list2.to_param + list_issues list_id: list2 parsed_response = JSON.parse(response.body) @@ -35,13 +33,17 @@ describe Projects::BoardIssuesController do context 'with invalid list id' do it 'returns a not found 404 response' do - get :index, namespace_id: project.namespace.to_param, - project_id: project.to_param, - id: 999 + list_issues list_id: 999 expect(response).to have_http_status(404) end end + + def list_issues(list_id:) + get :index, namespace_id: project.namespace.to_param, + project_id: project.to_param, + list_id: list_id.to_param + end end describe 'PATCH #update' do -- cgit v1.2.1 From 9e5a305f18377c9fbe74e44dcef7606ab109291c Mon Sep 17 00:00:00 2001 From: Douglas Barbosa Alexandre Date: Wed, 3 Aug 2016 12:09:03 -0300 Subject: Use zero-based positions on issues board services --- .../controllers/projects/board_issues_controller_spec.rb | 4 ++-- spec/controllers/projects/board_lists_controller_spec.rb | 16 ++++++++-------- 2 files changed, 10 insertions(+), 10 deletions(-) (limited to 'spec/controllers') diff --git a/spec/controllers/projects/board_issues_controller_spec.rb b/spec/controllers/projects/board_issues_controller_spec.rb index c7fccfbce6c..6b4fb382b16 100644 --- a/spec/controllers/projects/board_issues_controller_spec.rb +++ b/spec/controllers/projects/board_issues_controller_spec.rb @@ -7,8 +7,8 @@ describe Projects::BoardIssuesController do let(:planning) { create(:label, project: project, name: 'Planning') } let(:development) { create(:label, project: project, name: 'Development') } - let!(:list1) { create(:list, board: project.board, label: planning, position: 1) } - let!(:list2) { create(:list, board: project.board, label: development, position: 2) } + let!(:list1) { create(:list, board: project.board, label: planning, position: 0) } + let!(:list2) { create(:list, board: project.board, label: development, position: 1) } before do project.team << [user, :master] diff --git a/spec/controllers/projects/board_lists_controller_spec.rb b/spec/controllers/projects/board_lists_controller_spec.rb index 41d0432e14f..cf8801ca4f6 100644 --- a/spec/controllers/projects/board_lists_controller_spec.rb +++ b/spec/controllers/projects/board_lists_controller_spec.rb @@ -47,20 +47,20 @@ describe Projects::BoardListsController do end describe 'PATCH #update' do - let!(:planning) { create(:list, board: board, position: 1) } - let!(:development) { create(:list, board: board, position: 2) } + let!(:planning) { create(:list, board: board, position: 0) } + let!(:development) { create(:list, board: board, position: 1) } context 'with valid position' do it 'returns a successful 200 response' do - move list: planning, position: 2 + move list: planning, position: 1 expect(response).to have_http_status(200) end it 'moves the list to the desired position' do - move list: planning, position: 2 + move list: planning, position: 1 - expect(planning.reload.position).to eq 2 + expect(planning.reload.position).to eq 1 end end @@ -74,7 +74,7 @@ describe Projects::BoardListsController do context 'with invalid list id' do it 'returns a not found 404 response' do - move list: 999, position: 2 + move list: 999, position: 1 expect(response).to have_http_status(404) end @@ -91,7 +91,7 @@ describe Projects::BoardListsController do describe 'DELETE #destroy' do context 'with valid list id' do - let!(:planning) { create(:list, board: board, position: 1) } + let!(:planning) { create(:list, board: board, position: 0) } it 'returns a successful 200 response' do remove_board_list list: planning @@ -112,7 +112,7 @@ describe Projects::BoardListsController do end end - def remove_board_list(list) + def remove_board_list(list:) delete :destroy, namespace_id: project.namespace.to_param, project_id: project.to_param, id: list.to_param, -- cgit v1.2.1 From 5317f6ea943c84ec0dc68a934f953e667fae1178 Mon Sep 17 00:00:00 2001 From: Douglas Barbosa Alexandre Date: Thu, 4 Aug 2016 14:20:26 -0300 Subject: Include the Issue#assignee in the response when listing issues --- spec/controllers/projects/board_issues_controller_spec.rb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'spec/controllers') diff --git a/spec/controllers/projects/board_issues_controller_spec.rb b/spec/controllers/projects/board_issues_controller_spec.rb index 6b4fb382b16..44a20411abc 100644 --- a/spec/controllers/projects/board_issues_controller_spec.rb +++ b/spec/controllers/projects/board_issues_controller_spec.rb @@ -18,9 +18,10 @@ describe Projects::BoardIssuesController do describe 'GET #index' do context 'with valid list id' do it 'returns issues that have the list label applied' do + johndoe = create(:user, avatar: fixture_file_upload(File.join(Rails.root, 'spec/fixtures/dk.png'))) create(:labeled_issue, project: project, labels: [planning]) create(:labeled_issue, project: project, labels: [development]) - create(:labeled_issue, project: project, labels: [development]) + create(:labeled_issue, project: project, labels: [development], assignee: johndoe) list_issues list_id: list2 -- cgit v1.2.1 From 6113767045971abd3a279705f481c8e712660c88 Mon Sep 17 00:00:00 2001 From: Douglas Barbosa Alexandre Date: Mon, 8 Aug 2016 16:49:09 -0300 Subject: Add an endpoint to generate the default lists for a board --- .../projects/board_lists_controller_spec.rb | 32 ++++++++++++++++++++++ 1 file changed, 32 insertions(+) (limited to 'spec/controllers') diff --git a/spec/controllers/projects/board_lists_controller_spec.rb b/spec/controllers/projects/board_lists_controller_spec.rb index cf8801ca4f6..c37ced574a9 100644 --- a/spec/controllers/projects/board_lists_controller_spec.rb +++ b/spec/controllers/projects/board_lists_controller_spec.rb @@ -119,4 +119,36 @@ describe Projects::BoardListsController do format: :json end end + + describe 'POST #generate' do + context 'when board lists is empty' do + it 'returns a successful 200 response' do + generate_default_board_lists + + expect(response).to have_http_status(200) + end + + it 'returns the defaults lists' do + generate_default_board_lists + + expect(response).to match_response_schema('list', array: true) + end + end + + context 'when board lists is not empty' do + it 'returns a unprocessable entity 422 response' do + create(:list, board: board) + + generate_default_board_lists + + expect(response).to have_http_status(422) + end + end + + def generate_default_board_lists + post :generate, namespace_id: project.namespace.to_param, + project_id: project.to_param, + format: :json + end + end end -- cgit v1.2.1 From a8b1ad250e1ebc1c1e835399ccd010b223108a1d Mon Sep 17 00:00:00 2001 From: Douglas Barbosa Alexandre Date: Mon, 8 Aug 2016 19:03:41 -0300 Subject: Add authorization to issues board related controllers --- .../projects/board_issues_controller_spec.rb | 46 +++++++++--- .../projects/board_lists_controller_spec.rb | 87 ++++++++++++++++------ .../controllers/projects/boards_controller_spec.rb | 36 ++++++++- 3 files changed, 134 insertions(+), 35 deletions(-) (limited to 'spec/controllers') diff --git a/spec/controllers/projects/board_issues_controller_spec.rb b/spec/controllers/projects/board_issues_controller_spec.rb index 44a20411abc..6ec3a1b8cfc 100644 --- a/spec/controllers/projects/board_issues_controller_spec.rb +++ b/spec/controllers/projects/board_issues_controller_spec.rb @@ -12,7 +12,6 @@ describe Projects::BoardIssuesController do before do project.team << [user, :master] - sign_in(user) end describe 'GET #index' do @@ -23,7 +22,7 @@ describe Projects::BoardIssuesController do create(:labeled_issue, project: project, labels: [development]) create(:labeled_issue, project: project, labels: [development], assignee: johndoe) - list_issues list_id: list2 + list_issues user: user, list_id: list2 parsed_response = JSON.parse(response.body) @@ -34,13 +33,26 @@ describe Projects::BoardIssuesController do context 'with invalid list id' do it 'returns a not found 404 response' do - list_issues list_id: 999 + list_issues user: user, list_id: 999 expect(response).to have_http_status(404) end end - def list_issues(list_id:) + context 'with unauthorized user' do + it 'returns a successful 403 response' do + allow(Ability.abilities).to receive(:allowed?).with(user, :read_project, project).and_return(true) + allow(Ability.abilities).to receive(:allowed?).with(user, :read_issue, project).and_return(false) + + list_issues user: user, list_id: list2 + + expect(response).to have_http_status(403) + end + end + + def list_issues(user:, list_id:) + sign_in(user) + get :index, namespace_id: project.namespace.to_param, project_id: project.to_param, list_id: list_id.to_param @@ -52,13 +64,13 @@ describe Projects::BoardIssuesController do context 'with valid params' do it 'returns a successful 200 response' do - move issue: issue, from: list1.id, to: list2.id + move user: user, issue: issue, from: list1.id, to: list2.id expect(response).to have_http_status(200) end it 'moves issue to the desired list' do - move issue: issue, from: list1.id, to: list2.id + move user: user, issue: issue, from: list1.id, to: list2.id expect(issue.reload.labels).to contain_exactly(development) end @@ -66,19 +78,35 @@ describe Projects::BoardIssuesController do context 'with invalid params' do it 'returns a unprocessable entity 422 response for invalid lists' do - move issue: issue, from: nil, to: nil + move user: user, issue: issue, from: nil, to: nil expect(response).to have_http_status(422) end it 'returns a not found 404 response for invalid issue id' do - move issue: 999, from: list1.id, to: list2.id + move user: user, issue: 999, from: list1.id, to: list2.id expect(response).to have_http_status(404) end end - def move(issue:, from:, to:) + context 'with unauthorized user' do + let(:guest) { create(:user) } + + before do + project.team << [guest, :guest] + end + + it 'returns a successful 403 response' do + move user: guest, issue: issue, from: list1.id, to: list2.id + + expect(response).to have_http_status(403) + end + end + + def move(user:, issue:, from:, to:) + sign_in(user) + patch :update, namespace_id: project.namespace.to_param, project_id: project.to_param, id: issue.to_param, diff --git a/spec/controllers/projects/board_lists_controller_spec.rb b/spec/controllers/projects/board_lists_controller_spec.rb index c37ced574a9..4b824164f69 100644 --- a/spec/controllers/projects/board_lists_controller_spec.rb +++ b/spec/controllers/projects/board_lists_controller_spec.rb @@ -4,24 +4,25 @@ describe Projects::BoardListsController do let(:project) { create(:project_with_board) } let(:board) { project.board } let(:user) { create(:user) } + let(:guest) { create(:user) } before do project.team << [user, :master] - sign_in(user) + project.team << [guest, :guest] end describe 'POST #create' do - context 'with valid params' do - let(:label) { create(:label, project: project, name: 'Development') } + let(:label) { create(:label, project: project, name: 'Development') } + context 'with valid params' do it 'returns a successful 200 response' do - create_board_list label_id: label.id + create_board_list user: user, label_id: label.id expect(response).to have_http_status(200) end it 'returns the created list' do - create_board_list label_id: label.id + create_board_list user: user, label_id: label.id expect(response).to match_response_schema('list') end @@ -29,7 +30,7 @@ describe Projects::BoardListsController do context 'with invalid params' do it 'returns an error' do - create_board_list label_id: nil + create_board_list user: user, label_id: nil parsed_response = JSON.parse(response.body) @@ -38,7 +39,19 @@ describe Projects::BoardListsController do end end - def create_board_list(label_id:) + context 'with unauthorized user' do + let(:label) { create(:label, project: project, name: 'Development') } + + it 'returns a successful 403 response' do + create_board_list user: guest, label_id: label.id + + expect(response).to have_http_status(403) + end + end + + def create_board_list(user:, label_id:) + sign_in(user) + post :create, namespace_id: project.namespace.to_param, project_id: project.to_param, list: { label_id: label_id }, @@ -52,13 +65,13 @@ describe Projects::BoardListsController do context 'with valid position' do it 'returns a successful 200 response' do - move list: planning, position: 1 + move user: user, list: planning, position: 1 expect(response).to have_http_status(200) end it 'moves the list to the desired position' do - move list: planning, position: 1 + move user: user, list: planning, position: 1 expect(planning.reload.position).to eq 1 end @@ -66,7 +79,7 @@ describe Projects::BoardListsController do context 'with invalid position' do it 'returns a unprocessable entity 422 response' do - move list: planning, position: 6 + move user: user, list: planning, position: 6 expect(response).to have_http_status(422) end @@ -74,13 +87,23 @@ describe Projects::BoardListsController do context 'with invalid list id' do it 'returns a not found 404 response' do - move list: 999, position: 1 + move user: user, list: 999, position: 1 expect(response).to have_http_status(404) end end - def move(list:, position:) + context 'with unauthorized user' do + it 'returns a successful 403 response' do + move user: guest, list: planning, position: 6 + + expect(response).to have_http_status(403) + end + end + + def move(user:, list:, position:) + sign_in(user) + patch :update, namespace_id: project.namespace.to_param, project_id: project.to_param, id: list.to_param, @@ -90,29 +113,39 @@ describe Projects::BoardListsController do end describe 'DELETE #destroy' do - context 'with valid list id' do - let!(:planning) { create(:list, board: board, position: 0) } + let!(:planning) { create(:list, board: board, position: 0) } + context 'with valid list id' do it 'returns a successful 200 response' do - remove_board_list list: planning + remove_board_list user: user, list: planning expect(response).to have_http_status(200) end it 'removes list from board' do - expect { remove_board_list list: planning }.to change(board.lists, :size).by(-1) + expect { remove_board_list user: user, list: planning }.to change(board.lists, :size).by(-1) end end context 'with invalid list id' do it 'returns a not found 404 response' do - remove_board_list list: 999 + remove_board_list user: user, list: 999 expect(response).to have_http_status(404) end end - def remove_board_list(list:) + context 'with unauthorized user' do + it 'returns a successful 403 response' do + remove_board_list user: guest, list: planning + + expect(response).to have_http_status(403) + end + end + + def remove_board_list(user:, list:) + sign_in(user) + delete :destroy, namespace_id: project.namespace.to_param, project_id: project.to_param, id: list.to_param, @@ -123,13 +156,13 @@ describe Projects::BoardListsController do describe 'POST #generate' do context 'when board lists is empty' do it 'returns a successful 200 response' do - generate_default_board_lists + generate_default_board_lists user: user expect(response).to have_http_status(200) end it 'returns the defaults lists' do - generate_default_board_lists + generate_default_board_lists user: user expect(response).to match_response_schema('list', array: true) end @@ -139,13 +172,23 @@ describe Projects::BoardListsController do it 'returns a unprocessable entity 422 response' do create(:list, board: board) - generate_default_board_lists + generate_default_board_lists user: user expect(response).to have_http_status(422) end end - def generate_default_board_lists + context 'with unauthorized user' do + it 'returns a successful 403 response' do + generate_default_board_lists user: guest + + expect(response).to have_http_status(403) + end + end + + def generate_default_board_lists(user:) + sign_in(user) + post :generate, namespace_id: project.namespace.to_param, project_id: project.to_param, format: :json diff --git a/spec/controllers/projects/boards_controller_spec.rb b/spec/controllers/projects/boards_controller_spec.rb index 2392ee18602..7ef4b786b42 100644 --- a/spec/controllers/projects/boards_controller_spec.rb +++ b/spec/controllers/projects/boards_controller_spec.rb @@ -12,22 +12,33 @@ describe Projects::BoardsController do describe 'GET #show' do context 'when project does not have a board' do it 'creates a new board' do - expect { get :show, namespace_id: project.namespace.to_param, project_id: project.to_param }.to change(Board, :count).by(1) + expect { read_board }.to change(Board, :count).by(1) end end context 'when format is HTML' do it 'renders HTML template' do - get :show, namespace_id: project.namespace.to_param, project_id: project.to_param + read_board expect(response).to render_template :show expect(response.content_type).to eq 'text/html' end + + context 'with unauthorized user' do + it 'returns a successful 404 response' do + allow(Ability.abilities).to receive(:allowed?).with(user, :read_project, project).and_return(true) + allow(Ability.abilities).to receive(:allowed?).with(user, :read_board, project).and_return(false) + + read_board + + expect(response).to have_http_status(404) + end + end end context 'when format is JSON' do it 'returns a successful 200 response' do - get :show, namespace_id: project.namespace.to_param, project_id: project.to_param, format: :json + read_board format: :json expect(response).to have_http_status(200) expect(response.content_type).to eq 'application/json' @@ -39,13 +50,30 @@ describe Projects::BoardsController do create(:list, board: board) create(:done_list, board: board) - get :show, namespace_id: project.namespace.to_param, project_id: project.to_param, format: :json + read_board format: :json parsed_response = JSON.parse(response.body) expect(response).to match_response_schema('list', array: true) expect(parsed_response.length).to eq 3 end + + context 'with unauthorized user' do + it 'returns a successful 403 response' do + allow(Ability.abilities).to receive(:allowed?).with(user, :read_project, project).and_return(true) + allow(Ability.abilities).to receive(:allowed?).with(user, :read_board, project).and_return(false) + + read_board format: :json + + expect(response).to have_http_status(403) + end + end + end + + def read_board(format: :html) + get :show, namespace_id: project.namespace.to_param, + project_id: project.to_param, + format: format end end end -- cgit v1.2.1 From 8e4e294a7cc8725869964cf56842124aec54ca12 Mon Sep 17 00:00:00 2001 From: Douglas Barbosa Alexandre Date: Mon, 15 Aug 2016 18:39:26 -0300 Subject: Rename from/to params to from_list_id/to_list_id --- spec/controllers/projects/board_issues_controller_spec.rb | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) (limited to 'spec/controllers') diff --git a/spec/controllers/projects/board_issues_controller_spec.rb b/spec/controllers/projects/board_issues_controller_spec.rb index 6ec3a1b8cfc..a23f0fdf9c5 100644 --- a/spec/controllers/projects/board_issues_controller_spec.rb +++ b/spec/controllers/projects/board_issues_controller_spec.rb @@ -64,13 +64,13 @@ describe Projects::BoardIssuesController do context 'with valid params' do it 'returns a successful 200 response' do - move user: user, issue: issue, from: list1.id, to: list2.id + move user: user, issue: issue, from_list_id: list1.id, to_list_id: list2.id expect(response).to have_http_status(200) end it 'moves issue to the desired list' do - move user: user, issue: issue, from: list1.id, to: list2.id + move user: user, issue: issue, from_list_id: list1.id, to_list_id: list2.id expect(issue.reload.labels).to contain_exactly(development) end @@ -78,13 +78,13 @@ describe Projects::BoardIssuesController do context 'with invalid params' do it 'returns a unprocessable entity 422 response for invalid lists' do - move user: user, issue: issue, from: nil, to: nil + move user: user, issue: issue, from_list_id: nil, to_list_id: nil expect(response).to have_http_status(422) end it 'returns a not found 404 response for invalid issue id' do - move user: user, issue: 999, from: list1.id, to: list2.id + move user: user, issue: 999, from_list_id: list1.id, to_list_id: list2.id expect(response).to have_http_status(404) end @@ -98,19 +98,20 @@ describe Projects::BoardIssuesController do end it 'returns a successful 403 response' do - move user: guest, issue: issue, from: list1.id, to: list2.id + move user: guest, issue: issue, from_list_id: list1.id, to_list_id: list2.id expect(response).to have_http_status(403) end end - def move(user:, issue:, from:, to:) + def move(user:, issue:, from_list_id:, to_list_id:) sign_in(user) patch :update, namespace_id: project.namespace.to_param, project_id: project.to_param, id: issue.to_param, - issue: { from: from, to: to }, + from_list_id: from_list_id, + to_list_id: to_list_id, format: :json end end -- cgit v1.2.1 From 57737785df21c160234487b25ee8b37289a91803 Mon Sep 17 00:00:00 2001 From: Douglas Barbosa Alexandre Date: Mon, 15 Aug 2016 19:11:23 -0300 Subject: Move board related controllers to the `Boards` namespace --- .../projects/board_issues_controller_spec.rb | 118 ------------ .../projects/board_lists_controller_spec.rb | 197 --------------------- .../projects/boards/issues_controller_spec.rb | 118 ++++++++++++ .../projects/boards/lists_controller_spec.rb | 197 +++++++++++++++++++++ 4 files changed, 315 insertions(+), 315 deletions(-) delete mode 100644 spec/controllers/projects/board_issues_controller_spec.rb delete mode 100644 spec/controllers/projects/board_lists_controller_spec.rb create mode 100644 spec/controllers/projects/boards/issues_controller_spec.rb create mode 100644 spec/controllers/projects/boards/lists_controller_spec.rb (limited to 'spec/controllers') diff --git a/spec/controllers/projects/board_issues_controller_spec.rb b/spec/controllers/projects/board_issues_controller_spec.rb deleted file mode 100644 index a23f0fdf9c5..00000000000 --- a/spec/controllers/projects/board_issues_controller_spec.rb +++ /dev/null @@ -1,118 +0,0 @@ -require 'spec_helper' - -describe Projects::BoardIssuesController do - let(:project) { create(:project_with_board) } - let(:user) { create(:user) } - - let(:planning) { create(:label, project: project, name: 'Planning') } - let(:development) { create(:label, project: project, name: 'Development') } - - let!(:list1) { create(:list, board: project.board, label: planning, position: 0) } - let!(:list2) { create(:list, board: project.board, label: development, position: 1) } - - before do - project.team << [user, :master] - end - - describe 'GET #index' do - context 'with valid list id' do - it 'returns issues that have the list label applied' do - johndoe = create(:user, avatar: fixture_file_upload(File.join(Rails.root, 'spec/fixtures/dk.png'))) - create(:labeled_issue, project: project, labels: [planning]) - create(:labeled_issue, project: project, labels: [development]) - create(:labeled_issue, project: project, labels: [development], assignee: johndoe) - - list_issues user: user, list_id: list2 - - parsed_response = JSON.parse(response.body) - - expect(response).to match_response_schema('issue', array: true) - expect(parsed_response.length).to eq 2 - end - end - - context 'with invalid list id' do - it 'returns a not found 404 response' do - list_issues user: user, list_id: 999 - - expect(response).to have_http_status(404) - end - end - - context 'with unauthorized user' do - it 'returns a successful 403 response' do - allow(Ability.abilities).to receive(:allowed?).with(user, :read_project, project).and_return(true) - allow(Ability.abilities).to receive(:allowed?).with(user, :read_issue, project).and_return(false) - - list_issues user: user, list_id: list2 - - expect(response).to have_http_status(403) - end - end - - def list_issues(user:, list_id:) - sign_in(user) - - get :index, namespace_id: project.namespace.to_param, - project_id: project.to_param, - list_id: list_id.to_param - end - end - - describe 'PATCH #update' do - let(:issue) { create(:labeled_issue, project: project, labels: [planning]) } - - context 'with valid params' do - it 'returns a successful 200 response' do - move user: user, issue: issue, from_list_id: list1.id, to_list_id: list2.id - - expect(response).to have_http_status(200) - end - - it 'moves issue to the desired list' do - move user: user, issue: issue, from_list_id: list1.id, to_list_id: list2.id - - expect(issue.reload.labels).to contain_exactly(development) - end - end - - context 'with invalid params' do - it 'returns a unprocessable entity 422 response for invalid lists' do - move user: user, issue: issue, from_list_id: nil, to_list_id: nil - - expect(response).to have_http_status(422) - end - - it 'returns a not found 404 response for invalid issue id' do - move user: user, issue: 999, from_list_id: list1.id, to_list_id: list2.id - - expect(response).to have_http_status(404) - end - end - - context 'with unauthorized user' do - let(:guest) { create(:user) } - - before do - project.team << [guest, :guest] - end - - it 'returns a successful 403 response' do - move user: guest, issue: issue, from_list_id: list1.id, to_list_id: list2.id - - expect(response).to have_http_status(403) - end - end - - def move(user:, issue:, from_list_id:, to_list_id:) - sign_in(user) - - patch :update, namespace_id: project.namespace.to_param, - project_id: project.to_param, - id: issue.to_param, - from_list_id: from_list_id, - to_list_id: to_list_id, - format: :json - end - end -end diff --git a/spec/controllers/projects/board_lists_controller_spec.rb b/spec/controllers/projects/board_lists_controller_spec.rb deleted file mode 100644 index 4b824164f69..00000000000 --- a/spec/controllers/projects/board_lists_controller_spec.rb +++ /dev/null @@ -1,197 +0,0 @@ -require 'spec_helper' - -describe Projects::BoardListsController do - let(:project) { create(:project_with_board) } - let(:board) { project.board } - let(:user) { create(:user) } - let(:guest) { create(:user) } - - before do - project.team << [user, :master] - project.team << [guest, :guest] - end - - describe 'POST #create' do - let(:label) { create(:label, project: project, name: 'Development') } - - context 'with valid params' do - it 'returns a successful 200 response' do - create_board_list user: user, label_id: label.id - - expect(response).to have_http_status(200) - end - - it 'returns the created list' do - create_board_list user: user, label_id: label.id - - expect(response).to match_response_schema('list') - end - end - - context 'with invalid params' do - it 'returns an error' do - create_board_list user: user, label_id: nil - - parsed_response = JSON.parse(response.body) - - expect(parsed_response['label']).to contain_exactly "can't be blank" - expect(response).to have_http_status(422) - end - end - - context 'with unauthorized user' do - let(:label) { create(:label, project: project, name: 'Development') } - - it 'returns a successful 403 response' do - create_board_list user: guest, label_id: label.id - - expect(response).to have_http_status(403) - end - end - - def create_board_list(user:, label_id:) - sign_in(user) - - post :create, namespace_id: project.namespace.to_param, - project_id: project.to_param, - list: { label_id: label_id }, - format: :json - end - end - - describe 'PATCH #update' do - let!(:planning) { create(:list, board: board, position: 0) } - let!(:development) { create(:list, board: board, position: 1) } - - context 'with valid position' do - it 'returns a successful 200 response' do - move user: user, list: planning, position: 1 - - expect(response).to have_http_status(200) - end - - it 'moves the list to the desired position' do - move user: user, list: planning, position: 1 - - expect(planning.reload.position).to eq 1 - end - end - - context 'with invalid position' do - it 'returns a unprocessable entity 422 response' do - move user: user, list: planning, position: 6 - - expect(response).to have_http_status(422) - end - end - - context 'with invalid list id' do - it 'returns a not found 404 response' do - move user: user, list: 999, position: 1 - - expect(response).to have_http_status(404) - end - end - - context 'with unauthorized user' do - it 'returns a successful 403 response' do - move user: guest, list: planning, position: 6 - - expect(response).to have_http_status(403) - end - end - - def move(user:, list:, position:) - sign_in(user) - - patch :update, namespace_id: project.namespace.to_param, - project_id: project.to_param, - id: list.to_param, - list: { position: position }, - format: :json - end - end - - describe 'DELETE #destroy' do - let!(:planning) { create(:list, board: board, position: 0) } - - context 'with valid list id' do - it 'returns a successful 200 response' do - remove_board_list user: user, list: planning - - expect(response).to have_http_status(200) - end - - it 'removes list from board' do - expect { remove_board_list user: user, list: planning }.to change(board.lists, :size).by(-1) - end - end - - context 'with invalid list id' do - it 'returns a not found 404 response' do - remove_board_list user: user, list: 999 - - expect(response).to have_http_status(404) - end - end - - context 'with unauthorized user' do - it 'returns a successful 403 response' do - remove_board_list user: guest, list: planning - - expect(response).to have_http_status(403) - end - end - - def remove_board_list(user:, list:) - sign_in(user) - - delete :destroy, namespace_id: project.namespace.to_param, - project_id: project.to_param, - id: list.to_param, - format: :json - end - end - - describe 'POST #generate' do - context 'when board lists is empty' do - it 'returns a successful 200 response' do - generate_default_board_lists user: user - - expect(response).to have_http_status(200) - end - - it 'returns the defaults lists' do - generate_default_board_lists user: user - - expect(response).to match_response_schema('list', array: true) - end - end - - context 'when board lists is not empty' do - it 'returns a unprocessable entity 422 response' do - create(:list, board: board) - - generate_default_board_lists user: user - - expect(response).to have_http_status(422) - end - end - - context 'with unauthorized user' do - it 'returns a successful 403 response' do - generate_default_board_lists user: guest - - expect(response).to have_http_status(403) - end - end - - def generate_default_board_lists(user:) - sign_in(user) - - post :generate, namespace_id: project.namespace.to_param, - project_id: project.to_param, - format: :json - end - end -end diff --git a/spec/controllers/projects/boards/issues_controller_spec.rb b/spec/controllers/projects/boards/issues_controller_spec.rb new file mode 100644 index 00000000000..ac034ced930 --- /dev/null +++ b/spec/controllers/projects/boards/issues_controller_spec.rb @@ -0,0 +1,118 @@ +require 'spec_helper' + +describe Projects::Boards::IssuesController do + let(:project) { create(:project_with_board) } + let(:user) { create(:user) } + + let(:planning) { create(:label, project: project, name: 'Planning') } + let(:development) { create(:label, project: project, name: 'Development') } + + let!(:list1) { create(:list, board: project.board, label: planning, position: 0) } + let!(:list2) { create(:list, board: project.board, label: development, position: 1) } + + before do + project.team << [user, :master] + end + + describe 'GET #index' do + context 'with valid list id' do + it 'returns issues that have the list label applied' do + johndoe = create(:user, avatar: fixture_file_upload(File.join(Rails.root, 'spec/fixtures/dk.png'))) + create(:labeled_issue, project: project, labels: [planning]) + create(:labeled_issue, project: project, labels: [development]) + create(:labeled_issue, project: project, labels: [development], assignee: johndoe) + + list_issues user: user, list_id: list2 + + parsed_response = JSON.parse(response.body) + + expect(response).to match_response_schema('issue', array: true) + expect(parsed_response.length).to eq 2 + end + end + + context 'with invalid list id' do + it 'returns a not found 404 response' do + list_issues user: user, list_id: 999 + + expect(response).to have_http_status(404) + end + end + + context 'with unauthorized user' do + it 'returns a successful 403 response' do + allow(Ability.abilities).to receive(:allowed?).with(user, :read_project, project).and_return(true) + allow(Ability.abilities).to receive(:allowed?).with(user, :read_issue, project).and_return(false) + + list_issues user: user, list_id: list2 + + expect(response).to have_http_status(403) + end + end + + def list_issues(user:, list_id:) + sign_in(user) + + get :index, namespace_id: project.namespace.to_param, + project_id: project.to_param, + list_id: list_id.to_param + end + end + + describe 'PATCH #update' do + let(:issue) { create(:labeled_issue, project: project, labels: [planning]) } + + context 'with valid params' do + it 'returns a successful 200 response' do + move user: user, issue: issue, from_list_id: list1.id, to_list_id: list2.id + + expect(response).to have_http_status(200) + end + + it 'moves issue to the desired list' do + move user: user, issue: issue, from_list_id: list1.id, to_list_id: list2.id + + expect(issue.reload.labels).to contain_exactly(development) + end + end + + context 'with invalid params' do + it 'returns a unprocessable entity 422 response for invalid lists' do + move user: user, issue: issue, from_list_id: nil, to_list_id: nil + + expect(response).to have_http_status(422) + end + + it 'returns a not found 404 response for invalid issue id' do + move user: user, issue: 999, from_list_id: list1.id, to_list_id: list2.id + + expect(response).to have_http_status(404) + end + end + + context 'with unauthorized user' do + let(:guest) { create(:user) } + + before do + project.team << [guest, :guest] + end + + it 'returns a successful 403 response' do + move user: guest, issue: issue, from_list_id: list1.id, to_list_id: list2.id + + expect(response).to have_http_status(403) + end + end + + def move(user:, issue:, from_list_id:, to_list_id:) + sign_in(user) + + patch :update, namespace_id: project.namespace.to_param, + project_id: project.to_param, + id: issue.to_param, + from_list_id: from_list_id, + to_list_id: to_list_id, + format: :json + end + end +end diff --git a/spec/controllers/projects/boards/lists_controller_spec.rb b/spec/controllers/projects/boards/lists_controller_spec.rb new file mode 100644 index 00000000000..3d7d3588165 --- /dev/null +++ b/spec/controllers/projects/boards/lists_controller_spec.rb @@ -0,0 +1,197 @@ +require 'spec_helper' + +describe Projects::Boards::ListsController do + let(:project) { create(:project_with_board) } + let(:board) { project.board } + let(:user) { create(:user) } + let(:guest) { create(:user) } + + before do + project.team << [user, :master] + project.team << [guest, :guest] + end + + describe 'POST #create' do + let(:label) { create(:label, project: project, name: 'Development') } + + context 'with valid params' do + it 'returns a successful 200 response' do + create_board_list user: user, label_id: label.id + + expect(response).to have_http_status(200) + end + + it 'returns the created list' do + create_board_list user: user, label_id: label.id + + expect(response).to match_response_schema('list') + end + end + + context 'with invalid params' do + it 'returns an error' do + create_board_list user: user, label_id: nil + + parsed_response = JSON.parse(response.body) + + expect(parsed_response['label']).to contain_exactly "can't be blank" + expect(response).to have_http_status(422) + end + end + + context 'with unauthorized user' do + let(:label) { create(:label, project: project, name: 'Development') } + + it 'returns a successful 403 response' do + create_board_list user: guest, label_id: label.id + + expect(response).to have_http_status(403) + end + end + + def create_board_list(user:, label_id:) + sign_in(user) + + post :create, namespace_id: project.namespace.to_param, + project_id: project.to_param, + list: { label_id: label_id }, + format: :json + end + end + + describe 'PATCH #update' do + let!(:planning) { create(:list, board: board, position: 0) } + let!(:development) { create(:list, board: board, position: 1) } + + context 'with valid position' do + it 'returns a successful 200 response' do + move user: user, list: planning, position: 1 + + expect(response).to have_http_status(200) + end + + it 'moves the list to the desired position' do + move user: user, list: planning, position: 1 + + expect(planning.reload.position).to eq 1 + end + end + + context 'with invalid position' do + it 'returns a unprocessable entity 422 response' do + move user: user, list: planning, position: 6 + + expect(response).to have_http_status(422) + end + end + + context 'with invalid list id' do + it 'returns a not found 404 response' do + move user: user, list: 999, position: 1 + + expect(response).to have_http_status(404) + end + end + + context 'with unauthorized user' do + it 'returns a successful 403 response' do + move user: guest, list: planning, position: 6 + + expect(response).to have_http_status(403) + end + end + + def move(user:, list:, position:) + sign_in(user) + + patch :update, namespace_id: project.namespace.to_param, + project_id: project.to_param, + id: list.to_param, + list: { position: position }, + format: :json + end + end + + describe 'DELETE #destroy' do + let!(:planning) { create(:list, board: board, position: 0) } + + context 'with valid list id' do + it 'returns a successful 200 response' do + remove_board_list user: user, list: planning + + expect(response).to have_http_status(200) + end + + it 'removes list from board' do + expect { remove_board_list user: user, list: planning }.to change(board.lists, :size).by(-1) + end + end + + context 'with invalid list id' do + it 'returns a not found 404 response' do + remove_board_list user: user, list: 999 + + expect(response).to have_http_status(404) + end + end + + context 'with unauthorized user' do + it 'returns a successful 403 response' do + remove_board_list user: guest, list: planning + + expect(response).to have_http_status(403) + end + end + + def remove_board_list(user:, list:) + sign_in(user) + + delete :destroy, namespace_id: project.namespace.to_param, + project_id: project.to_param, + id: list.to_param, + format: :json + end + end + + describe 'POST #generate' do + context 'when board lists is empty' do + it 'returns a successful 200 response' do + generate_default_board_lists user: user + + expect(response).to have_http_status(200) + end + + it 'returns the defaults lists' do + generate_default_board_lists user: user + + expect(response).to match_response_schema('list', array: true) + end + end + + context 'when board lists is not empty' do + it 'returns a unprocessable entity 422 response' do + create(:list, board: board) + + generate_default_board_lists user: user + + expect(response).to have_http_status(422) + end + end + + context 'with unauthorized user' do + it 'returns a successful 403 response' do + generate_default_board_lists user: guest + + expect(response).to have_http_status(403) + end + end + + def generate_default_board_lists(user:) + sign_in(user) + + post :generate, namespace_id: project.namespace.to_param, + project_id: project.to_param, + format: :json + end + end +end -- cgit v1.2.1 From cd98ff179cb20d9dc4460d173288d0e1582c4293 Mon Sep 17 00:00:00 2001 From: Douglas Barbosa Alexandre Date: Mon, 15 Aug 2016 19:50:23 -0300 Subject: Move action to render board lists to `Projects::Boards::ListsController` --- .../projects/boards/lists_controller_spec.rb | 40 ++++++++++++++ .../controllers/projects/boards_controller_spec.rb | 62 ++++------------------ 2 files changed, 51 insertions(+), 51 deletions(-) (limited to 'spec/controllers') diff --git a/spec/controllers/projects/boards/lists_controller_spec.rb b/spec/controllers/projects/boards/lists_controller_spec.rb index 3d7d3588165..8e6b496e1d6 100644 --- a/spec/controllers/projects/boards/lists_controller_spec.rb +++ b/spec/controllers/projects/boards/lists_controller_spec.rb @@ -11,6 +11,46 @@ describe Projects::Boards::ListsController do project.team << [guest, :guest] end + describe 'GET #index' do + it 'returns a successful 200 response' do + read_board_list user: user + + expect(response).to have_http_status(200) + expect(response.content_type).to eq 'application/json' + end + + it 'returns a list of board lists' do + board = project.create_board + create(:backlog_list, board: board) + create(:list, board: board) + create(:done_list, board: board) + + read_board_list user: user + + parsed_response = JSON.parse(response.body) + + expect(response).to match_response_schema('list', array: true) + expect(parsed_response.length).to eq 3 + end + + it 'returns a successful 403 response with unauthorized user' do + allow(Ability.abilities).to receive(:allowed?).with(user, :read_project, project).and_return(true) + allow(Ability.abilities).to receive(:allowed?).with(user, :read_list, project).and_return(false) + + read_board_list user: user + + expect(response).to have_http_status(403) + end + + def read_board_list(user:) + sign_in(user) + + get :index, namespace_id: project.namespace.to_param, + project_id: project.to_param, + format: :json + end + end + describe 'POST #create' do let(:label) { create(:label, project: project, name: 'Development') } diff --git a/spec/controllers/projects/boards_controller_spec.rb b/spec/controllers/projects/boards_controller_spec.rb index 7ef4b786b42..2c0e3e5df31 100644 --- a/spec/controllers/projects/boards_controller_spec.rb +++ b/spec/controllers/projects/boards_controller_spec.rb @@ -10,64 +10,24 @@ describe Projects::BoardsController do end describe 'GET #show' do - context 'when project does not have a board' do - it 'creates a new board' do - expect { read_board }.to change(Board, :count).by(1) - end + it 'creates a new board when project does not have one' do + expect { read_board }.to change(Board, :count).by(1) end - context 'when format is HTML' do - it 'renders HTML template' do - read_board + it 'renders HTML template' do + read_board - expect(response).to render_template :show - expect(response.content_type).to eq 'text/html' - end - - context 'with unauthorized user' do - it 'returns a successful 404 response' do - allow(Ability.abilities).to receive(:allowed?).with(user, :read_project, project).and_return(true) - allow(Ability.abilities).to receive(:allowed?).with(user, :read_board, project).and_return(false) - - read_board - - expect(response).to have_http_status(404) - end - end + expect(response).to render_template :show + expect(response.content_type).to eq 'text/html' end - context 'when format is JSON' do - it 'returns a successful 200 response' do - read_board format: :json - - expect(response).to have_http_status(200) - expect(response.content_type).to eq 'application/json' - end - - it 'returns a list of board lists' do - board = project.create_board - create(:backlog_list, board: board) - create(:list, board: board) - create(:done_list, board: board) - - read_board format: :json - - parsed_response = JSON.parse(response.body) - - expect(response).to match_response_schema('list', array: true) - expect(parsed_response.length).to eq 3 - end - - context 'with unauthorized user' do - it 'returns a successful 403 response' do - allow(Ability.abilities).to receive(:allowed?).with(user, :read_project, project).and_return(true) - allow(Ability.abilities).to receive(:allowed?).with(user, :read_board, project).and_return(false) + it 'returns a successful 404 response with unauthorized user' do + allow(Ability.abilities).to receive(:allowed?).with(user, :read_project, project).and_return(true) + allow(Ability.abilities).to receive(:allowed?).with(user, :read_board, project).and_return(false) - read_board format: :json + read_board - expect(response).to have_http_status(403) - end - end + expect(response).to have_http_status(404) end def read_board(format: :html) -- cgit v1.2.1 From 29a91c5bc65524fffeaaba493f30c419b98f0869 Mon Sep 17 00:00:00 2001 From: Douglas Barbosa Alexandre Date: Tue, 16 Aug 2016 11:13:21 -0300 Subject: Fix matcher `match_response_schema` --- spec/controllers/projects/boards/issues_controller_spec.rb | 2 +- spec/controllers/projects/boards/lists_controller_spec.rb | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) (limited to 'spec/controllers') diff --git a/spec/controllers/projects/boards/issues_controller_spec.rb b/spec/controllers/projects/boards/issues_controller_spec.rb index ac034ced930..04df58bf4f6 100644 --- a/spec/controllers/projects/boards/issues_controller_spec.rb +++ b/spec/controllers/projects/boards/issues_controller_spec.rb @@ -26,7 +26,7 @@ describe Projects::Boards::IssuesController do parsed_response = JSON.parse(response.body) - expect(response).to match_response_schema('issue', array: true) + expect(response).to match_response_schema('issues') expect(parsed_response.length).to eq 2 end end diff --git a/spec/controllers/projects/boards/lists_controller_spec.rb b/spec/controllers/projects/boards/lists_controller_spec.rb index 8e6b496e1d6..92190b4b69e 100644 --- a/spec/controllers/projects/boards/lists_controller_spec.rb +++ b/spec/controllers/projects/boards/lists_controller_spec.rb @@ -29,7 +29,7 @@ describe Projects::Boards::ListsController do parsed_response = JSON.parse(response.body) - expect(response).to match_response_schema('list', array: true) + expect(response).to match_response_schema('lists') expect(parsed_response.length).to eq 3 end @@ -204,7 +204,7 @@ describe Projects::Boards::ListsController do it 'returns the defaults lists' do generate_default_board_lists user: user - expect(response).to match_response_schema('list', array: true) + expect(response).to match_response_schema('lists') end end -- cgit v1.2.1 From 84afd6254a730b5711c3dc71dce0e467e8b8d2ec Mon Sep 17 00:00:00 2001 From: Douglas Barbosa Alexandre Date: Wed, 17 Aug 2016 11:55:12 -0300 Subject: Remove # from controller actions specs --- spec/controllers/projects/boards/issues_controller_spec.rb | 4 ++-- spec/controllers/projects/boards/lists_controller_spec.rb | 10 +++++----- spec/controllers/projects/boards_controller_spec.rb | 2 +- 3 files changed, 8 insertions(+), 8 deletions(-) (limited to 'spec/controllers') diff --git a/spec/controllers/projects/boards/issues_controller_spec.rb b/spec/controllers/projects/boards/issues_controller_spec.rb index 04df58bf4f6..2c6cdf086b8 100644 --- a/spec/controllers/projects/boards/issues_controller_spec.rb +++ b/spec/controllers/projects/boards/issues_controller_spec.rb @@ -14,7 +14,7 @@ describe Projects::Boards::IssuesController do project.team << [user, :master] end - describe 'GET #index' do + describe 'GET index' do context 'with valid list id' do it 'returns issues that have the list label applied' do johndoe = create(:user, avatar: fixture_file_upload(File.join(Rails.root, 'spec/fixtures/dk.png'))) @@ -59,7 +59,7 @@ describe Projects::Boards::IssuesController do end end - describe 'PATCH #update' do + describe 'PATCH update' do let(:issue) { create(:labeled_issue, project: project, labels: [planning]) } context 'with valid params' do diff --git a/spec/controllers/projects/boards/lists_controller_spec.rb b/spec/controllers/projects/boards/lists_controller_spec.rb index 92190b4b69e..a241e2f363f 100644 --- a/spec/controllers/projects/boards/lists_controller_spec.rb +++ b/spec/controllers/projects/boards/lists_controller_spec.rb @@ -11,7 +11,7 @@ describe Projects::Boards::ListsController do project.team << [guest, :guest] end - describe 'GET #index' do + describe 'GET index' do it 'returns a successful 200 response' do read_board_list user: user @@ -51,7 +51,7 @@ describe Projects::Boards::ListsController do end end - describe 'POST #create' do + describe 'POST create' do let(:label) { create(:label, project: project, name: 'Development') } context 'with valid params' do @@ -99,7 +99,7 @@ describe Projects::Boards::ListsController do end end - describe 'PATCH #update' do + describe 'PATCH update' do let!(:planning) { create(:list, board: board, position: 0) } let!(:development) { create(:list, board: board, position: 1) } @@ -152,7 +152,7 @@ describe Projects::Boards::ListsController do end end - describe 'DELETE #destroy' do + describe 'DELETE destroy' do let!(:planning) { create(:list, board: board, position: 0) } context 'with valid list id' do @@ -193,7 +193,7 @@ describe Projects::Boards::ListsController do end end - describe 'POST #generate' do + describe 'POST generate' do context 'when board lists is empty' do it 'returns a successful 200 response' do generate_default_board_lists user: user diff --git a/spec/controllers/projects/boards_controller_spec.rb b/spec/controllers/projects/boards_controller_spec.rb index 2c0e3e5df31..9ed4d8a4218 100644 --- a/spec/controllers/projects/boards_controller_spec.rb +++ b/spec/controllers/projects/boards_controller_spec.rb @@ -9,7 +9,7 @@ describe Projects::BoardsController do sign_in(user) end - describe 'GET #show' do + describe 'GET show' do it 'creates a new board when project does not have one' do expect { read_board }.to change(Board, :count).by(1) end -- cgit v1.2.1 From 536bdf643eb9224a0f46e818ec47492c221686a0 Mon Sep 17 00:00:00 2001 From: Douglas Barbosa Alexandre Date: Wed, 17 Aug 2016 12:15:51 -0300 Subject: Move the set up of the state described in context to a before block --- spec/controllers/projects/boards/issues_controller_spec.rb | 4 +++- spec/controllers/projects/boards/lists_controller_spec.rb | 14 +++++++++----- spec/controllers/projects/boards_controller_spec.rb | 14 +++++++++----- 3 files changed, 21 insertions(+), 11 deletions(-) (limited to 'spec/controllers') diff --git a/spec/controllers/projects/boards/issues_controller_spec.rb b/spec/controllers/projects/boards/issues_controller_spec.rb index 2c6cdf086b8..d0ad5e26dbd 100644 --- a/spec/controllers/projects/boards/issues_controller_spec.rb +++ b/spec/controllers/projects/boards/issues_controller_spec.rb @@ -40,10 +40,12 @@ describe Projects::Boards::IssuesController do end context 'with unauthorized user' do - it 'returns a successful 403 response' do + before do allow(Ability.abilities).to receive(:allowed?).with(user, :read_project, project).and_return(true) allow(Ability.abilities).to receive(:allowed?).with(user, :read_issue, project).and_return(false) + end + it 'returns a successful 403 response' do list_issues user: user, list_id: list2 expect(response).to have_http_status(403) diff --git a/spec/controllers/projects/boards/lists_controller_spec.rb b/spec/controllers/projects/boards/lists_controller_spec.rb index a241e2f363f..9496636e3cc 100644 --- a/spec/controllers/projects/boards/lists_controller_spec.rb +++ b/spec/controllers/projects/boards/lists_controller_spec.rb @@ -33,13 +33,17 @@ describe Projects::Boards::ListsController do expect(parsed_response.length).to eq 3 end - it 'returns a successful 403 response with unauthorized user' do - allow(Ability.abilities).to receive(:allowed?).with(user, :read_project, project).and_return(true) - allow(Ability.abilities).to receive(:allowed?).with(user, :read_list, project).and_return(false) + context 'with unauthorized user' do + before do + allow(Ability.abilities).to receive(:allowed?).with(user, :read_project, project).and_return(true) + allow(Ability.abilities).to receive(:allowed?).with(user, :read_list, project).and_return(false) + end - read_board_list user: user + it 'returns a successful 403 response' do + read_board_list user: user - expect(response).to have_http_status(403) + expect(response).to have_http_status(403) + end end def read_board_list(user:) diff --git a/spec/controllers/projects/boards_controller_spec.rb b/spec/controllers/projects/boards_controller_spec.rb index 9ed4d8a4218..75a6d39e82c 100644 --- a/spec/controllers/projects/boards_controller_spec.rb +++ b/spec/controllers/projects/boards_controller_spec.rb @@ -21,13 +21,17 @@ describe Projects::BoardsController do expect(response.content_type).to eq 'text/html' end - it 'returns a successful 404 response with unauthorized user' do - allow(Ability.abilities).to receive(:allowed?).with(user, :read_project, project).and_return(true) - allow(Ability.abilities).to receive(:allowed?).with(user, :read_board, project).and_return(false) + context 'with unauthorized user' do + before do + allow(Ability.abilities).to receive(:allowed?).with(user, :read_project, project).and_return(true) + allow(Ability.abilities).to receive(:allowed?).with(user, :read_board, project).and_return(false) + end - read_board + it 'returns a successful 404 response' do + read_board - expect(response).to have_http_status(404) + expect(response).to have_http_status(404) + end end def read_board(format: :html) -- cgit v1.2.1