/
current_order.rb
112 lines (97 loc) 路 5.33 KB
/
current_order.rb
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
def ensure_order_totals
order.update_totals
order.persist_totals
end
shared_context 'creates order with line item' do
let!(:line_item) { create(:line_item, order: order, currency: currency) }
let!(:headers) { headers_bearer }
before do
order.reload
ensure_order_totals
end
end
shared_context 'order with a physical line item' do
include_context 'creates order with line item'
end
shared_context 'order with a digital line item' do
let!(:digital) { create(:digital) }
let!(:variant_digital) { digital.variant }
let!(:line_item) { create(:line_item, variant: variant_digital, order: order, currency: currency) }
let!(:headers) { headers_bearer }
before do
order.reload
ensure_order_totals
end
end
shared_context 'order with a physical and digital line item' do
let!(:digital) { create(:digital) }
let!(:variant_digital) { digital.variant }
let!(:digital_line_item) { create(:line_item, variant: variant_digital, order: order, currency: currency) }
let!(:physical_line_item) { create(:line_item, order: order, currency: currency) }
let!(:headers) { headers_bearer }
before do
order.reload
ensure_order_totals
end
end
shared_context 'creates guest order with guest token' do
let(:guest_token) { 'guest_token' }
let!(:order) { create(:order, token: guest_token, store: store, currency: currency) }
let!(:line_item) { create(:line_item, order: order, currency: currency) }
let!(:headers) { headers_order_token }
before { ensure_order_totals }
end
shared_examples 'returns valid cart JSON' do
it 'returns a valid cart JSON response' do
order.reload
expect(json_response['data']).to be_present
expect(json_response['data']).to have_id(order.id.to_s)
expect(json_response['data']).to have_type('cart')
expect(json_response['data']).to have_attribute(:number).with_value(order.number)
expect(json_response['data']).to have_attribute(:state).with_value(order.state)
expect(json_response['data']).to have_attribute(:payment_state).with_value(order.payment_state)
expect(json_response['data']).to have_attribute(:shipment_state).with_value(order.shipment_state)
expect(json_response['data']).to have_attribute(:token).with_value(order.token)
expect(json_response['data']).to have_attribute(:total).with_value(order.total.to_s)
expect(json_response['data']).to have_attribute(:item_total).with_value(order.item_total.to_s)
expect(json_response['data']).to have_attribute(:ship_total).with_value(order.ship_total.to_s)
expect(json_response['data']).to have_attribute(:adjustment_total).with_value(order.adjustment_total.to_s)
expect(json_response['data']).to have_attribute(:included_tax_total).with_value(order.included_tax_total.to_s)
expect(json_response['data']).to have_attribute(:additional_tax_total).with_value(order.additional_tax_total.to_s)
expect(json_response['data']).to have_attribute(:display_additional_tax_total).with_value(order.display_additional_tax_total.to_s)
expect(json_response['data']).to have_attribute(:display_included_tax_total).with_value(order.display_included_tax_total.to_s)
expect(json_response['data']).to have_attribute(:tax_total).with_value(order.tax_total.to_s)
expect(json_response['data']).to have_attribute(:currency).with_value(order.currency.to_s)
expect(json_response['data']).to have_attribute(:email).with_value(order.email)
expect(json_response['data']).to have_attribute(:display_item_total).with_value(order.display_item_total.to_s)
expect(json_response['data']).to have_attribute(:display_ship_total).with_value(order.display_ship_total.to_s)
expect(json_response['data']).to have_attribute(:display_adjustment_total).with_value(order.display_adjustment_total.to_s)
expect(json_response['data']).to have_attribute(:display_tax_total).with_value(order.display_tax_total.to_s)
expect(json_response['data']).to have_attribute(:item_count).with_value(order.item_count)
expect(json_response['data']).to have_attribute(:special_instructions).with_value(order.special_instructions)
expect(json_response['data']).to have_attribute(:promo_total).with_value(order.promo_total.to_s)
expect(json_response['data']).to have_attribute(:display_promo_total).with_value(order.display_promo_total.to_s)
expect(json_response['data']).to have_attribute(:display_total).with_value(order.display_total.to_s)
expect(json_response['data']).to have_attribute(:pre_tax_item_amount).with_value(order.pre_tax_item_amount.to_s)
expect(json_response['data']).to have_attribute(:display_pre_tax_item_amount).with_value(order.display_pre_tax_item_amount.to_s)
expect(json_response['data']).to have_attribute(:pre_tax_total).with_value(order.pre_tax_total.to_s)
expect(json_response['data']).to have_attribute(:display_pre_tax_total).with_value(order.display_pre_tax_total.to_s)
expect(json_response['data']).to have_relationships(:user, :line_items, :variants, :billing_address, :shipping_address, :payments, :shipments, :promotions)
end
end
shared_examples 'no current order' do
context "order doesn't exist" do
before do
order.destroy
execute
end
it_behaves_like 'returns 404 HTTP status'
end
context 'already completed order' do
before do
order.update_column(:completed_at, Time.current)
execute
end
it_behaves_like 'returns 404 HTTP status'
end
end