solidus_api_v2 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +15 -0
- data/.rspec +2 -0
- data/CHANGELOG.md +38 -0
- data/Gemfile +13 -0
- data/LICENSE +26 -0
- data/README.md +98 -0
- data/Rakefile +37 -0
- data/app/controllers/concerns/spree/api/v2/renderable.rb +51 -0
- data/app/controllers/spree/api/v2/base_controller.rb +31 -0
- data/app/controllers/spree/api/v2/children_controller.rb +29 -0
- data/app/controllers/spree/api/v2/countries_controller.rb +21 -0
- data/app/controllers/spree/api/v2/images_controller.rb +29 -0
- data/app/controllers/spree/api/v2/line_items_controller.rb +36 -0
- data/app/controllers/spree/api/v2/option_types_controller.rb +31 -0
- data/app/controllers/spree/api/v2/option_values_controller.rb +29 -0
- data/app/controllers/spree/api/v2/orders_controller.rb +11 -0
- data/app/controllers/spree/api/v2/prices_controller.rb +27 -0
- data/app/controllers/spree/api/v2/products_controller.rb +37 -0
- data/app/controllers/spree/api/v2/states_controller.rb +29 -0
- data/app/controllers/spree/api/v2/taxonomies_controller.rb +21 -0
- data/app/controllers/spree/api/v2/taxons_controller.rb +40 -0
- data/app/controllers/spree/api/v2/variants_controller.rb +35 -0
- data/app/models/spree/base_decorator.rb +5 -0
- data/app/models/spree/image_decorator.rb +3 -0
- data/app/models/spree/price_decorator.rb +3 -0
- data/app/models/spree/state_decorator.rb +3 -0
- data/app/serializers/spree/address_serializer.rb +9 -0
- data/app/serializers/spree/base_serializer.rb +13 -0
- data/app/serializers/spree/country_serializer.rb +7 -0
- data/app/serializers/spree/error_serializer.rb +52 -0
- data/app/serializers/spree/image_serializer.rb +13 -0
- data/app/serializers/spree/line_item_serializer.rb +13 -0
- data/app/serializers/spree/option_type_serializer.rb +8 -0
- data/app/serializers/spree/option_value_serializer.rb +8 -0
- data/app/serializers/spree/order_serializer.rb +21 -0
- data/app/serializers/spree/price_serializer.rb +7 -0
- data/app/serializers/spree/product_serializer.rb +12 -0
- data/app/serializers/spree/role_serializer.rb +5 -0
- data/app/serializers/spree/state_serializer.rb +7 -0
- data/app/serializers/spree/store_serializer.rb +6 -0
- data/app/serializers/spree/taxon_serializer.rb +16 -0
- data/app/serializers/spree/taxonomy_serializer.rb +7 -0
- data/app/serializers/spree/user_serializer.rb +5 -0
- data/app/serializers/spree/variant_serializer.rb +12 -0
- data/bin/rails +7 -0
- data/circle.yml +13 -0
- data/config/locales/en.yml +25 -0
- data/config/routes.rb +53 -0
- data/docs/.nojekyll +0 -0
- data/docs/Dockerfile +12 -0
- data/docs/Gemfile +13 -0
- data/docs/README.md +12 -0
- data/docs/Rakefile +9 -0
- data/docs/config.rb +39 -0
- data/docs/font-selection.json +148 -0
- data/docs/source/fonts/slate.eot +0 -0
- data/docs/source/fonts/slate.svg +14 -0
- data/docs/source/fonts/slate.ttf +0 -0
- data/docs/source/fonts/slate.woff +0 -0
- data/docs/source/fonts/slate.woff2 +0 -0
- data/docs/source/images/logo.png +0 -0
- data/docs/source/images/navbar.png +0 -0
- data/docs/source/includes/_authentication.md +61 -0
- data/docs/source/includes/_countries.md +133 -0
- data/docs/source/includes/_errors.md +17 -0
- data/docs/source/includes/_filtering.md +11 -0
- data/docs/source/includes/_images.md +201 -0
- data/docs/source/includes/_line_items.md +137 -0
- data/docs/source/includes/_option_types.md +267 -0
- data/docs/source/includes/_option_values.md +227 -0
- data/docs/source/includes/_orders.md +75 -0
- data/docs/source/includes/_pagination.md +10 -0
- data/docs/source/includes/_prices.md +188 -0
- data/docs/source/includes/_products.md +403 -0
- data/docs/source/includes/_states.md +96 -0
- data/docs/source/includes/_taxonomies.md +325 -0
- data/docs/source/includes/_taxons.md +414 -0
- data/docs/source/includes/_variants.md +430 -0
- data/docs/source/index.md +53 -0
- data/docs/source/javascripts/all.js +4 -0
- data/docs/source/javascripts/all_nosearch.js +3 -0
- data/docs/source/javascripts/app/_lang.js +162 -0
- data/docs/source/javascripts/app/_search.js +74 -0
- data/docs/source/javascripts/app/_toc.js +55 -0
- data/docs/source/javascripts/lib/_energize.js +169 -0
- data/docs/source/javascripts/lib/_imagesloaded.min.js +7 -0
- data/docs/source/javascripts/lib/_jquery.highlight.js +108 -0
- data/docs/source/javascripts/lib/_jquery.tocify.js +1042 -0
- data/docs/source/javascripts/lib/_jquery_ui.js +566 -0
- data/docs/source/javascripts/lib/_lunr.js +1910 -0
- data/docs/source/layouts/layout.erb +102 -0
- data/docs/source/stylesheets/_icon-font.scss +38 -0
- data/docs/source/stylesheets/_normalize.css +427 -0
- data/docs/source/stylesheets/_syntax.scss.erb +27 -0
- data/docs/source/stylesheets/_variables.scss +109 -0
- data/docs/source/stylesheets/print.css.scss +142 -0
- data/docs/source/stylesheets/screen.css.scss +622 -0
- data/lib/solidus_api_v2.rb +5 -0
- data/lib/spree_api_v2/engine.rb +21 -0
- data/lib/spree_api_v2.rb +4 -0
- data/solidus_api_v2.gemspec +36 -0
- data/spec/controllers/spree/api/v2/children_controller_spec.rb +28 -0
- data/spec/controllers/spree/api/v2/countries_controller_spec.rb +25 -0
- data/spec/controllers/spree/api/v2/images_controller_spec.rb +93 -0
- data/spec/controllers/spree/api/v2/line_items_controller_spec.rb +86 -0
- data/spec/controllers/spree/api/v2/option_types_controller_spec.rb +73 -0
- data/spec/controllers/spree/api/v2/option_values_controller_spec.rb +88 -0
- data/spec/controllers/spree/api/v2/orders_controller_spec.rb +15 -0
- data/spec/controllers/spree/api/v2/prices_controller_spec.rb +55 -0
- data/spec/controllers/spree/api/v2/products_controller_spec.rb +95 -0
- data/spec/controllers/spree/api/v2/states_controller_spec.rb +42 -0
- data/spec/controllers/spree/api/v2/taxonomies_controller_spec.rb +31 -0
- data/spec/controllers/spree/api/v2/taxons_controller_spec.rb +54 -0
- data/spec/controllers/spree/api/v2/variants_controller_spec.rb +108 -0
- data/spec/models/spree/base_decorator_spec.rb +9 -0
- data/spec/models/spree/price_decorator_spec.rb +3 -0
- data/spec/serializers/spree/address_serializer_spec.rb +35 -0
- data/spec/serializers/spree/country_serializer_spec.rb +27 -0
- data/spec/serializers/spree/error_serializer_spec.rb +116 -0
- data/spec/serializers/spree/image_serializer_spec.rb +30 -0
- data/spec/serializers/spree/line_item_serializer_spec.rb +40 -0
- data/spec/serializers/spree/option_type_serializer_spec.rb +27 -0
- data/spec/serializers/spree/option_value_serializer_spec.rb +29 -0
- data/spec/serializers/spree/order_serializer_spec.rb +69 -0
- data/spec/serializers/spree/price_serializer_spec.rb +28 -0
- data/spec/serializers/spree/product_serializer_spec.rb +47 -0
- data/spec/serializers/spree/role_serializer_spec.rb +17 -0
- data/spec/serializers/spree/state_serializer_spec.rb +25 -0
- data/spec/serializers/spree/store_serializer_spec.rb +25 -0
- data/spec/serializers/spree/taxon_serializer_spec.rb +44 -0
- data/spec/serializers/spree/taxonomy_serializer_spec.rb +27 -0
- data/spec/serializers/spree/user_serializer_spec.rb +17 -0
- data/spec/serializers/spree/variant_serializer_spec.rb +55 -0
- data/spec/spec_helper.rb +51 -0
- data/spec/support/shoulda_matchers.rb +6 -0
- data/spree_api_v2.gemspec +36 -0
- metadata +437 -0
@@ -0,0 +1,28 @@
|
|
1
|
+
describe Spree::Api::V2::ChildrenController do
|
2
|
+
routes { Spree::Core::Engine.routes }
|
3
|
+
|
4
|
+
let(:taxon) { create :taxon }
|
5
|
+
let!(:child) { create :taxon, parent: taxon, taxonomy: taxon.taxonomy }
|
6
|
+
|
7
|
+
describe '#index' do
|
8
|
+
context 'by taxon' do
|
9
|
+
it 'can list all the children' do
|
10
|
+
get :index, taxon_id: taxon.id
|
11
|
+
taxon_ids = parse_json(response.body)['data'].map do |taxon|
|
12
|
+
taxon['id']
|
13
|
+
end
|
14
|
+
expect(taxon_ids).to include child.id.to_s
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
describe '#show' do
|
20
|
+
context 'by taxon' do
|
21
|
+
it 'will fetch the selected child' do
|
22
|
+
get :show, taxon_id: taxon.id, id: child.id
|
23
|
+
child_id = parse_json(response.body)['data']['id']
|
24
|
+
expect(child_id).to eql child.id.to_s
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
describe Spree::Api::V2::CountriesController do
|
2
|
+
routes { Spree::Core::Engine.routes }
|
3
|
+
|
4
|
+
let!(:country) { create :country }
|
5
|
+
let(:state) { create :state, country: country }
|
6
|
+
|
7
|
+
describe '#index' do
|
8
|
+
it 'will list all countries' do
|
9
|
+
get :index
|
10
|
+
expect(JSON.parse(response.body)['data'].length).to eql 1
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
describe '#show' do
|
15
|
+
it 'will list the selected country' do
|
16
|
+
get :show, id: country.id
|
17
|
+
expect(JSON.parse(response.body)['data']['id']).to eql country.id.to_s
|
18
|
+
end
|
19
|
+
|
20
|
+
it 'will the country via a state' do
|
21
|
+
get :show, state_id: state.id
|
22
|
+
expect(JSON.parse(response.body)['data']['id']).to eql country.id.to_s
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,93 @@
|
|
1
|
+
describe Spree::Api::V2::ImagesController do
|
2
|
+
routes { Spree::Core::Engine.routes }
|
3
|
+
|
4
|
+
let!(:image) { create :image }
|
5
|
+
|
6
|
+
let(:product) { create :product }
|
7
|
+
let(:new_product) { create :product }
|
8
|
+
|
9
|
+
let(:variant) { create :variant, images: [image] }
|
10
|
+
let(:new_variant) { create :variant, images: [create(:image)] }
|
11
|
+
|
12
|
+
describe '#index' do
|
13
|
+
it 'will list the images' do
|
14
|
+
get :index
|
15
|
+
image_ids = parse_json(response.body)['data'].map do |image|
|
16
|
+
image['id']
|
17
|
+
end
|
18
|
+
expect(image_ids).to include image.id.to_s
|
19
|
+
end
|
20
|
+
|
21
|
+
context 'by product id' do
|
22
|
+
it 'will list its images' do
|
23
|
+
product.images << image
|
24
|
+
get :index, product_id: product.id
|
25
|
+
image_ids = parse_json(response.body)['data'].map do |image|
|
26
|
+
image['id']
|
27
|
+
end
|
28
|
+
expect(image_ids).to include image.id.to_s
|
29
|
+
end
|
30
|
+
|
31
|
+
it 'will not list another products images' do
|
32
|
+
get :index, product_id: new_product.id
|
33
|
+
image_ids = parse_json(response.body)['data'].map do |image|
|
34
|
+
image['id']
|
35
|
+
end
|
36
|
+
expect(image_ids).to_not include image.id.to_s
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
context 'by variant id' do
|
41
|
+
it 'will list its images' do
|
42
|
+
get :index, variant_id: variant.id
|
43
|
+
image_ids = parse_json(response.body)['data'].map do |image|
|
44
|
+
image['id']
|
45
|
+
end
|
46
|
+
expect(image_ids).to include image.id.to_s
|
47
|
+
end
|
48
|
+
|
49
|
+
it 'will not list another variants images' do
|
50
|
+
get :index, variant_id: new_variant.id
|
51
|
+
image_ids = parse_json(response.body)['data'].map do |image|
|
52
|
+
image['id']
|
53
|
+
end
|
54
|
+
expect(image_ids).to_not include image.id.to_s
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
describe '#show' do
|
60
|
+
it 'will show the image' do
|
61
|
+
get :show, id: image.id
|
62
|
+
image_id = parse_json(response.body)['data']['id']
|
63
|
+
expect(image_id).to eql image.id.to_s
|
64
|
+
end
|
65
|
+
|
66
|
+
context 'by product id' do
|
67
|
+
it 'will show its image' do
|
68
|
+
product.images << image
|
69
|
+
get :show, id: image.id, product_id: product.id
|
70
|
+
image_id = parse_json(response.body)['data']['id']
|
71
|
+
expect(image_id).to eql image.id.to_s
|
72
|
+
end
|
73
|
+
|
74
|
+
it 'will not show another products image' do
|
75
|
+
get :show, id: image.id, product_id: new_product.id
|
76
|
+
expect(response).to have_http_status 404
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
context 'by variant id' do
|
81
|
+
it 'will show its image' do
|
82
|
+
get :show, id: image.id, variant_id: variant.id
|
83
|
+
image_id = parse_json(response.body)['data']['id']
|
84
|
+
expect(image_id).to eql image.id.to_s
|
85
|
+
end
|
86
|
+
|
87
|
+
it 'will not show another products image' do
|
88
|
+
get :show, id: image.id, variant_id: new_variant.id
|
89
|
+
expect(response).to have_http_status 404
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
@@ -0,0 +1,86 @@
|
|
1
|
+
describe Spree::Api::V2::LineItemsController do
|
2
|
+
routes { Spree::Core::Engine.routes }
|
3
|
+
|
4
|
+
let(:order) { create :order }
|
5
|
+
let(:user) { order.user }
|
6
|
+
let(:variant) { create :variant }
|
7
|
+
|
8
|
+
before { user.generate_spree_api_key! }
|
9
|
+
|
10
|
+
describe '#create' do
|
11
|
+
let(:line_item_params) { { order_id: order.id, variant_id: variant.id, quantity: 1 } }
|
12
|
+
|
13
|
+
context 'on success' do
|
14
|
+
it 'will respond with line item' do
|
15
|
+
post :create, token: user.spree_api_key, line_item: line_item_params
|
16
|
+
expect(JSON.parse(response.body)['data']['type']).to eql 'spree_line_items'
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
context 'when out of range' do
|
21
|
+
before do
|
22
|
+
post :create, token: user.spree_api_key,
|
23
|
+
line_item: line_item_params.merge(quantity: 123_123_123_123)
|
24
|
+
end
|
25
|
+
|
26
|
+
it 'will respond with quantity too high error' do
|
27
|
+
expect(response.body).to be_json_eql <<-JSON
|
28
|
+
{
|
29
|
+
"errors" : [
|
30
|
+
{
|
31
|
+
"detail" : #{Spree.t('api.errors.quantity_too_high.detail').gsub("\n", '').to_json},
|
32
|
+
"meta" : {},
|
33
|
+
"title" : #{Spree.t('api.errors.quantity_too_high.title').titleize.to_json}
|
34
|
+
}
|
35
|
+
]
|
36
|
+
}
|
37
|
+
JSON
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
context 'when record not found' do
|
42
|
+
before do
|
43
|
+
post :create, token: user.spree_api_key, line_item: line_item_params.merge(order_id: 0)
|
44
|
+
end
|
45
|
+
|
46
|
+
it 'will respond with record not found error' do
|
47
|
+
expect(response.body).to be_json_eql <<-JSON
|
48
|
+
{
|
49
|
+
"errors" : [
|
50
|
+
{
|
51
|
+
"detail" : #{Spree.t('api.errors.record_not_found.detail').gsub("\n", '').to_json},
|
52
|
+
"meta" : {},
|
53
|
+
"title" : #{Spree.t('api.errors.record_not_found.title').to_json}
|
54
|
+
}
|
55
|
+
]
|
56
|
+
}
|
57
|
+
JSON
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
context 'when record is invalid' do
|
62
|
+
let(:stock_item) { variant.stock_items.first }
|
63
|
+
|
64
|
+
before do
|
65
|
+
quantity = stock_item.count_on_hand + 1
|
66
|
+
stock_item.update(backorderable: false)
|
67
|
+
post :create, token: user.spree_api_key,
|
68
|
+
line_item: line_item_params.merge(quantity: quantity)
|
69
|
+
end
|
70
|
+
|
71
|
+
it 'will respond with product out of stock' do
|
72
|
+
expect(response.body).to be_json_eql <<-JSON
|
73
|
+
{
|
74
|
+
"errors" : [
|
75
|
+
{
|
76
|
+
"detail" : "#{Spree.t('api.errors.product_out_of_stock.detail').gsub("\n", '')}",
|
77
|
+
"meta" : {},
|
78
|
+
"title" : #{Spree.t('api.errors.product_out_of_stock.title').titleize.to_json}
|
79
|
+
}
|
80
|
+
]
|
81
|
+
}
|
82
|
+
JSON
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
@@ -0,0 +1,73 @@
|
|
1
|
+
describe Spree::Api::V2::OptionTypesController do
|
2
|
+
routes { Spree::Core::Engine.routes }
|
3
|
+
|
4
|
+
let!(:option_type) { create :option_type }
|
5
|
+
let(:product) { create :product, option_types: [option_type] }
|
6
|
+
let(:new_product) { create :product }
|
7
|
+
|
8
|
+
describe '#index' do
|
9
|
+
it 'will list all option types' do
|
10
|
+
get :index
|
11
|
+
option_type_ids = parse_json(response.body)['data'].map do |option_type|
|
12
|
+
option_type['id']
|
13
|
+
end
|
14
|
+
expect(option_type_ids).to include option_type.id.to_s
|
15
|
+
end
|
16
|
+
|
17
|
+
context 'by product' do
|
18
|
+
it 'will list option types' do
|
19
|
+
get :index, product_id: product.id
|
20
|
+
option_type_ids = parse_json(response.body)['data'].map do |option_type|
|
21
|
+
option_type['id']
|
22
|
+
end
|
23
|
+
expect(option_type_ids).to include option_type.id.to_s
|
24
|
+
end
|
25
|
+
|
26
|
+
it 'will not list option types belonging to a different product' do
|
27
|
+
get :index, product_id: new_product.id
|
28
|
+
option_type_ids = parse_json(response.body)['data'].map do |option_type|
|
29
|
+
option_type['id']
|
30
|
+
end
|
31
|
+
expect(option_type_ids).to_not include option_type.id.to_s
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
describe '#show' do
|
37
|
+
it 'will find selected option_type by id' do
|
38
|
+
get :show, id: option_type.id
|
39
|
+
option_type_id = parse_json(response.body)['data']['id']
|
40
|
+
expect(option_type_id).to eql option_type.id.to_s
|
41
|
+
end
|
42
|
+
|
43
|
+
context 'by product' do
|
44
|
+
it 'will list option types' do
|
45
|
+
get :show, id: option_type.id, product_id: product.id
|
46
|
+
option_type_id = parse_json(response.body)['data']['id']
|
47
|
+
expect(option_type_id).to eql option_type.id.to_s
|
48
|
+
end
|
49
|
+
|
50
|
+
it 'will not list option types belonging to a different product' do
|
51
|
+
get :show, id: option_type.id, product_id: new_product.id
|
52
|
+
expect(response).to have_http_status 404
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
context 'by option value' do
|
57
|
+
let(:option_value) { create :option_value, option_type: option_type }
|
58
|
+
let(:new_option_value) { create :option_value }
|
59
|
+
|
60
|
+
it 'will list option types' do
|
61
|
+
get :show, option_value_id: option_value.id
|
62
|
+
option_type_id = parse_json(response.body)['data']['id']
|
63
|
+
expect(option_type_id).to eql option_type.id.to_s
|
64
|
+
end
|
65
|
+
|
66
|
+
it 'will not list option types belonging to a different option value' do
|
67
|
+
get :show, option_value_id: new_option_value.id
|
68
|
+
option_type_id = parse_json(response.body)['data']['id']
|
69
|
+
expect(option_type_id).to_not eql option_type.id.to_s
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
@@ -0,0 +1,88 @@
|
|
1
|
+
describe Spree::Api::V2::OptionValuesController do
|
2
|
+
routes { Spree::Core::Engine.routes }
|
3
|
+
|
4
|
+
let!(:option_value) { create :option_value }
|
5
|
+
let(:new_option_value) { create :option_value }
|
6
|
+
let(:variant) { create :variant, option_values: [option_value] }
|
7
|
+
let(:new_variant) { create :variant }
|
8
|
+
|
9
|
+
describe '#index' do
|
10
|
+
it 'will list all option values' do
|
11
|
+
get :index
|
12
|
+
option_value_ids = parse_json(response.body)['data'].map do |option_value|
|
13
|
+
option_value['id']
|
14
|
+
end
|
15
|
+
expect(option_value_ids).to include option_value.id.to_s
|
16
|
+
end
|
17
|
+
|
18
|
+
context 'by option type' do
|
19
|
+
it 'will list all option values' do
|
20
|
+
get :index, option_type_id: option_value.option_type.id
|
21
|
+
option_value_ids = parse_json(response.body)['data'].map do |option_value|
|
22
|
+
option_value['id']
|
23
|
+
end
|
24
|
+
expect(option_value_ids).to include option_value.id.to_s
|
25
|
+
end
|
26
|
+
|
27
|
+
it 'will not list option value belonging to a different option type' do
|
28
|
+
get :index, option_type_id: new_option_value.option_type.id
|
29
|
+
option_value_ids = parse_json(response.body)['data'].map do |option_value|
|
30
|
+
option_value['id']
|
31
|
+
end
|
32
|
+
expect(option_value_ids).to_not include option_value.id.to_s
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
context 'by variant' do
|
37
|
+
it 'will list all option values' do
|
38
|
+
get :index, variant_id: variant.id
|
39
|
+
option_value_ids = parse_json(response.body)['data'].map do |option_value|
|
40
|
+
option_value['id']
|
41
|
+
end
|
42
|
+
expect(option_value_ids).to include option_value.id.to_s
|
43
|
+
end
|
44
|
+
|
45
|
+
it 'will not list option value belonging to a different variant' do
|
46
|
+
get :index, variant_id: new_variant.id
|
47
|
+
option_value_ids = parse_json(response.body)['data'].map do |option_value|
|
48
|
+
option_value['id']
|
49
|
+
end
|
50
|
+
expect(option_value_ids).to_not include option_value.id.to_s
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
describe '#show' do
|
56
|
+
it 'will find selected option value by id' do
|
57
|
+
get :show, id: option_value.id
|
58
|
+
option_value_id = parse_json(response.body)['data']['id']
|
59
|
+
expect(option_value_id).to eql option_value.id.to_s
|
60
|
+
end
|
61
|
+
|
62
|
+
context 'by option type' do
|
63
|
+
it 'will find option value by option type' do
|
64
|
+
get :show, option_type_id: option_value.option_type.id, id: option_value.id
|
65
|
+
option_value_id = parse_json(response.body)['data']['id']
|
66
|
+
expect(option_value_id).to eql option_value.id.to_s
|
67
|
+
end
|
68
|
+
|
69
|
+
it 'will not find option value belonging to a different option type' do
|
70
|
+
get :show, option_type_id: new_option_value.option_type.id, id: option_value.id
|
71
|
+
expect(response).to have_http_status 404
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
context 'by variant' do
|
76
|
+
it 'will find option value by option type' do
|
77
|
+
get :show, variant_id: variant.id, id: option_value.id
|
78
|
+
option_value_id = parse_json(response.body)['data']['id']
|
79
|
+
expect(option_value_id).to eql option_value.id.to_s
|
80
|
+
end
|
81
|
+
|
82
|
+
it 'will not find option value belonging to a different option type' do
|
83
|
+
get :show, variant_id: new_variant.id, id: option_value.id
|
84
|
+
expect(response).to have_http_status 404
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
describe Spree::Api::V2::OrdersController do
|
2
|
+
routes { Spree::Core::Engine.routes }
|
3
|
+
|
4
|
+
let(:order) { create :order }
|
5
|
+
let(:user) { order.user }
|
6
|
+
|
7
|
+
before { user.generate_spree_api_key! }
|
8
|
+
|
9
|
+
describe '#show' do
|
10
|
+
it 'will respond with the order' do
|
11
|
+
get :show, token: user.spree_api_key, id: order.id
|
12
|
+
expect(JSON.parse(response.body)['data']['type']).to eql 'spree_orders'
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
describe Spree::Api::V2::PricesController do
|
2
|
+
routes { Spree::Core::Engine.routes }
|
3
|
+
|
4
|
+
let!(:price) { create :price }
|
5
|
+
let(:new_variant) { create :variant }
|
6
|
+
|
7
|
+
describe '#index' do
|
8
|
+
it 'will list all prices' do
|
9
|
+
get :index
|
10
|
+
price_ids = parse_json(response.body)['data'].map do |price|
|
11
|
+
price['id']
|
12
|
+
end
|
13
|
+
expect(price_ids).to include price.id.to_s
|
14
|
+
end
|
15
|
+
|
16
|
+
context 'by variant id' do
|
17
|
+
it 'will list its prices' do
|
18
|
+
get :index, variant_id: price.variant.id
|
19
|
+
price_ids = parse_json(response.body)['data'].map do |price|
|
20
|
+
price['id']
|
21
|
+
end
|
22
|
+
expect(price_ids).to include price.id.to_s
|
23
|
+
end
|
24
|
+
|
25
|
+
it 'will not list another variants prices' do
|
26
|
+
get :index, variant_id: new_variant.id
|
27
|
+
price_ids = parse_json(response.body)['data'].map do |price|
|
28
|
+
price['id']
|
29
|
+
end
|
30
|
+
expect(price_ids).to_not include price.id.to_s
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
describe '#show' do
|
36
|
+
it 'will show the price' do
|
37
|
+
get :show, id: price.id
|
38
|
+
price_id = parse_json(response.body)['data']['id']
|
39
|
+
expect(price_id).to eql price.id.to_s
|
40
|
+
end
|
41
|
+
|
42
|
+
context 'by variant id' do
|
43
|
+
it 'will show its prices' do
|
44
|
+
get :show, id: price.id, variant_id: price.variant.id
|
45
|
+
price_id = parse_json(response.body)['data']['id']
|
46
|
+
expect(price_id).to eql price.id.to_s
|
47
|
+
end
|
48
|
+
|
49
|
+
it 'will not show another variants price' do
|
50
|
+
get :show, id: price.id, variant_id: new_variant.id
|
51
|
+
expect(response).to have_http_status 404
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
@@ -0,0 +1,95 @@
|
|
1
|
+
describe Spree::Api::V2::ProductsController do
|
2
|
+
routes { Spree::Core::Engine.routes }
|
3
|
+
|
4
|
+
let!(:product) { create :product }
|
5
|
+
let(:taxon) { create :taxon, products: [product] }
|
6
|
+
let(:new_taxon) { create :taxon }
|
7
|
+
|
8
|
+
describe '#index' do
|
9
|
+
it 'will respond with products' do
|
10
|
+
get :index
|
11
|
+
expect(JSON.parse(response.body)['data'].size).to eql 1
|
12
|
+
end
|
13
|
+
|
14
|
+
context 'by taxon id' do
|
15
|
+
it 'will respond with the taxons products' do
|
16
|
+
get :index, taxon_id: taxon.id
|
17
|
+
product_ids = parse_json(response.body)['data'].map do |products|
|
18
|
+
products['id']
|
19
|
+
end
|
20
|
+
expect(product_ids).to include product.id.to_s
|
21
|
+
end
|
22
|
+
|
23
|
+
it 'will not respond with a product that is not associated to the taxon' do
|
24
|
+
get :index, taxon_id: new_taxon.id
|
25
|
+
product_ids = parse_json(response.body)['data'].map do |products|
|
26
|
+
products['id']
|
27
|
+
end
|
28
|
+
expect(product_ids).to_not include product.id.to_s
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
describe '#show' do
|
34
|
+
it 'will render the selected product' do
|
35
|
+
get :show, id: product.id
|
36
|
+
expect(parse_json(response.body)['data']['id']).to eql product.id.to_s
|
37
|
+
end
|
38
|
+
|
39
|
+
context 'by taxon id' do
|
40
|
+
it 'will respond with the taxons products' do
|
41
|
+
get :show, taxon_id: taxon.id, id: product.id
|
42
|
+
product_id = parse_json(response.body)['data']['id']
|
43
|
+
expect(product_id).to eql product.id.to_s
|
44
|
+
end
|
45
|
+
|
46
|
+
it 'will not respond with a product that is not associated to the taxon' do
|
47
|
+
get :show, taxon_id: new_taxon.id, id: product.id
|
48
|
+
expect(response).to have_http_status 404
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
context 'by option type' do
|
53
|
+
let(:option_type) { create :option_type, products: [product] }
|
54
|
+
let(:new_option_type) { create :option_type }
|
55
|
+
|
56
|
+
it 'will find product' do
|
57
|
+
get :show, option_type_id: option_type.id, id: product.id
|
58
|
+
product_id = parse_json(response.body)['data']['id']
|
59
|
+
expect(product_id).to eql product.id.to_s
|
60
|
+
end
|
61
|
+
|
62
|
+
it 'will not find a product belong to a different option type' do
|
63
|
+
get :show, option_type_id: new_option_type.id, id: product.id
|
64
|
+
expect(response).to have_http_status 404
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
context 'by variant id' do
|
69
|
+
it 'will show its product' do
|
70
|
+
get :show, variant_id: product.master.id
|
71
|
+
product_id = parse_json(response.body)['data']['id']
|
72
|
+
expect(product_id).to eql product.id.to_s
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
context 'by price id' do
|
77
|
+
it 'will show its product' do
|
78
|
+
get :show, price_id: product.master.prices.first.id
|
79
|
+
product_id = parse_json(response.body)['data']['id']
|
80
|
+
expect(product_id).to eql product.id.to_s
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
context 'by image id' do
|
85
|
+
let(:image) { create :image }
|
86
|
+
|
87
|
+
it 'will show its product' do
|
88
|
+
product.images << image
|
89
|
+
get :show, image_id: image.id
|
90
|
+
product_id = parse_json(response.body)['data']['id']
|
91
|
+
expect(product_id).to eql product.id.to_s
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
describe Spree::Api::V2::StatesController do
|
2
|
+
routes { Spree::Core::Engine.routes }
|
3
|
+
|
4
|
+
let!(:state) { create :state }
|
5
|
+
|
6
|
+
describe '#index' do
|
7
|
+
it 'can list all states' do
|
8
|
+
get :index
|
9
|
+
expect(JSON.parse(response.body)['data'].length).to eql 1
|
10
|
+
end
|
11
|
+
|
12
|
+
context 'by country id' do
|
13
|
+
it 'will list selected states by country' do
|
14
|
+
get :index, country_id: state.country.id
|
15
|
+
expect(JSON.parse(response.body)['data'].length).to eql 1
|
16
|
+
end
|
17
|
+
|
18
|
+
it 'will not include states belonging to other countries' do
|
19
|
+
new_state = create :state
|
20
|
+
get :index, country_id: state.country.id
|
21
|
+
state_ids = JSON.parse(response.body)['data'].map do |states|
|
22
|
+
states['id']
|
23
|
+
end
|
24
|
+
expect(state_ids).to_not include new_state
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
describe '#show' do
|
30
|
+
it 'will find selected state by id' do
|
31
|
+
get :show, id: state.id
|
32
|
+
state_id = parse_json(response.body)['data']['id']
|
33
|
+
expect(state_id).to eql state.id.to_s
|
34
|
+
end
|
35
|
+
|
36
|
+
it 'can find a state by a country' do
|
37
|
+
get :show, country_id: state.country.id, id: state.id
|
38
|
+
state_id = parse_json(response.body)['data']['id']
|
39
|
+
expect(state_id).to eql state.id.to_s
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
describe Spree::Api::V2::TaxonomiesController do
|
2
|
+
routes { Spree::Core::Engine.routes }
|
3
|
+
|
4
|
+
let!(:taxonomy) { create :taxonomy }
|
5
|
+
|
6
|
+
describe '#index' do
|
7
|
+
it 'will list taxonomies' do
|
8
|
+
get :index
|
9
|
+
taxonomy_ids = parse_json(response.body)['data'].map do |taxonomy|
|
10
|
+
taxonomy['id']
|
11
|
+
end
|
12
|
+
expect(taxonomy_ids).to include taxonomy.id.to_s
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
describe '#show' do
|
17
|
+
let(:taxon) { taxonomy.root }
|
18
|
+
|
19
|
+
it 'will show taxonomy' do
|
20
|
+
get :show, id: taxonomy.id
|
21
|
+
taxonomy_id = parse_json(response.body)['data']['id']
|
22
|
+
expect(taxonomy_id).to eql taxonomy.id.to_s
|
23
|
+
end
|
24
|
+
|
25
|
+
it 'can show taxonomy by taxon_id' do
|
26
|
+
get :show, taxon_id: taxon.id
|
27
|
+
taxonomy_id = parse_json(response.body)['data']['id']
|
28
|
+
expect(taxonomy_id).to eql taxonomy.id.to_s
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
describe Spree::Api::V2::TaxonsController do
|
2
|
+
routes { Spree::Core::Engine.routes }
|
3
|
+
|
4
|
+
let!(:taxon) { create :taxon }
|
5
|
+
|
6
|
+
describe '#index' do
|
7
|
+
it 'will list the taxons' do
|
8
|
+
get :index
|
9
|
+
taxon_ids = parse_json(response.body)['data'].map do |taxon|
|
10
|
+
taxon['id']
|
11
|
+
end
|
12
|
+
expect(taxon_ids).to include taxon.id.to_s
|
13
|
+
end
|
14
|
+
|
15
|
+
it 'can list the taxons filtered by taxonomy_id' do
|
16
|
+
get :index, taxonomy_id: taxon.taxonomy.id
|
17
|
+
taxon_ids = parse_json(response.body)['data'].map do |taxon|
|
18
|
+
taxon['id']
|
19
|
+
end
|
20
|
+
expect(taxon_ids).to include taxon.id.to_s
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
describe '#show' do
|
25
|
+
it 'will show the selected taxon' do
|
26
|
+
get :show, id: taxon.id
|
27
|
+
taxon_id = parse_json(response.body)['data']['id']
|
28
|
+
expect(taxon_id).to eql taxon.id.to_s
|
29
|
+
end
|
30
|
+
|
31
|
+
context 'by parent' do
|
32
|
+
it 'can show a taxons parent' do
|
33
|
+
child = create :taxon, parent: taxon
|
34
|
+
get :show, taxon_id: child.id
|
35
|
+
taxon_id = parse_json(response.body)['data']['id']
|
36
|
+
expect(taxon_id).to eql taxon.id.to_s
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
context 'by taxonomy_id' do
|
41
|
+
it 'will fetch the selected taxon' do
|
42
|
+
get :show, taxonomy_id: taxon.taxonomy.id, id: taxon.id
|
43
|
+
taxon_id = parse_json(response.body)['data']['id']
|
44
|
+
expect(taxon_id).to eql taxon.id.to_s
|
45
|
+
end
|
46
|
+
|
47
|
+
it 'when taxon does not belong to taxonomy' do
|
48
|
+
new_taxonomy = create :taxonomy
|
49
|
+
get :show, taxonomy_id: new_taxonomy.id, id: taxon.id
|
50
|
+
expect(response).to have_http_status 404
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|