moip-assinaturas 0.1.3 → 0.2.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 (30) hide show
  1. data/README.md +28 -0
  2. data/lib/moip-assinaturas/client.rb +74 -34
  3. data/lib/moip-assinaturas/customer.rb +8 -8
  4. data/lib/moip-assinaturas/invoice.rb +4 -4
  5. data/lib/moip-assinaturas/payment.rb +4 -4
  6. data/lib/moip-assinaturas/plan.rb +8 -8
  7. data/lib/moip-assinaturas/subscription.rb +10 -10
  8. data/lib/moip-assinaturas/version.rb +1 -1
  9. data/spec/fixtures/custom_authentication/create_customer.json +3 -0
  10. data/spec/fixtures/custom_authentication/create_plan.json +16 -0
  11. data/spec/fixtures/custom_authentication/create_subscription.json +36 -0
  12. data/spec/fixtures/custom_authentication/details_customer.json +34 -0
  13. data/spec/fixtures/custom_authentication/details_invoice.json +36 -0
  14. data/spec/fixtures/custom_authentication/details_payment.json +34 -0
  15. data/spec/fixtures/custom_authentication/details_plan.json +18 -0
  16. data/spec/fixtures/custom_authentication/details_subscription.json +44 -0
  17. data/spec/fixtures/custom_authentication/list_customers.json +15 -0
  18. data/spec/fixtures/custom_authentication/list_invoices.json +23 -0
  19. data/spec/fixtures/custom_authentication/list_payments.json +32 -0
  20. data/spec/fixtures/custom_authentication/list_plans.json +17 -0
  21. data/spec/fixtures/custom_authentication/list_subscriptions.json +35 -0
  22. data/spec/fixtures/custom_authentication/update_credit_card.json +1 -0
  23. data/spec/fixtures/list_invoices.json +1 -1
  24. data/spec/moip-assinaturas/customer_spec.rb +59 -0
  25. data/spec/moip-assinaturas/invoice_spec.rb +27 -0
  26. data/spec/moip-assinaturas/payment_spec.rb +27 -0
  27. data/spec/moip-assinaturas/plan_spec.rb +71 -3
  28. data/spec/moip-assinaturas/subscription_spec.rb +76 -0
  29. data/spec/spec_helper.rb +6 -0
  30. metadata +30 -2
