subscribable_spec.rb 4.01 KB
Newer Older
1
require 'spec_helper'
2

3
describe Subscribable, 'Subscribable' do
4
  let(:project)  { create(:project) }
5
  let(:resource) { create(:issue, project: project) }
6
  let(:user_1)   { create(:user) }
7

8
  describe '#subscribed?' do
Eric Eastwood's avatar
Eric Eastwood committed
9 10 11 12 13 14
    context 'without user' do
      it 'returns false' do
        expect(resource.subscribed?(nil, project)).to be_falsey
      end
    end

15 16 17 18 19 20 21 22 23 24
    context 'without project' do
      it 'returns false when no subscription exists' do
        expect(resource.subscribed?(user_1)).to be_falsey
      end

      it 'returns true when a subcription exists and subscribed is true' do
        resource.subscriptions.create(user: user_1, subscribed: true)

        expect(resource.subscribed?(user_1)).to be_truthy
      end
25

26 27
      it 'returns false when a subcription exists and subscribed is false' do
        resource.subscriptions.create(user: user_1, subscribed: false)
28

29 30
        expect(resource.subscribed?(user_1)).to be_falsey
      end
31 32
    end

33 34 35 36 37 38 39 40 41 42
    context 'with project' do
      it 'returns false when no subscription exists' do
        expect(resource.subscribed?(user_1, project)).to be_falsey
      end

      it 'returns true when a subcription exists and subscribed is true' do
        resource.subscriptions.create(user: user_1, project: project, subscribed: true)

        expect(resource.subscribed?(user_1, project)).to be_truthy
      end
43

44 45 46 47 48
      it 'returns false when a subcription exists and subscribed is false' do
        resource.subscriptions.create(user: user_1, project: project, subscribed: false)

        expect(resource.subscribed?(user_1, project)).to be_falsey
      end
49 50
    end
  end
51

52 53
  describe '#subscribers' do
    it 'returns [] when no subcribers exists' do
54
      expect(resource.subscribers(project)).to be_empty
55 56 57
    end

    it 'returns the subscribed users' do
58 59 60
      user_2 = create(:user)
      resource.subscriptions.create(user: user_1, subscribed: true)
      resource.subscriptions.create(user: user_2, project: project, subscribed: true)
61
      resource.subscriptions.create(user: create(:user), project: project, subscribed: false)
62

63
      expect(resource.subscribers(project)).to contain_exactly(user_1, user_2)
64 65 66 67
    end
  end

  describe '#toggle_subscription' do
68 69 70 71 72 73 74 75 76
    context 'without project' do
      it 'toggles the current subscription state for the given user' do
        expect(resource.subscribed?(user_1)).to be_falsey

        resource.toggle_subscription(user_1)

        expect(resource.subscribed?(user_1)).to be_truthy
      end
    end
77

78 79 80
    context 'with project' do
      it 'toggles the current subscription state for the given user' do
        expect(resource.subscribed?(user_1, project)).to be_falsey
81

82 83 84 85
        resource.toggle_subscription(user_1, project)

        expect(resource.subscribed?(user_1, project)).to be_truthy
      end
86 87 88
    end
  end

89
  describe '#subscribe' do
90 91 92 93 94 95 96 97 98 99 100 101 102
    context 'without project' do
      it 'subscribes the given user' do
        expect(resource.subscribed?(user_1)).to be_falsey

        resource.subscribe(user_1)

        expect(resource.subscribed?(user_1)).to be_truthy
      end
    end

    context 'with project' do
      it 'subscribes the given user' do
        expect(resource.subscribed?(user_1, project)).to be_falsey
103

104
        resource.subscribe(user_1, project)
105

106 107
        expect(resource.subscribed?(user_1, project)).to be_truthy
      end
108 109 110
    end
  end

111
  describe '#unsubscribe' do
112 113 114 115 116 117 118 119 120 121 122 123 124 125 126
    context 'without project' do
      it 'unsubscribes the given current user' do
        resource.subscriptions.create(user: user_1, subscribed: true)
        expect(resource.subscribed?(user_1)).to be_truthy

        resource.unsubscribe(user_1)

        expect(resource.subscribed?(user_1)).to be_falsey
      end
    end

    context 'with project' do
      it 'unsubscribes the given current user' do
        resource.subscriptions.create(user: user_1, project: project, subscribed: true)
        expect(resource.subscribed?(user_1, project)).to be_truthy
127

128
        resource.unsubscribe(user_1, project)
129

130 131
        expect(resource.subscribed?(user_1, project)).to be_falsey
      end
132 133 134
    end
  end
end