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
end
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)
redirect_to(index_path, notice: "CSV export queued")
......
......@@ -8,7 +8,7 @@ class ExportCsvWorker
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)
end
......
......@@ -10,34 +10,62 @@ describe 'Issues csv', feature: true do
before { login_as(user) }
it "downloads from a project's issue index" do
visit namespace_project_issues_path(project.namespace, project)
def request_csv(params={})
visit namespace_project_issues_path(project.namespace, project, params)
click_on 'Download CSV'
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
it 'ignores pagination' do
create_list(:issue, 30, project: project, author: user)
visit namespace_project_issues_path(project.namespace, project)
click_on 'Download CSV'
click_on 'Request export'
request_csv
expect(csv.count).to eq 31
end
it 'uses filters from issue index' do
visit namespace_project_issues_path(project.namespace, project, state: :closed)
click_on 'Download CSV'
click_on 'Request export'
request_csv(state: :closed)
expect(csv.count).to eq 0
end
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
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