spree_api 2.3.13 → 2.4.0.rc1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (77) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +1 -43
  3. data/Gemfile +1 -1
  4. data/app/controllers/spree/api/addresses_controller.rb +1 -1
  5. data/app/controllers/spree/api/base_controller.rb +22 -9
  6. data/app/controllers/spree/api/checkouts_controller.rb +2 -2
  7. data/app/controllers/spree/api/countries_controller.rb +2 -2
  8. data/app/controllers/spree/api/credit_cards_controller.rb +1 -1
  9. data/app/controllers/spree/api/images_controller.rb +5 -0
  10. data/app/controllers/spree/api/inventory_units_controller.rb +1 -1
  11. data/app/controllers/spree/api/line_items_controller.rb +7 -7
  12. data/app/controllers/spree/api/option_types_controller.rb +2 -2
  13. data/app/controllers/spree/api/orders_controller.rb +17 -6
  14. data/app/controllers/spree/api/payments_controller.rb +3 -11
  15. data/app/controllers/spree/api/product_properties_controller.rb +2 -2
  16. data/app/controllers/spree/api/promotions_controller.rb +26 -0
  17. data/app/controllers/spree/api/properties_controller.rb +1 -1
  18. data/app/controllers/spree/api/return_authorizations_controller.rb +0 -10
  19. data/app/controllers/spree/api/shipments_controller.rb +71 -4
  20. data/app/controllers/spree/api/states_controller.rb +3 -3
  21. data/app/controllers/spree/api/stock_items_controller.rb +1 -1
  22. data/app/controllers/spree/api/stock_movements_controller.rb +1 -1
  23. data/app/controllers/spree/api/taxons_controller.rb +1 -1
  24. data/app/controllers/spree/api/variants_controller.rb +1 -2
  25. data/app/helpers/spree/api/api_helpers.rb +19 -5
  26. data/app/views/spree/api/images/index.v1.rabl +4 -0
  27. data/app/views/spree/api/products/show.v1.rabl +4 -1
  28. data/app/views/spree/api/promotions/handler.v1.rabl +2 -1
  29. data/app/views/spree/api/promotions/show.v1.rabl +2 -0
  30. data/app/views/spree/api/shipments/big.v1.rabl +48 -0
  31. data/app/views/spree/api/shipments/mine.v1.rabl +9 -0
  32. data/app/views/spree/api/shipments/small.v1.rabl +1 -5
  33. data/app/views/spree/api/shipping_rates/show.v1.rabl +2 -2
  34. data/app/views/spree/api/taxonomies/show.v1.rabl +2 -2
  35. data/app/views/spree/api/variants/big.v1.rabl +6 -1
  36. data/app/views/spree/api/variants/show.v1.rabl +1 -1
  37. data/app/views/spree/api/variants/small.v1.rabl +2 -3
  38. data/config/routes.rb +9 -0
  39. data/lib/spree/api/responders/rabl_template.rb +1 -1
  40. data/lib/spree/api/testing_support/helpers.rb +6 -6
  41. data/lib/spree/api/testing_support/setup.rb +2 -2
  42. data/spec/controllers/spree/api/addresses_controller_spec.rb +7 -7
  43. data/spec/controllers/spree/api/base_controller_spec.rb +66 -19
  44. data/spec/controllers/spree/api/checkouts_controller_spec.rb +54 -54
  45. data/spec/controllers/spree/api/classifications_controller_spec.rb +5 -5
  46. data/spec/controllers/spree/api/config_controller_spec.rb +9 -9
  47. data/spec/controllers/spree/api/countries_controller_spec.rb +11 -11
  48. data/spec/controllers/spree/api/credit_cards_controller_spec.rb +16 -16
  49. data/spec/controllers/spree/api/images_controller_spec.rb +37 -11
  50. data/spec/controllers/spree/api/inventory_units_controller_spec.rb +6 -6
  51. data/spec/controllers/spree/api/line_items_controller_spec.rb +34 -35
  52. data/spec/controllers/spree/api/option_types_controller_spec.rb +18 -18
  53. data/spec/controllers/spree/api/option_values_controller_spec.rb +21 -21
  54. data/spec/controllers/spree/api/orders_controller_spec.rb +177 -161
  55. data/spec/controllers/spree/api/payments_controller_spec.rb +52 -89
  56. data/spec/controllers/spree/api/product_properties_controller_spec.rb +21 -21
  57. data/spec/controllers/spree/api/products_controller_spec.rb +103 -60
  58. data/spec/controllers/spree/api/promotion_application_spec.rb +14 -12
  59. data/spec/controllers/spree/api/promotions_controller_spec.rb +64 -0
  60. data/spec/controllers/spree/api/properties_controller_spec.rb +25 -25
  61. data/spec/controllers/spree/api/return_authorizations_controller_spec.rb +42 -66
  62. data/spec/controllers/spree/api/shipments_controller_spec.rb +69 -21
  63. data/spec/controllers/spree/api/states_controller_spec.rb +18 -18
  64. data/spec/controllers/spree/api/stock_items_controller_spec.rb +26 -26
  65. data/spec/controllers/spree/api/stock_locations_controller_spec.rb +22 -22
  66. data/spec/controllers/spree/api/stock_movements_controller_spec.rb +16 -16
  67. data/spec/controllers/spree/api/taxonomies_controller_spec.rb +24 -24
  68. data/spec/controllers/spree/api/taxons_controller_spec.rb +39 -39
  69. data/spec/controllers/spree/api/unauthenticated_products_controller_spec.rb +5 -5
  70. data/spec/controllers/spree/api/users_controller_spec.rb +41 -41
  71. data/spec/controllers/spree/api/variants_controller_spec.rb +47 -37
  72. data/spec/controllers/spree/api/zones_controller_spec.rb +40 -18
  73. data/spec/models/spree/legacy_user_spec.rb +5 -5
  74. data/spec/requests/rabl_cache_spec.rb +9 -9
  75. data/spec/spec_helper.rb +1 -0
  76. metadata +14 -9
  77. data/spec/requests/ransackable_attributes_spec.rb +0 -79
