Extract ExportSummary class for account object counts (#32227)
				
					
				
			This commit is contained in:
		
							parent
							
								
									52afa94f1c
								
							
						
					
					
						commit
						d95f6f4410
					
				| @ -9,7 +9,7 @@ class Settings::ExportsController < Settings::BaseController | |||||||
|   skip_before_action :require_functional! |   skip_before_action :require_functional! | ||||||
| 
 | 
 | ||||||
|   def show |   def show | ||||||
|     @export  = Export.new(current_account) |     @export_summary = ExportSummary.new(preloaded_account) | ||||||
|     @backups = current_user.backups |     @backups = current_user.backups | ||||||
|   end |   end | ||||||
| 
 | 
 | ||||||
| @ -25,4 +25,15 @@ class Settings::ExportsController < Settings::BaseController | |||||||
| 
 | 
 | ||||||
|     redirect_to settings_export_path |     redirect_to settings_export_path | ||||||
|   end |   end | ||||||
|  | 
 | ||||||
|  |   private | ||||||
|  | 
 | ||||||
|  |   def preloaded_account | ||||||
|  |     current_account.tap do |account| | ||||||
|  |       ActiveRecord::Associations::Preloader.new( | ||||||
|  |         records: [account], | ||||||
|  |         associations: :account_stat | ||||||
|  |       ).call | ||||||
|  |     end | ||||||
|  |   end | ||||||
| end | end | ||||||
|  | |||||||
| @ -55,42 +55,6 @@ class Export | |||||||
|     end |     end | ||||||
|   end |   end | ||||||
| 
 | 
 | ||||||
|   def total_storage |  | ||||||
|     account.media_attachments.sum(:file_file_size) |  | ||||||
|   end |  | ||||||
| 
 |  | ||||||
|   def total_statuses |  | ||||||
|     account.statuses_count |  | ||||||
|   end |  | ||||||
| 
 |  | ||||||
|   def total_bookmarks |  | ||||||
|     account.bookmarks.count |  | ||||||
|   end |  | ||||||
| 
 |  | ||||||
|   def total_follows |  | ||||||
|     account.following_count |  | ||||||
|   end |  | ||||||
| 
 |  | ||||||
|   def total_lists |  | ||||||
|     account.owned_lists.count |  | ||||||
|   end |  | ||||||
| 
 |  | ||||||
|   def total_followers |  | ||||||
|     account.followers_count |  | ||||||
|   end |  | ||||||
| 
 |  | ||||||
|   def total_blocks |  | ||||||
|     account.blocking.count |  | ||||||
|   end |  | ||||||
| 
 |  | ||||||
|   def total_mutes |  | ||||||
|     account.muting.count |  | ||||||
|   end |  | ||||||
| 
 |  | ||||||
|   def total_domain_blocks |  | ||||||
|     account.domain_blocks.count |  | ||||||
|   end |  | ||||||
| 
 |  | ||||||
|   private |   private | ||||||
| 
 | 
 | ||||||
|   def to_csv(accounts) |   def to_csv(accounts) | ||||||
|  | |||||||
							
								
								
									
										70
									
								
								app/presenters/export_summary.rb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										70
									
								
								app/presenters/export_summary.rb
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,70 @@ | |||||||
|  | # frozen_string_literal: true | ||||||
|  | 
 | ||||||
|  | class ExportSummary | ||||||
|  |   attr_reader :account, :counts | ||||||
|  | 
 | ||||||
|  |   delegate( | ||||||
|  |     :blocking, | ||||||
|  |     :bookmarks, | ||||||
|  |     :domain_blocks, | ||||||
|  |     :owned_lists, | ||||||
|  |     :media_attachments, | ||||||
|  |     :muting, | ||||||
|  |     to: :account, | ||||||
|  |     prefix: true | ||||||
|  |   ) | ||||||
|  | 
 | ||||||
|  |   def initialize(account) | ||||||
|  |     @account = account | ||||||
|  |     @counts = populate_counts | ||||||
|  |   end | ||||||
|  | 
 | ||||||
|  |   def total_blocks | ||||||
|  |     counts[:blocks].value | ||||||
|  |   end | ||||||
|  | 
 | ||||||
|  |   def total_bookmarks | ||||||
|  |     counts[:bookmarks].value | ||||||
|  |   end | ||||||
|  | 
 | ||||||
|  |   def total_domain_blocks | ||||||
|  |     counts[:domain_blocks].value | ||||||
|  |   end | ||||||
|  | 
 | ||||||
|  |   def total_followers | ||||||
|  |     account.followers_count | ||||||
|  |   end | ||||||
|  | 
 | ||||||
|  |   def total_follows | ||||||
|  |     account.following_count | ||||||
|  |   end | ||||||
|  | 
 | ||||||
|  |   def total_lists | ||||||
|  |     counts[:owned_lists].value | ||||||
|  |   end | ||||||
|  | 
 | ||||||
|  |   def total_mutes | ||||||
|  |     counts[:muting].value | ||||||
|  |   end | ||||||
|  | 
 | ||||||
|  |   def total_statuses | ||||||
|  |     account.statuses_count | ||||||
|  |   end | ||||||
|  | 
 | ||||||
|  |   def total_storage | ||||||
|  |     counts[:storage].value | ||||||
|  |   end | ||||||
|  | 
 | ||||||
|  |   private | ||||||
|  | 
 | ||||||
|  |   def populate_counts | ||||||
|  |     { | ||||||
|  |       blocks: account_blocking.async_count, | ||||||
|  |       bookmarks: account_bookmarks.async_count, | ||||||
|  |       domain_blocks: account_domain_blocks.async_count, | ||||||
|  |       owned_lists: account_owned_lists.async_count, | ||||||
|  |       muting: account_muting.async_count, | ||||||
|  |       storage: account_media_attachments.async_sum(:file_file_size), | ||||||
|  |     } | ||||||
|  |   end | ||||||
|  | end | ||||||
| @ -6,39 +6,39 @@ | |||||||
|     %tbody |     %tbody | ||||||
|       %tr |       %tr | ||||||
|         %th= t('exports.storage') |         %th= t('exports.storage') | ||||||
|         %td= number_to_human_size @export.total_storage |         %td= number_to_human_size @export_summary.total_storage | ||||||
|         %td |         %td | ||||||
|       %tr |       %tr | ||||||
|         %th= t('accounts.posts_tab_heading') |         %th= t('accounts.posts_tab_heading') | ||||||
|         %td= number_with_delimiter @export.total_statuses |         %td= number_with_delimiter @export_summary.total_statuses | ||||||
|         %td |         %td | ||||||
|       %tr |       %tr | ||||||
|         %th= t('admin.accounts.follows') |         %th= t('admin.accounts.follows') | ||||||
|         %td= number_with_delimiter @export.total_follows |         %td= number_with_delimiter @export_summary.total_follows | ||||||
|         %td= table_link_to 'download', t('exports.csv'), settings_exports_follows_path(format: :csv) |         %td= table_link_to 'download', t('exports.csv'), settings_exports_follows_path(format: :csv) | ||||||
|       %tr |       %tr | ||||||
|         %th= t('exports.lists') |         %th= t('exports.lists') | ||||||
|         %td= number_with_delimiter @export.total_lists |         %td= number_with_delimiter @export_summary.total_lists | ||||||
|         %td= table_link_to 'download', t('exports.csv'), settings_exports_lists_path(format: :csv) |         %td= table_link_to 'download', t('exports.csv'), settings_exports_lists_path(format: :csv) | ||||||
|       %tr |       %tr | ||||||
|         %th= t('admin.accounts.followers') |         %th= t('admin.accounts.followers') | ||||||
|         %td= number_with_delimiter @export.total_followers |         %td= number_with_delimiter @export_summary.total_followers | ||||||
|         %td |         %td | ||||||
|       %tr |       %tr | ||||||
|         %th= t('exports.mutes') |         %th= t('exports.mutes') | ||||||
|         %td= number_with_delimiter @export.total_mutes |         %td= number_with_delimiter @export_summary.total_mutes | ||||||
|         %td= table_link_to 'download', t('exports.csv'), settings_exports_mutes_path(format: :csv) |         %td= table_link_to 'download', t('exports.csv'), settings_exports_mutes_path(format: :csv) | ||||||
|       %tr |       %tr | ||||||
|         %th= t('exports.blocks') |         %th= t('exports.blocks') | ||||||
|         %td= number_with_delimiter @export.total_blocks |         %td= number_with_delimiter @export_summary.total_blocks | ||||||
|         %td= table_link_to 'download', t('exports.csv'), settings_exports_blocks_path(format: :csv) |         %td= table_link_to 'download', t('exports.csv'), settings_exports_blocks_path(format: :csv) | ||||||
|       %tr |       %tr | ||||||
|         %th= t('exports.domain_blocks') |         %th= t('exports.domain_blocks') | ||||||
|         %td= number_with_delimiter @export.total_domain_blocks |         %td= number_with_delimiter @export_summary.total_domain_blocks | ||||||
|         %td= table_link_to 'download', t('exports.csv'), settings_exports_domain_blocks_path(format: :csv) |         %td= table_link_to 'download', t('exports.csv'), settings_exports_domain_blocks_path(format: :csv) | ||||||
|       %tr |       %tr | ||||||
|         %th= t('exports.bookmarks') |         %th= t('exports.bookmarks') | ||||||
|         %td= number_with_delimiter @export.total_bookmarks |         %td= number_with_delimiter @export_summary.total_bookmarks | ||||||
|         %td= table_link_to 'download', t('exports.csv'), settings_exports_bookmarks_path(format: :csv) |         %td= table_link_to 'download', t('exports.csv'), settings_exports_bookmarks_path(format: :csv) | ||||||
| 
 | 
 | ||||||
| %hr.spacer/ | %hr.spacer/ | ||||||
|  | |||||||
| @ -103,75 +103,4 @@ RSpec.describe Export do | |||||||
|         ) |         ) | ||||||
|     end |     end | ||||||
|   end |   end | ||||||
| 
 |  | ||||||
