moip2 0.1.4 → 1.0.0

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 (99) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +644 -0
  3. data/.travis.yml +14 -3
  4. data/CONTRIBUTING.md +42 -0
  5. data/Gemfile +1 -1
  6. data/Gemfile.lock +25 -6
  7. data/Guardfile +1 -2
  8. data/README.md +373 -74
  9. data/Rakefile +2 -2
  10. data/changelog.md +36 -0
  11. data/lib/moip2/accounts_api.rb +27 -0
  12. data/lib/moip2/api.rb +25 -2
  13. data/lib/moip2/auth/basic.rb +2 -5
  14. data/lib/moip2/auth/oauth.rb +0 -3
  15. data/lib/moip2/client.rb +45 -31
  16. data/lib/moip2/connect_api.rb +41 -0
  17. data/lib/moip2/customer_api.rb +16 -2
  18. data/lib/moip2/exceptions/invalid_enviroment_error.rb +0 -2
  19. data/lib/moip2/invoice_api.rb +8 -3
  20. data/lib/moip2/keys_api.rb +14 -14
  21. data/lib/moip2/multi_order_api.rb +1 -3
  22. data/lib/moip2/multi_payment_api.rb +1 -1
  23. data/lib/moip2/notifications_api.rb +33 -0
  24. data/lib/moip2/order_api.rb +18 -3
  25. data/lib/moip2/payment_api.rb +11 -1
  26. data/lib/moip2/refund_api.rb +5 -4
  27. data/lib/moip2/resource/account.rb +12 -0
  28. data/lib/moip2/resource/connect.rb +9 -0
  29. data/lib/moip2/resource/credit_card.rb +12 -0
  30. data/lib/moip2/resource/customer.rb +0 -4
  31. data/lib/moip2/resource/invoice.rb +0 -2
  32. data/lib/moip2/resource/keys.rb +1 -3
  33. data/lib/moip2/resource/multi_order.rb +2 -6
  34. data/lib/moip2/resource/multi_payment.rb +1 -3
  35. data/lib/moip2/resource/notification.rb +12 -0
  36. data/lib/moip2/resource/order.rb +0 -4
  37. data/lib/moip2/resource/payment.rb +0 -4
  38. data/lib/moip2/resource/refund.rb +1 -2
  39. data/lib/moip2/resource/webhooks.rb +11 -13
  40. data/lib/moip2/response.rb +7 -7
  41. data/lib/moip2/util/filters_encoder.rb +28 -0
  42. data/lib/moip2/version.rb +1 -1
  43. data/lib/moip2/webhooks_api.rb +16 -16
  44. data/lib/moip2.rb +10 -5
  45. data/moip2.gemspec +21 -7
  46. data/spec/moip2/accounts_api_spec.rb +189 -0
  47. data/spec/moip2/api_spec.rb +22 -4
  48. data/spec/moip2/auth/basic_spec.rb +8 -4
  49. data/spec/moip2/auth/oauth_spec.rb +4 -4
  50. data/spec/moip2/client_spec.rb +20 -27
  51. data/spec/moip2/connect_api_spec.rb +68 -0
  52. data/spec/moip2/customer_api_spec.rb +147 -72
  53. data/spec/moip2/invoice_spec.rb +51 -32
  54. data/spec/moip2/keys_spec.rb +16 -18
  55. data/spec/moip2/multi_order_api_spec.rb +99 -108
  56. data/spec/moip2/multi_payment_api_spec.rb +8 -11
  57. data/spec/moip2/notifications_api_spec.rb +104 -0
  58. data/spec/moip2/order_api_spec.rb +100 -20
  59. data/spec/moip2/payment_api_spec.rb +77 -17
  60. data/spec/moip2/refund_api_spec.rb +2 -4
  61. data/spec/moip2/resource/order_spec.rb +24 -28
  62. data/spec/moip2/response_spec.rb +0 -8
  63. data/spec/moip2/webhooks_spec.rb +18 -21
  64. data/spec/moip2_spec.rb +6 -13
  65. data/spec/spec_helper.rb +24 -10
  66. data/vcr_cassettes/_create_invoice.yml +42 -0
  67. data/vcr_cassettes/_get_invoice.yml +41 -0
  68. data/vcr_cassettes/account_doesnt_exist.yml +44 -0
  69. data/vcr_cassettes/account_exists.yml +46 -0
  70. data/vcr_cassettes/accounts_show_existent.yml +50 -0
  71. data/vcr_cassettes/accounts_show_nonexistent.yml +42 -0
  72. data/vcr_cassettes/cancel_payment.yml +43 -0
  73. data/vcr_cassettes/capture_payment.yml +42 -0
  74. data/vcr_cassettes/create_account_success_company.yml +87 -0
  75. data/vcr_cassettes/create_account_success_standalone.yml +74 -0
  76. data/vcr_cassettes/create_credit_card_customer.yml +41 -0
  77. data/vcr_cassettes/create_invoice.yml +10 -16
  78. data/vcr_cassettes/create_notification.yml +38 -0
  79. data/vcr_cassettes/create_notification_app.yml +38 -0
  80. data/vcr_cassettes/delete_credit_card_customer.yml +40 -0
  81. data/vcr_cassettes/delete_nonexistent_credit_card_customer.yml +40 -0
  82. data/vcr_cassettes/delete_nonexistent_notification.yml +40 -0
  83. data/vcr_cassettes/delete_notification.yml +36 -0
  84. data/vcr_cassettes/find_all_orders_filters.yml +56 -0
  85. data/vcr_cassettes/find_all_orders_limit.yml +48 -0
  86. data/vcr_cassettes/find_all_orders_multi_filters.yml +57 -0
  87. data/vcr_cassettes/find_all_orders_no_filter.yml +56 -0
  88. data/vcr_cassettes/generate_oauth_token.yml +42 -0
  89. data/vcr_cassettes/get_invoice.yml +10 -15
  90. data/vcr_cassettes/get_keys.yml +1 -1
  91. data/vcr_cassettes/get_notification.yml +38 -0
  92. data/vcr_cassettes/get_notifications_list.yml +38 -0
  93. data/vcr_cassettes/get_payment.yml +42 -0
  94. data/vcr_cassettes/get_payment_not_found.yml +40 -0
  95. data/vcr_cassettes/get_webhooks.yml +1 -1
  96. data/vcr_cassettes/list_invoices.yml +2 -2
  97. data/vcr_cassettes/refresh_oauth_token.yml +40 -0
  98. data/vcr_cassettes/update_invoice.yml +1 -1
  99. metadata +69 -7
