Add coverage for AnnualReport::* source child classes (#31849)
				
					
				
			This commit is contained in:
		
							parent
							
								
									9769ffdcc2
								
							
						
					
					
						commit
						cdcd834f3c
					
				| @ -0,0 +1,41 @@ | ||||
| # frozen_string_literal: true | ||||
| 
 | ||||
| require 'rails_helper' | ||||
| 
 | ||||
| RSpec.describe AnnualReport::CommonlyInteractedWithAccounts do | ||||
|   describe '#generate' do | ||||
|     subject { described_class.new(account, Time.zone.now.year) } | ||||
| 
 | ||||
|     context 'with an inactive account' do | ||||
|       let(:account) { Fabricate :account } | ||||
| 
 | ||||
|       it 'builds a report for an account' do | ||||
|         expect(subject.generate) | ||||
|           .to include( | ||||
|             commonly_interacted_with_accounts: be_an(Array).and(be_empty) | ||||
|           ) | ||||
|       end | ||||
|     end | ||||
| 
 | ||||
|     context 'with an active account' do | ||||
|       let(:account) { Fabricate :account } | ||||
| 
 | ||||
|       let(:other_account) { Fabricate :account } | ||||
| 
 | ||||
|       before do | ||||
|         _other = Fabricate :status | ||||
|         Fabricate :status, account: account, reply: true, in_reply_to_id: Fabricate(:status, account: other_account).id | ||||
|         Fabricate :status, account: account, reply: true, in_reply_to_id: Fabricate(:status, account: other_account).id | ||||
|       end | ||||
| 
 | ||||
|       it 'builds a report for an account' do | ||||
|         expect(subject.generate) | ||||
|           .to include( | ||||
|             commonly_interacted_with_accounts: contain_exactly( | ||||
|               include(account_id: other_account.id, count: 2) | ||||
|             ) | ||||
|           ) | ||||
|       end | ||||
|     end | ||||
|   end | ||||
| end | ||||
							
								
								
									
										41
									
								
								spec/lib/annual_report/most_reblogged_accounts_spec.rb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								spec/lib/annual_report/most_reblogged_accounts_spec.rb
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,41 @@ | ||||
| # frozen_string_literal: true | ||||
| 
 | ||||
| require 'rails_helper' | ||||
| 
 | ||||
| RSpec.describe AnnualReport::MostRebloggedAccounts do | ||||
|   describe '#generate' do | ||||
|     subject { described_class.new(account, Time.zone.now.year) } | ||||
| 
 | ||||
|     context 'with an inactive account' do | ||||
|       let(:account) { Fabricate :account } | ||||
| 
 | ||||
|       it 'builds a report for an account' do | ||||
|         expect(subject.generate) | ||||
|           .to include( | ||||
|             most_reblogged_accounts: be_an(Array).and(be_empty) | ||||
|           ) | ||||
|       end | ||||
|     end | ||||
| 
 | ||||
|     context 'with an active account' do | ||||
|       let(:account) { Fabricate :account } | ||||
| 
 | ||||
|       let(:other_account) { Fabricate :account } | ||||
| 
 | ||||
|       before do | ||||
|         _other = Fabricate :status | ||||
|         Fabricate :status, account: account, reblog: Fabricate(:status, account: other_account) | ||||
|         Fabricate :status, account: account, reblog: Fabricate(:status, account: other_account) | ||||
|       end | ||||
| 
 | ||||
|       it 'builds a report for an account' do | ||||
|         expect(subject.generate) | ||||
|           .to include( | ||||
|             most_reblogged_accounts: contain_exactly( | ||||
|               include(account_id: other_account.id, count: 2) | ||||
|             ) | ||||
|           ) | ||||
|       end | ||||
|     end | ||||
|   end | ||||
| end | ||||
							
								
								
									
										40
									
								
								spec/lib/annual_report/most_used_apps_spec.rb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								spec/lib/annual_report/most_used_apps_spec.rb
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,40 @@ | ||||
| # frozen_string_literal: true | ||||
| 
 | ||||
| require 'rails_helper' | ||||
| 
 | ||||
| RSpec.describe AnnualReport::MostUsedApps do | ||||
|   describe '#generate' do | ||||
|     subject { described_class.new(account, Time.zone.now.year) } | ||||
| 
 | ||||
|     context 'with an inactive account' do | ||||
|       let(:account) { Fabricate :account } | ||||
| 
 | ||||
|       it 'builds a report for an account' do | ||||
|         expect(subject.generate) | ||||
|           .to include( | ||||
|             most_used_apps: be_an(Array).and(be_empty) | ||||
|           ) | ||||
|       end | ||||
|     end | ||||
| 
 | ||||
|     context 'with an active account' do | ||||
|       let(:account) { Fabricate :account } | ||||
| 
 | ||||
|       let(:application) { Fabricate :application } | ||||
| 
 | ||||
|       before do | ||||
|         _other = Fabricate :status | ||||
|         Fabricate.times 2, :status, account: account, application: application | ||||
|       end | ||||
| 
 | ||||
|       it 'builds a report for an account' do | ||||
|         expect(subject.generate) | ||||
|           .to include( | ||||
|             most_used_apps: contain_exactly( | ||||
|               include(name: application.name, count: 2) | ||||
|             ) | ||||
|           ) | ||||
|       end | ||||
|     end | ||||
|   end | ||||
| end | ||||
							
								
								
									
										44
									
								
								spec/lib/annual_report/percentiles_spec.rb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										44
									
								
								spec/lib/annual_report/percentiles_spec.rb
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,44 @@ | ||||
| # frozen_string_literal: true | ||||
| 
 | ||||
| require 'rails_helper' | ||||
| 
 | ||||
| RSpec.describe AnnualReport::Percentiles do | ||||
|   describe '#generate' do | ||||
|     subject { described_class.new(account, Time.zone.now.year) } | ||||
| 
 | ||||
|     context 'with an inactive account' do | ||||
|       let(:account) { Fabricate :account } | ||||
| 
 | ||||
|       it 'builds a report for an account' do | ||||
|         expect(subject.generate) | ||||
|           .to include( | ||||
|             percentiles: include( | ||||
|               followers: 0, | ||||
|               statuses: 0 | ||||
|             ) | ||||
|           ) | ||||
|       end | ||||
|     end | ||||
| 
 | ||||
|     context 'with an active account' do | ||||
|       let(:account) { Fabricate :account } | ||||
| 
 | ||||
|       before do | ||||
|         Fabricate.times 2, :status # Others as `account` | ||||
|         Fabricate.times 2, :follow # Others as `target_account` | ||||
|         Fabricate.times 2, :status, account: account | ||||
|         Fabricate.times 2, :follow, target_account: account | ||||
|       end | ||||
| 
 | ||||
|       it 'builds a report for an account' do | ||||
|         expect(subject.generate) | ||||
|           .to include( | ||||
|             percentiles: include( | ||||
|               followers: 50, | ||||
|               statuses: 50 | ||||
|             ) | ||||
|           ) | ||||
|       end | ||||
|     end | ||||
|   end | ||||
| end | ||||
							
								
								
									
										46
									
								
								spec/lib/annual_report/time_series_spec.rb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										46
									
								
								spec/lib/annual_report/time_series_spec.rb
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,46 @@ | ||||
| # frozen_string_literal: true | ||||
| 
 | ||||
| require 'rails_helper' | ||||
| 
 | ||||
| RSpec.describe AnnualReport::TimeSeries do | ||||
|   describe '#generate' do | ||||
|     subject { described_class.new(account, Time.zone.now.year) } | ||||
| 
 | ||||
|     context 'with an inactive account' do | ||||
|       let(:account) { Fabricate :account } | ||||
| 
 | ||||
|       it 'builds a report for an account' do | ||||
|         expect(subject.generate) | ||||
|           .to include( | ||||
|             time_series: match( | ||||
|               include(followers: 0, following: 0, month: 1, statuses: 0) | ||||
|             ) | ||||
|           ) | ||||
|       end | ||||
|     end | ||||
| 
 | ||||
|     context 'with an active account' do | ||||
|       let(:account) { Fabricate :account } | ||||
| 
 | ||||
|       let(:month_one_date) { DateTime.new(Time.zone.now.year, 1, 1, 12, 12, 12) } | ||||
| 
 | ||||
|       let(:tag) { Fabricate :tag } | ||||
| 
 | ||||
|       before do | ||||
|         _other = Fabricate :status | ||||
|         Fabricate :status, account: account, created_at: month_one_date | ||||
|         Fabricate :follow, account: account, created_at: month_one_date | ||||
|         Fabricate :follow, target_account: account, created_at: month_one_date | ||||
|       end | ||||
| 
 | ||||
|       it 'builds a report for an account' do | ||||
|         expect(subject.generate) | ||||
|           .to include( | ||||
|             time_series: match( | ||||
|               include(followers: 1, following: 1, month: 1, statuses: 1) | ||||
|             ) | ||||
|           ) | ||||
|       end | ||||
|     end | ||||
|   end | ||||
| end | ||||
							
								
								
									
										43
									
								
								spec/lib/annual_report/top_hashtags_spec.rb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										43
									
								
								spec/lib/annual_report/top_hashtags_spec.rb
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,43 @@ | ||||
| # frozen_string_literal: true | ||||
| 
 | ||||
| require 'rails_helper' | ||||
| 
 | ||||
| RSpec.describe AnnualReport::TopHashtags do | ||||
|   describe '#generate' do | ||||
|     subject { described_class.new(account, Time.zone.now.year) } | ||||
| 
 | ||||
|     context 'with an inactive account' do | ||||
|       let(:account) { Fabricate :account } | ||||
| 
 | ||||
|       it 'builds a report for an account' do | ||||
|         expect(subject.generate) | ||||
|           .to include( | ||||
|             top_hashtags: be_an(Array).and(be_empty) | ||||
|           ) | ||||
|       end | ||||
|     end | ||||
| 
 | ||||
|     context 'with an active account' do | ||||
|       let(:account) { Fabricate :account } | ||||
| 
 | ||||
|       let(:tag) { Fabricate :tag } | ||||
| 
 | ||||
|       before do | ||||
|         _other = Fabricate :status | ||||
|         first = Fabricate :status, account: account | ||||
|         first.tags << tag | ||||
|         last = Fabricate :status, account: account | ||||
|         last.tags << tag | ||||
|       end | ||||
| 
 | ||||
|       it 'builds a report for an account' do | ||||
|         expect(subject.generate) | ||||
|           .to include( | ||||
|             top_hashtags: contain_exactly( | ||||
|               include(name: tag.name, count: 2) | ||||
|             ) | ||||
|           ) | ||||
|       end | ||||
|     end | ||||
|   end | ||||
| end | ||||
							
								
								
									
										50
									
								
								spec/lib/annual_report/top_statuses_spec.rb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										50
									
								
								spec/lib/annual_report/top_statuses_spec.rb
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,50 @@ | ||||
| # frozen_string_literal: true | ||||
| 
 | ||||
| require 'rails_helper' | ||||
| 
 | ||||
| RSpec.describe AnnualReport::TopStatuses do | ||||
|   describe '#generate' do | ||||
|     subject { described_class.new(account, Time.zone.now.year) } | ||||
| 
 | ||||
|     context 'with an inactive account' do | ||||
|       let(:account) { Fabricate :account } | ||||
| 
 | ||||
|       it 'builds a report for an account' do | ||||
|         expect(subject.generate) | ||||
|           .to include( | ||||
|             top_statuses: include( | ||||
|               by_reblogs: be_nil, | ||||
|               by_favourites: be_nil, | ||||
|               by_replies: be_nil | ||||
|             ) | ||||
|           ) | ||||
|       end | ||||
|     end | ||||
| 
 | ||||
|     context 'with an active account' do | ||||
|       let(:account) { Fabricate :account } | ||||
| 
 | ||||
|       let(:reblogged_status) { Fabricate :status, account: account } | ||||
|       let(:favourited_status) { Fabricate :status, account: account } | ||||
|       let(:replied_status) { Fabricate :status, account: account } | ||||
| 
 | ||||
|       before do | ||||
|         _other = Fabricate :status | ||||
|         reblogged_status.status_stat.update(reblogs_count: 123) | ||||
|         favourited_status.status_stat.update(favourites_count: 123) | ||||
|         replied_status.status_stat.update(replies_count: 123) | ||||
|       end | ||||
| 
 | ||||
|       it 'builds a report for an account' do | ||||
|         expect(subject.generate) | ||||
|           .to include( | ||||
|             top_statuses: include( | ||||
|               by_reblogs: reblogged_status.id, | ||||
|               by_favourites: favourited_status.id, | ||||
|               by_replies: replied_status.id | ||||
|             ) | ||||
|           ) | ||||
|       end | ||||
|     end | ||||
|   end | ||||
| end | ||||
							
								
								
									
										48
									
								
								spec/lib/annual_report/type_distribution_spec.rb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										48
									
								
								spec/lib/annual_report/type_distribution_spec.rb
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,48 @@ | ||||
| # frozen_string_literal: true | ||||
| 
 | ||||
| require 'rails_helper' | ||||
| 
 | ||||
| RSpec.describe AnnualReport::TypeDistribution do | ||||
|   describe '#generate' do | ||||
|     subject { described_class.new(account, Time.zone.now.year) } | ||||
| 
 | ||||
|     context 'with an inactive account' do | ||||
|       let(:account) { Fabricate :account } | ||||
| 
 | ||||
|       it 'builds a report for an account' do | ||||
|         expect(subject.generate) | ||||
|           .to include( | ||||
|             type_distribution: include( | ||||
|               total: 0, | ||||
|               reblogs: 0, | ||||
|               replies: 0, | ||||
|               standalone: 0 | ||||
|             ) | ||||
|           ) | ||||
|       end | ||||
|     end | ||||
| 
 | ||||
|     context 'with an active account' do | ||||
|       let(:account) { Fabricate :account } | ||||
| 
 | ||||
|       before do | ||||
|         _other = Fabricate :status | ||||
|         Fabricate :status, reblog: Fabricate(:status), account: account | ||||
|         Fabricate :status, in_reply_to_id: Fabricate(:status).id, account: account, reply: true | ||||
|         Fabricate :status, account: account | ||||
|       end | ||||
| 
 | ||||
|       it 'builds a report for an account' do | ||||
|         expect(subject.generate) | ||||
|           .to include( | ||||
|             type_distribution: include( | ||||
|               total: 3, | ||||
|               reblogs: 1, | ||||
|               replies: 1, | ||||
|               standalone: 1 | ||||
|             ) | ||||
|           ) | ||||
|       end | ||||
|     end | ||||
|   end | ||||
| end | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user