|   describe '#total_storage' do |  | ||||||
|     it 'returns the total size of the media attachments' do |  | ||||||
|       media_attachment = Fabricate(:media_attachment, account: account) |  | ||||||
|       expect(subject.total_storage).to eq media_attachment.file_file_size || 0 |  | ||||||
|     end |  | ||||||
|   end |  | ||||||
| 
 |  | ||||||
|   describe '#total_statuses' do |  | ||||||
|     before { Fabricate.times(2, :status, account: account) } |  | ||||||
| 
 |  | ||||||
|     it 'returns the total number of statuses' do |  | ||||||
|       expect(subject.total_statuses).to eq(2) |  | ||||||
|     end |  | ||||||
|   end |  | ||||||
| 
 |  | ||||||
|   describe '#total_bookmarks' do |  | ||||||
|     before { Fabricate.times(2, :bookmark, account: account) } |  | ||||||
| 
 |  | ||||||
|     it 'returns the total number of bookmarks' do |  | ||||||
|       expect(subject.total_bookmarks).to eq(2) |  | ||||||
|     end |  | ||||||
|   end |  | ||||||
| 
 |  | ||||||
|   describe '#total_follows' do |  | ||||||
|     before { target_accounts.each { |target_account| account.follow!(target_account) } } |  | ||||||
| 
 |  | ||||||