@@ -1,129 +1,128 @@
1
1
  describe Moip2::MultiOrderApi do
2
-
3
2
  let(:multi_order_api) { described_class.new(sandbox_client) }
4
-
5
- describe "#create" do
3
+
4
+ describe "#create" do
6
5
  let(:multi_order) do
7
- {
8
- ownId: "meu_multiorder_id",
9
- orders: [
6
+ {
7
+ ownId: "meu_multiorder_id",
8
+ orders: [
10
9
  {
11
- ownId: "pedido_1_id",
12
- amount: {
13
- currency: "BRL",
14
- subtotals: {
15
- shipping: 2000
16
- }
10
+ ownId: "pedido_1_id",
11
+ amount: {
12
+ currency: "BRL",
13
+ subtotals: {
14
+ shipping: 2000,
15
+ },
17
16
  },
18
- items: [
17
+ items: [
19
18
  {
20
- product: "Camisa Verde e Amarelo - Brasil",
21
- quantity: 1,
22
- detail: "Seleção Brasileira",
23
- price: 2000
24
- }
19
+ product: "Camisa Verde e Amarelo - Brasil",
20
+ quantity: 1,
21
+ detail: "Seleção Brasileira",
22
+ price: 2000,
23
+ },
25
24
  ],
26
- customer: {
27
- ownId: "customer[1234]",
28
- fullname: "Joao Sousa",
29
- email: "joao.sousa@email.com",
30
- birthDate: "1988-12-30",
31
- taxDocument: {
32
- type: "CPF",
33
- number: "22222222222"
25
+ customer: {
26
+ ownId: "customer[1234]",
27
+ fullname: "Joao Sousa",
28
+ email: "joao.sousa@email.com",
29
+ birthDate: "1988-12-30",
30
+ taxDocument: {
31
+ type: "CPF",
32
+ number: "22222222222",
34
33
  },
35
- phone: {
36
- countryCode: "55",
37
- areaCode: "11",
38
- number: "66778899"
34
+ phone: {
35
+ countryCode: "55",
36
+ areaCode: "11",
37
+ number: "66778899",
39
38
  },
40
- addresses: [
39
+ addresses: [
41
40
  {
42
- type: "BILLING",
43
- street: "Avenida Faria Lima",
44
- streetNumber: 2927,
45
- complement: 8,
46
- district: "Itaim",
47
- city: "Sao Paulo",
48
- state: "SP",
49
- country: "BRA",
50
- zipCode: "01234000"
51
- }
52
- ]
41
+ type: "BILLING",
42
+ street: "Avenida Faria Lima",
43
+ streetNumber: 2927,
44
+ complement: 8,
45
+ district: "Itaim",
46
+ city: "Sao Paulo",
47
+ state: "SP",
48
+ country: "BRA",
49
+ zipCode: "01234000",
50
+ },
51
+ ],
53
52
  },
54
- receivers: [
53
+ receivers: [
55
54
  {
56
- moipAccount: {
57
- id: "MPA-1K2R51KFL3OY"
55
+ moipAccount: {
56
+ id: "MPA-1K2R51KFL3OY",
58
57
  },
59
- type: "PRIMARY"
60
- }
61
- ]
58
+ type: "PRIMARY",
59
+ },
60
+ ],
62
61
  },
63
62
  {
64
- ownId: "pedido_2_id",
65
- amount: {
66
- currency: "BRL",
67
- subtotals: {
68
- shipping: 3000
69
- }
63
+ ownId: "pedido_2_id",
64
+ amount: {
65
+ currency: "BRL",
66
+ subtotals: {
67
+ shipping: 3000,
68
+ },
70
69
  },
71
- items: [
70
+ items: [
72
71
  {
73
- product: "Camisa Preta - Alemanha",
74
- quantity: 1,
75
- detail: "Camiseta da Copa 2014",
76
- price: 1000
77
- }
72
+ product: "Camisa Preta - Alemanha",
73
+ quantity: 1,
74
+ detail: "Camiseta da Copa 2014",
75
+ price: 1000,
76
+ },
78
77
  ],
79
- customer: {
80
- ownId: "customer[1234]",
81
- fullname: "Joao Sousa",
82
- email: "joao.sousa@email.com",
83
- birthDate: "1988-12-30",
84
- taxDocument: {
85
- type: "CPF",
86
- number: "22222222222"
78
+ customer: {
79
+ ownId: "customer[1234]",
80
+ fullname: "Joao Sousa",
81
+ email: "joao.sousa@email.com",
82
+ birthDate: "1988-12-30",
83
+ taxDocument: {
84
+ type: "CPF",
85
+ number: "22222222222",
87
86
  },
88
- phone: {
89
- countryCode: "55",
90
- areaCode: "11",
91
- number: "66778899"
87
+ phone: {
88
+ countryCode: "55",
89
+ areaCode: "11",
90
+ number: "66778899",
92
91
  },
93
- addresses: [
92
+ addresses: [
94
93
  {
95
- type: "BILLING",
96
- street: "Avenida Faria Lima",
97
- streetNumber: 2927,
98
- complement: 8,
99
- district: "Itaim",
100
- city: "Sao Paulo",
101
- state: "SP",
102
- country: "BRA",
103
- zipCode: "01234000"
104
- }
105
- ]
94
+ type: "BILLING",
95
+ street: "Avenida Faria Lima",
96
+ streetNumber: 2927,
97
+ complement: 8,
98
+ district: "Itaim",
99
+ city: "Sao Paulo",
100
+ state: "SP",
101
+ country: "BRA",
102
+ zipCode: "01234000",
103
+ },
104
+ ],
106
105
  },
107
- receivers: [
106
+ receivers: [
108
107
  {
109
- moipAccount: {
110
- id: "MPA-IFYRB1HBL73Z"
108
+ moipAccount: {
109
+ id: "MPA-IFYRB1HBL73Z",
111
110
  },
112
- type: "PRIMARY"
111
+ type: "PRIMARY",
113
112
  },
114
113
  {
115
- moipAccount: {
116
- id: "MPA-KQB1QFWS6QNM"
114
+ moipAccount: {
115
+ id: "MPA-KQB1QFWS6QNM",
116
+ },
117
+ type: "SECONDARY",
118
+ amount: {
119
+ fixed: 55,
117
120
  },
118
- type: "SECONDARY",
119
- amount: {
120
- fixed: 55
121
- }
122
- }
123
- ]
124
- }
125
- ]
126
- }
121
+ },
122
+ ],
123
+ },
124
+ ],
125
+ }
127
126
  end
128
127
 
129
128
  let(:created_multi_order) do
@@ -144,7 +143,6 @@ describe Moip2::MultiOrderApi do
144
143
  end
145
144
 
146
145
  context "when validation error" do
147
-
148
146
  let(:created_multi_order) do
149
147
  VCR.use_cassette("create_multi_order_fail") do
150
148
  multi_order_api.create({})
@@ -162,13 +160,10 @@ describe Moip2::MultiOrderApi do
162
160
  expect(created_multi_order.errors[0].path).to_not be_nil
163
161
  expect(created_multi_order.errors[0].description).to_not be_nil
164
162
  end
165
-
166
163
  end
167
-
168
164
  end
169
165
 
170
166
  describe "#show" do
171
-
172
167
  let(:multi_order) do
173
168
  VCR.use_cassette("show_multi_order") do
174
169
  multi_order_api.show("MOR-IVKZDU55LXJU")
@@ -180,7 +175,6 @@ describe Moip2::MultiOrderApi do
180
175
  end
181
176
 
182
177
  context "when multi order not found" do
183
-
184
178
  let(:multi_order) do
185
179
  VCR.use_cassette("show_multi_order_not_found") do
186
180
  multi_order_api.show("MOR-INVALID")
@@ -190,9 +184,6 @@ describe Moip2::MultiOrderApi do
190
184
  it "raises a NotFound" do
191
185
  expect { multi_order }.to raise_error Moip2::NotFoundError
192
186
  end
193
-
194
187
  end
195
-
196
188
  end
197
-
198
- end
189
+ end
@@ -1,7 +1,7 @@
1
1
  describe Moip2::MultiPaymentApi do
2
2
  let(:multi_payment_api) { described_class.new(sandbox_client) }
3
3
 
4
- describe "#create" do
4
+ describe "#create" do
5
5
  let(:multi_payment) do
6
6
  {
7
7
  installmentCount: 1,
@@ -17,16 +17,16 @@ describe Moip2::MultiPaymentApi do
17
17
  birthdate: "1988-12-30",
18
18
  taxDocument: {
19
19
  type: "CPF",
20
- number: "33333333333"
20
+ number: "33333333333",
21
21
  },
22
22
  phone: {
23
23
  countryCode: "55",
24
24
  areaCode: "11",
25
- number: "66778899"
26
- }
27
- }
28
- }
29
- }
25
+ number: "66778899",
26
+ },
27
+ },
28
+ },
29
+ },
30
30
  }
