Commit 9be4948e authored by James Edwards-Jones's avatar James Edwards-Jones

Issues CSV exported and emailed by Sidekiq worker

parent e8cf6b07
......@@ -27,13 +27,11 @@ class Projects::IssuesController < Projects::ApplicationController
@issues = issues_collection
@issues_count = @issues.count
if !request.format.csv?
@issues = @issues.page(params[:page])
@issuable_meta_data = issuable_meta_data(@issues)
@issues = @issues.page(params[:page])
@issuable_meta_data = issuable_meta_data(@issues)
if @issues.out_of_range? && @issues.total_pages != 0
return redirect_to url_for(params.merge(page: @issues.total_pages))
end
if @issues.out_of_range? && @issues.total_pages != 0
return redirect_to url_for(params.merge(page: @issues.total_pages))
end
if params[:label_name].present?
......@@ -55,9 +53,6 @@ class Projects::IssuesController < Projects::ApplicationController
respond_to do |format|
format.html
format.atom { render layout: false }
format.csv do
render text: Issues::ExportCsvService.new(@issues).render
end
format.json do
render json: {
html: view_to_html_string("projects/issues/_issues"),
......@@ -152,6 +147,13 @@ class Projects::IssuesController < Projects::ApplicationController
render :edit
end
def export_csv
ExportCsvWorker.perform_async(@current_user.id, @project.id, filter_params)
index_path = namespace_project_issues_path(@project.namespace, @project)
redirect_to(index_path, notice: "CSV export queued")
end
def referenced_merge_requests
@merge_requests = @issue.referenced_merge_requests(current_user)
@closed_by_merge_requests = @issue.closed_by_merge_requests(current_user)
......
......@@ -9,6 +9,11 @@ module Issues
csv_builder.render
end
def email(user, project)
content = render
Notify.issues_csv_email(user, project, content, @issues.count).deliver_now
end
private
def csv_builder
......
......@@ -16,7 +16,7 @@
After we finish preparing your .csv export, we'll email it to
%strong= @current_user.email
.modal-footer
= link_to 'Request export', namespace_project_issues_path(@project.namespace, @project, params.permit(IssuableFinder::VALID_PARAMS).merge(format: :csv)), class: "btn btn-success pull-left", title: "Request export"
= link_to 'Request export', export_csv_namespace_project_issues_path(@project.namespace, @project, params.permit(IssuableFinder::VALID_PARAMS)), method: :post, class: "btn btn-success pull-left", title: "Request export"
:javascript
$(function(){
......
class ExportCsvWorker
include Sidekiq::Worker
include DedicatedSidekiqQueue
def perform(current_user_id, project_id, params)
@current_user = User.find(current_user_id)
@project = Project.find(project_id)
params.merge!(project_id: project_id)
issues = IssuesFinder.new(@current_user, params).execute
Issues::ExportCsvService.new(issues.limit(100)).email(@current_user, @project)
end
end
......@@ -281,7 +281,8 @@ constraints(ProjectUrlConstrainer.new) do
get :can_create_branch
end
collection do
post :bulk_update
post :bulk_update
post :export_csv
end
end
......
......@@ -59,3 +59,4 @@
- [admin_emails, 1]
- [geo_repository_update, 1]
- [elastic_batch_project_indexer, 1]
- [export_csv, 1]
require 'spec_helper'
describe Issues::ExportCsvService, services: true do
let(:project) { create(:project) }
let!(:issues) { create_list(:issue, 2, project: project) }
let(:subject) { described_class.new(Issue.all) }
it 'renders csv to string' do
expect(subject.render).to be_a String
end
describe '#email' do
let(:user) { double(notification_email: 'notification@example.com') }
it 'emails csv' do
expect{ subject.email(user, project) }.to change(ActionMailer::Base.deliveries, :count)
end
end
it 'renders csv to temporary file'
it 'includes relevent details (move from feature spec)'
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