|
@@ -0,0 +1,104 @@
|
|
|
+# frozen_string_literal: true
|
|
|
+
|
|
|
+require 'rails_helper'
|
|
|
+
|
|
|
+RSpec.describe Instance do
|
|
|
+ describe 'Scopes' do
|
|
|
+ before { described_class.refresh }
|
|
|
+
|
|
|
+ describe '#searchable' do
|
|
|
+ let(:expected_domain) { 'host.example' }
|
|
|
+ let(:blocked_domain) { 'other.example' }
|
|
|
+
|
|
|
+ before do
|
|
|
+ Fabricate :account, domain: expected_domain
|
|
|
+ Fabricate :account, domain: blocked_domain
|
|
|
+ Fabricate :domain_block, domain: blocked_domain
|
|
|
+ end
|
|
|
+
|
|
|
+ it 'returns records not domain blocked' do
|
|
|
+ results = described_class.searchable.pluck(:domain)
|
|
|
+
|
|
|
+ expect(results)
|
|
|
+ .to include(expected_domain)
|
|
|
+ .and not_include(blocked_domain)
|
|
|
+ end
|
|
|
+ end
|
|
|
+
|
|
|
+ describe '#matches_domain' do
|
|
|
+ let(:host_domain) { 'host.example.com' }
|
|
|
+ let(:host_under_domain) { 'host_under.example.com' }
|
|
|
+ let(:other_domain) { 'other.example' }
|
|
|
+
|
|
|
+ before do
|
|
|
+ Fabricate :account, domain: host_domain
|
|
|
+ Fabricate :account, domain: host_under_domain
|
|
|
+ Fabricate :account, domain: other_domain
|
|
|
+ end
|
|
|
+
|
|
|
+ it 'returns matching records' do
|
|
|
+ expect(described_class.matches_domain('host.exa').pluck(:domain))
|
|
|
+ .to include(host_domain)
|
|
|
+ .and not_include(other_domain)
|
|
|
+
|
|
|
+ expect(described_class.matches_domain('ple.com').pluck(:domain))
|
|
|
+ .to include(host_domain)
|
|
|
+ .and not_include(other_domain)
|
|
|
+
|
|
|
+ expect(described_class.matches_domain('example').pluck(:domain))
|
|
|
+ .to include(host_domain)
|
|
|
+ .and include(other_domain)
|
|
|
+
|
|
|
+ expect(described_class.matches_domain('host_').pluck(:domain)) # Preserve SQL wildcards
|
|
|
+ .to include(host_domain)
|
|
|
+ .and include(host_under_domain)
|
|
|
+ .and not_include(other_domain)
|
|
|
+ end
|
|
|
+ end
|
|
|
+
|
|
|
+ describe '#by_domain_and_subdomains' do
|
|
|
+ let(:exact_match_domain) { 'example.com' }
|
|
|
+ let(:subdomain_domain) { 'foo.example.com' }
|
|
|
+ let(:partial_domain) { 'grexample.com' }
|
|
|
+
|
|
|
+ before do
|
|
|
+ Fabricate(:account, domain: exact_match_domain)
|
|
|
+ Fabricate(:account, domain: subdomain_domain)
|
|
|
+ Fabricate(:account, domain: partial_domain)
|
|
|
+ end
|
|
|
+
|
|
|
+ it 'returns matching instances' do
|
|
|
+ results = described_class.by_domain_and_subdomains('example.com').pluck(:domain)
|
|
|
+
|
|
|
+ expect(results)
|
|
|
+ .to include(exact_match_domain)
|
|
|
+ .and include(subdomain_domain)
|
|
|
+ .and not_include(partial_domain)
|
|
|
+ end
|
|
|
+ end
|
|
|
+
|
|
|
+ describe '#with_domain_follows' do
|
|
|
+ let(:example_domain) { 'example.host' }
|
|
|
+ let(:other_domain) { 'other.host' }
|
|
|
+ let(:none_domain) { 'none.host' }
|
|
|
+
|
|
|
+ before do
|
|
|
+ example_account = Fabricate(:account, domain: example_domain)
|
|
|
+ other_account = Fabricate(:account, domain: other_domain)
|
|
|
+ Fabricate(:account, domain: none_domain)
|
|
|
+
|
|
|
+ Fabricate :follow, account: example_account
|
|
|
+ Fabricate :follow, target_account: other_account
|
|
|
+ end
|
|
|
+
|
|
|
+ it 'returns instances with domain accounts that have follows' do
|
|
|
+ results = described_class.with_domain_follows(['example.host', 'other.host', 'none.host']).pluck(:domain)
|
|
|
+
|
|
|
+ expect(results)
|
|
|
+ .to include(example_domain)
|
|
|
+ .and include(other_domain)
|
|
|
+ .and not_include(none_domain)
|
|
|
+ end
|
|
|
+ end
|
|
|
+ end
|
|
|
+end
|