31
31
  end
32
32
 
@@ -41,7 +41,6 @@ describe Moip2::MultiPaymentApi do
41
41
  expect(created_multi_payment.payments).to_not be_nil
42
42
  expect(created_multi_payment.status).to eq "WAITING"
43
43
  end
44
-
45
44
  end
46
45
 
47
46
  describe "#show" do
@@ -56,7 +55,5 @@ describe Moip2::MultiPaymentApi do
56
55
  expect(multi_payment.payments).to_not be_nil
57
56
  expect(multi_payment.status).to eq "AUTHORIZED"
58
57
  end
59
-
60
58
  end
61
-
62
- end
59
+ end
@@ -0,0 +1,104 @@
1
+ describe Moip2::NotificationsApi do
2
+ let(:notifications_api) { described_class.new(sandbox_client) }
3
+
4
+ describe "#create" do
5
+ let (:notification) do
6
+ {
7
+ events: ["ORDER.*", "PAYMENT.AUTHORIZED", "PAYMENT.CANCELLED"],
8
+ target: "http://requestb.in/1dhjesw1",
9
+ media: "WEBHOOK",
10
+ }
11
+ end
12
+
13
+ let(:notification_created) do
14
+ VCR.use_cassette("create_notification") do
15
+ notifications_api.create(notification)
16
+ end
17
+ end
18
+
19
+ it { expect(notification_created.id).to_not be_nil }
20
+ it { expect(notification_created.media).to eq "WEBHOOK" }
21
+ it { expect(notification_created.target).to eq "http://requestb.in/1dhjesw1" }
22
+ it {
23
+ expect(notification_created.events).to (
24
+ eq ["ORDER.*", "PAYMENT.AUTHORIZED", "PAYMENT.CANCELLED"]
25
+ )
26
+ }
27
+ it { expect(notification_created.token).to_not be_nil }
28
+ end
29
+
30
+ describe "#create to apps" do
31
+ let (:notification) do
32
+ {
33
+ events: ["ORDER.*", "PAYMENT.AUTHORIZED", "PAYMENT.CANCELLED"],
34
+ target: "http://requestb.in/1dhjesw1",
35
+ media: "WEBHOOK",
36
+ }
37
+ end
38
+
39
+ let(:notification_created) do
40
+ VCR.use_cassette("create_notification_app") do
41
+ notifications_api.create(notification, "APP-Y0YCCJ5P603B")
42
+ end
43
+ end
44
+
45
+ it { expect(notification_created.id).to_not be_nil }
46
+ it { expect(notification_created.media).to eq "WEBHOOK" }
47
+ it { expect(notification_created.target).to eq "http://requestb.in/1dhjesw1" }
48
+ it {
49
+ expect(notification_created.events).to (
50
+ eq ["ORDER.*", "PAYMENT.AUTHORIZED", "PAYMENT.CANCELLED"]
51
+ )
52
+ }
53
+ it { expect(notification_created.token).to_not be_nil }
54
+ end
55
+
56
+ describe "#show" do
57
+ let(:notification_id) { "NPR-1EICPJBCFS4J" }
58
+
59
+ let(:notification) do
60
+ VCR.use_cassette("get_notification") do
61
+ notifications_api.show(notification_id)
62
+ end
63
+ end
64
+
65
+ it { expect(notification.id).to eq notification_id }
66
+ it { expect(notification.media).to eq "WEBHOOK" }
67
+ it { expect(notification.target).to eq "http://requestb.in/1dhjesw1" }
68
+ it { expect(notification.events).to eq ["ORDER.*", "PAYMENT.AUTHORIZED", "PAYMENT.CANCELLED"] }
69
+ it { expect(notification.token).to eq "5877e87109cc4ef6ae9b1a181cf8a276" }
70
+ end
71
+
72
+ describe "#find all" do
73
+ let(:notifications) do
74
+ VCR.use_cassette("get_notifications_list") do
75
+ notifications_api.find_all
76
+ end
77
+ end
78
+
79
+ it { expect(notifications).to be_a(Moip2::Resource::Notification) }
80
+ it { expect(notifications).to_not be_nil }
81
+ it { expect(notifications[0]["media"]).to eq "WEBHOOK" }
82
+ it { expect(notifications[0]["target"]).to eq "pandaofertas.com/receive/receiver.php" }
83
+ end
84
+
85
+ describe "#delete" do
86
+ let(:response) do
87
+ VCR.use_cassette("delete_notification") do
88
+ notifications_api.delete("NPR-NI9P75W67ZK7")
89
+ end
90
+ end
91
+
92
+ it { expect(response).to eq true }
93
+ end
94
+
95
+ describe "#delete nonexistent notification" do
96
+ let(:response) do
97
+ VCR.use_cassette("delete_nonexistent_notification") do
98
+ notifications_api.delete("NPR-NI9P75W68ZK7")
99
+ end
100
+ end
101
+
102
+ it { expect { response }.to raise_error(Moip2::NotFoundError) }
103
+ end
104
+ end
@@ -1,22 +1,20 @@
1
1
  describe Moip2::OrderApi do
