Browse Source

Add delete sales log flow

pull/1620/head
Jack S 3 years ago
parent
commit
51b0c643cb
  1. 24
      app/controllers/sales_logs_controller.rb
  2. 2
      config/routes.rb
  3. 90
      spec/requests/sales_logs_controller_spec.rb

24
app/controllers/sales_logs_controller.rb

@ -40,6 +40,30 @@ class SalesLogsController < LogsController
end end
end end
def destroy
@log = SalesLog.visible.find_by(id: params[:id])
render_not_found and return unless @log
authorize @log, policy_class: LogPolicy
if @log.delete
redirect_to sales_logs_path, notice: "Log #{@log.id} has been deleted"
else
render_not_found
end
end
def delete_confirmation
@log = SalesLog.visible.find_by(id: params[:sales_log_id])
render_not_found and return unless @log
authorize @log, :destroy?, policy_class: LogPolicy
render "logs/delete_confirmation"
end
def download_csv def download_csv
unpaginated_filtered_logs = filtered_logs(current_user.sales_logs, search_term, @session_filters) unpaginated_filtered_logs = filtered_logs(current_user.sales_logs, search_term, @session_filters)

2
config/routes.rb

@ -203,6 +203,8 @@ Rails.application.routes.draw do
end end
resources :sales_logs, path: "/sales-logs" do resources :sales_logs, path: "/sales-logs" do
get "delete-confirmation", to: "sales_logs#delete_confirmation"
collection do collection do
get "csv-download", to: "sales_logs#download_csv" get "csv-download", to: "sales_logs#download_csv"
post "email-csv", to: "sales_logs#email_csv" post "email-csv", to: "sales_logs#email_csv"

90
spec/requests/sales_logs_controller_spec.rb

@ -652,4 +652,94 @@ RSpec.describe SalesLogsController, type: :request do
end end
end end
end end
describe "DELETE" do
let(:headers) { { "Accept" => "text/html" } }
let(:page) { Capybara::Node::Simple.new(response.body) }
let(:user) { create(:user, :support) }
let!(:sales_log) do
create(:sales_log, :completed)
end
let(:id) { sales_log.id }
let(:delete_request) { delete "/sales-logs/#{id}", headers: }
before do
allow(user).to receive(:need_two_factor_authentication?).and_return(false)
sign_in user
end
context "when delete permitted" do
it "redirects to sales logs and shows message" do
delete_request
expect(response).to redirect_to(sales_logs_path)
follow_redirect!
expect(page).to have_content("Log #{id} has been deleted")
end
it "deletes the log" do
expect { delete_request }.to change { SalesLog.exists?(id) }.from(true).to(false)
end
end
context "when log does not exist" do
let(:id) { -1 }
it "returns 404" do
delete_request
expect(response).to have_http_status(:not_found)
end
end
context "when user not authorised" do
let(:user) { create(:user) }
it "returns 404" do
delete_request
expect(response).to have_http_status(:unauthorized)
end
end
end
describe "GET delete-confirmation" do
let(:headers) { { "Accept" => "text/html" } }
let(:page) { Capybara::Node::Simple.new(response.body) }
let(:user) { create(:user, :support) }
let!(:sales_log) do
create(:sales_log, :completed)
end
let(:id) { sales_log.id }
let(:request) { get "/sales-logs/#{id}/delete-confirmation", headers: }
before do
allow(user).to receive(:need_two_factor_authentication?).and_return(false)
sign_in user
end
context "when delete permitted" do
it "renders page" do
request
expect(response).to have_http_status(:ok)
expect(page).to have_content("Are you sure you want to delete this log?")
end
end
context "when log does not exist" do
let(:id) { -1 }
it "returns 404" do
request
expect(response).to have_http_status(:not_found)
end
end
context "when user not authorised" do
let(:user) { create(:user) }
it "returns 404" do
request
expect(response).to have_http_status(:unauthorized)
end
end
end
end end

Loading…
Cancel
Save