@@ -1,89 +1,87 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  module Spree
4
- describe Api::LineItemsController, :type => :controller do
4
+ describe Api::LineItemsController do
5
5
  render_views
6
6
 
7
- let!(:order) { create(:order_with_line_items) }
7
+ let!(:order) { create(:order_with_line_items, line_items_count: 1) }
8
8
 
9
9
  let(:product) { create(:product) }
10
10
  let(:attributes) { [:id, :quantity, :price, :variant, :total, :display_amount, :single_display_amount] }
11
11
  let(:resource_scoping) { { :order_id => order.to_param } }
12
12
 
13
- before do
14
- stub_authentication!
15
- end
16
-
17
13
  it "can learn how to create a new line item" do
14
+ controller.stub :try_spree_current_user => current_api_user
18
15
  api_get :new
19
- expect(json_response["attributes"]).to eq(["quantity", "price", "variant_id"])
16
+ json_response["attributes"].should == ["quantity", "price", "variant_id"]
20
17
  required_attributes = json_response["required_attributes"]
21
- expect(required_attributes).to include("quantity", "variant_id")
18
+ required_attributes.should include("quantity", "variant_id")
22
19
  end
23
20
 
24
21
  context "authenticating with a token" do
25
22
  it "can add a new line item to an existing order" do
26
23
  api_post :create, :line_item => { :variant_id => product.master.to_param, :quantity => 1 }, :order_token => order.guest_token
27
- expect(response.status).to eq(201)
28
- expect(json_response).to have_attributes(attributes)
29
- expect(json_response["variant"]["name"]).not_to be_blank
24
+ response.status.should == 201
25
+ json_response.should have_attributes(attributes)
26
+ json_response["variant"]["name"].should_not be_blank
30
27
  end
31
28
 
32
29
  it "can add a new line item to an existing order with token in header" do
33
30
  request.headers["X-Spree-Order-Token"] = order.guest_token
34
31
  api_post :create, :line_item => { :variant_id => product.master.to_param, :quantity => 1 }
35
- expect(response.status).to eq(201)
36
- expect(json_response).to have_attributes(attributes)
37
- expect(json_response["variant"]["name"]).not_to be_blank
32
+ response.status.should == 201
33
+ json_response.should have_attributes(attributes)
34
+ json_response["variant"]["name"].should_not be_blank
38
35
  end
39
36
  end
40
37
 
41
38
  context "as the order owner" do
42
39
  before do
43
- allow_any_instance_of(Order).to receive_messages :user => current_api_user
40
+ controller.stub :try_spree_current_user => current_api_user
41
+ Order.any_instance.stub :user => current_api_user
44
42
  end
45
43
 
46
44
  it "can add a new line item to an existing order" do
47
45
  api_post :create, :line_item => { :variant_id => product.master.to_param, :quantity => 1 }