data/README.md CHANGED
@@ -209,6 +209,34 @@ end
209
209
  ```
210
210
  A ideia da arquitetura da classe Webhooks foi baseada na gem - [https://github.com/xdougx/api-moip-assinaturas](https://github.com/xdougx/api-moip-assinaturas) - substituindo os objetos daquela gem por hashs
211
211
 
212
+ ## Múltiplas Contas Moip
213
+
214
+ Caso seja preciso utilizar assinaturas com mais de uma conta Moip, basta passar as chaves de acesso na chamada dos métodos demonstrados acima, por exemplo:
215
+
216
+ Criar um novo plano:
217
+
218
+ ```ruby
219
+ Moip::Assinaturas::Plan.create(plan_attributes, moip_auth: { token: 'TOKEN', key: 'KEY', sandbox: false })
220
+ ```
221
+
222
+ Listar todos planos:
223
+
224
+ ```ruby
225
+ Moip::Assinaturas::Plan.list(moip_auth: { token: 'TOKEN', key: 'KEY', sandbox: false })
226
+ ```
227
+
228
+ Obter detalhes do plano:
229
+
230
+ ```ruby
231
+ Moip::Assinaturas::Plan.details(plan_code, moip_auth: { token: 'TOKEN', key: 'KEY', sandbox: false })
232
+ ```
233
+
234
+ Atualizar informações do plano:
235
+
236
+ ```ruby
237
+ Moip::Assinaturas::Plan.update(plan_attributes, moip_auth: { token: 'TOKEN', key: 'KEY', sandbox: false })
238
+ ```
239
+
212
240
  ## Contribuindo
213
241
 
214
242
  1. Fork it
@@ -21,76 +21,116 @@ module Moip::Assinaturas
21
21
 
22
22
  class << self
23
23
 
24
- def create_plan(plan)
25
- peform_action!(:post, "/plans", { body: plan.to_json, headers: { 'Content-Type' => 'application/json' } })
24
+ def create_plan(plan, opts={})
25
+ prepare_options(opts, { body: plan.to_json, headers: { 'Content-Type' => 'application/json' } })
26
+ peform_action!(:post, "/plans", opts)
26
27
  end
27
28
 
28
- def list_plans
29
- peform_action!(:get, "/plans", { headers: { 'Content-Type' => 'application/json' } })
29
+ def list_plans(opts={})
30
+ prepare_options(opts, { headers: { 'Content-Type' => 'application/json' } })
31
+ peform_action!(:get, "/plans", opts)
30
32
  end
31
33
 
32
- def details_plan(code)
33
- peform_action!(:get, "/plans/#{code}", { headers: { 'Content-Type' => 'application/json' } })
34
+ def details_plan(code, opts={})
35
+ prepare_options(opts, { headers: { 'Content-Type' => 'application/json' } })
36
+ peform_action!(:get, "/plans/#{code}", opts)
34
37
  end
35
38
 
36
- def update_plan(plan)
37
- peform_action!(:put, "/plans/#{plan[:code]}", { body: plan.to_json, headers: { 'Content-Type' => 'application/json' } }, true)
39
+ def update_plan(plan, opts={})
40
+ prepare_options(opts, { body: plan.to_json, headers: { 'Content-Type' => 'application/json' } })
41
+ peform_action!(:put, "/plans/#{plan[:code]}", opts, true)
38
42
  end
39
43
 
40
- def create_customer(customer, new_vault)
41
- peform_action!(:post, "/customers?new_vault=#{new_vault}", { body: customer.to_json, headers: { 'Content-Type' => 'application/json' } })
44
+ def create_customer(customer, new_vault, opts={})
45
+ prepare_options(opts, { body: customer.to_json, headers: { 'Content-Type' => 'application/json' } })
46
+ peform_action!(:post, "/customers?new_vault=#{new_vault}", opts)
42
47
  end
43
48
 
44
- def list_customers
45
- peform_action!(:get, "/customers", { headers: { 'Content-Type' => 'application/json' } })
49
+ def list_customers(opts={})
50
+ prepare_options(opts, { headers: { 'Content-Type' => 'application/json' } })
51
+ peform_action!(:get, "/customers", opts)
46
52
  end
47
53
 
48
- def details_customer(code)
49
- peform_action!(:get, "/customers/#{code}", { headers: { 'Content-Type' => 'application/json' } })
54
+ def details_customer(code, opts={})
55
+ prepare_options(opts, { headers: { 'Content-Type' => 'application/json' } })
56
+ peform_action!(:get, "/customers/#{code}", opts)
50
57
  end
51
58
 
52
- def update_credit_card(customer_code, credit_card)
53
- peform_action!(:put, "/customers/#{customer_code}/billing_infos", { body: credit_card.to_json, headers: { 'Content-Type' => 'application/json' } })
59
+ def update_credit_card(customer_code, credit_card, opts={})
60
+ prepare_options(opts, { body: credit_card.to_json, headers: { 'Content-Type' => 'application/json' } })
61
+ peform_action!(:put, "/customers/#{customer_code}/billing_infos", opts)
54
62
  end
55
63
 
56
- def create_subscription(subscription, new_customer)
57
- peform_action!(:post, "/subscriptions?new_customer=#{new_customer}", { body: subscription.to_json, headers: { 'Content-Type' => 'application/json' } })
64
+ def create_subscription(subscription, new_customer, opts={})
65
+ prepare_options(opts, { body: subscription.to_json, headers: { 'Content-Type' => 'application/json' } })
66
+ peform_action!(:post, "/subscriptions?new_customer=#{new_customer}", opts)
58
67
  end
59
68
 
60
- def list_subscriptions
61
- peform_action!(:get, "/subscriptions", { headers: { 'Content-Type' => 'application/json' } })
69
+ def list_subscriptions(opts={})
70
+ prepare_options(opts, { headers: { 'Content-Type' => 'application/json' } })
71
+ peform_action!(:get, "/subscriptions", opts)
62
72
  end
63
73
 
64
- def details_subscription(code)
65
- peform_action!(:get, "/subscriptions/#{code}", { headers: { 'Content-Type' => 'application/json' } })
74
+ def details_subscription(code, opts={})
75
+ prepare_options(opts, { headers: { 'Content-Type' => 'application/json' } })
76
+ peform_action!(:get, "/subscriptions/#{code}", opts)
66
77
  end
67
78
 
68
- def suspend_subscription(code)
69
- peform_action!(:put, "/subscriptions/#{code}/suspend", { headers: { 'Content-Type' => 'application/json' } }, true)
79
+ def suspend_subscription(code, opts={})
80
+ prepare_options(opts, { headers: { 'Content-Type' => 'application/json' } })
81
+ peform_action!(:put, "/subscriptions/#{code}/suspend", opts, true)
70
82
  end
71
83
 
72
- def activate_subscription(code)
73
- peform_action!(:put, "/subscriptions/#{code}/activate", { headers: { 'Content-Type' => 'application/json' } }, true)
84
+ def activate_subscription(code, opts={})
85
+ prepare_options(opts, { headers: { 'Content-Type' => 'application/json' } })
86
+ peform_action!(:put, "/subscriptions/#{code}/activate", opts, true)
74
87
  end
75
88
 
76
- def list_invoices(subscription_code)
77
- peform_action!(:get, "/subscriptions/#{subscription_code}/invoices", { headers: { 'Content-Type' => 'application/json' } })
89
+ def list_invoices(subscription_code, opts={})
90
+ prepare_options(opts, { headers: { 'Content-Type' => 'application/json' } })
91
+ peform_action!(:get, "/subscriptions/#{subscription_code}/invoices", opts)
78
92
  end
79
93
 
80
- def details_invoice(id)
81
- peform_action!(:get, "/invoices/#{id}", { headers: { 'Content-Type' => 'application/json' } })
94
+ def details_invoice(id, opts={})
95
+ prepare_options(opts, { headers: { 'Content-Type' => 'application/json' } })
96
+ peform_action!(:get, "/invoices/#{id}", opts)
82
97
  end
83
98
 
84
- def list_payments(invoice_id)
85
- peform_action!(:get, "/invoices/#{invoice_id}/payments", { headers: { 'Content-Type' => 'application/json' } })
99
+ def list_payments(invoice_id, opts={})
100
+ prepare_options(opts, { headers: { 'Content-Type' => 'application/json' } })
101
+ peform_action!(:get, "/invoices/#{invoice_id}/payments", opts)
86
102
  end
87
103
 
88
- def details_payment(id)
89
- peform_action!(:get, "/payments/#{id}", { headers: { 'Content-Type' => 'application/json' } })
104
+ def details_payment(id, opts={})
105
+ prepare_options(opts, { headers: { 'Content-Type' => 'application/json' } })
106
+ peform_action!(:get, "/payments/#{id}", opts)
90
107
  end
91
108
 
92
109
  private
93
110
 
111
+ def prepare_options(custom_options, required_options)
112
+ custom_options.merge!(required_options)
113
+
114
+ if custom_options.include?(:moip_auth)
115
+ custom_options[:basic_auth] = {
116
+ username: custom_options[:moip_auth][:token],
117
+ password: custom_options[:moip_auth][:key]
118
+ }
119
+
120
+ if custom_options[:moip_auth].include?(:sandbox)
121
+ if custom_options[:moip_auth][:sandbox]
122
+ custom_options[:base_uri] = "https://sandbox.moip.com.br/assinaturas/v1"
123
+ else
124
+ custom_options[:base_uri] = "https://api.moip.com.br/assinaturas/v1"
125
+ end
126
+ end
127
+
128
+ custom_options.delete(:moip_auth)
129
+ end
130
+
131
+ custom_options
132
+ end
133
+
94
134
  def peform_action!(action_name, url, options = {}, accepts_blank_body = false)
95
135
  if (Moip::Assinaturas.token.blank? or Moip::Assinaturas.key.blank?)
96
136
  raise(MissingTokenError, "Informe o token e a key para realizar a autenticação no webservice")
@@ -3,8 +3,8 @@ module Moip::Assinaturas
3
3
 
4
4
  class << self
5
5
 
6
- def create(customer, new_valt = true)
7
- response = Moip::Assinaturas::Client.create_customer(customer, new_valt)
6
+ def create(customer, new_valt = true, opts = {})
7
+ response = Moip::Assinaturas::Client.create_customer(customer, new_valt, opts)
8
8
  hash = JSON.load(response.body).with_indifferent_access
9
9
 
10
10
  case response.code
@@ -24,8 +24,8 @@ module Moip::Assinaturas
24
24
  end
25
25
  end
26
26
 
27
- def list
28
- response = Moip::Assinaturas::Client.list_customers
27
+ def list(opts = {})
28
+ response = Moip::Assinaturas::Client.list_customers(opts)
29
29
  hash = JSON.load(response.body).with_indifferent_access
30
30
 
31
31
  case response.code
@@ -39,8 +39,8 @@ module Moip::Assinaturas
39
39
  end
40
40
  end
41
41
 
42
- def details(code)
43
- response = Moip::Assinaturas::Client.details_customer(code)
42
+ def details(code, opts = {})
43
+ response = Moip::Assinaturas::Client.details_customer(code, opts)
44
44
  hash = JSON.load(response.body).with_indifferent_access
45
45
 
46
46
  case response.code
@@ -54,8 +54,8 @@ module Moip::Assinaturas
54
54
  end
55
55
  end
56
56
 
57
- def update_credit_card(customer_code, credit_card)
58
- response = Moip::Assinaturas::Client.update_credit_card(customer_code, credit_card)
57
+ def update_credit_card(customer_code, credit_card, opts = {})
58
+ response = Moip::Assinaturas::Client.update_credit_card(customer_code, credit_card, opts)
59
59
  hash = JSON.load(response.body).with_indifferent_access
60
60
 
61
61
  case response.code
@@ -3,8 +3,8 @@ module Moip::Assinaturas
3
3
 
4
4
  class << self
5
5
 
6
- def list(subscription_code)
7
- response = Moip::Assinaturas::Client.list_invoices(subscription_code)
6
+ def list(subscription_code, opts={})
7
+ response = Moip::Assinaturas::Client.list_invoices(subscription_code, opts)
8
8
  hash = JSON.load(response.body).with_indifferent_access
9
9
 
10
10
  case response.code
@@ -18,8 +18,8 @@ module Moip::Assinaturas
18
18
  end
19
19
  end
20
20
 
21
- def details(id)
22
- response = Moip::Assinaturas::Client.details_invoice(id)
21
+ def details(id, opts={})
22
+ response = Moip::Assinaturas::Client.details_invoice(id, opts)
23
23
  hash = JSON.load(response.body).with_indifferent_access
24
24
 
25
25
  case response.code
@@ -3,8 +3,8 @@ module Moip::Assinaturas
3
3
 
4
4
  class << self
5
5
 
6
- def list(invoice_id)
7
- response = Moip::Assinaturas::Client.list_payments(invoice_id)
6
+ def list(invoice_id, opts={})
7
+ response = Moip::Assinaturas::Client.list_payments(invoice_id, opts)
8
8
  hash = JSON.load(response.body).with_indifferent_access
9
9
 
10
10
  case response.code
@@ -18,8 +18,8 @@ module Moip::Assinaturas
18
18
  end
19
19
  end
20
20
 
21
- def details(id)
22
- response = Moip::Assinaturas::Client.details_payment(id)
21
+ def details(id, opts={})
22
+ response = Moip::Assinaturas::Client.details_payment(id, opts)
23
23
  hash = JSON.load(response.body).with_indifferent_access
24
24
 
25
25
  case response.code
@@ -3,8 +3,8 @@ module Moip::Assinaturas
3
3
 
4
4
  class << self
5
5
 
6
- def create(plan)
7
- response = Moip::Assinaturas::Client.create_plan(plan)
6
+ def create(plan, opts={})
7
+ response = Moip::Assinaturas::Client.create_plan(plan, opts)
8
8
  hash = JSON.load(response.body).with_indifferent_access
9
9
 
10
10
  case response.code
@@ -24,8 +24,8 @@ module Moip::Assinaturas
24
24
  end
25
25
  end
26
26
 
27
- def list
28
- response = Moip::Assinaturas::Client.list_plans
27
+ def list(opts={})
28
+ response = Moip::Assinaturas::Client.list_plans(opts)
29
29
  hash = JSON.load(response.body).with_indifferent_access
30
30
 
31
31
  case response.code
@@ -39,8 +39,8 @@ module Moip::Assinaturas
39
39
  end
40
40
  end
41
41
 
42
- def details(code)
43
- response = Moip::Assinaturas::Client.details_plan(code)
42
+ def details(code, opts={})
43
+ response = Moip::Assinaturas::Client.details_plan(code, opts)
44
44
  hash = JSON.load(response.body).with_indifferent_access
45
45
 
46
46
  case response.code
@@ -54,8 +54,8 @@ module Moip::Assinaturas
54
54
  end
55
55
  end
56
56
 
57
- def update(plan)
58
- response = Moip::Assinaturas::Client.update_plan(plan)
57
+ def update(plan, opts={})
58
+ response = Moip::Assinaturas::Client.update_plan(plan, opts)
59
59
 
60
60
  # in the current implementation the Moip signatures API only
61
61
  # returns response code 200 with an empty body even if the update fails
@@ -3,8 +3,8 @@ module Moip::Assinaturas
3
3
 
4
4
  class << self
5
5
 
6
- def create(subscription, new_customer = false)
7
- response = Moip::Assinaturas::Client.create_subscription(subscription, new_customer)
6
+ def create(subscription, new_customer = false, opts={})
7
+ response = Moip::Assinaturas::Client.create_subscription(subscription, new_customer, opts)
8
8
  hash = JSON.load(response.body).with_indifferent_access
9
9
 
10
10
  case response.code
@@ -25,8 +25,8 @@ module Moip::Assinaturas
25
25
 
26
26
  end
27
27
 
28
- def list
29
- response = Moip::Assinaturas::Client.list_subscriptions
28
+ def list(opts={})
29
+ response = Moip::Assinaturas::Client.list_subscriptions(opts)
30
30
  hash = JSON.load(response.body).with_indifferent_access
31
31
 
32
32
  case response.code
@@ -41,8 +41,8 @@ module Moip::Assinaturas
41
41
 
42
42
  end
43
43
 
44
- def details(code)
45
- response = Moip::Assinaturas::Client.details_subscription(code)
44
+ def details(code, opts={})
45
+ response = Moip::Assinaturas::Client.details_subscription(code, opts)
46
46
  hash = JSON.load(response.body).with_indifferent_access
47
47
 
48
48
  case response.code
@@ -56,8 +56,8 @@ module Moip::Assinaturas
56
56
  end
57
57
  end
58
58
 
59
- def suspend(code)
60
- response = Moip::Assinaturas::Client.suspend_subscription(code)
59
+ def suspend(code, opts={})
60
+ response = Moip::Assinaturas::Client.suspend_subscription(code, opts)
61
61
 
62
62
  case response.code
63
63
  when 200
@@ -67,8 +67,8 @@ module Moip::Assinaturas
67
67
  end
68
68
  end
69
69
 
70
- def activate(code)
71
- response = Moip::Assinaturas::Client.activate_subscription(code)
70
+ def activate(code, opts={})
71
+ response = Moip::Assinaturas::Client.activate_subscription(code, opts)
72
72
 
73
73
  case response.code
74
74
  when 200
@@ -1,5 +1,5 @@
1
1
  module Moip
2
2
  module Assinaturas
3
- VERSION = "0.1.3"
3
+ VERSION = "0.2.0"
4
4
  end
5
5
  end
@@ -0,0 +1,3 @@
1
+ {
2
+ "message": "Cliente criado com Sucesso"
3
+ }
@@ -0,0 +1,16 @@
1
+ {
2
+ "code": "plano02",
3
+ "name": "Plano Especial 2",
4
+ "description": "Descrição do Plano Especial 2",
5
+ "amount": 490, //em centavos
6
+ "setup_fee": 200, //em centavos
7
+ "max_qty": 2,
8
+ "interval": {
9
+ "length": 3,
10
+ "unit": "MONTH"
11
+ },
12
+ "trial": {
13
+ "enabled": true,
14
+ "days": 15
15
+ }
16
+ }
@@ -0,0 +1,36 @@
1
+ {
2
+ "code": "ass_homolog_72",
3
+ "amount": "100",
4
+ "next_invoice_date": {
5
+ "day": "05",
6
+ "month": "01",
7
+ "year": "2013"
8
+ },
9
+ "status": "ACTIVE",
10
+ "plan": {
11
+ "name": "Plano de homologação",
12
+ "code": "homolog1"
13
+ },
14
+ "customer": {
15
+ "email": "fulano@homolog.com",
16
+ "code": "homolog2",
17
+ "fullname": "Fulano Homologador"
18
+ },
19
+ "invoice": { //dados da primeira cobrança (se houver)
20
+ "id": 134,
21
+ "moip_id": "14000000",
22
+ "amount": 110,
23
+ "status": {
24
+ "description": "Em análise",
25
+ "code": 2
26
+ }
27
+ },
28
+ "message": "Assinatura criada com Sucesso",
29
+ "errors": [],
30
+ "alerts": [
31
+ {
32
+ "code": "MA90",
33
+ "description": "O nome do portador do cartão deve ter no máximo 45 caracteres. Os demais caracteres foram ignorados"
34
+ }
35
+ ]
36
+ }
@@ -0,0 +1,34 @@
1
+ {
2
+ "code": "19",
3
+ "fullname": "Nome Sobrenome",
4
+ "email": "nome@exemplo.com",
5
+ "cpf": "22222222222",
6
+ "phone_area_code": "11",
7
+ "phone_number": "990909090",
8
+ "birthdate_day": 29,
9
+ "birthdate_month": 3,
10
+ "birthdate_year": 1980,
11
+ "address": {
12
+ "street": "Rua Nome da Rua",
13
+ "number": "1000",
14
+ "complement": "Apto 4 - bloco A",
15
+ "district": "Bairro",
16
+ "city": "São Paulo",
17
+ "state": "SP",
18
+ "country": "BRA",
19
+ "zipcode": "00000000"
20
+ },
21
+ "billing_info": {
22
+ "credit_cards": [
23
+ {
24
+ "vault": "00b21555-296a-4e70-94cd-3e96fef62e5b",
25
+ "brand": "VISA",
26
+ "first_six_digits": "411111",
27
+ "last_four_digits": "1111",
28
+ "expiration_month": "04",
29
+ "expiration_year": "15",
30
+ "holder_name": "Nome Sobrenome"
31
+ }
32
+ ]
33
+ }
34
+ }
@@ -0,0 +1,36 @@
1
+ {
2
+ "id": 14,
3
+ "amount": 101,
4
+ "subscription_code": "assinatura7",
5
+ "occurrence": 1,
6
+ "status": {
7
+ "code": 2,
8
+ "description": "Aguardando confirmação"
9
+ },
10
+ "items": [
11
+ {
12
+ "amount": 100,
13
+ "type": "Valor da assinatura"
14
+ },
15
+ {
16
+ "amount": 1,
17
+ "type": "Taxa de contratação"
18
+ }
19
+ ],
20
+ "plan": {
21
+ "code": "plano1",
22
+ "name": "Plano 1 real"
23
+ },
24
+ "customer": {
25
+ "code": "cliente1",
26
+ "fullname": "Fulano Testador"
27
+ },
28
+ "creation_date": {
29
+ "day": 28,
30
+ "month": 12,
31
+ "year": 2012,
32
+ "hour": 15,
33
+ "minute": 38,
34
+ "second": 41
35
+ }
36
+ }
@@ -0,0 +1,34 @@
1
+ {
2
+ "id": 7,
3
+ "moip_id": 7205895,
4
+ "status": {
5
+ "code": 6,
6
+ "description": "Em análise"
7
+ },
8
+ "subscription_code": "assinatura7",
9
+ "customer_code": "cliente1",
10
+ "invoice": {
11
+ "id": 13,
12
+ "amount": 101
13
+ },
14
+ "payment_method": {
15
+ "code": 1,
16
+ "description": "Cartão de Crédito",
17
+ "credit_card": {
18
+ "brand": "VISA",
19
+ "holder_name": "Fulano Testador",
20
+ "first_six_digits": "411111",
21
+ "last_four_digits": "1111",
22
+ "expiration_month": "03",
23
+ "expiration_year": "16"
24
+ }
25
+ },
26
+ "creation_date": {
27
+ "day": 28,
28
+ "month": 12,
29
+ "year": 2012,
30
+ "hour": 15,
31
+ "minute": 38,
32
+ "second": 41
33
+ }
34
+ }
@@ -0,0 +1,18 @@
1
+ {
2
+ "code": "plano02",
3
+ "name": "Plano Ouro Ilimitado",
4
+ "description": "Plano com todas as vantagens",
5
+ "status": "ACTIVE",
6
+ "amount": 2990,
7
+ "max_qty": 50,
8
+ "setup_fee": 1000,
9
+ "interval": {
10
+ "length": 1,
11
+ "unit": "MONTH"
12
+ },
13
+ "billing_cycles": 1,
14
+ "trial": {
15
+ "enabled": true,
16
+ "days": 10
17
+ }
18
+ }
@@ -0,0 +1,44 @@
1
+ {
2
+ "code": "assinatura2",
3
+ "amount": "100",
4
+ "status": "ACTIVE",
5
+ "creation_date": {
6
+ "day": "20",
7
+ "month": "10",
8
+ "year": "2012",
9
+ "hour": "20",
10
+ "minute": "00",
11
+ "second": "00"
12
+ },
13
+ "next_invoice_date": {
14
+ "day": "20",
15
+ "month": "11",
16
+ "year": "2012"
17
+ },
18
+ "expiration_date": {
19
+ "day": "20",
20
+ "month": "10",
21
+ "year": "2013"
22
+ },
23
+ "plan": {
24
+ "name": "Plano Ouro Ilimitado",
25
+ "code": "plano1"
26
+ },
27
+ "customer": {
28
+ "code": "cliente1",
29
+ "fullname": "Nome e Sobrenome",
30
+ "email": "assinaturas@moip.com.br"
31
+ },
32
+ "trial": {
33
+ "start": {
34
+ "month": 9,
35
+ "year": 2013,
36
+ "day": 27
37
+ },
38
+ "end": {
39
+ "month": 10,
40
+ "year": 2013,
41
+ "day": 17
42
+ }
43
+ }
44
+ }
@@ -0,0 +1,15 @@
1
+ {
2
+ "customers": [
3
+ {
4
+ "code": "cliente1",
5
+ "fullname": "Nome Sobrenome",
6
+ "email": "nome@exemplo.com",
7
+ "cpf": "22222222222",
8
+ "phone_area_code": "11",
9
+ "phone_number": "990909090",
10
+ "birthdate_day": "29",
11
+ "birthdate_month": "04",
12
+ "birthdate_year": "1980"
13
+ }
14
+ ]
15
+ }
@@ -0,0 +1,23 @@
1
+ {
2
+ "invoices": [
3
+ {
4
+ "id": 14,
5
+ "amount": 101,
6
+ "subscription_code": "assinatura7",
7
+
8
+ "occurrence": 1,
9
+ "status": {
10
+ "code": 2,
11
+ "description": "Aguardando confirmação"
12
+ },
13
+ "creation_date": {
14
+ "day": 28,
15
+ "month": 12,
16
+ "year": 2012,
17
+ "hour": 15,
18
+ "minute": 38,
19
+ "second": 41
20
+ }
21
+ }
22
+ ]
23
+ }
@@ -0,0 +1,32 @@
1
+ {
2
+ "payments": [
3
+ {
4
+ "id": 7,
5
+ "moip_id": 7205895,
6
+ "status": {
7
+ "code": 6,
8
+ "description": "Em análise"
9
+ },
10
+ "payment_method": {
11
+ "code": 1,
12
+ "description": "Cartão de Crédito",
13
+ "credit_card": {
14
+ "brand": "VISA",
15
+ "holder_name": "Fulano Testador",
16
+ "first_six_digits": "411111",
17
+ "last_four_digits": "1111",
18
+ "expiration_month": "03",
19
+ "expiration_year": "16"
20
+ }
21
+ },
22
+ "creation_date": {
23
+ "day": 28,
24
+ "month": 12,
25
+ "year": 2012,
26
+ "hour": 15,
27
+ "minute": 38,
28
+ "second": 41
29
+ }
30
+ }
31
+ ]
32
+ }
@@ -0,0 +1,17 @@
1
+ {
2
+ "plans": [
3
+ {
4
+ "code": "plano02",
5
+ "name": "Plano Especial 2",
6
+ "description": "Descrição do Plano Especial 2",
7
+ "amount": 490, //em centavos
8
+ "setup_fee": 200, //em centavos
9
+ "max_qty": 2,
10
+ "interval": {
11
+ "length": 3,
12
+ "unit": "MONTH"
13
+ },
14
+ "billing_cycles": 1
15
+ }
16
+ ]
17
+ }
@@ -0,0 +1,35 @@
1
+ {
2
+ "subscriptions": [
3
+ {
4
+ "code": "assinatura2",
5
+ "amount": "100",
6
+ "status": "ACTIVE",
7
+ "creation_date": {
8
+ "day": "20",
9
+ "month": "10",
10
+ "year": "2012",
11
+ "hour": "20",
12
+ "minute": "00",
13
+ "second": "00"
14
+ },
15
+ "next_invoice_date": {
16
+ "day": "20",
17
+ "month": "11",
18
+ "year": "2012"
19
+ },
20
+ "expiration_date": {
21
+ "day": "20",
22
+ "month": "10",
23
+ "year": "2013"
24
+ },
25
+ "plan": {
26
+ "name": "Plano Ouro Ilimitado",
27
+ "code": "plano1"
28
+ },
29
+ "customer": {
30
+ "code": "cliente1",
31
+ "fullname": "Nome e sobrenome"
32
+ }
33
+ }
34
+ ]
35
+ }
@@ -0,0 +1 @@
1
+ { "message": "Dados alterados com sucesso" }
@@ -3,7 +3,7 @@
3
3
  {
4
4
  "id": 13,
5
5
  "amount": 101,
6
- "subscription_code": "assinatura7",
6
+ "subscription_code": "assinatura8",
7
7
 
8
8
  "occurrence": 1,
9
9
  "status": {
@@ -61,6 +61,34 @@ describe Moip::Assinaturas::Customer do
61
61
  body: File.join(File.dirname(__FILE__), '..', 'fixtures', 'update_credit_card.json'),
62
62
  status: [200, 'OK']
63
63
  )
64
+
65
+ FakeWeb.register_uri(
66
+ :post,
67
+ "https://TOKEN2:KEY2@api.moip.com.br/assinaturas/v1/customers?new_vault=true",
68
+ body: File.join(File.dirname(__FILE__), '..', 'fixtures', 'custom_authentication', 'create_customer.json'),
69
+ status: [201, 'CREATED']
70
+ )
71
+
72
+ FakeWeb.register_uri(
73
+ :get,
74
+ "https://TOKEN2:KEY2@api.moip.com.br/assinaturas/v1/customers",
75
+ body: File.join(File.dirname(__FILE__), '..', 'fixtures', 'custom_authentication', 'list_customers.json'),
76
+ status: [200, 'OK']
77
+ )
78
+
79
+ FakeWeb.register_uri(
80
+ :get,
81
+ "https://TOKEN2:KEY2@api.moip.com.br/assinaturas/v1/customers/18",
82
+ body: File.join(File.dirname(__FILE__), '..', 'fixtures', 'custom_authentication', 'details_customer.json'),
83
+ status: [200, 'OK']
84
+ )
85
+
86
+ FakeWeb.register_uri(
87
+ :put,
88
+ "https://TOKEN2:KEY2@api.moip.com.br/assinaturas/v1/customers/19/billing_infos",
89
+ body: File.join(File.dirname(__FILE__), '..', 'fixtures', 'custom_authentication', 'update_credit_card.json'),
90
+ status: [200, 'OK']
91
+ )
64
92
  end
65
93
 
66
94
  it "should create a new customer" do
@@ -93,4 +121,35 @@ describe Moip::Assinaturas::Customer do
93
121
  request[:success].should be_true
94
122
  end
95
123
 
124
+ context "Custom Authentication" do
125
+ it "should create a new customer in other moip account" do
126
+ request = Moip::Assinaturas::Customer.create(@customer, true, moip_auth: $custom_moip_auth)
127
+ request[:success].should be_true
128
+ end
129
+
130
+ it "should list all customers from custom moip account" do
131
+ request = Moip::Assinaturas::Customer.list(moip_auth: $custom_moip_auth)
132
+ request[:success].should be_true
133
+ request[:customers].size.should == 1
134
+ end
135
+
136
+ it "should get the customer details of custom moip account" do
137
+ request = Moip::Assinaturas::Customer.details('18', moip_auth: $custom_moip_auth)
138
+ request[:success].should be_true
139
+ request[:customer][:code].should == '19'
140
+ end
141
+
142
+ it "should update the customer card info from custom moip account" do
143
+ request = Moip::Assinaturas::Customer.update_credit_card(19, {
144
+ credit_card: {
145
+ holder_name: 'Novo nome 2',
146
+ number: '5555666677778884',
147
+ expiration_month: '04',
148
+ expiration_year: '15'
149
+ }
150
+ }, moip_auth: $custom_moip_auth)
151
+
152
+ request[:success].should be_true
153
+ end
154
+ end
96
155
  end
@@ -19,6 +19,20 @@ describe Moip::Assinaturas::Invoice do
19
19
  status: [200, 'OK']
20
20
  )
21
21
 
22
+ FakeWeb.register_uri(
23
+ :get,
24
+ "https://TOKEN2:KEY2@api.moip.com.br/assinaturas/v1/subscriptions/assinatura2/invoices",
25
+ body: File.join(File.dirname(__FILE__), '..', 'fixtures', 'custom_authentication', 'list_invoices.json'),
26
+ status: [200, 'OK']
27
+ )
28
+
29
+ FakeWeb.register_uri(
30
+ :get,
31
+ "https://TOKEN2:KEY2@api.moip.com.br/assinaturas/v1/invoices/14",
32
+ body: File.join(File.dirname(__FILE__), '..', 'fixtures', 'custom_authentication', 'details_invoice.json'),
33
+ status: [200, 'OK']
34
+ )
35
+
22
36
  end
23
37
 
24
38
  it "should list all invoices from a subscription" do
@@ -32,4 +46,17 @@ describe Moip::Assinaturas::Invoice do
32
46
  request[:invoice][:id].should == 13
33
47
  end
34
48
 
49
+ context "Custom Authentication" do
50
+ it "should list all invoices from a subscription from a custom moip account" do
51
+ request = Moip::Assinaturas::Invoice.list('assinatura2', moip_auth: $custom_moip_auth)
52
+ request[:success].should be_true
53
+ end
54
+
55
+ it "should get the invoice details from a custom moip account" do
56
+ request = Moip::Assinaturas::Invoice.details(14, moip_auth: $custom_moip_auth)
57
+ request[:success].should be_true
58
+ request[:invoice][:id].should == 14
59
+ end
60
+ end
61
+
35
62
  end
@@ -19,6 +19,20 @@ describe Moip::Assinaturas::Payment do
19
19
  status: [200, 'OK']
20
20
  )
21
21
 
22
+ FakeWeb.register_uri(
23
+ :get,
24
+ "https://TOKEN2:KEY2@api.moip.com.br/assinaturas/v1/invoices/14/payments",
25
+ body: File.join(File.dirname(__FILE__), '..', 'fixtures', 'custom_authentication', 'list_payments.json'),
26
+ status: [200, 'OK']
27
+ )
28
+
29
+ FakeWeb.register_uri(
30
+ :get,
31
+ "https://TOKEN2:KEY2@api.moip.com.br/assinaturas/v1/payments/7",
32
+ body: File.join(File.dirname(__FILE__), '..', 'fixtures', 'custom_authentication', 'details_payment.json'),
33
+ status: [200, 'OK']
34
+ )
35
+
22
36
  end
23
37
 
24
38
  it "should get all payments from a invoice" do
@@ -33,4 +47,17 @@ describe Moip::Assinaturas::Payment do
33
47
  request[:payment][:id].should == 6
34
48
  end
35
49
 
50
+ context "Custom Authentication" do
51
+ it "should get all payments from a invoice" do
52
+ request = Moip::Assinaturas::Payment.list(14, moip_auth: $custom_moip_auth)
53
+ request[:success].should be_true
54
+ request[:payments].size.should == 1
55
+ end
56
+
57
+ it "should get details of a payment" do
58
+ request = Moip::Assinaturas::Payment.details(7, moip_auth: $custom_moip_auth)
59
+ request[:success].should be_true
60
+ request[:payment][:id].should == 7
61
+ end
62
+ end
36
63
  end
@@ -22,8 +22,23 @@ describe Moip::Assinaturas::Plan do
22
22
  }
23
23
  }
24
24
 
25
- @plan_update = @plan.clone
26
- @plan_update[:name] = 'Plano Especial 2'
25
+ @plan2 = {
26
+ code: "plano02",
27
+ name: "Plano Especial 2",
28
+ description: "Descrição do Plano Especial 2",
29
+ amount: 490,
30
+ setup_fee: 200,
31
+ max_qty: 2,
32
+ interval: {
33
+ length: 3,
34
+ unit: "MONTH"
35
+ },
36
+ billing_cycles: 12,
37
+ trial: {
38
+ enabled: true,
39
+ days: 15
40
+ }
41
+ }
27
42
 
28
43
  FakeWeb.register_uri(
29
44
  :post,
@@ -52,6 +67,34 @@ describe Moip::Assinaturas::Plan do
52
67
  body: "",
53
68
  status: [200, 'OK']
54
69
  )
70
+
71
+ FakeWeb.register_uri(
72
+ :post,
73
+ "https://TOKEN2:KEY2@api.moip.com.br/assinaturas/v1/plans",
74
+ body: File.join(File.dirname(__FILE__), '..', 'fixtures', 'custom_authentication', 'create_plan.json'),
75
+ status: [201, 'OK']
76
+ )
77
+
78
+ FakeWeb.register_uri(
79
+ :get,
80
+ "https://TOKEN2:KEY2@api.moip.com.br/assinaturas/v1/plans",
81
+ body: File.join(File.dirname(__FILE__), '..', 'fixtures', 'custom_authentication', 'list_plans.json'),
82
+ status: [200, 'OK']
83
+ )
84
+
85
+ FakeWeb.register_uri(
86
+ :get,
87
+ "https://TOKEN2:KEY2@api.moip.com.br/assinaturas/v1/plans/plano02",
88
+ body: File.join(File.dirname(__FILE__), '..', 'fixtures', 'custom_authentication', 'details_plan.json'),
89
+ status: [200, 'OK']
90
+ )
91
+
92
+ FakeWeb.register_uri(
93
+ :put,
94
+ "https://TOKEN2:KEY2@api.moip.com.br/assinaturas/v1/plans/plano02",
95
+ body: "",
96
+ status: [200, 'OK']
97
+ )
55
98
  end
56
99
 
57
100
  it "should can create a new plan" do
@@ -73,7 +116,7 @@ describe Moip::Assinaturas::Plan do
73
116
  end
74
117
 
75
118
  it "should update an existing plan" do
76
- request = Moip::Assinaturas::Plan.update(@plan_update)
119
+ request = Moip::Assinaturas::Plan.update(@plan)
77
120
  request[:success].should be_true
78
121
  end
79
122
 
@@ -85,4 +128,29 @@ describe Moip::Assinaturas::Plan do
85
128
  end
86
129
  end
87
130
 
131
+ context "Custom Authentication" do
132
+ it "should create a new plan in other moip account" do
133
+ request = Moip::Assinaturas::Plan.create(@plan2, moip_auth: $custom_moip_auth)
134
+ request[:success].should be_true
135
+ request[:plan][:code].should == 'plano02'
136
+ end
137
+
138
+ it "should list all plans from other moip account" do
139
+ request = Moip::Assinaturas::Plan.list(moip_auth: $custom_moip_auth)
140
+ request[:success].should be_true
141
+ request[:plans].size.should == 1
142
+ end
143
+
144
+ it "should get details from a plan of other moip account" do
145
+ request = Moip::Assinaturas::Plan.details('plano02', moip_auth: $custom_moip_auth)
146
+ request[:success].should be_true
147
+ request[:plan][:code].should == 'plano02'
148
+ end
149
+
150
+ it "should update an existing plan of other moip account" do
151
+ request = Moip::Assinaturas::Plan.update(@plan2, moip_auth: $custom_moip_auth)
152
+ request[:success].should be_true
153
+ end
154
+ end
155
+
88
156
  end
@@ -22,6 +22,17 @@ describe Moip::Assinaturas::Subscription do
22
22
  }
23
23
  }
24
24
 
25
+ @subscription2 = {
26
+ code: "assinatura2",
27
+ amount: "100",
28
+ plan: {
29
+ code: "plano2"
30
+ },
31
+ customer: {
32
+ code: "19"
33
+ }
34
+ }
35
+
25
36
  FakeWeb.register_uri(
26
37
  :post,
27
38
  "https://TOKEN:KEY@api.moip.com.br/assinaturas/v1/subscriptions?new_customer=false",
@@ -56,6 +67,41 @@ describe Moip::Assinaturas::Subscription do
56
67
  body: '',
57
68
  status: [200, 'OK']
58
69
  )
70
+
71
+ FakeWeb.register_uri(
72
+ :post,
73
+ "https://TOKEN2:KEY2@api.moip.com.br/assinaturas/v1/subscriptions?new_customer=false",
74
+ body: File.join(File.dirname(__FILE__), '..', 'fixtures', 'custom_authentication', 'create_subscription.json'),
75
+ status: [201, 'CREATED']
76
+ )
77
+
78
+ FakeWeb.register_uri(
79
+ :get,
80
+ "https://TOKEN2:KEY2@api.moip.com.br/assinaturas/v1/subscriptions",
81
+ body: File.join(File.dirname(__FILE__), '..', 'fixtures', 'custom_authentication', 'list_subscriptions.json'),
82
+ status: [200, 'OK']
83
+ )
84
+
85
+ FakeWeb.register_uri(
86
+ :get,
87
+ "https://TOKEN2:KEY2@api.moip.com.br/assinaturas/v1/subscriptions/assinatura2",
88
+ body: File.join(File.dirname(__FILE__), '..', 'fixtures', 'custom_authentication', 'details_subscription.json'),
89
+ status: [200, 'OK']
90
+ )
91
+
92
+ FakeWeb.register_uri(
93
+ :put,
94
+ "https://TOKEN2:KEY2@api.moip.com.br/assinaturas/v1/subscriptions/assinatura2/activate",
95
+ body: '',
96
+ status: [200, 'OK']
97
+ )
98
+
99
+ FakeWeb.register_uri(
100
+ :put,
101
+ "https://TOKEN2:KEY2@api.moip.com.br/assinaturas/v1/subscriptions/assinatura2/suspend",
102
+ body: '',
103
+ status: [200, 'OK']
104
+ )
59
105
  end
60
106
 
61
107
  it "should create a new subscription" do
@@ -93,4 +139,34 @@ describe Moip::Assinaturas::Subscription do
93
139
  end
94
140
  end
95
141
 
142
+ context "Custom Authentication" do
143
+ it "should create a new subscription from a custom moip account" do
144
+ request = Moip::Assinaturas::Subscription.create(@subscription, false, moip_auth: $custom_moip_auth)
145
+ request[:success].should be_true
146
+ request[:subscription][:code].should == 'ass_homolog_72'
147
+ end
148
+
149
+ it "should list all subscriptions from a custom moip account" do
150
+ request = Moip::Assinaturas::Subscription.list(moip_auth: $custom_moip_auth)
151
+ request[:success].should be_true
152
+ request[:subscriptions].size.should == 1
153
+ end
154
+
155
+ it "should get the subscription details from a custom moip account" do
156
+ request = Moip::Assinaturas::Subscription.details('assinatura2', moip_auth: $custom_moip_auth)
157
+ request[:success].should be_true
158
+ request[:subscription][:code].should == 'assinatura2'
159
+ end
160
+
161
+ it "should suspend a subscription from a custom moip account" do
162
+ request = Moip::Assinaturas::Subscription.suspend('assinatura2', moip_auth: $custom_moip_auth)
163
+ request[:success].should be_true
164
+ end
165
+
166
+ it "should reactive a subscription from a custom moip account" do
167
+ request = Moip::Assinaturas::Subscription.activate('assinatura2', moip_auth: $custom_moip_auth)
168
+ request[:success].should be_true
169
+ end
170
+ end
171
+
96
172
  end
data/spec/spec_helper.rb CHANGED
@@ -14,5 +14,11 @@ RSpec.configure do |config|
14
14
  config.token = "TOKEN"
15
15
  config.key = "KEY"
16
16
  end
17
+
18
+ $custom_moip_auth = {
19
+ token: "TOKEN2",
20
+ key: "KEY2",
21
+ sandbox: false
22
+ }
17
23
  end
18
24
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: moip-assinaturas
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.2.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-01-10 00:00:00.000000000 Z
12
+ date: 2014-01-13 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec
@@ -167,6 +167,20 @@ files:
167
167
  - spec/fixtures/create_customer.json
168
168
  - spec/fixtures/create_plan.json
169
169
  - spec/fixtures/create_subscription.json
170
+ - spec/fixtures/custom_authentication/create_customer.json
171
+ - spec/fixtures/custom_authentication/create_plan.json
172
+ - spec/fixtures/custom_authentication/create_subscription.json
173
+ - spec/fixtures/custom_authentication/details_customer.json
174
+ - spec/fixtures/custom_authentication/details_invoice.json
175
+ - spec/fixtures/custom_authentication/details_payment.json
176
+ - spec/fixtures/custom_authentication/details_plan.json
177
+ - spec/fixtures/custom_authentication/details_subscription.json
178
+ - spec/fixtures/custom_authentication/list_customers.json
179
+ - spec/fixtures/custom_authentication/list_invoices.json
180
+ - spec/fixtures/custom_authentication/list_payments.json
181
+ - spec/fixtures/custom_authentication/list_plans.json
182
+ - spec/fixtures/custom_authentication/list_subscriptions.json
183
+ - spec/fixtures/custom_authentication/update_credit_card.json
170
184
  - spec/fixtures/details_customer.json
171
185
  - spec/fixtures/details_invoice.json
172
186
  - spec/fixtures/details_payment.json
@@ -214,6 +228,20 @@ test_files:
214
228
  - spec/fixtures/create_customer.json
215
229
  - spec/fixtures/create_plan.json
216
230
  - spec/fixtures/create_subscription.json
231
+ - spec/fixtures/custom_authentication/create_customer.json
232
+ - spec/fixtures/custom_authentication/create_plan.json
233
+ - spec/fixtures/custom_authentication/create_subscription.json
234
+ - spec/fixtures/custom_authentication/details_customer.json
235
+ - spec/fixtures/custom_authentication/details_invoice.json
236
+ - spec/fixtures/custom_authentication/details_payment.json
237
+ - spec/fixtures/custom_authentication/details_plan.json
238
+ - spec/fixtures/custom_authentication/details_subscription.json
239
+ - spec/fixtures/custom_authentication/list_customers.json
240
+ - spec/fixtures/custom_authentication/list_invoices.json
241
+ - spec/fixtures/custom_authentication/list_payments.json
242
+ - spec/fixtures/custom_authentication/list_plans.json
243
+ - spec/fixtures/custom_authentication/list_subscriptions.json
244
+ - spec/fixtures/custom_authentication/update_credit_card.json
217
245
  - spec/fixtures/details_customer.json
218
246
  - spec/fixtures/details_invoice.json
219
247
  - spec/fixtures/details_payment.json