2
-
3
- let(:order_api) { described_class.new(sandbox_client) }
2
+ let(:order_api) { described_class.new(sandbox_client) }
4
3
 
5
4
  describe "#create" do
6
-
7
5
  let(:order) do
8
6
  {
9
7
  own_id: "your_own_id_1",
10
8
  amount: {
11
- currency: "BRL"
9
+ currency: "BRL",
12
10
  },
13
11
  items: [
14
12
  {
15
13
  product: "Some Product",
16
14
  quantity: 1,
17
15
  detail: "Some Product Detail",
18
- price: 100
19
- }
16
+ price: 100,
17
+ },
20
18
  ],
21
19
  customer: {
22
20
  own_id: "your_customer_own_id",
@@ -25,7 +23,7 @@ describe Moip2::OrderApi do
25
23
  birthdate: "1988-11-11",
26
24
  tax_document: { number: "22222222222", type: "CPF" },
27
25
  phone: { country_code: "55", area_code: "11", number: "5566778899" },
28
- shipping_address:
26
+ shipping_address:
29
27
  {
30
28
  street: "Avenida Faria Lima",
31
29
  street_number: 2927,
@@ -34,9 +32,9 @@ describe Moip2::OrderApi do
34
32
  city: "Sao Paulo",
35
33
  state: "SP",
36
34
  country: "BRA",
37
- zip_code: "01234000"
38
- }
39
- }
35
+ zip_code: "01234000",
36
+ },
37
+ },
40
38
  }
