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.

140 lines
3.4 KiB

8 years ago
8 years ago
  1. require 'rails_helper'
  2. RSpec.describe Account, type: :model do
  3. subject { Fabricate(:account, username: 'alice') }
  4. context do
  5. let(:bob) { Fabricate(:account, username: 'bob') }
  6. describe '#follow!' do
  7. it 'creates a follow' do
  8. follow = subject.follow!(bob)
  9. expect(follow).to be_instance_of Follow
  10. expect(follow.account).to eq subject
  11. expect(follow.target_account).to eq bob
  12. end
  13. end
  14. describe '#unfollow!' do
  15. before do
  16. subject.follow!(bob)
  17. end
  18. it 'destroys a follow' do
  19. unfollow = subject.unfollow!(bob)
  20. expect(unfollow).to be_instance_of Follow
  21. expect(unfollow.account).to eq subject
  22. expect(unfollow.target_account).to eq bob
  23. expect(unfollow.destroyed?).to be true
  24. end
  25. end
  26. describe '#following?' do
  27. it 'returns true when the target is followed' do
  28. subject.follow!(bob)
  29. expect(subject.following?(bob)).to be true
  30. end
  31. it 'returns false if the target is not followed' do
  32. expect(subject.following?(bob)).to be false
  33. end
  34. end
  35. end
  36. describe '#local?' do
  37. it 'returns true when the account is local' do
  38. expect(subject.local?).to be true
  39. end
  40. it 'returns false when the account is on a different domain' do
  41. subject.domain = 'foreign.tld'
  42. expect(subject.local?).to be false
  43. end
  44. end
  45. describe '#acct' do
  46. it 'returns username for local users' do
  47. expect(subject.acct).to eql 'alice'
  48. end
  49. it 'returns username@domain for foreign users' do
  50. subject.domain = 'foreign.tld'
  51. expect(subject.acct).to eql 'alice@foreign.tld'
  52. end
  53. end
  54. describe '#subscribed?' do
  55. it 'returns false when no subscription expiration information is present' do
  56. expect(subject.subscribed?).to be false
  57. end
  58. it 'returns true when subscription expiration has been set' do
  59. subject.subscription_expires_at = 30.days.from_now
  60. expect(subject.subscribed?).to be true
  61. end
  62. end
  63. describe '#keypair' do
  64. it 'returns an RSA key pair' do
  65. expect(subject.keypair).to be_instance_of OpenSSL::PKey::RSA
  66. end
  67. end
  68. describe '#subscription' do
  69. it 'returns an OStatus subscription' do
  70. expect(subject.subscription('')).to be_instance_of OStatus2::Subscription
  71. end
  72. end
  73. describe '#object_type' do
  74. it 'is always a person' do
  75. expect(subject.object_type).to be :person
  76. end
  77. end
  78. describe '#ping!' do
  79. pending
  80. end
  81. describe '#favourited?' do
  82. pending
  83. end
  84. describe '#reblogged?' do
  85. pending
  86. end
  87. describe '.find_local' do
  88. pending
  89. end
  90. describe '.find_remote' do
  91. pending
  92. end
  93. describe 'MENTION_RE' do
  94. subject { Account::MENTION_RE }
  95. it 'matches usernames in the middle of a sentence' do
  96. expect(subject.match('Hello to @alice from me')[1]).to eq 'alice'
  97. end
  98. it 'matches usernames in the beginning of status' do
  99. expect(subject.match('@alice Hey how are you?')[1]).to eq 'alice'
  100. end
  101. it 'matches dot-prepended usernames' do
  102. expect(subject.match('.@alice I want everybody to see this')[1]).to eq 'alice'
  103. end
  104. it 'does not match e-mails' do
  105. expect(subject.match('Drop me an e-mail at alice@example.com')).to be_nil
  106. end
  107. it 'does not match URLs' do
  108. expect(subject.match('Check this out https://medium.com/@alice/some-article#.abcdef123')).to be_nil
  109. end
  110. end
  111. end