Refactor exports controller (#1567)
* Add basic coverage for settings/exports controller * Remove unused @account variable from settings/exports controller * Add coverage for download export actions * Remove deprecated `render :text` in favor of `send_data` for csv downloads * Add model to handle exports * Use Export class in settings/exports controller * Simplify settings/exports controller methods * Move settings/export to more restful routesmaster
parent
1921c5416b
commit
3ddd936b03
@ -0,0 +1,17 @@ |
|||||||
|
# frozen_string_literal: true |
||||||
|
|
||||||
|
module Settings |
||||||
|
module Exports |
||||||
|
class BlockedAccountsController < ApplicationController |
||||||
|
before_action :authenticate_user! |
||||||
|
|
||||||
|
def index |
||||||
|
export_data = Export.new(current_account.blocking).to_csv |
||||||
|
|
||||||
|
respond_to do |format| |
||||||
|
format.csv { send_data export_data, filename: 'blocking.csv' } |
||||||
|
end |
||||||
|
end |
||||||
|
end |
||||||
|
end |
||||||
|
end |
@ -0,0 +1,17 @@ |
|||||||
|
# frozen_string_literal: true |
||||||
|
|
||||||
|
module Settings |
||||||
|
module Exports |
||||||
|
class FollowingAccountsController < ApplicationController |
||||||
|
before_action :authenticate_user! |
||||||
|
|
||||||
|
def index |
||||||
|
export_data = Export.new(current_account.following).to_csv |
||||||
|
|
||||||
|
respond_to do |format| |
||||||
|
format.csv { send_data export_data, filename: 'following.csv' } |
||||||
|
end |
||||||
|
end |
||||||
|
end |
||||||
|
end |
||||||
|
end |
@ -1,46 +1,13 @@ |
|||||||
# frozen_string_literal: true |
# frozen_string_literal: true |
||||||
|
|
||||||
require 'csv' |
|
||||||
|
|
||||||
class Settings::ExportsController < ApplicationController |
class Settings::ExportsController < ApplicationController |
||||||
layout 'admin' |
layout 'admin' |
||||||
|
|
||||||
before_action :authenticate_user! |
before_action :authenticate_user! |
||||||
before_action :set_account |
|
||||||
|
|
||||||
def show |
def show |
||||||
@total_storage = current_account.media_attachments.sum(:file_file_size) |
@total_storage = current_account.media_attachments.sum(:file_file_size) |
||||||
@total_follows = current_account.following.count |
@total_follows = current_account.following.count |
||||||
@total_blocks = current_account.blocking.count |
@total_blocks = current_account.blocking.count |
||||||
end |
end |
||||||
|
|
||||||
def download_following_list |
|
||||||
@accounts = current_account.following |
|
||||||
|
|
||||||
respond_to do |format| |
|
||||||
format.csv { render text: accounts_list_to_csv(@accounts) } |
|
||||||
end |
|
||||||
end |
|
||||||
|
|
||||||
def download_blocking_list |
|
||||||
@accounts = current_account.blocking |
|
||||||
|
|
||||||
respond_to do |format| |
|
||||||
format.csv { render text: accounts_list_to_csv(@accounts) } |
|
||||||
end |
|
||||||
end |
|
||||||
|
|
||||||
private |
|
||||||
|
|
||||||
def set_account |
|
||||||
@account = current_user.account |
|
||||||
end |
|
||||||
|
|
||||||
def accounts_list_to_csv(list) |
|
||||||
CSV.generate do |csv| |
|
||||||
list.each do |account| |
|
||||||
csv << [(account.local? ? account.local_username_and_domain : account.acct)] |
|
||||||
end |
|
||||||
end |
|
||||||
end |
|
||||||
end |
end |
||||||
|
@ -0,0 +1,18 @@ |
|||||||
|
# frozen_string_literal: true |
||||||
|
require 'csv' |
||||||
|
|
||||||
|
class Export |
||||||
|
attr_reader :accounts |
||||||
|
|
||||||
|
def initialize(accounts) |
||||||
|
@accounts = accounts |
||||||
|
end |
||||||
|
|
||||||
|
def to_csv |
||||||
|
CSV.generate do |csv| |
||||||
|
accounts.each do |account| |
||||||
|
csv << [(account.local? ? account.local_username_and_domain : account.acct)] |
||||||
|
end |
||||||
|
end |
||||||
|
end |
||||||
|
end |
@ -0,0 +1,17 @@ |
|||||||
|
require 'rails_helper' |
||||||
|
|
||||||
|
describe Settings::Exports::BlockedAccountsController do |
||||||
|
before do |
||||||
|
sign_in Fabricate(:user), scope: :user |
||||||
|
end |
||||||
|
|
||||||
|
describe 'GET #index' do |
||||||
|
it 'returns a csv of the blocking accounts' do |
||||||
|
get :index, format: :csv |
||||||
|
|
||||||
|
expect(response).to have_http_status(:success) |
||||||
|
expect(response.content_type).to eq 'text/csv' |
||||||
|
expect(response.headers['Content-Disposition']).to eq 'attachment; filename="blocking.csv"' |
||||||
|
end |
||||||
|
end |
||||||
|
end |
@ -0,0 +1,17 @@ |
|||||||
|
require 'rails_helper' |
||||||
|
|
||||||
|
describe Settings::Exports::FollowingAccountsController do |
||||||
|
before do |
||||||
|
sign_in Fabricate(:user), scope: :user |
||||||
|
end |
||||||
|
|
||||||
|
describe 'GET #index' do |
||||||
|
it 'returns a csv of the following accounts' do |
||||||
|
get :index, format: :csv |
||||||
|
|
||||||
|
expect(response).to have_http_status(:success) |
||||||
|
expect(response.content_type).to eq 'text/csv' |
||||||
|
expect(response.headers['Content-Disposition']).to eq 'attachment; filename="following.csv"' |
||||||
|
end |
||||||
|
end |
||||||
|
end |
@ -0,0 +1,14 @@ |
|||||||
|
require 'rails_helper' |
||||||
|
|
||||||
|
describe Settings::ExportsController do |
||||||
|
before do |
||||||
|
sign_in Fabricate(:user), scope: :user |
||||||
|
end |
||||||
|
|
||||||
|
describe 'GET #show' do |
||||||
|
it 'returns http success' do |
||||||
|
get :show |
||||||
|
expect(response).to have_http_status(:success) |
||||||
|
end |
||||||
|
end |
||||||
|
end |
@ -0,0 +1,17 @@ |
|||||||
|
require 'rails_helper' |
||||||
|
|
||||||
|
describe Export do |
||||||
|
describe 'to_csv' do |
||||||
|
it 'returns a csv of the accounts' do |
||||||
|
one = Account.new(username: 'one', domain: 'local.host') |
||||||
|
two = Account.new(username: 'two', domain: 'local.host') |
||||||
|
accounts = [one, two] |
||||||
|
|
||||||
|
export = Export.new(accounts).to_csv |
||||||
|
results = export.strip.split |
||||||
|
|
||||||
|
expect(results.size).to eq 2 |
||||||
|
expect(results.first).to eq 'one@local.host' |
||||||
|
end |
||||||
|
end |
||||||
|
end |
Loading…
Reference in new issue