41
39
  end
42
40
 
@@ -66,17 +64,19 @@ describe Moip2::OrderApi do
66
64
  expect(created_order.amount.subtotals.discount).to eq(0)
67
65
  expect(created_order.amount.subtotals.items).to eq(100)
68
66
 
69
- expect(created_order.items[0].product).to eq("Some Product")
70
- expect(created_order.items[0].price).to eq(100)
67
+ expect(created_order.items[0].product).to eq("Some Product")
68
+ expect(created_order.items[0].price).to eq(100)
71
69
  expect(created_order.items[0].detail).to eq("Some Product Detail")
72
70
  expect(created_order.items[0].quantity).to eq(1)
73
-
71
+
74
72
  expect(created_order.customer.id).to eq("CUS-B6LE6HLFFXKF")
75
73
 
76
74
  expect(created_order.customer.shipping_address).to_not be_nil
77
75
 
78
76
  expect(created_order.customer._links).to_not be_nil
79
- expect(created_order.customer._links.self.href).to eq "#{ENV['sandbox_url']}/v2/customers/CUS-B6LE6HLFFXKF"
77
+ expect(
78
+ created_order.customer._links.self.href,
79
+ ).to eq "#{ENV['sandbox_url']}/v2/customers/CUS-B6LE6HLFFXKF"
80
80
  end