48
- expect(response.status).to eq(201)
49
- expect(json_response).to have_attributes(attributes)
50
- expect(json_response["variant"]["name"]).not_to be_blank
46
+ response.status.should == 201
47
+ json_response.should have_attributes(attributes)
48
+ json_response["variant"]["name"].should_not be_blank
51
49
  end
52
50
 
53
51
  it "default quantity to 1 if none is given" do
54
52
  api_post :create, :line_item => { :variant_id => product.master.to_param }
55
- expect(response.status).to eq(201)
56
- expect(json_response).to have_attributes(attributes)
53
+ response.status.should == 201
54
+ json_response.should have_attributes(attributes)
57
55
  expect(json_response[:quantity]).to eq 1
58
56
  end
59
57
 
60
58
  it "increases a line item's quantity if it exists already" do
61
59
  order.line_items.create(:variant_id => product.master.id, :quantity => 10)
62
60
  api_post :create, :line_item => { :variant_id => product.master.to_param, :quantity => 1 }
63
- expect(response.status).to eq(201)
61
+ response.status.should == 201
64
62
  order.reload
65
- expect(order.line_items.count).to eq(6) # 5 original due to factory, + 1 in this test
66
- expect(json_response).to have_attributes(attributes)
67
- expect(json_response["quantity"]).to eq(11)
63
+ order.line_items.count.should == 2 # 1 original due to factory, + 1 in this test
64
+ json_response.should have_attributes(attributes)
65
+ json_response["quantity"].should == 11
68
66
  end
69
67
 
70
68
  it "can update a line item on the order" do
71
69
  line_item = order.line_items.first
72
70
  api_put :update, :id => line_item.id, :line_item => { :quantity => 101 }
73
- expect(response.status).to eq(200)
71
+ response.status.should == 200
74
72
  order.reload
75
- expect(order.total).to eq(1050) # 50 original due to factory, + 1000 in this test
76
- expect(json_response).to have_attributes(attributes)
77
- expect(json_response["quantity"]).to eq(101)
73
+ order.total.should == 1010 # 10 original due to factory, + 1000 in this test
74
+ json_response.should have_attributes(attributes)
75
+ json_response["quantity"].should == 101
78
76
  end
79
77
 
80
78
  it "can delete a line item on the order" do
81
79
  line_item = order.line_items.first
82
80
  api_delete :destroy, :id => line_item.id
83
- expect(response.status).to eq(204)
81
+ response.status.should == 204
84
82
  order.reload
85
- expect(order.line_items.count).to eq(4) # 5 original due to factory, - 1 in this test
86
- expect { line_item.reload }.to raise_error(ActiveRecord::RecordNotFound)
83
+ order.line_items.count.should == 0 # 1 original due to factory, - 1 in this test
84
+ lambda { line_item.reload }.should raise_error(ActiveRecord::RecordNotFound)
87
85
  end
88
86
 
89
87
  context "order contents changed after shipments were created" do
@@ -112,8 +110,8 @@ module Spree
112
110
 
113
111
  context "order is completed" do
114
112
  before do
115
- allow(order).to receive_messages completed?: true
116
- allow(Order).to receive_message_chain :includes, find_by!: order
113
+ order.stub completed?: true
114
+ Order.stub_chain :includes, find_by!: order
117
115
  end
118
116
 
119
117
  it "doesn't destroy shipments or restart checkout flow" do
@@ -128,6 +126,7 @@ module Spree
128
126
  context "as just another user" do
129
127
  before do
130
128
  user = create(:user)
129
+ controller.stub :try_spree_current_user => user
131
130
  end
132
131
 
133
132
  it "cannot add a new line item to the order" do
@@ -139,14 +138,14 @@ module Spree
139
138
  line_item = order.line_items.first
140
139
  api_put :update, :id => line_item.id, :line_item => { :quantity => 1000 }
141
140
  assert_unauthorized!
142
- expect(line_item.reload.quantity).not_to eq(1000)
141
+ line_item.reload.quantity.should_not == 1000
143
142
  end
144
143
 
145
144
  it "cannot delete a line item on the order" do
146
145
  line_item = order.line_items.first
147
146
  api_delete :destroy, :id => line_item.id
148
147
  assert_unauthorized!
149
- expect { line_item.reload }.not_to raise_error
148
+ lambda { line_item.reload }.should_not raise_error
150
149
  end
151
150
  end
152
151
  end
@@ -1,7 +1,7 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  module Spree
4
- describe Api::OptionTypesController, :type => :controller do
4
+ describe Api::OptionTypesController do
5
5
  render_views
6
6
 
7
7
  let(:attributes) { [:id, :name, :position, :presentation] }
@@ -13,15 +13,15 @@ module Spree
13
13
  end
