Use group/count approach in annual report classes (#32914)
This commit is contained in:
		@@ -21,18 +21,27 @@ RSpec.describe AnnualReport::CommonlyInteractedWithAccounts do
 | 
			
		||||
      let(:account) { Fabricate :account }
 | 
			
		||||
 | 
			
		||||
      let(:other_account) { Fabricate :account }
 | 
			
		||||
      let(:most_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
 | 
			
		||||
 | 
			
		||||
        Fabricate :status, account: account, reply: true, in_reply_to_id: Fabricate(:status, account: most_other_account).id
 | 
			
		||||
        Fabricate :status, account: account, reply: true, in_reply_to_id: Fabricate(:status, account: most_other_account).id
 | 
			
		||||
        Fabricate :status, account: account, reply: true, in_reply_to_id: Fabricate(:status, account: most_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.to_s, count: 2)
 | 
			
		||||
            commonly_interacted_with_accounts: eq(
 | 
			
		||||
              [
 | 
			
		||||
                { account_id: most_other_account.id.to_s, count: 3 },
 | 
			
		||||
                { account_id: other_account.id.to_s, count: 2 },
 | 
			
		||||
              ]
 | 
			
		||||
            )
 | 
			
		||||
          )
 | 
			
		||||
      end
 | 
			
		||||
 
 | 
			
		||||
@@ -21,18 +21,26 @@ RSpec.describe AnnualReport::MostRebloggedAccounts do
 | 
			
		||||
      let(:account) { Fabricate :account }
 | 
			
		||||
 | 
			
		||||
      let(:other_account) { Fabricate :account }
 | 
			
		||||
      let(:most_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)
 | 
			
		||||
 | 
			
		||||
        Fabricate :status, account: account, reblog: Fabricate(:status, account: most_other_account)
 | 
			
		||||
        Fabricate :status, account: account, reblog: Fabricate(:status, account: most_other_account)
 | 
			
		||||
        Fabricate :status, account: account, reblog: Fabricate(:status, account: most_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.to_s, count: 2)
 | 
			
		||||
            most_reblogged_accounts: eq(
 | 
			
		||||
              [
 | 
			
		||||
                { account_id: most_other_account.id.to_s, count: 3 },
 | 
			
		||||
                { account_id: other_account.id.to_s, count: 2 },
 | 
			
		||||
              ]
 | 
			
		||||
            )
 | 
			
		||||
          )
 | 
			
		||||
      end
 | 
			
		||||
 
 | 
			
		||||
@@ -20,18 +20,23 @@ RSpec.describe AnnualReport::MostUsedApps do
 | 
			
		||||
    context 'with an active account' do
 | 
			
		||||
      let(:account) { Fabricate :account }
 | 
			
		||||
 | 
			
		||||
      let(:application) { Fabricate :application }
 | 
			
		||||
      let(:application) { Fabricate :application, name: 'App' }
 | 
			
		||||
      let(:most_application) { Fabricate :application, name: 'Most App' }
 | 
			
		||||
 | 
			
		||||
      before do
 | 
			
		||||
        _other = Fabricate :status
 | 
			
		||||
        Fabricate.times 2, :status, account: account, application: application
 | 
			
		||||
        Fabricate.times 3, :status, account: account, application: most_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)
 | 
			
		||||
            most_used_apps: eq(
 | 
			
		||||
              [
 | 
			
		||||
                { name: most_application.name, count: 3 },
 | 
			
		||||
                { name: application.name, count: 2 },
 | 
			
		||||
              ]
 | 
			
		||||
            )
 | 
			
		||||
          )
 | 
			
		||||
      end
 | 
			
		||||
 
 | 
			
		||||
@@ -21,20 +21,31 @@ RSpec.describe AnnualReport::TopHashtags do
 | 
			
		||||
      let(:account) { Fabricate :account }
 | 
			
		||||
 | 
			
		||||
      let(:tag) { Fabricate :tag }
 | 
			
		||||
      let(:most_tag) { Fabricate :tag }
 | 
			
		||||
 | 
			
		||||
      before do
 | 
			
		||||
        _other = Fabricate :status
 | 
			
		||||
 | 
			
		||||
        first = Fabricate :status, account: account
 | 
			
		||||
        first.tags << tag
 | 
			
		||||
        first.tags << most_tag
 | 
			
		||||
 | 
			
		||||
        last = Fabricate :status, account: account
 | 
			
		||||
        last.tags << tag
 | 
			
		||||
        last.tags << most_tag
 | 
			
		||||
 | 
			
		||||
        middle = Fabricate :status, account: account
 | 
			
		||||
        middle.tags << most_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)
 | 
			
		||||
            top_hashtags: eq(
 | 
			
		||||
              [
 | 
			
		||||
                { name: most_tag.name, count: 3 },
 | 
			
		||||
                { name: tag.name, count: 2 },
 | 
			
		||||
              ]
 | 
			
		||||
            )
 | 
			
		||||
          )
 | 
			
		||||
      end
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user