81
81
 
82
82
  it "returns an Order object" do
@@ -84,7 +84,6 @@ describe Moip2::OrderApi do
84
84
  end
85
85
 
86
86
  context "when validation error" do
87
-
88
87
  let(:created_order) do
89
88
  VCR.use_cassette("create_order_fail") do
90
89
  order_api.create({})
@@ -102,13 +101,10 @@ describe Moip2::OrderApi do
102
101
  expect(created_order.errors[0].path).to_not be_nil
103
102
  expect(created_order.errors[0].description).to_not be_nil
104
103
  end
105
-
106
104
  end
107
-
108
105
  end
109
106
 
110
107
  describe "#show" do
111
-
112
108
  let(:order) do
113
109
  VCR.use_cassette("show_order") do
114
110
  order_api.show("ORD-EQE16JGCM52O")
@@ -120,7 +116,6 @@ describe Moip2::OrderApi do
120
116
  end
121
117
 
122
118
  context "when order not found" do
123
-
124
119
  let(:order) do
125
120
  VCR.use_cassette("show_order_not_found") do
126
121
  order_api.show("ORD-INVALID")
@@ -130,9 +125,94 @@ describe Moip2::OrderApi do
130
125
  it "raises a NotFound" do
131
126
  expect { order }.to raise_error Moip2::NotFoundError
132
127
  end
128
+ end
129
+ end
133
130
 
131
+ describe "#find_all" do
132
+ context "when passing no filters" do
133
+ subject(:response) do
134
+ VCR.use_cassette("find_all_orders_no_filter") do
135
+ order_api.find_all
136
+ end
137
+ end
138
+
139
+ it { expect(response).to be_a(Moip2::Resource::Order) }
140
+ it { expect(response._links).not_to be_nil }
141
+ it { expect(response.summary).not_to be_nil }
142
+ it { expect(response.orders.size).to eq(20) }
143
+ it { expect(response.orders.first).to be_a(Moip2::Resource::Order) }
134
144
  end
135
145
 
136
- end
146
+ context "when passing limit" do
147
+ subject(:response) do
148
+ VCR.use_cassette("find_all_orders_limit") do
149
+ order_api.find_all(limit: 10)
150
+ end
151
+ end
152
+
153
+ it { expect(response).to be_a(Moip2::Resource::Order) }
154
+ it { expect(response._links).not_to be_nil }
155
+ it { expect(response.summary).not_to be_nil }
156
+ it { expect(response.orders.size).to eq(10) }
157
+ it { expect(response.orders.first).to be_a(Moip2::Resource::Order) }
158
+ end
159
+
160
+ context "when passing filters" do
161
+ subject(:response) do
162
+ VCR.use_cassette("find_all_orders_filters") do
163
+ order_api.find_all(filters: { status: { in: ["PAID", "WAITING"] } })
164
+ end
165
+ end
166
+
167
+ it { expect(response).to be_a(Moip2::Resource::Order) }
168
+ it { expect(response._links).not_to be_nil }
169
+ it { expect(response.summary).not_to be_nil }
170
+
171
+ it "_links.next has the right filters" do
172
+ expect(response._links.next.href).to eq(
173
+ "https://test.moip.com.br/v2/orders?filters=status::in(PAID,WAITING)&limit=0&offset=0",
174
+ )
175
+ end
176
+
177
+ it "all orders satisfy the filter constraint" do
178
+ expect(response.orders).to satisfy do |orders|
179
+ orders.all? { |order| ["PAID", "WAITING"].include?(order.status) }
180
+ end
181
+ end
182
+ end
183
+
184
+ context "when passing multiple filters" do
185
+ subject(:response) do
186
+ VCR.use_cassette("find_all_orders_multi_filters") do
187
+ order_api.find_all(filters: {
188
+ status: { in: ["PAID", "WAITING"] },
189
+ amount: { bt: [500, 1000] },
190
+ })
191
+ end
192
+ end
137
193
 
194
+ it { expect(response).to be_a(Moip2::Resource::Order) }
195
+ it { expect(response._links).not_to be_nil }
196
+ it { expect(response.summary).not_to be_nil }
197
+
198
+ it "_links.next has the right filters" do
199
+ expect(response._links.next.href).to eq(
200
+ "https://test.moip.com.br/v2/orders?filters=" \
201
+ "status::in(PAID,WAITING)|amount::bt(500,1000)&limit=0&offset=0",
202
+ )
203
+ end
204
+
205
+ it "all orders satisfy the status constraint" do
206
+ expect(response.orders).to satisfy do |orders|
207
+ orders.all? { |order| ["PAID", "WAITING"].include?(order.status) }
208
+ end
209
+ end
210
+
211
+ it "all orders satisfy the amount constraint" do
212
+ expect(response.orders).to satisfy do |orders|
213
+ orders.all? { |order| order.amount.total.between?(500, 1000) }
214
+ end
215
+ end
216
+ end
217
+ end
138
218
  end