|     it 'returns the total number of the followed accounts' do |  | ||||||
|       expect(subject.total_follows).to eq(2) |  | ||||||
|     end |  | ||||||
|   end |  | ||||||
| 
 |  | ||||||
|   describe '#total_lists' do |  | ||||||
|     before { Fabricate.times(2, :list, account: account) } |  | ||||||
| 
 |  | ||||||
|     it 'returns the total number of lists' do |  | ||||||
|       expect(subject.total_lists).to eq(2) |  | ||||||
|     end |  | ||||||
|   end |  | ||||||
| 
 |  | ||||||
|   describe '#total_followers' do |  | ||||||
|     before { target_accounts.each { |target_account| target_account.follow!(account) } } |  | ||||||
| 
 |  | ||||||
|     it 'returns the total number of the follower accounts' do |  | ||||||
|       expect(subject.total_followers).to eq(2) |  | ||||||
|     end |  | ||||||
|   end |  | ||||||
| 
 |  | ||||||
|   describe '#total_blocks' do |  | ||||||
|     before { target_accounts.each { |target_account| account.block!(target_account) } } |  | ||||||
| 
 |  | ||||||
|     it 'returns the total number of the blocked accounts' do |  | ||||||
|       expect(subject.total_blocks).to eq(2) |  | ||||||
|     end |  | ||||||
|   end |  | ||||||
| 
 |  | ||||||
|   describe '#total_mutes' do |  | ||||||
|     before { target_accounts.each { |target_account| account.mute!(target_account) } } |  | ||||||
| 
 |  | ||||||
|     it 'returns the total number of the muted accounts' do |  | ||||||
|       expect(subject.total_mutes).to eq(2) |  | ||||||
|     end |  | ||||||
|   end |  | ||||||
| 
 |  | ||||||
|   describe '#total_domain_blocks' do |  | ||||||
|     before { Fabricate.times(2, :account_domain_block, account: account) } |  | ||||||
| 
 |  | ||||||
