From e35a35011915bc0cb77dae933e55fba267d31430 Mon Sep 17 00:00:00 2001 From: David Yip Date: Thu, 14 Dec 2017 02:27:42 -0600 Subject: Examples for Status#set_locality and .as_tag_timeline. This commit also: - exposes the local-only emoji so that it can be used in examples - allows local_only to be set explicitly, i.e. for timeline filtering specs --- spec/models/status_spec.rb | 58 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) (limited to 'spec/models') diff --git a/spec/models/status_spec.rb b/spec/models/status_spec.rb index c6701018e..5b0adb769 100644 --- a/spec/models/status_spec.rb +++ b/spec/models/status_spec.rb @@ -197,6 +197,43 @@ RSpec.describe Status, type: :model do end end + describe 'on create' do + let(:local_account) { Fabricate(:account, username: 'local', domain: nil) } + let(:remote_account) { Fabricate(:account, username: 'remote', domain: 'example.com') } + + subject { Status.new } + + describe 'on a status that ends with the local-only emoji' do + before do + subject.text = 'A toot ' + subject.local_only_emoji + end + + context 'if the status originates from this instance' do + before do + subject.account = local_account + end + + it 'is marked local-only' do + subject.save! + + expect(subject).to be_local_only + end + end + + context 'if the status is remote' do + before do + subject.account = remote_account + end + + it 'is not marked local-only' do + subject.save! + + expect(subject).to_not be_local_only + end + end + end + end + describe '.mutes_map' do let(:status) { Fabricate(:status) } let(:account) { Fabricate(:account) } @@ -570,6 +607,27 @@ RSpec.describe Status, type: :model do results = Status.as_tag_timeline(tag) expect(results).to include(status) end + + context 'on a local-only status' do + let(:tag) { Fabricate(:tag) } + let(:status) { Fabricate(:status, local_only: true, tags: [tag]) } + + context 'if account is nil' do + let(:account) { nil } + + it 'filters the local-only status out of the result set' do + expect(Status.as_tag_timeline(tag, account)).not_to include(status) + end + end + + context 'if account is not nil and local' do + let(:account) { Fabricate(:account, domain: nil) } + + it 'keeps the local-only status in the result set' do + expect(Status.as_tag_timeline(tag, account)).to include(status) + end + end + end end describe '.permitted_for' do -- cgit From 6abb0950c6f694607cdc6a0c564751400d52ad5a Mon Sep 17 00:00:00 2001 From: David Yip Date: Thu, 14 Dec 2017 02:57:59 -0600 Subject: Examples for Status.as_public_timeline. Also adjust the examples for Status.as_tag_timeline to match the nomenclature used in .as_public_timeline (e.g. "account" -> "viewer"). --- spec/models/status_spec.rb | 38 ++++++++++++++++++++++++++++++++------ 1 file changed, 32 insertions(+), 6 deletions(-) (limited to 'spec/models') diff --git a/spec/models/status_spec.rb b/spec/models/status_spec.rb index 5b0adb769..1f5a03877 100644 --- a/spec/models/status_spec.rb +++ b/spec/models/status_spec.rb @@ -586,6 +586,32 @@ RSpec.describe Status, type: :model do end end end + + context 'with local-only statuses' do + let(:status) { Fabricate(:status, local_only: true) } + + subject { Status.as_public_timeline(viewer) } + + context 'without a viewer' do + let(:viewer) { nil } + + it 'excludes local-only statuses' do + expect(subject).to_not include(status) + end + end + + context 'with a viewer' do + let(:viewer) { Fabricate(:account, username: 'viewer') } + + it 'includes local-only statuses' do + expect(subject).to include(status) + end + end + + # TODO: What happens if the viewer is remote? + # Can the viewer be remote? + # What prevents the viewer from being remote? + end end describe '.as_tag_timeline' do @@ -612,19 +638,19 @@ RSpec.describe Status, type: :model do let(:tag) { Fabricate(:tag) } let(:status) { Fabricate(:status, local_only: true, tags: [tag]) } - context 'if account is nil' do - let(:account) { nil } + context 'without a viewer' do + let(:viewer) { nil } it 'filters the local-only status out of the result set' do - expect(Status.as_tag_timeline(tag, account)).not_to include(status) + expect(Status.as_tag_timeline(tag, viewer)).not_to include(status) end end - context 'if account is not nil and local' do - let(:account) { Fabricate(:account, domain: nil) } + context 'with a viewer' do + let(:viewer) { Fabricate(:account, username: 'viewer', domain: nil) } it 'keeps the local-only status in the result set' do - expect(Status.as_tag_timeline(tag, account)).to include(status) + expect(Status.as_tag_timeline(tag, viewer)).to include(status) end end end -- cgit