xpost 0.1.4 → 0.1.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. checksums.yaml +5 -5
  2. data/.DS_Store +0 -0
  3. data/.gitignore +1 -2
  4. data/.rspec +0 -0
  5. data/Gemfile +0 -0
  6. data/LICENSE +0 -0
  7. data/README.md +0 -0
  8. data/TODO.md +1 -28
  9. data/lib/xpost.rb +6 -8
  10. data/lib/xpost/authentication.rb +0 -5
  11. data/lib/xpost/configuration.rb +0 -15
  12. data/lib/xpost/models.rb +5 -0
  13. data/lib/xpost/models/address.rb +38 -0
  14. data/lib/xpost/models/item.rb +31 -0
  15. data/lib/xpost/models/order.rb +54 -0
  16. data/lib/xpost/orders.rb +16 -57
  17. data/lib/xpost/version.rb +1 -1
  18. data/spec/{order/address/address_spec.rb → address_spec.rb} +0 -0
  19. data/spec/factories/addresses.rb +28 -46
  20. data/spec/factories/items.rb +10 -10
  21. data/spec/factories/orders.rb +16 -39
  22. data/spec/helpers.rb +0 -0
  23. data/spec/{order/items/item_spec.rb → item_spec.rb} +5 -5
  24. data/spec/line_item_spec.rb +16 -0
  25. data/spec/orders/order_create_spec.rb +46 -0
  26. data/spec/orders/order_for_pickup_spec.rb +17 -0
  27. data/spec/orders/{find_spec.rb → orders_find_spec.rb} +2 -3
  28. data/spec/orders/{track_spec.rb → orders_track_spec.rb} +2 -2
  29. data/spec/spec_helper.rb +0 -1
  30. data/spec/xpost_spec.rb +0 -27
  31. data/xpost.gemspec +2 -6
  32. metadata +17 -68
  33. data/lib/.DS_Store +0 -0
  34. data/lib/xpost/.DS_Store +0 -0
  35. data/lib/xpost/address.rb +0 -77
  36. data/lib/xpost/item.rb +0 -44
  37. data/lib/xpost/order.rb +0 -135
  38. data/lib/xpost/statuses.rb +0 -29
  39. data/sample/sample_essential_order_details.json +0 -63
  40. data/sample/sample_xpost_order-confirmed.json +0 -317
  41. data/sample/sample_xpost_order-for-pickup.json +0 -379
  42. data/sample/sample_xpost_order-pending.json +0 -306
  43. data/sample/webhook_sample.json +0 -105
  44. data/spec/order/cancel_spec.rb +0 -37
  45. data/spec/order/confirm_spec.rb +0 -38
  46. data/spec/order/create_spec.rb +0 -97
  47. data/spec/order/for_pickup_spec.rb +0 -42
  48. data/spec/order/get_shipping_label_spec.rb +0 -60
  49. data/spec/order/order_spec.rb +0 -96
