summaryrefslogtreecommitdiff
path: root/spec/requests/api/v1/line_items_spec.rb
blob: d5fa6b4b343c507631be8594b485d736a7bcb7e2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
# frozen_string_literal: true

RSpec.describe '/api/v1/line_items' do
  include SolidusSubscriptions::Engine.routes.url_helpers

  describe 'PATCH /:id' do
    context 'when the subscription belongs to the user' do
      context 'with valid params' do
        it 'responds with 200 OK' do
          user = create(:user, &:generate_spree_api_key!)
          subscription = create(:subscription, user: user)
          line_item = create(:subscription_line_item, subscription: subscription)

          patch(
            api_v1_line_item_path(line_item),
            params: { subscription_line_item: { quantity: 11 } },
            headers: { 'Authorization' => "Bearer #{user.spree_api_key}" },
          )

          expect(response.status).to eq(200)
        end

        it 'updates the line item' do
          user = create(:user, &:generate_spree_api_key!)
          subscription = create(:subscription, user: user)
          line_item = create(:subscription_line_item, subscription: subscription)

          patch(
            api_v1_line_item_path(line_item),
            params: { subscription_line_item: { quantity: 11 } },
            headers: { 'Authorization' => "Bearer #{user.spree_api_key}" },
          )

          expect(line_item.reload.quantity).to eq(11)
        end
      end

      context 'with invalid params' do
        it 'responds with 422 Unprocessable Entity' do
          user = create(:user, &:generate_spree_api_key!)
          subscription = create(:subscription, user: user)
          line_item = create(:subscription_line_item, subscription: subscription)

          patch(
            api_v1_line_item_path(line_item),
            params: { subscription_line_item: { quantity: -1 } },
            headers: { 'Authorization' => "Bearer #{user.spree_api_key}" },
          )

          expect(response.status).to eq(422)
        end
      end
    end

    context 'when the subscription does not belong to the user' do
      it 'responds with 401 Unauthorized' do
        user = create(:user, &:generate_spree_api_key!)
        subscription = create(:subscription)
        line_item = create(:subscription_line_item, subscription: subscription)

        patch(
          api_v1_line_item_path(line_item),
          params: { subscription_line_item: { quantity: 11 } },
          headers: { 'Authorization' => "Bearer #{user.spree_api_key}" },
        )

        expect(response.status).to eq(401)
      end
    end
  end

  describe 'DELETE /:id' do
    context 'when the subscription belongs to the user' do
      it 'responds with 200 OK' do
        user = create(:user, &:generate_spree_api_key!)
        subscription = create(:subscription, user: user)
        line_item = create(:subscription_line_item, subscription: subscription)

        delete(
          api_v1_line_item_path(line_item),
          headers: { 'Authorization' => "Bearer #{user.spree_api_key}" },
        )

        expect(response.status).to eq(200)
      end

      it 'deletes the line item' do
        user = create(:user, &:generate_spree_api_key!)
        subscription = create(:subscription, user: user)
        line_item = create(:subscription_line_item, subscription: subscription)

        delete(
          api_v1_line_item_path(line_item),
          headers: { 'Authorization' => "Bearer #{user.spree_api_key}" },
        )

        expect { line_item.reload }.to raise_error(ActiveRecord::RecordNotFound)
      end
    end

    context 'when the subscription does not belong to the user' do
      it 'responds with 401 Unauthorized' do
        user = create(:user, &:generate_spree_api_key!)
        subscription = create(:subscription)
        line_item = create(:subscription_line_item, subscription: subscription)

        delete(
          api_v1_line_item_path(line_item),
          headers: { 'Authorization' => "Bearer #{user.spree_api_key}" },
        )

        expect(response.status).to eq(401)
      end
    end
  end
end