14
14
 
15
15
  def check_option_values(option_values)
16
- expect(option_values.count).to eq(1)
17
- expect(option_values.first).to have_attributes([:id, :name, :presentation,
16
+ option_values.count.should == 1
17
+ option_values.first.should have_attributes([:id, :name, :presentation,
18
18
  :option_type_name, :option_type_id])
19
19
  end
20
20
 
21
21
  it "can list all option types" do
22
22
  api_get :index
23
- expect(json_response.count).to eq(1)
24
- expect(json_response.first).to have_attributes(attributes)
23
+ json_response.count.should == 1
24
+ json_response.first.should have_attributes(attributes)
25
25
 
26
26
  check_option_values(json_response.first["option_values"])
27
27
  end
@@ -29,22 +29,22 @@ module Spree
29
29
  it "can search for an option type" do
30
30
  create(:option_type, :name => "buzz")
31
31
  api_get :index, :q => { :name_cont => option_type.name }
32
- expect(json_response.count).to eq(1)
33
- expect(json_response.first).to have_attributes(attributes)
32
+ json_response.count.should == 1
33
+ json_response.first.should have_attributes(attributes)
34
34
  end
35
35
 
36
36
  it "can retreive a list of specific option types" do
37
37
  option_type_1 = create(:option_type)
38
38
  option_type_2 = create(:option_type)
39
39
  api_get :index, :ids => "#{option_type.id},#{option_type_1.id}"
40
- expect(json_response.count).to eq(2)
40
+ json_response.count.should == 2
41
41
 
42
42
  check_option_values(json_response.first["option_values"])
43
43
  end
44
44
 
45
45
  it "can list a single option type" do
46
46
  api_get :show, :id => option_type.id
47
- expect(json_response).to have_attributes(attributes)
47
+ json_response.should have_attributes(attributes)
48
48
  check_option_values(json_response["option_values"])
49
49
  end
50
50
 
@@ -63,13 +63,13 @@ module Spree
63
63
  :name => "Option Type"
64
64
  }
65
65
  assert_not_found!
66
- expect(option_type.reload.name).to eq(original_name)
66
+ option_type.reload.name.should == original_name
67
67
  end
68
68
 
69
69
  it "cannot delete an option type" do
70
70
  api_delete :destroy, :id => option_type.id
71
71
  assert_not_found!
72
- expect { option_type.reload }.not_to raise_error
72
+ lambda { option_type.reload }.should_not raise_error
73
73
  end
74
74
 
75
75
  context "as an admin" do
@@ -80,13 +80,13 @@ module Spree
80
80
  :name => "Option Type",
81
81
  :presentation => "Option Type"
82
82
  }
83
- expect(json_response).to have_attributes(attributes)
84
- expect(response.status).to eq(201)
83
+ json_response.should have_attributes(attributes)
84
+ response.status.should == 201
85
85
  end
86
86
 
87
87
  it "cannot create an option type with invalid attributes" do
88
88
  api_post :create, :option_type => {}
89
- expect(response.status).to eq(422)
89
+ response.status.should == 422
90
90
  end
91
91
 
92
92
  it "can update an option type" do
@@ -94,22 +94,22 @@ module Spree
94
94
  api_put :update, :id => option_type.id, :option_type => {
95
95
  :name => "Option Type",
96
96
  }
97
- expect(response.status).to eq(200)
97
+ response.status.should == 200
98
98
 
99
99
  option_type.reload
100
- expect(option_type.name).to eq("Option Type")
100
+ option_type.name.should == "Option Type"
101
101
  end
102
102
 
103
103
  it "cannot update an option type with invalid attributes" do
104
104
  api_put :update, :id => option_type.id, :option_type => {
105
105
  :name => ""
106
106
  }
107
- expect(response.status).to eq(422)
107
+ response.status.should == 422
108
108
  end
109
109
 
110
110
  it "can delete an option type" do
111
111
  api_delete :destroy, :id => option_type.id
112
- expect(response.status).to eq(204)
112
+ response.status.should == 204
113
113
  end
114
114
  end
115
115
  end
@@ -1,7 +1,7 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  module Spree
4
- describe Api::OptionValuesController, :type => :controller do
4
+ describe Api::OptionValuesController do
5
5
  render_views
6
6
 
7
7
  let(:attributes) { [:id, :name, :presentation, :option_type_name, :option_type_name] }
@@ -13,8 +13,8 @@ module Spree
13
13
  end
14
14
 
15
15
  def check_option_values(option_values)
