Merge remote-tracking branch 'parent/main' into upstream-20240417
This commit is contained in:
commit
51cf7b3eb4
76 changed files with 835 additions and 307 deletions
|
@ -3,16 +3,32 @@
|
|||
require 'rails_helper'
|
||||
|
||||
describe Admin::Metrics::Dimension::InstanceAccountsDimension do
|
||||
subject(:dimension) { described_class.new(start_at, end_at, limit, params) }
|
||||
subject { described_class.new(start_at, end_at, limit, params) }
|
||||
|
||||
let(:start_at) { 2.days.ago }
|
||||
let(:end_at) { Time.now.utc }
|
||||
let(:limit) { 10 }
|
||||
let(:params) { ActionController::Parameters.new }
|
||||
let(:params) { ActionController::Parameters.new(domain: domain) }
|
||||
|
||||
describe '#data' do
|
||||
it 'runs data query without error' do
|
||||
expect { dimension.data }.to_not raise_error
|
||||
let(:domain) { 'host.example' }
|
||||
let(:alice) { Fabricate(:account, domain: domain) }
|
||||
let(:bob) { Fabricate(:account) }
|
||||
|
||||
before do
|
||||
Fabricate :follow, target_account: alice
|
||||
Fabricate :follow, target_account: bob
|
||||
Fabricate :status, account: alice
|
||||
Fabricate :status, account: bob
|
||||
end
|
||||
|
||||
it 'returns instances with follow counts' do
|
||||
expect(subject.data.size)
|
||||
.to eq(1)
|
||||
expect(subject.data.map(&:symbolize_keys))
|
||||
.to contain_exactly(
|
||||
include(key: alice.username, value: '1')
|
||||
)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -3,16 +3,30 @@
|
|||
require 'rails_helper'
|
||||
|
||||
describe Admin::Metrics::Dimension::InstanceLanguagesDimension do
|
||||
subject(:dimension) { described_class.new(start_at, end_at, limit, params) }
|
||||
subject { described_class.new(start_at, end_at, limit, params) }
|
||||
|
||||
let(:start_at) { 2.days.ago }
|
||||
let(:end_at) { Time.now.utc }
|
||||
let(:limit) { 10 }
|
||||
let(:params) { ActionController::Parameters.new }
|
||||
let(:params) { ActionController::Parameters.new(domain: domain) }
|
||||
|
||||
describe '#data' do
|
||||
it 'runs data query without error' do
|
||||
expect { dimension.data }.to_not raise_error
|
||||
let(:domain) { 'host.example' }
|
||||
let(:alice) { Fabricate(:account, domain: domain) }
|
||||
let(:bob) { Fabricate(:account) }
|
||||
|
||||
before do
|
||||
Fabricate :status, account: alice, language: 'en'
|
||||
Fabricate :status, account: bob, language: 'es'
|
||||
end
|
||||
|
||||
it 'returns locales with status counts' do
|
||||
expect(subject.data.size)
|
||||
.to eq(1)
|
||||
expect(subject.data.map(&:symbolize_keys))
|
||||
.to contain_exactly(
|
||||
include(key: 'en', value: '1')
|
||||
)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
require 'rails_helper'
|
||||
|
||||
describe Admin::Metrics::Dimension::ServersDimension do
|
||||
subject(:dimension) { described_class.new(start_at, end_at, limit, params) }
|
||||
subject { described_class.new(start_at, end_at, limit, params) }
|
||||
|
||||
let(:start_at) { 2.days.ago }
|
||||
let(:end_at) { Time.now.utc }
|
||||
|
@ -11,8 +11,24 @@ describe Admin::Metrics::Dimension::ServersDimension do
|
|||
let(:params) { ActionController::Parameters.new }
|
||||
|
||||
describe '#data' do
|
||||
it 'runs data query without error' do
|
||||
expect { dimension.data }.to_not raise_error
|
||||
let(:domain) { 'host.example' }
|
||||
let(:alice) { Fabricate(:account, domain: domain) }
|
||||
let(:bob) { Fabricate(:account) }
|
||||
|
||||
before do
|
||||
Fabricate :status, account: alice, created_at: 1.day.ago
|
||||
Fabricate :status, account: alice, created_at: 30.days.ago
|
||||
Fabricate :status, account: bob, created_at: 1.day.ago
|
||||
end
|
||||
|
||||
it 'returns domains with status counts' do
|
||||
expect(subject.data.size)
|
||||
.to eq(2)
|
||||
expect(subject.data.map(&:symbolize_keys))
|
||||
.to contain_exactly(
|
||||
include(key: domain, value: '1'),
|
||||
include(key: Rails.configuration.x.local_domain, value: '1')
|
||||
)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
require 'rails_helper'
|
||||
|
||||
describe Admin::Metrics::Dimension::SoftwareVersionsDimension do
|
||||
subject(:dimension) { described_class.new(start_at, end_at, limit, params) }
|
||||
subject { described_class.new(start_at, end_at, limit, params) }
|
||||
|
||||
let(:start_at) { 2.days.ago }
|
||||
let(:end_at) { Time.now.utc }
|
||||
|
@ -11,8 +11,12 @@ describe Admin::Metrics::Dimension::SoftwareVersionsDimension do
|
|||
let(:params) { ActionController::Parameters.new }
|
||||
|
||||
describe '#data' do
|
||||
it 'runs data query without error' do
|
||||
expect { dimension.data }.to_not raise_error
|
||||
it 'reports on the running software' do
|
||||
expect(subject.data.map(&:symbolize_keys))
|
||||
.to include(
|
||||
include(key: 'mastodon', value: Mastodon::Version.to_s),
|
||||
include(key: 'ruby', value: include(RUBY_VERSION))
|
||||
)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
require 'rails_helper'
|
||||
|
||||
describe Admin::Metrics::Dimension::SourcesDimension do
|
||||
subject(:dimension) { described_class.new(start_at, end_at, limit, params) }
|
||||
subject { described_class.new(start_at, end_at, limit, params) }
|
||||
|
||||
let(:start_at) { 2.days.ago }
|
||||
let(:end_at) { Time.now.utc }
|
||||
|
@ -11,8 +11,21 @@ describe Admin::Metrics::Dimension::SourcesDimension do
|
|||
let(:params) { ActionController::Parameters.new }
|
||||
|
||||
describe '#data' do
|
||||
it 'runs data query without error' do
|
||||
expect { dimension.data }.to_not raise_error
|
||||
let(:app) { Fabricate(:application) }
|
||||
let(:alice) { Fabricate(:user) }
|
||||
let(:bob) { Fabricate(:user) }
|
||||
|
||||
before do
|
||||
alice.update(created_by_application: app)
|
||||
end
|
||||
|
||||
it 'returns OAuth applications with user counts' do
|
||||
expect(subject.data.size)
|
||||
.to eq(1)
|
||||
expect(subject.data.map(&:symbolize_keys))
|
||||
.to contain_exactly(
|
||||
include(key: app.name, value: '1')
|
||||
)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
require 'rails_helper'
|
||||
|
||||
describe Admin::Metrics::Dimension::SpaceUsageDimension do
|
||||
subject(:dimension) { described_class.new(start_at, end_at, limit, params) }
|
||||
subject { described_class.new(start_at, end_at, limit, params) }
|
||||
|
||||
let(:start_at) { 2.days.ago }
|
||||
let(:end_at) { Time.now.utc }
|
||||
|
@ -11,8 +11,13 @@ describe Admin::Metrics::Dimension::SpaceUsageDimension do
|
|||
let(:params) { ActionController::Parameters.new }
|
||||
|
||||
describe '#data' do
|
||||
it 'runs data query without error' do
|
||||
expect { dimension.data }.to_not raise_error
|
||||
it 'reports on used storage space' do
|
||||
expect(subject.data.map(&:symbolize_keys))
|
||||
.to include(
|
||||
include(key: 'media', value: /\d/),
|
||||
include(key: 'postgresql', value: /\d/),
|
||||
include(key: 'redis', value: /\d/)
|
||||
)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -3,16 +3,36 @@
|
|||
require 'rails_helper'
|
||||
|
||||
describe Admin::Metrics::Dimension::TagLanguagesDimension do
|
||||
subject(:dimension) { described_class.new(start_at, end_at, limit, params) }
|
||||
subject { described_class.new(start_at, end_at, limit, params) }
|
||||
|
||||
let(:start_at) { 2.days.ago }
|
||||
let(:end_at) { Time.now.utc }
|
||||
let(:limit) { 10 }
|
||||
let(:params) { ActionController::Parameters.new }
|
||||
let(:params) { ActionController::Parameters.new(id: tag.id) }
|
||||
|
||||
describe '#data' do
|
||||
it 'runs data query without error' do
|
||||
expect { dimension.data }.to_not raise_error
|
||||
let(:alice) { Fabricate(:account) }
|
||||
let(:bob) { Fabricate(:account) }
|
||||
let(:tag) { Fabricate(:tag) }
|
||||
|
||||
before do
|
||||
alice_status_recent = Fabricate :status, account: alice, created_at: 1.day.ago, language: 'en'
|
||||
alice_status_older = Fabricate :status, account: alice, created_at: 30.days.ago, language: 'en'
|
||||
bob_status_recent = Fabricate :status, account: bob, created_at: 1.day.ago, language: 'es'
|
||||
|
||||
alice_status_older.tags << tag
|
||||
alice_status_recent.tags << tag
|
||||
bob_status_recent.tags << tag
|
||||
end
|
||||
|
||||
it 'returns languages with tag usage counts' do
|
||||
expect(subject.data.size)
|
||||
.to eq(2)
|
||||
expect(subject.data.map(&:symbolize_keys))
|
||||
.to contain_exactly(
|
||||
include(key: 'en', value: '1'),
|
||||
include(key: 'es', value: '1')
|
||||
)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -3,16 +3,37 @@
|
|||
require 'rails_helper'
|
||||
|
||||
describe Admin::Metrics::Dimension::TagServersDimension do
|
||||
subject(:dimension) { described_class.new(start_at, end_at, limit, params) }
|
||||
subject { described_class.new(start_at, end_at, limit, params) }
|
||||
|
||||
let(:start_at) { 2.days.ago }
|
||||
let(:end_at) { Time.now.utc }
|
||||
let(:limit) { 10 }
|
||||
let(:params) { ActionController::Parameters.new }
|
||||
let(:params) { ActionController::Parameters.new(id: tag.id) }
|
||||
|
||||
describe '#data' do
|
||||
it 'runs data query without error' do
|
||||
expect { dimension.data }.to_not raise_error
|
||||
let(:alice) { Fabricate(:account, domain: domain) }
|
||||
let(:bob) { Fabricate(:account) }
|
||||
let(:domain) { 'host.example' }
|
||||
let(:tag) { Fabricate(:tag) }
|
||||
|
||||
before do
|
||||
alice_status_recent = Fabricate :status, account: alice, created_at: 1.day.ago
|
||||
alice_status_older = Fabricate :status, account: alice, created_at: 30.days.ago
|
||||
bob_status_recent = Fabricate :status, account: bob, created_at: 1.day.ago
|
||||
|
||||
alice_status_older.tags << tag
|
||||
alice_status_recent.tags << tag
|
||||
bob_status_recent.tags << tag
|
||||
end
|
||||
|
||||
it 'returns servers with tag usage counts' do
|
||||
expect(subject.data.size)
|
||||
.to eq(2)
|
||||
expect(subject.data.map(&:symbolize_keys))
|
||||
.to contain_exactly(
|
||||
include(key: domain, value: '1'),
|
||||
include(key: Rails.configuration.x.local_domain, value: '1')
|
||||
)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -3,15 +3,38 @@
|
|||
require 'rails_helper'
|
||||
|
||||
describe Admin::Metrics::Measure::ActiveUsersMeasure do
|
||||
subject(:measure) { described_class.new(start_at, end_at, params) }
|
||||
subject { described_class.new(start_at, end_at, params) }
|
||||
|
||||
let(:start_at) { 2.days.ago }
|
||||
let(:end_at) { Time.now.utc }
|
||||
let(:params) { ActionController::Parameters.new }
|
||||
|
||||
describe '#data' do
|
||||
it 'runs data query without error' do
|
||||
expect { measure.data }.to_not raise_error
|
||||
context 'with activity tracking records' do
|
||||
before do
|
||||
3.times do
|
||||
travel_to(2.days.ago) { record_login_activity }
|
||||
end
|
||||
2.times do
|
||||
travel_to(1.day.ago) { record_login_activity }
|
||||
end
|
||||
travel_to(0.days.ago) { record_login_activity }
|
||||
end
|
||||
|
||||
it 'returns correct activity tracker counts' do
|
||||
expect(subject.data.size)
|
||||
.to eq(3)
|
||||
expect(subject.data.map(&:symbolize_keys))
|
||||
.to contain_exactly(
|
||||
include(date: 2.days.ago.midnight.to_time, value: '3'),
|
||||
include(date: 1.day.ago.midnight.to_time, value: '2'),
|
||||
include(date: 0.days.ago.midnight.to_time, value: '1')
|
||||
)
|
||||
end
|
||||
|
||||
def record_login_activity
|
||||
ActivityTracker.record('activity:logins', Fabricate(:user).id)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
require 'rails_helper'
|
||||
|
||||
describe Admin::Metrics::Measure::InstanceAccountsMeasure do
|
||||
subject(:measure) { described_class.new(start_at, end_at, params) }
|
||||
subject { described_class.new(start_at, end_at, params) }
|
||||
|
||||
let(:domain) { 'example.com' }
|
||||
|
||||
|
@ -20,12 +20,13 @@ describe Admin::Metrics::Measure::InstanceAccountsMeasure do
|
|||
Fabricate(:account, domain: "foo.#{domain}", created_at: 1.year.ago)
|
||||
Fabricate(:account, domain: "foo.#{domain}")
|
||||
Fabricate(:account, domain: "bar.#{domain}")
|
||||
Fabricate(:account, domain: 'other-host.example')
|
||||
end
|
||||
|
||||
describe 'total' do
|
||||
describe '#total' do
|
||||
context 'without include_subdomains' do
|
||||
it 'returns the expected number of accounts' do
|
||||
expect(measure.total).to eq 3
|
||||
expect(subject.total).to eq 3
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -33,14 +34,21 @@ describe Admin::Metrics::Measure::InstanceAccountsMeasure do
|
|||
let(:params) { ActionController::Parameters.new(domain: domain, include_subdomains: 'true') }
|
||||
|
||||
it 'returns the expected number of accounts' do
|
||||
expect(measure.total).to eq 6
|
||||
expect(subject.total).to eq 6
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe '#data' do
|
||||
it 'runs data query without error' do
|
||||
expect { measure.data }.to_not raise_error
|
||||
it 'returns correct instance_accounts counts' do
|
||||
expect(subject.data.size)
|
||||
.to eq(3)
|
||||
expect(subject.data.map(&:symbolize_keys))
|
||||
.to contain_exactly(
|
||||
include(date: 2.days.ago.midnight.to_time, value: '0'),
|
||||
include(date: 1.day.ago.midnight.to_time, value: '0'),
|
||||
include(date: 0.days.ago.midnight.to_time, value: '1')
|
||||
)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
require 'rails_helper'
|
||||
|
||||
describe Admin::Metrics::Measure::InstanceFollowersMeasure do
|
||||
subject(:measure) { described_class.new(start_at, end_at, params) }
|
||||
subject { described_class.new(start_at, end_at, params) }
|
||||
|
||||
let(:domain) { 'example.com' }
|
||||
|
||||
|
@ -22,12 +22,14 @@ describe Admin::Metrics::Measure::InstanceFollowersMeasure do
|
|||
Fabricate(:account, domain: "foo.#{domain}").follow!(local_account)
|
||||
Fabricate(:account, domain: "foo.#{domain}").follow!(local_account)
|
||||
Fabricate(:account, domain: "bar.#{domain}")
|
||||
|
||||
Fabricate(:account, domain: 'other.example').follow!(local_account)
|
||||
end
|
||||
|
||||
describe 'total' do
|
||||
describe '#total' do
|
||||
context 'without include_subdomains' do
|
||||
it 'returns the expected number of accounts' do
|
||||
expect(measure.total).to eq 2
|
||||
expect(subject.total).to eq 2
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -35,14 +37,21 @@ describe Admin::Metrics::Measure::InstanceFollowersMeasure do
|
|||
let(:params) { ActionController::Parameters.new(domain: domain, include_subdomains: 'true') }
|
||||
|
||||
it 'returns the expected number of accounts' do
|
||||
expect(measure.total).to eq 4
|
||||
expect(subject.total).to eq 4
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe '#data' do
|
||||
it 'runs data query without error' do
|
||||
expect { measure.data }.to_not raise_error
|
||||
it 'returns correct instance_followers counts' do
|
||||
expect(subject.data.size)
|
||||
.to eq(3)
|
||||
expect(subject.data.map(&:symbolize_keys))
|
||||
.to contain_exactly(
|
||||
include(date: 2.days.ago.midnight.to_time, value: '0'),
|
||||
include(date: 1.day.ago.midnight.to_time, value: '0'),
|
||||
include(date: 0.days.ago.midnight.to_time, value: '2')
|
||||
)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
require 'rails_helper'
|
||||
|
||||
describe Admin::Metrics::Measure::InstanceFollowsMeasure do
|
||||
subject(:measure) { described_class.new(start_at, end_at, params) }
|
||||
subject { described_class.new(start_at, end_at, params) }
|
||||
|
||||
let(:domain) { 'example.com' }
|
||||
|
||||
|
@ -24,10 +24,10 @@ describe Admin::Metrics::Measure::InstanceFollowsMeasure do
|
|||
Fabricate(:account, domain: "bar.#{domain}")
|
||||
end
|
||||
|
||||
describe 'total' do
|
||||
describe '#total' do
|
||||
context 'without include_subdomains' do
|
||||
it 'returns the expected number of accounts' do
|
||||
expect(measure.total).to eq 2
|
||||
expect(subject.total).to eq 2
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -35,14 +35,21 @@ describe Admin::Metrics::Measure::InstanceFollowsMeasure do
|
|||
let(:params) { ActionController::Parameters.new(domain: domain, include_subdomains: 'true') }
|
||||
|
||||
it 'returns the expected number of accounts' do
|
||||
expect(measure.total).to eq 4
|
||||
expect(subject.total).to eq 4
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe '#data' do
|
||||
it 'runs data query without error' do
|
||||
expect { measure.data }.to_not raise_error
|
||||
it 'returns correct instance_followers counts' do
|
||||
expect(subject.data.size)
|
||||
.to eq(3)
|
||||
expect(subject.data.map(&:symbolize_keys))
|
||||
.to contain_exactly(
|
||||
include(date: 2.days.ago.midnight.to_time, value: '0'),
|
||||
include(date: 1.day.ago.midnight.to_time, value: '0'),
|
||||
include(date: 0.days.ago.midnight.to_time, value: '2')
|
||||
)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
require 'rails_helper'
|
||||
|
||||
describe Admin::Metrics::Measure::InstanceMediaAttachmentsMeasure do
|
||||
subject(:measure) { described_class.new(start_at, end_at, params) }
|
||||
subject { described_class.new(start_at, end_at, params) }
|
||||
|
||||
let(:domain) { 'example.com' }
|
||||
|
||||
|
@ -20,11 +20,11 @@ describe Admin::Metrics::Measure::InstanceMediaAttachmentsMeasure do
|
|||
remote_account_on_subdomain.media_attachments.create!(file: attachment_fixture('attachment.jpg'))
|
||||
end
|
||||
|
||||
describe 'total' do
|
||||
describe '#total' do
|
||||
context 'without include_subdomains' do
|
||||
it 'returns the expected number of accounts' do
|
||||
expected_total = remote_account.media_attachments.sum(:file_file_size) + remote_account.media_attachments.sum(:thumbnail_file_size)
|
||||
expect(measure.total).to eq expected_total
|
||||
expect(subject.total).to eq expected_total
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -36,14 +36,25 @@ describe Admin::Metrics::Measure::InstanceMediaAttachmentsMeasure do
|
|||
account.media_attachments.sum(:file_file_size) + account.media_attachments.sum(:thumbnail_file_size)
|
||||
end
|
||||
|
||||
expect(measure.total).to eq expected_total
|
||||
expect(subject.total).to eq expected_total
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe '#data' do
|
||||
it 'runs data query without error' do
|
||||
expect { measure.data }.to_not raise_error
|
||||
it 'returns correct media_attachments counts' do
|
||||
expect(subject.data.size)
|
||||
.to eq(3)
|
||||
expect(subject.data.map(&:symbolize_keys))
|
||||
.to contain_exactly(
|
||||
include(date: 2.days.ago.midnight.to_time, value: '0'),
|
||||
include(date: 1.day.ago.midnight.to_time, value: '0'),
|
||||
include(date: 0.days.ago.midnight.to_time, value: expected_domain_only_total.to_s)
|
||||
)
|
||||
end
|
||||
|
||||
def expected_domain_only_total
|
||||
remote_account.media_attachments.sum(:file_file_size) + remote_account.media_attachments.sum(:thumbnail_file_size)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
require 'rails_helper'
|
||||
|
||||
describe Admin::Metrics::Measure::InstanceReportsMeasure do
|
||||
subject(:measure) { described_class.new(start_at, end_at, params) }
|
||||
subject { described_class.new(start_at, end_at, params) }
|
||||
|
||||
let(:domain) { 'example.com' }
|
||||
|
||||
|
@ -21,10 +21,10 @@ describe Admin::Metrics::Measure::InstanceReportsMeasure do
|
|||
Fabricate(:report, target_account: Fabricate(:account, domain: "bar.#{domain}"))
|
||||
end
|
||||
|
||||
describe 'total' do
|
||||
describe '#total' do
|
||||
context 'without include_subdomains' do
|
||||
it 'returns the expected number of accounts' do
|
||||
expect(measure.total).to eq 2
|
||||
expect(subject.total).to eq 2
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -32,14 +32,21 @@ describe Admin::Metrics::Measure::InstanceReportsMeasure do
|
|||
let(:params) { ActionController::Parameters.new(domain: domain, include_subdomains: 'true') }
|
||||
|
||||
it 'returns the expected number of accounts' do
|
||||
expect(measure.total).to eq 5
|
||||
expect(subject.total).to eq 5
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe '#data' do
|
||||
it 'runs data query without error' do
|
||||
expect { measure.data }.to_not raise_error
|
||||
it 'returns correct instance_reports counts' do
|
||||
expect(subject.data.size)
|
||||
.to eq(3)
|
||||
expect(subject.data.map(&:symbolize_keys))
|
||||
.to contain_exactly(
|
||||
include(date: 2.days.ago.midnight.to_time, value: '0'),
|
||||
include(date: 1.day.ago.midnight.to_time, value: '0'),
|
||||
include(date: 0.days.ago.midnight.to_time, value: '2')
|
||||
)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
require 'rails_helper'
|
||||
|
||||
describe Admin::Metrics::Measure::InstanceStatusesMeasure do
|
||||
subject(:measure) { described_class.new(start_at, end_at, params) }
|
||||
subject { described_class.new(start_at, end_at, params) }
|
||||
|
||||
let(:domain) { 'example.com' }
|
||||
|
||||
|
@ -21,10 +21,10 @@ describe Admin::Metrics::Measure::InstanceStatusesMeasure do
|
|||
Fabricate(:status, account: Fabricate(:account, domain: "bar.#{domain}"))
|
||||
end
|
||||
|
||||
describe 'total' do
|
||||
describe '#total' do
|
||||
context 'without include_subdomains' do
|
||||
it 'returns the expected number of accounts' do
|
||||
expect(measure.total).to eq 2
|
||||
expect(subject.total).to eq 2
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -32,14 +32,21 @@ describe Admin::Metrics::Measure::InstanceStatusesMeasure do
|
|||
let(:params) { ActionController::Parameters.new(domain: domain, include_subdomains: 'true') }
|
||||
|
||||
it 'returns the expected number of accounts' do
|
||||
expect(measure.total).to eq 5
|
||||
expect(subject.total).to eq 5
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe '#data' do
|
||||
it 'runs data query without error' do
|
||||
expect { measure.data }.to_not raise_error
|
||||
it 'returns correct instance_statuses counts' do
|
||||
expect(subject.data.size)
|
||||
.to eq(3)
|
||||
expect(subject.data.map(&:symbolize_keys))
|
||||
.to contain_exactly(
|
||||
include(date: 2.days.ago.midnight.to_time, value: '0'),
|
||||
include(date: 1.day.ago.midnight.to_time, value: '0'),
|
||||
include(date: 0.days.ago.midnight.to_time, value: '2')
|
||||
)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -3,15 +3,38 @@
|
|||
require 'rails_helper'
|
||||
|
||||
describe Admin::Metrics::Measure::InteractionsMeasure do
|
||||
subject(:measure) { described_class.new(start_at, end_at, params) }
|
||||
subject { described_class.new(start_at, end_at, params) }
|
||||
|
||||
let(:start_at) { 2.days.ago }
|
||||
let(:end_at) { Time.now.utc }
|
||||
let(:params) { ActionController::Parameters.new }
|
||||
|
||||
describe '#data' do
|
||||
it 'runs data query without error' do
|
||||
expect { measure.data }.to_not raise_error
|
||||
context 'with activity tracking records' do
|
||||
before do
|
||||
3.times do
|
||||
travel_to(2.days.ago) { record_interaction_activity }
|
||||
end
|
||||
2.times do
|
||||
travel_to(1.day.ago) { record_interaction_activity }
|
||||
end
|
||||
travel_to(0.days.ago) { record_interaction_activity }
|
||||
end
|
||||
|
||||
it 'returns correct activity tracker counts' do
|
||||
expect(subject.data.size)
|
||||
.to eq(3)
|
||||
expect(subject.data.map(&:symbolize_keys))
|
||||
.to contain_exactly(
|
||||
include(date: 2.days.ago.midnight.to_time, value: '3'),
|
||||
include(date: 1.day.ago.midnight.to_time, value: '2'),
|
||||
include(date: 0.days.ago.midnight.to_time, value: '1')
|
||||
)
|
||||
end
|
||||
|
||||
def record_interaction_activity
|
||||
ActivityTracker.increment('activity:interactions')
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -3,15 +3,30 @@
|
|||
require 'rails_helper'
|
||||
|
||||
describe Admin::Metrics::Measure::NewUsersMeasure do
|
||||
subject(:measure) { described_class.new(start_at, end_at, params) }
|
||||
subject { described_class.new(start_at, end_at, params) }
|
||||
|
||||
let(:start_at) { 2.days.ago }
|
||||
let(:end_at) { Time.now.utc }
|
||||
let(:params) { ActionController::Parameters.new }
|
||||
|
||||
describe '#data' do
|
||||
it 'runs data query without error' do
|
||||
expect { measure.data }.to_not raise_error
|
||||
context 'with user records' do
|
||||
before do
|
||||
3.times { Fabricate :user, created_at: 2.days.ago }
|
||||
2.times { Fabricate :user, created_at: 1.day.ago }
|
||||
Fabricate :user, created_at: 0.days.ago
|
||||
end
|
||||
|
||||
it 'returns correct user counts' do
|
||||
expect(subject.data.size)
|
||||
.to eq(3)
|
||||
expect(subject.data.map(&:symbolize_keys))
|
||||
.to contain_exactly(
|
||||
include(date: 2.days.ago.midnight.to_time, value: '3'),
|
||||
include(date: 1.day.ago.midnight.to_time, value: '2'),
|
||||
include(date: 0.days.ago.midnight.to_time, value: '1')
|
||||
)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -3,15 +3,30 @@
|
|||
require 'rails_helper'
|
||||
|
||||
describe Admin::Metrics::Measure::OpenedReportsMeasure do
|
||||
subject(:measure) { described_class.new(start_at, end_at, params) }
|
||||
subject { described_class.new(start_at, end_at, params) }
|
||||
|
||||
let(:start_at) { 2.days.ago }
|
||||
let(:end_at) { Time.now.utc }
|
||||
let(:params) { ActionController::Parameters.new }
|
||||
|
||||
describe '#data' do
|
||||
it 'runs data query without error' do
|
||||
expect { measure.data }.to_not raise_error
|
||||
context 'with report records' do
|
||||
before do
|
||||
3.times { Fabricate :report, created_at: 2.days.ago }
|
||||
2.times { Fabricate :report, created_at: 1.day.ago }
|
||||
Fabricate :report, created_at: 0.days.ago
|
||||
end
|
||||
|
||||
it 'returns correct report counts' do
|
||||
expect(subject.data.size)
|
||||
.to eq(3)
|
||||
expect(subject.data.map(&:symbolize_keys))
|
||||
.to contain_exactly(
|
||||
include(date: 2.days.ago.midnight.to_time, value: '3'),
|
||||
include(date: 1.day.ago.midnight.to_time, value: '2'),
|
||||
include(date: 0.days.ago.midnight.to_time, value: '1')
|
||||
)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -3,15 +3,30 @@
|
|||
require 'rails_helper'
|
||||
|
||||
describe Admin::Metrics::Measure::ResolvedReportsMeasure do
|
||||
subject(:measure) { described_class.new(start_at, end_at, params) }
|
||||
subject { described_class.new(start_at, end_at, params) }
|
||||
|
||||
let(:start_at) { 2.days.ago }
|
||||
let(:end_at) { Time.now.utc }
|
||||
let(:params) { ActionController::Parameters.new }
|
||||
|
||||
describe '#data' do
|
||||
it 'runs data query without error' do
|
||||
expect { measure.data }.to_not raise_error
|
||||
context 'with report records' do
|
||||
before do
|
||||
3.times { Fabricate :report, action_taken_at: 2.days.ago }
|
||||
2.times { Fabricate :report, action_taken_at: 1.day.ago }
|
||||
Fabricate :report, action_taken_at: 0.days.ago
|
||||
end
|
||||
|
||||
it 'returns correct report counts' do
|
||||
expect(subject.data.size)
|
||||
.to eq(3)
|
||||
expect(subject.data.map(&:symbolize_keys))
|
||||
.to contain_exactly(
|
||||
include(date: 2.days.ago.midnight.to_time, value: '3'),
|
||||
include(date: 1.day.ago.midnight.to_time, value: '2'),
|
||||
include(date: 0.days.ago.midnight.to_time, value: '1')
|
||||
)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
require 'rails_helper'
|
||||
|
||||
describe Admin::Metrics::Measure::TagAccountsMeasure do
|
||||
subject(:measure) { described_class.new(start_at, end_at, params) }
|
||||
subject { described_class.new(start_at, end_at, params) }
|
||||
|
||||
let!(:tag) { Fabricate(:tag) }
|
||||
|
||||
|
@ -12,8 +12,39 @@ describe Admin::Metrics::Measure::TagAccountsMeasure do
|
|||
let(:params) { ActionController::Parameters.new(id: tag.id) }
|
||||
|
||||
describe '#data' do
|
||||
it 'runs data query without error' do
|
||||
expect { measure.data }.to_not raise_error
|
||||
context 'with tagged accounts' do
|
||||
let(:alice) { Fabricate(:account, domain: 'alice.example') }
|
||||
let(:bob) { Fabricate(:account, domain: 'bob.example') }
|
||||
|
||||
before do
|
||||
3.times do
|
||||
travel_to(2.days.ago) { add_tag_history(alice) }
|
||||
end
|
||||
|
||||
2.times do
|
||||
travel_to(1.day.ago) do
|
||||
add_tag_history(alice)
|
||||
add_tag_history(bob)
|
||||
end
|
||||
end
|
||||
|
||||
add_tag_history(bob)
|
||||
end
|
||||
|
||||
it 'returns correct tag_accounts counts' do
|
||||
expect(subject.data.size)
|
||||
.to eq(3)
|
||||
expect(subject.data.map(&:symbolize_keys))
|
||||
.to contain_exactly(
|
||||
include(date: 2.days.ago.midnight.to_time, value: '1'),
|
||||
include(date: 1.day.ago.midnight.to_time, value: '2'),
|
||||
include(date: 0.days.ago.midnight.to_time, value: '1')
|
||||
)
|
||||
end
|
||||
|
||||
def add_tag_history(account)
|
||||
tag.history.add(account.id)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
require 'rails_helper'
|
||||
|
||||
describe Admin::Metrics::Measure::TagServersMeasure do
|
||||
subject(:measure) { described_class.new(start_at, end_at, params) }
|
||||
subject { described_class.new(start_at, end_at, params) }
|
||||
|
||||
let!(:tag) { Fabricate(:tag) }
|
||||
|
||||
|
@ -12,8 +12,38 @@ describe Admin::Metrics::Measure::TagServersMeasure do
|
|||
let(:params) { ActionController::Parameters.new(id: tag.id) }
|
||||
|
||||
describe '#data' do
|
||||
it 'runs data query without error' do
|
||||
expect { measure.data }.to_not raise_error
|
||||
context 'with tagged statuses' do
|
||||
let(:alice) { Fabricate(:account, domain: 'alice.example') }
|
||||
let(:bob) { Fabricate(:account, domain: 'bob.example') }
|
||||
|
||||
before do
|
||||
3.times do
|
||||
status_alice = Fabricate(:status, account: alice, created_at: 2.days.ago)
|
||||
status_alice.tags << tag
|
||||
end
|
||||
|
||||
2.times do
|
||||
status_alice = Fabricate(:status, account: alice, created_at: 1.day.ago)
|
||||
status_alice.tags << tag
|
||||
|
||||
status_bob = Fabricate(:status, account: bob, created_at: 1.day.ago)
|
||||
status_bob.tags << tag
|
||||
end
|
||||
|
||||
status_bob = Fabricate(:status, account: bob, created_at: 0.days.ago)
|
||||
status_bob.tags << tag
|
||||
end
|
||||
|
||||
it 'returns correct tag counts' do
|
||||
expect(subject.data.size)
|
||||
.to eq(3)
|
||||
expect(subject.data.map(&:symbolize_keys))
|
||||
.to contain_exactly(
|
||||
include(date: 2.days.ago.midnight.to_time, value: '1'),
|
||||
include(date: 1.day.ago.midnight.to_time, value: '2'),
|
||||
include(date: 0.days.ago.midnight.to_time, value: '1')
|
||||
)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
require 'rails_helper'
|
||||
|
||||
describe Admin::Metrics::Measure::TagUsesMeasure do
|
||||
subject(:measure) { described_class.new(start_at, end_at, params) }
|
||||
subject { described_class.new(start_at, end_at, params) }
|
||||
|
||||
let!(:tag) { Fabricate(:tag) }
|
||||
|
||||
|
@ -12,8 +12,39 @@ describe Admin::Metrics::Measure::TagUsesMeasure do
|
|||
let(:params) { ActionController::Parameters.new(id: tag.id) }
|
||||
|
||||
describe '#data' do
|
||||
it 'runs data query without error' do
|
||||
expect { measure.data }.to_not raise_error
|
||||
context 'with tagged accounts' do
|
||||
let(:alice) { Fabricate(:account, domain: 'alice.example') }
|
||||
let(:bob) { Fabricate(:account, domain: 'bob.example') }
|
||||
|
||||
before do
|
||||
3.times do
|
||||
travel_to(2.days.ago) { add_tag_history(alice) }
|
||||
end
|
||||
|
||||
2.times do
|
||||
travel_to(1.day.ago) do
|
||||
add_tag_history(alice)
|
||||
add_tag_history(bob)
|
||||
end
|
||||
end
|
||||
|
||||
add_tag_history(bob)
|
||||
end
|
||||
|
||||
it 'returns correct tag_uses counts' do
|
||||
expect(subject.data.size)
|
||||
.to eq(3)
|
||||
expect(subject.data.map(&:symbolize_keys))
|
||||
.to contain_exactly(
|
||||
include(date: 2.days.ago.midnight.to_time, value: '3'),
|
||||
include(date: 1.day.ago.midnight.to_time, value: '4'),
|
||||
include(date: 0.days.ago.midnight.to_time, value: '1')
|
||||
)
|
||||
end
|
||||
|
||||
def add_tag_history(account)
|
||||
tag.history.add(account.id)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -9,12 +9,18 @@ describe 'The account show page' do
|
|||
|
||||
get '/@alice'
|
||||
|
||||
expect(head_link_icons.size).to eq(4) # One general favicon and three with sizes
|
||||
|
||||
expect(head_meta_content('og:title')).to match alice.display_name
|
||||
expect(head_meta_content('og:type')).to eq 'profile'
|
||||
expect(head_meta_content('og:image')).to match '.+'
|
||||
expect(head_meta_content('og:url')).to match 'http://.+'
|
||||
end
|
||||
|
||||
def head_link_icons
|
||||
head_section.css('link[rel=icon]')
|
||||
end
|
||||
|
||||
def head_meta_content(property)
|
||||
head_section.meta("[@property='#{property}']")[:content]
|
||||
end
|
||||
|
|
|
@ -3,46 +3,41 @@
|
|||
require 'rails_helper'
|
||||
|
||||
describe 'statuses/show.html.haml', :without_verify_partial_doubles do
|
||||
let(:alice) { Fabricate(:account, username: 'alice', display_name: 'Alice') }
|
||||
let(:status) { Fabricate(:status, account: alice, text: 'Hello World') }
|
||||
|
||||
before do
|
||||
allow(view).to receive_messages(api_oembed_url: '', site_title: 'example site', site_hostname: 'example.com', full_asset_url: '//asset.host/image.svg', current_account: nil, single_user_mode?: false)
|
||||
allow(view).to receive(:local_time)
|
||||
allow(view).to receive(:local_time_ago)
|
||||
assign(:instance_presenter, InstancePresenter.new)
|
||||
|
||||
Fabricate(:media_attachment, account: alice, status: status, type: :video)
|
||||
|
||||
assign(:status, status)
|
||||
assign(:account, alice)
|
||||
assign(:descendant_threads, [])
|
||||
end
|
||||
|
||||
it 'has valid opengraph tags' do
|
||||
alice = Fabricate(:account, username: 'alice', display_name: 'Alice')
|
||||
status = Fabricate(:status, account: alice, text: 'Hello World')
|
||||
Fabricate(:media_attachment, account: alice, status: status, type: :video)
|
||||
|
||||
assign(:status, status)
|
||||
assign(:account, alice)
|
||||
assign(:descendant_threads, [])
|
||||
|
||||
render
|
||||
|
||||
header_tags = view.content_for(:header_tags)
|
||||
|
||||
expect(header_tags).to match(/<meta content=".+" property="og:title">/)
|
||||
expect(header_tags).to match(/<meta content="article" property="og:type">/)
|
||||
expect(header_tags).to match(/<meta content=".+" property="og:image">/)
|
||||
expect(header_tags).to match(%r{<meta content="http://.+" property="og:url">})
|
||||
expect(header_tags)
|
||||
.to match(/<meta content=".+" property="og:title">/)
|
||||
.and match(/<meta content="article" property="og:type">/)
|
||||
.and match(/<meta content=".+" property="og:image">/)
|
||||
.and match(%r{<meta content="http://.+" property="og:url">})
|
||||
end
|
||||
|
||||
it 'has twitter player tag' do
|
||||
alice = Fabricate(:account, username: 'alice', display_name: 'Alice')
|
||||
status = Fabricate(:status, account: alice, text: 'Hello World')
|
||||
Fabricate(:media_attachment, account: alice, status: status, type: :video)
|
||||
|
||||
assign(:status, status)
|
||||
assign(:account, alice)
|
||||
assign(:descendant_threads, [])
|
||||
|
||||
render
|
||||
|
||||
header_tags = view.content_for(:header_tags)
|
||||
expect(header_tags)
|
||||
.to match(%r{<meta content="http://.+/media/.+/player" property="twitter:player">})
|
||||
.and match(/<meta content="player" property="twitter:card">/)
|
||||
end
|
||||
|
||||
expect(header_tags).to match(%r{<meta content="http://.+/media/.+/player" property="twitter:player">})
|
||||
expect(header_tags).to match(/<meta content="player" property="twitter:card">/)
|
||||
def header_tags
|
||||
view.content_for(:header_tags)
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue