From cd56acd184b4d587540f79d117d9179114a1ff3e Mon Sep 17 00:00:00 2001 From: Jack Jennings Date: Thu, 11 May 2017 02:25:10 -0700 Subject: [PATCH] Add specs for current Status#permitted? implementation (#2982) --- spec/models/status_spec.rb | 58 +++++++++++++++++++++++++++++++++++++- 1 file changed, 57 insertions(+), 1 deletion(-) diff --git a/spec/models/status_spec.rb b/spec/models/status_spec.rb index 721951030e..f5c65f5c99 100644 --- a/spec/models/status_spec.rb +++ b/spec/models/status_spec.rb @@ -120,7 +120,63 @@ RSpec.describe Status, type: :model do end describe '#permitted?' do - pending + it 'returns true when direct and account is viewer' do + subject.visibility = :direct + expect(subject.permitted?(subject.account)).to be true + end + + it 'returns true when direct and viewer is mentioned' do + subject.visibility = :direct + subject.mentions = [Fabricate(:mention, account: alice)] + + expect(subject.permitted?(alice)).to be true + end + + it 'returns false when direct and viewer is not mentioned' do + viewer = Fabricate(:account) + subject.visibility = :direct + + expect(subject.permitted?(viewer)).to be false + end + + it 'returns true when private and account is viewer' do + subject.visibility = :direct + expect(subject.permitted?(subject.account)).to be true + end + + it 'returns true when private and account is following viewer' do + follow = Fabricate(:follow) + subject.visibility = :private + subject.account = follow.target_account + + expect(subject.permitted?(follow.account)).to be true + end + + it 'returns true when private and viewer is mentioned' do + subject.visibility = :private + subject.mentions = [Fabricate(:mention, account: alice)] + + expect(subject.permitted?(alice)).to be true + end + + it 'returns false when private and viewer is not mentioned or followed' do + viewer = Fabricate(:account) + subject.visibility = :private + + expect(subject.permitted?(viewer)).to be false + end + + it 'returns true when no viewer' do + expect(subject.permitted?).to be true + end + + it 'returns false when viewer is blocked' do + block = Fabricate(:block) + subject.visibility = :private + subject.account = block.target_account + + expect(subject.permitted?(block.account)).to be false + end end describe '#filter_from_context?' do