|     it 'returns the total number of account domain blocks' do |  | ||||||
|       expect(subject.total_domain_blocks).to eq(2) |  | ||||||
|     end |  | ||||||
|   end |  | ||||||
| end | end | ||||||
|  | |||||||
							
								
								
									
										86
									
								
								spec/presenters/export_summary_spec.rb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										86
									
								
								spec/presenters/export_summary_spec.rb
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,86 @@ | |||||||
|  | # frozen_string_literal: true | ||||||
|  | 
 | ||||||
|  | require 'rails_helper' | ||||||
|  | 
 | ||||||
|  | RSpec.describe ExportSummary do | ||||||
|  |   subject { described_class.new(account) } | ||||||
|  | 
 | ||||||
|  |   let(:account) { Fabricate(:account) } | ||||||
|  |   let(:target_accounts) do | ||||||
|  |     [ | ||||||
|  |       Fabricate(:account), | ||||||
|  |       Fabricate(:account, username: 'one', domain: 'local.host'), | ||||||
|  |     ] | ||||||
|  |   end | ||||||
|  | 
 | ||||||
|  |   describe '#total_storage' do | ||||||
|  |     it 'returns the total size of the media attachments' do | ||||||
|  |       media_attachment = Fabricate(:media_attachment, account: account) | ||||||
|  |       expect(subject.total_storage).to eq media_attachment.file_file_size || 0 | ||||||
|  |     end | ||||||
|  |   end | ||||||
|  | 
 | ||||||
|  |   describe '#total_statuses' do | ||||||
|  |     before { Fabricate.times(2, :status, account: account) } | ||||||
|  | 
 | ||||||
|  |     it 'returns the total number of statuses' do | ||||||
|  |       expect(subject.total_statuses).to eq(2) | ||||||
|  |     end | ||||||
|  |   end | ||||||
|  | 
 | ||||||
|  |   describe '#total_bookmarks' do | ||||||
|  |     before { Fabricate.times(2, :bookmark, account: account) } | ||||||
|  | 
 | ||||||
|  |     it 'returns the total number of bookmarks' do | ||||||
|  |       expect(subject.total_bookmarks).to eq(2) | ||||||
|  |     end | ||||||
|  |   end | ||||||
|  | 
 | ||||||
|  |   describe '#total_follows' do | ||||||
|  |     before { target_accounts.each { |target_account| account.follow!(target_account) } } | ||||||
|  | 
 | ||||||
|  |     it 'returns the total number of the followed accounts' do | ||||||
|  |       expect(subject.total_follows).to eq(2) | ||||||
|  |     end | ||||||
|  |   end | ||||||
|  | 
 | ||||||
|  |   describe '#total_lists' do | ||||||
|  |     before { Fabricate.times(2, :list, account: account) } | ||||||
|  | 
 | ||||||
|  |     it 'returns the total number of lists' do | ||||||
|  |       expect(subject.total_lists).to eq(2) | ||||||
|  |     end | ||||||
|  |   end | ||||||
|  | 
 | ||||||
|  |   describe '#total_followers' do | ||||||
|  |     before { target_accounts.each { |target_account| target_account.follow!(account) } } | ||||||
|  | 
 | ||||||
|  |     it 'returns the total number of the follower accounts' do | ||||||
|  |       expect(subject.total_followers).to eq(2) | ||||||
|  |     end | ||||||
|  |   end | ||||||
|  | 
 | ||||||
|  |   describe '#total_blocks' do | ||||||
|  |     before { target_accounts.each { |target_account| account.block!(target_account) } } | ||||||
|  | 
 | ||||||
|  |     it 'returns the total number of the blocked accounts' do | ||||||
|  |       expect(subject.total_blocks).to eq(2) | ||||||
|  |     end | ||||||
|  |   end | ||||||
|  | 
 | ||||||
|  |   describe '#total_mutes' do | ||||||
|  |     before { target_accounts.each { |target_account| account.mute!(target_account) } } | ||||||
|  | 
 | ||||||
|  |     it 'returns the total number of the muted accounts' do | ||||||
|  |       expect(subject.total_mutes).to eq(2) | ||||||
|  |     end | ||||||
|  |   end | ||||||
|  | 
 | ||||||
|  |   describe '#total_domain_blocks' do | ||||||
|  |     before { Fabricate.times(2, :account_domain_block, account: account) } | ||||||
|  | 
 | ||||||
|  |     it 'returns the total number of account domain blocks' do | ||||||
|  |       expect(subject.total_domain_blocks).to eq(2) | ||||||
|  |     end | ||||||
|  |   end | ||||||
|  | end | ||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user