You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

89 lines
2.4 KiB

  1. require 'rails_helper'
  2. require 'pundit/rspec'
  3. RSpec.describe StatusPolicy, type: :model do
  4. subject { described_class }
  5. let(:alice) { Fabricate(:account, username: 'alice') }
  6. let(:status) { Fabricate(:status, account: alice) }
  7. permissions :show?, :reblog? do
  8. it 'grants access when no viewer' do
  9. expect(subject).to permit(nil, status)
  10. end
  11. it 'denies access when viewer is blocked' do
  12. block = Fabricate(:block)
  13. status.visibility = :private
  14. status.account = block.target_account
  15. expect(subject).to_not permit(block.account, status)
  16. end
  17. end
  18. permissions :show? do
  19. it 'grants access when direct and account is viewer' do
  20. status.visibility = :direct
  21. expect(subject).to permit(status.account, status)
  22. end
  23. it 'grants access when direct and viewer is mentioned' do
  24. status.visibility = :direct
  25. status.mentions = [Fabricate(:mention, account: alice)]
  26. expect(subject).to permit(alice, status)
  27. end
  28. it 'denies access when direct and viewer is not mentioned' do
  29. viewer = Fabricate(:account)
  30. status.visibility = :direct
  31. expect(subject).to_not permit(viewer, status)
  32. end
  33. it 'grants access when private and account is viewer' do
  34. status.visibility = :private
  35. expect(subject).to permit(status.account, status)
  36. end
  37. it 'grants access when private and account is following viewer' do
  38. follow = Fabricate(:follow)
  39. status.visibility = :private
  40. status.account = follow.target_account
  41. expect(subject).to permit(follow.account, status)
  42. end
  43. it 'grants access when private and viewer is mentioned' do
  44. status.visibility = :private
  45. status.mentions = [Fabricate(:mention, account: alice)]
  46. expect(subject).to permit(alice, status)
  47. end
  48. it 'denies access when private and viewer is not mentioned or followed' do
  49. viewer = Fabricate(:account)
  50. status.visibility = :private
  51. expect(subject).to_not permit(viewer, status)
  52. end
  53. end
  54. permissions :reblog? do
  55. it 'denies access when private' do
  56. viewer = Fabricate(:account)
  57. status.visibility = :private
  58. expect(subject).to_not permit(viewer, status)
  59. end
  60. it 'denies access when direct' do
  61. viewer = Fabricate(:account)
  62. status.visibility = :direct
  63. expect(subject).to_not permit(viewer, status)
  64. end
  65. end
  66. end