16
- expect(option_values.count).to eq(1)
17
- expect(option_values.first).to have_attributes([:id, :name, :presentation,
16
+ option_values.count.should == 1
17
+ option_values.first.should have_attributes([:id, :name, :presentation,
18
18
  :option_type_name, :option_type_id])
19
19
  end
20
20
 
@@ -26,8 +26,8 @@ module Spree
26
26
 
27
27
  it "can retreive a list of all option values" do
28
28
  api_get :index
29
- expect(json_response.count).to eq(2)
30
- expect(json_response.first).to have_attributes(attributes)
29
+ json_response.count.should == 2
30
+ json_response.first.should have_attributes(attributes)
31
31
  end
32
32
  end
33
33
 
@@ -36,27 +36,27 @@ module Spree
36
36
 
37
37
  it "can list all option values" do
38
38
  api_get :index
39
- expect(json_response.count).to eq(1)
40
- expect(json_response.first).to have_attributes(attributes)
39
+ json_response.count.should == 1
40
+ json_response.first.should have_attributes(attributes)
41
41
  end
42
42
 
43
43
  it "can search for an option type" do
44
44
  create(:option_value, :name => "buzz")
45
45
  api_get :index, :q => { :name_cont => option_value.name }
46
- expect(json_response.count).to eq(1)
47
- expect(json_response.first).to have_attributes(attributes)
46
+ json_response.count.should == 1
47
+ json_response.first.should have_attributes(attributes)
48
48
  end
49
49
 
50
50
  it "can retreive a list of option types" do
51
51
  option_value_1 = create(:option_value, :option_type => option_type)
52
52
  option_value_2 = create(:option_value, :option_type => option_type)
53
53
  api_get :index, :ids => [option_value.id, option_value_1.id]
54
- expect(json_response.count).to eq(2)
54
+ json_response.count.should == 2
55
55
  end
56
56
 
57
57
  it "can list a single option value" do
58
58
  api_get :show, :id => option_value.id
59
- expect(json_response).to have_attributes(attributes)
59
+ json_response.should have_attributes(attributes)
60
60
  end
61
61
 
62
62
  it "cannot create a new option value" do
@@ -74,13 +74,13 @@ module Spree
74
74
  :name => "Option Value"
75
75
  }
76
76
  assert_not_found!
77
- expect(option_type.reload.name).to eq(original_name)
77
+ option_type.reload.name.should == original_name
78
78
  end
79
79
 
80
80
  it "cannot delete an option value" do
81
81
  api_delete :destroy, :id => option_type.id
82
82
  assert_not_found!
83
- expect { option_type.reload }.not_to raise_error
83
+ lambda { option_type.reload }.should_not raise_error
84
84
  end
85
85
 
86
86
  context "as an admin" do
@@ -91,13 +91,13 @@ module Spree
91
91
  :name => "Option Value",
92
92
  :presentation => "Option Value"
93
93
  }
94
- expect(json_response).to have_attributes(attributes)
95
- expect(response.status).to eq(201)
94
+ json_response.should have_attributes(attributes)
95
+ response.status.should == 201
96
96
  end
97
97
 
98
98
  it "cannot create an option type with invalid attributes" do
99
99
  api_post :create, :option_value => {}
100
- expect(response.status).to eq(422)
100
+ response.status.should == 422
101
101
  end
102
102
 
103
103
  it "can update an option value" do
@@ -105,14 +105,14 @@ module Spree
105
105
  api_put :update, :id => option_value.id, :option_value => {
106
106
  :name => "Option Value",
107
107
  }
108
- expect(response.status).to eq(200)
108
+ response.status.should == 200
109
109
 
110
110
  option_value.reload
111
- expect(option_value.name).to eq("Option Value")
111
+ option_value.name.should == "Option Value"
112
112
  end
113
113
 
114
114
  it "permits the correct attributes" do
115
- expect(controller).to receive(:permitted_option_value_attributes)
115
+ controller.should_receive(:permitted_option_value_attributes)
116
116
  api_put :update, :id => option_value.id, :option_value => {
117
117
  :name => ""
118
118
  }
@@ -122,12 +122,12 @@ module Spree
122
122
  api_put :update, :id => option_value.id, :option_value => {
123
123
  :name => ""
124
124
  }
125
- expect(response.status).to eq(422)
125
+ response.status.should == 422
126
126
  end
127
127
 
128
128
  it "can delete an option value" do
129
129
  api_delete :destroy, :id => option_value.id
130
- expect(response.status).to eq(204)
130
+ response.status.should == 204
131
131
  end
132
132
  end
133
133
  end