@@ -1,105 +0,0 @@
1
- {
2
- "event": "status_update",
3
- "timestamp": 1512551041,
4
- "data": [
5
- {
6
- "event_id": 35862967,
7
- "tracking_number": "0495-0754-VZXJ",
8
- "reference_id": "17120514285DPEK.42ecdce0-d185-4356-a30f-d33ea14cff05",
9
- "created_at": "2017-12-06 16:41:31.898782+08",
10
- "status_updated_at": "2017-12-06 16:41:21+08",
11
- "status": "picked_up",
12
- "remarks": "Package successfully picked up",
13
- "fees": {
14
- "shipping_fee": 100,
15
- "insurance_fee": 9,
16
- "transaction_fee": 27
17
- },
18
- "party": {
19
- "id": 6,
20
- "external_id": null
21
- },
22
- "parent": {
23
- "id": null,
24
- "tracking_number": null,
25
- "reference_id": null
26
- }
27
- },
28
- {
29
- "event_id": 35862969,
30
- "tracking_number": "0476-8835-FHUL",
31
- "reference_id": "17120110305AQXW.db11da3c-15f9-4a79-a605-2aa59600790f",
32
- "created_at": "2017-12-06 16:41:31.939001+08",
33
- "status_updated_at": "2017-12-06 16:04:06+08",
34
- "status": "in_transit",
35
- "remarks": "FORWARDED TO PUERTO PRINCESA DELIVERY HUB",
36
- "fees": {
37
- "shipping_fee": 100,
38
- "insurance_fee": 5,
39
- "transaction_fee": 20
40
- },
41
- "party": {
42
- "id": 6,
43
- "external_id": null
44
- },
45
- "parent": {
46
- "id": null,
47
- "tracking_number": null,
48
- "reference_id": null
49
- }
50
- },
51
- {
52
- "event_id": 35862972,
53
- "tracking_number": "0479-8119-CWAX",
54
- "reference_id": "17120109493993N.88b7c455-cf29-404c-a91f-a398278ad1fd",
55
- "created_at": "2017-12-06 16:41:32.475252+08",
56
- "status_updated_at": "2017-12-06 16:20:19+08",
57
- "status": "in_transit",
58
- "remarks": "RECEIVED AT SOUTH LUZON AREA",
59
- "fees": {
60
- "shipping_fee": 100,
61
- "insurance_fee": 6.1,
62
- "transaction_fee": 20
63
- },
64
- "party": {
65
- "id": 6,
66
- "external_id": null
67
- },
68
- "parent": {
69
- "id": null,
70
- "tracking_number": null,
71
- "reference_id": null
72
- }
73
- },
74
- {
75
- "event_id": 35862977,
76
- "tracking_number": "0481-9668-HAJN",
77
- "reference_id": "17120113387HYRH.3623ee76-ee52-44a0-b890-f2bdc661078e",
78
- "created_at": "2017-12-06 16:41:33.064148+08",
79
- "status_updated_at": "2017-12-06 16:37:43+08",
80
- "status": "in_transit",
81
- "remarks": "RECEIVED AT SOUTH LUZON AREA",
82
- "fees": {
83
- "shipping_fee": 100,
84
- "insurance_fee": 5.52,
85
- "transaction_fee": 20
86
- },
87
- "party": {
88
- "id": 6,
89
- "external_id": null
90
- },
91
- "parent": {
92
- "id": null,
93
- "tracking_number": null,
94
- "reference_id": null
95
- }
96
- },
97
- {
98
- "event_id": 35862981,
99
- "tracking_number": "0492-6744-JFQD",
100
- "reference_id": "17120411264R1YD.8b95ac0c-4466-4053-bd03-ce1c9723b8fc",
101
- "created_at": "2017-12-06 16:41:33.193278+08",
102
- "status_updated_at": "2017-12-06 16:41:22+08",
103
- ...
104
- }]
105
- }
@@ -1,37 +0,0 @@
1
- require 'spec_helper'
2
-
3
- RSpec.describe "@order.cancel" do
4
- before do
5
- Xpost.configure do |config|
6
- config.api_key = ENV['XPOST_STAGING_API_KEY']
7
- config.secret_key = ENV['XPOST_STAGING_SECRET_KEY']
8
- config.staging_url = "https://api.staging.lbcx.ph/v1"
9
- config.production_url = "https://api.staging.lbcx.ph/v1"
10
- end
11
-
12
- @auth_token = Xpost::Authentication.authenticate(Xpost.configuration.api_key, Xpost.configuration.secret_key)
13
- @order = build(:order)
14
- @order_data = Xpost::Orders.create(@auth_token, @order, "small-pouch")
15
- @tracking_number = @order_data[:tracking_number]
16
- @order = Xpost::Orders.find(@auth_token, @tracking_number)
17
- end
18
-
19
- it 'makes sure the order exists' do
20
- expect(Xpost::Orders.exists?(@auth_token, @tracking_number)).to eq true
21
- end
22
-
23
- it 'cancels a pending order' do
24
- res = Xpost::Orders.cancel(@auth_token, @tracking_number)
25
-
26
- expect(res[:tracking_number]).to eq @tracking_number
27
- expect(res[:old_status]).to eq "pending"
28
- expect(res[:new_status]).to eq "canceled"
29
- end
30
-
31
- it 'doesnt accept non-pending orders' do
32
- res = Xpost::Orders.confirm(@auth_token, @tracking_number)
33
- expect(res[:new_status]).to eq "confirmed"
34
-
35
- expect { Xpost::Orders.cancel(@auth_token, @tracking_number) }.to raise_error "Order isn't pending"
36
- end
37
- end
@@ -1,38 +0,0 @@
1
- require 'spec_helper'
2
-
3
- RSpec.describe "@order.confirm" do
4
- before do
5
- Xpost.configure do |config|
6
- config.api_key = ENV['XPOST_STAGING_API_KEY']
7
- config.secret_key = ENV['XPOST_STAGING_SECRET_KEY']
8
- config.staging_url = "https://api.staging.lbcx.ph/v1"
9
- config.production_url = "https://api.staging.lbcx.ph/v1"
10
- end
11
-
12
- @auth_token = Xpost::Authentication.authenticate(Xpost.configuration.api_key, Xpost.configuration.secret_key)
13
- @order = build(:order)
14
- @order_data = Xpost::Orders.create(@auth_token, @order, "small-pouch")
15
- @tracking_number = @order_data[:tracking_number]
16
- @order = Xpost::Orders.find(@auth_token, @tracking_number)
17
- end
18
-
19
- it 'makes sure the order exists' do
20
- expect(Xpost::Orders.exists?(@auth_token, @tracking_number)).to eq true
21
- end
22
-
23
- it 'confirms pending orders' do
24
- res = Xpost::Orders.confirm(@auth_token, @tracking_number)
25
-
26
- expect(res[:tracking_number]).to eq @tracking_number
27
- expect(res[:old_status]).to eq "pending"
28
- expect(res[:new_status]).to eq "confirmed"
29
- end
30
-
31
- it 'doesnt accept non-pending orders' do
32
- expect(@order[:status]).to eq "pending"
33
-
34
- Xpost::Orders.confirm(@auth_token, @tracking_number)
35
-
36
- expect { Xpost::Orders.confirm(@auth_token, @tracking_number) }.to raise_error "Order isn't pending"
37
- end
38
- end
@@ -1,97 +0,0 @@
1
- require 'set'
2
- require 'spec_helper'
3
- require 'faker'
4
-
5
- RSpec.describe "Xpost::Order.create" do
6
-
7
- describe 'validations' do
8
- before(:each) do
9
- @order = Xpost::Order.new(
10
- email: "john@me.com",
11
- buyer_name: "John Doe",
12
- contact_number: "+639171234567"
13
- )
14
- end
15
-
16
- it 'is invalid without a delivery address, payment method, and items' do
17
- expect(@order.valid?).to be false
18
- expect(@order.has_delivery_address?).to eq false
19
- expect(@order.has_payment_method?).to eq false
20
- expect(@order.has_items?).to eq false
21
- end
22
-
23
- it 'requires a delivery address' do
24
- expect(@order.has_delivery_address?).to eq false
25
-
26
- delivery_address = build(:required_address)
27
- @order.delivery_address = delivery_address
28
-
29
- expect(@order.has_delivery_address?).to eq true
30
- end
31
-
32
- it 'requires a payment method' do
33
- expect(@order.has_payment_method?).to eq false
34
-
35
- @order.payment_method = "cod"
36
- @order.payment_provider = "lbcx"
37
- @order.total = 1000
38
- @order.currency = "PHP"
39
-
40
- expect(@order.has_payment_method?).to eq true
41
- end
42
-
43
- it 'requires at least one item' do
44
- expect(@order.has_items?).to eq false
45
-
46
- item = build(:product_item)
47
- @order.add_item(item)
48
-
49
- expect(@order.has_items?).to eq true
50
- expect(@order.items.count).to eq 1
51
- expect(@order.items.first.description).to eq "orange shirt"
52
- end
53
-
54
- it 'is valid with a delivery address, payment method, and items' do
55
- @order.payment_method = "cod"
56
- @order.payment_provider = "lbcx"
57
- @order.total = 1000
58
- @order.currency = "PHP"
59
-
60
- delivery_address = build(:required_address)
61
- @order.delivery_address = delivery_address
62
-
63
- item = build(:product_item)
64
- @order.add_item(item)
65
-
66
- expect(@order.confirmable?).to eq true
67
- end
68
- end
69
-
70
- describe 'creation' do
71
- before(:each) do
72
- Xpost.configure do |config|
73
- config.api_key = ENV['XPOST_STAGING_API_KEY']
74
- config.secret_key = ENV['XPOST_STAGING_SECRET_KEY']
75
- config.staging_url = "https://api.staging.lbcx.ph/v1"
76
- config.production_url = "https://api.staging.lbcx.ph/v1"
77
- end
78
- @auth_token = Xpost::Authentication.authenticate(Xpost.configuration.api_key, Xpost.configuration.secret_key)
79
- @order = build(:order)
80
- end
81
-
82
- it 'expects a valid order' do
83
- expect(@order.valid?).to be true
84
- end
85
-
86
- # TODO: No time to debug but works in console
87
- # it 'creates an order' do
88
- # order = Xpost::Orders.create(@auth_token, @order, "big-pouch", "xpost-specs-#{Faker::Number.number(10)}")
89
-
90
- # expect(order).to eq 1000
91
- # expect(order[:total]).to eq 1000
92
- # expect(order[:shipment]).to eq "big-pouch"
93
- # expect(order[:status]).to eq "pending"
94
- # expect(order[:tracking_number]).to_not be nil
95
- # end
96
- end
97
- end
@@ -1,42 +0,0 @@
1
- require 'spec_helper'
2
-
3
- RSpec.describe "@order.for_pickup" do
4
- before do
5
- Xpost.configure do |config|
6
- config.api_key = ENV['XPOST_STAGING_API_KEY']
7
- config.secret_key = ENV['XPOST_STAGING_SECRET_KEY']
8
- config.staging_url = "https://api.staging.lbcx.ph/v1"
9
- config.production_url = "https://api.staging.lbcx.ph/v1"
10
- end
11
-
12
- @auth_token = Xpost::Authentication.authenticate(Xpost.configuration.api_key, Xpost.configuration.secret_key)
13
- @order = build(:order)
14
- @order_data = Xpost::Orders.create(@auth_token, @order, "small-pouch")
15
- @tracking_number = @order_data[:tracking_number]
16
- @order = Xpost::Orders.find(@auth_token, @tracking_number)
17
- end
18
-
19
- it 'already has a delivery address' do
20
- expect(@order[:delivery_address]).to be_present
21
- expect(@order[:delivery_address][:name]).to eq "Bobby Axelrod"
22
- end
23
-
24
- it 'requires a pickup address' do
25
- Xpost::Orders.confirm(@auth_token, @tracking_number)
26
- pickup_address = nil
27
-
28
- expect{ Xpost::Orders.for_pickup(@auth_token, @tracking_number, pickup_address) }.to raise_error "Missing pickup address"
29
- end
30
-
31
- it 'only allows confirmed orders' do
32
- expect{ Xpost::Orders.for_pickup(@auth_token, @tracking_number, nil) }.to raise_error "Order isn't confirmed"
33
-
34
- order = Xpost::Orders.confirm(@auth_token, @tracking_number)
35
- expect(order[:new_status]).to eq "confirmed"
36
-
37
- pickup_address = build(:complete_address_pickup)
38
- order = Xpost::Orders.for_pickup(@auth_token, @tracking_number, pickup_address)
39
-
40
- expect(order[:new_status]).to eq "for_pickup"
41
- end
42
- end
@@ -1,60 +0,0 @@
1
- require 'spec_helper'
2
-
3
- RSpec.describe "@order.get_shipping_labels" do
4
- before do
5
- Xpost.configure do |config|
6
- config.api_key = ENV['XPOST_STAGING_API_KEY']
7
- config.secret_key = ENV['XPOST_STAGING_SECRET_KEY']
8
- config.staging_url = "https://api.staging.lbcx.ph/v1"
9
- config.production_url = "https://api.staging.lbcx.ph/v1"
10
- end
11
-
12
- @auth_token = Xpost::Authentication.authenticate(Xpost.configuration.api_key, Xpost.configuration.secret_key)
13
- @order = build(:order)
14
- @order_data = Xpost::Orders.create(@auth_token, @order, "small-pouch")
15
- @tracking_number = @order_data[:tracking_number]
16
- @order = Xpost::Orders.find(@auth_token, @tracking_number)
17
- end
18
-
19
- describe 'for a single order' do
20
- it 'should expect the order to be for_pickup' do
21
- expect { Xpost::Orders.get_shipping_labels(@auth_token, @tracking_number) }.to raise_error "Order isn't for_pickup"
22
-
23
- Xpost::Orders.confirm(@auth_token, @tracking_number)
24
- expect { Xpost::Orders.get_shipping_labels(@auth_token, @tracking_number) }.to raise_error "Order isn't for_pickup"
25
-
26
- order = Xpost::Orders.for_pickup(@auth_token, @tracking_number, build(:complete_address_pickup))
27
- expect(order[:new_status]).to eq "for_pickup"
28
-
29
- expect { Xpost::Orders.get_shipping_labels(@auth_token, @tracking_number) }.not_to raise_error
30
- end
31
-
32
- it 'should return the shipping labels' do
33
- Xpost::Orders.confirm(@auth_token, @tracking_number)
34
- Xpost::Orders.for_pickup(@auth_token, @tracking_number, build(:complete_address_pickup))
35
-
36
- order = Xpost::Orders.get_shipping_labels(@auth_token, @tracking_number)
37
-
38
- expect(order[:awb]).to be_present
39
- expect(order[:pod]).to be_present
40
- end
41
- end
42
-
43
- describe 'for multiple orders' do
44
- it 'should return the shipping labels' do
45
- Xpost::Orders.confirm(@auth_token, @tracking_number)
46
- Xpost::Orders.for_pickup(@auth_token, @tracking_number, build(:complete_address_pickup))
47
-
48
- new_order = build(:order)
49
- new_order_data = Xpost::Orders.create(@auth_token, new_order, "small-pouch")
50
-
51
- tracking_numbers = [@tracking_number, new_order_data[:tracking_number]]
52
-
53
- order = Xpost::Orders.get_shipping_labels(@auth_token, @tracking_number)
54
-
55
- expect(order[:awb]).to be_present
56
- expect(order[:pod]).to be_present
57
- end
58
- end
59
-
60
- end
@@ -1,96 +0,0 @@
1
- require 'spec_helper'
2
- require 'json'
3
-
4
- RSpec.describe "Xpost::Order" do
5
-
6
- describe '.attributes' do
7
- before(:each) do
8
- @order = build(:order)
9
- end
10
-
11
- it 'returns the base order details' do
12
- attributes = @order.attributes
13
-
14
- expect(attributes[:buyer_name]).to eq "John Doe"
15
- expect(attributes[:email]).to eq "john@me.com"
16
- expect(attributes[:contact_number]).to eq "+6391712345678"
17
- expect(attributes[:currency]).to eq "PHP"
18
- expect(attributes[:total]).to eq 1000
19
- expect(attributes[:payment_method]).to eq "cod"
20
- expect(attributes[:payment_provider]).to eq "lbcx"
21
- end
22
-
23
- it 'returns the items' do
24
- attributes = @order.attributes
25
- order_items = attributes[:items]
26
-
27
- expect(order_items).to be_present
28
- expect(order_items.first[:description]).to eq "red shirt"
29
- expect(order_items.first[:amount]).to eq 1000
30
- end
31
-
32
- it 'returns the delivery_address' do
33
- attributes = @order.attributes
34
- delivery_address = attributes[:delivery_address]
35
-
36
- expect(delivery_address).to be_present
37
- expect(delivery_address[:name]).to eq "Bobby Axelrod"
38
- expect(delivery_address[:line_1]).to eq "BGC Corporate Centre"
39
- end
40
-
41
- it 'returns the pickup_address' do
42
- @order = build(:cod_order_ready_for_pickup)
43
- attributes = @order.attributes
44
- pickup_address = attributes[:pickup_address]
45
-
46
- expect(pickup_address).to be_present
47
- expect(pickup_address[:name]).to eq "Taylor Mason"
48
- expect(pickup_address[:line_1]).to eq "BGC Corporate Centre"
49
- end
50
- end
51
-
52
- # describe '.to_json' do
53
- # it '.to_json matches API requirements' do
54
- # skip 'array order is being a little b'
55
- # @order = build(:order)
56
- # order_json = {
57
- # email: "john@me.com",
58
- # buyer_name: "John Doe",
59
- # contact_number: "+6391712345678",
60
- # shipment: "small-pouch",
61
- # total: 1000,
62
- # currency: "PHP",
63
- # payment_method: "cod",
64
- # payment_provider: "lbcx",
65
- # items: {
66
- # type: "product",
67
- # description: "red shirt",
68
- # amount: 1000,
69
- # quantity: 1,
70
- # metadata: "Small"
71
- # },
72
- # delivery_address: {
73
- # name: "Bobby Axelrod",
74
- # shipment: "small-pouch",
75
- # line_1: "855 Sixth Avenue",
76
- # line_2: "5th floor",
77
- # city: "New York",
78
- # state: "NY",
79
- # postal_code: 10001,
80
- # country: "US",
81
- # company: "Axe Capital",
82
- # title: "CEO",
83
- # email: "bobby@axe.com",
84
- # phone_number: "12345678",
85
- # mobile_number: "091712345678",
86
- # fax_number: "12345678",
87
- # district: "Manhattan",
88
- # remarks: "Send ASAP"
89
- # },
90
- # pickup_address: nil
91
- # }.to_json
92
-
93
- # expect(@order.to_json).to eq order_json
94
- # end
95
- # end
96
- end