Commit 3dff0e47 authored by James Edwards-Jones's avatar James Edwards-Jones

Updated csv feature spec to use background worker

parent 9be4948e
...@@ -148,7 +148,8 @@ class Projects::IssuesController < Projects::ApplicationController ...@@ -148,7 +148,8 @@ class Projects::IssuesController < Projects::ApplicationController
end end
def export_csv def export_csv
ExportCsvWorker.perform_async(@current_user.id, @project.id, filter_params) csv_params = filter_params.permit(IssuableFinder::VALID_PARAMS)
ExportCsvWorker.perform_async(@current_user.id, @project.id, csv_params)
index_path = namespace_project_issues_path(@project.namespace, @project) index_path = namespace_project_issues_path(@project.namespace, @project)
redirect_to(index_path, notice: "CSV export queued") redirect_to(index_path, notice: "CSV export queued")
......
...@@ -8,7 +8,7 @@ class ExportCsvWorker ...@@ -8,7 +8,7 @@ class ExportCsvWorker
params.merge!(project_id: project_id) params.merge!(project_id: project_id)
issues = IssuesFinder.new(@current_user, params).execute issues = IssuesFinder.new(@current_user, params.symbolize_keys).execute
Issues::ExportCsvService.new(issues.limit(100)).email(@current_user, @project) Issues::ExportCsvService.new(issues.limit(100)).email(@current_user, @project)
end end
......
...@@ -10,34 +10,62 @@ describe 'Issues csv', feature: true do ...@@ -10,34 +10,62 @@ describe 'Issues csv', feature: true do
before { login_as(user) } before { login_as(user) }
it "downloads from a project's issue index" do def request_csv(params={})
visit namespace_project_issues_path(project.namespace, project) visit namespace_project_issues_path(project.namespace, project, params)
click_on 'Download CSV' click_on 'Download CSV'
click_on 'Request export' click_on 'Request export'
end
def attachment
ActionMailer::Base.deliveries.last.attachments.first
end
it 'triggers an email export' do
expect(ExportCsvWorker).to receive(:perform_async).with(user.id, project.id, hash_including(project_id: project.id))
request_csv
end
it "doesn't send request params to ExportCsvWorker" do
expect(ExportCsvWorker).to receive(:perform_async).with(anything, anything, hash_excluding(controller: anything, action: anything))
request_csv
end
it 'displays flash message' do
request_csv
expect(page.response_headers['Content-Type']).to include('csv') expect(page).to have_content 'CSV export queued'
end
it 'includes a csv attachment' do
request_csv
expect(attachment.content_type).to include('text/csv')
end end
it 'ignores pagination' do it 'ignores pagination' do
create_list(:issue, 30, project: project, author: user) create_list(:issue, 30, project: project, author: user)
visit namespace_project_issues_path(project.namespace, project) request_csv
click_on 'Download CSV'
click_on 'Request export'
expect(csv.count).to eq 31 expect(csv.count).to eq 31
end end
it 'uses filters from issue index' do it 'uses filters from issue index' do
visit namespace_project_issues_path(project.namespace, project, state: :closed) request_csv(state: :closed)
click_on 'Download CSV'
click_on 'Request export'
expect(csv.count).to eq 0 expect(csv.count).to eq 0
end end
def visit_project_csv def visit_project_csv
visit namespace_project_issues_path(project.namespace, project, format: :csv) #TODO: Move these specs elsewhere
visit export_csv_namespace_project_issues_path(project.namespace, project, method: :post)
end
def csv
CSV.parse(attachment.decode_body, headers: true)
end end
it 'avoids excessive database calls' do it 'avoids excessive database calls' do
......
module CsvHelpers
def csv
CSV.parse(body, headers: true)
end
end
RSpec.configure do |config|
config.include CsvHelpers, type: :feature
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