Toggle navigation
Toggle navigation
This project
Loading...
Sign in
Ruby Gems
/
var
Go to a project
Toggle navigation
Toggle navigation pinning
Projects
Groups
Snippets
Help
Project
Activity
Repository
Pipelines
Graphs
Issues
0
Merge Requests
0
Wiki
Snippets
Network
Create a new issue
Builds
Commits
Issue Boards
Authored by
Marcelo
2016-07-15 17:31:08 -0500
Browse Files
Options
Browse Files
Download
Email Patches
Plain Diff
Commit
7da9db0629507975f40ef1f3db2f750123326efa
7da9db06
1 parent
94cbff70
Builds for 1 pipeline
failed
in 0 seconds
Finished first draft of all act_as_chargeable specs
Changes
4
Builds
1
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
220 additions
and
13 deletions
lib/acts_as_chargeable.rb
lib/conekta_handler.rb
spec/acts_as_chargeable_spec.rb
spec/conekta_oxxo_handler_spec.rb
lib/acts_as_chargeable.rb
View file @
7da9db0
...
...
@@ -25,6 +25,16 @@ module ActsAsChargeable
def
charge_with_conekta
(
options
)
charge
=
conekta_charge
(
options
)
save_charge_info
(
charge
,
options
)
charge
rescue
Conekta
::
ParameterValidationError
,
Conekta
::
ProcessingError
,
Conekta
::
Error
=>
e
update_columns
(
var_status:
'failed'
)
{
error_message:
e
.
message
}
end
def
save_charge_info
(
charge
,
options
)
# TODO: update more info
update_columns
(
var_status:
charge
.
status
,
var_id:
charge
.
id
,
var_service:
'conekta'
)
update_conekta_barcode
(
charge
)
if
options
[
:conekta_type
]
==
'oxxo'
...
...
@@ -32,11 +42,6 @@ module ActsAsChargeable
time
=
Time
.
zone
.
now
update_columns
(
var_payment_at:
time
)
end
charge
rescue
Conekta
::
ParameterValidationError
,
Conekta
::
ProcessingError
,
Conekta
::
Error
=>
e
update_columns
(
var_status:
'failed'
)
{
error_message:
e
.
message
}
end
def
conekta_charge
(
options
)
...
...
@@ -157,6 +162,7 @@ module ActsAsChargeable
return
{
error_message:
'Not charged yet'
}
unless
var_service
return
{
error_message:
'Not charged with oxxo'
}
unless
var_barcode
charge
=
find_charge
# TODO: Revisar redundancia aquí
if
charge
.
status
==
'paid'
update_columns
(
var_status:
'paid'
,
var_payment_at:
Time
.
zone
.
at
(
charge
.
paid_at
))
...
...
@@ -172,6 +178,8 @@ module ActsAsChargeable
private
# TODO: Missing var attributes to clean
# such as var_paid_amount, var_fee, var_payment_method
def
clean_var_variables
return
{
object:
code
}
if
update
(
var_status:
nil
,
var_barcode:
nil
,
var_barcode_url:
nil
,
var_id:
nil
,
...
...
lib/conekta_handler.rb
View file @
7da9db0
...
...
@@ -22,7 +22,7 @@ module Var
end
def
process_charge
(
charge_info
)
# TODO:
raise error if object is nil
# TODO:
update status and time
object
=
Var
.
find_charge
charge_info
[
:id
]
object
.
update
(
var_status:
charge_info
[
:status
])
end
...
...
spec/acts_as_chargeable_spec.rb
View file @
7da9db0
...
...
@@ -6,14 +6,22 @@ describe ActsAsChargeable do
Product
.
delete_all
end
let!
(
:Time
)
{
zone
=
Time
.
zone
now
=
zone
.
now
time
=
class_double
(
Time
)
allow
(
zone
).
to
receive
(
:now
)
{
now
}
allow
(
time
).
to
receive
(
:zone
)
{
zone
}
}
context
'as a module'
do
it
'can be implemented in ActiveRecord'
do
expect
(
Product
).
to
respond_to
(
:acts_as_chargeable
)
end
end
context
'
processing charges
'
do
it
'
: oxxo
'
do
context
'
Charges with conekta
'
do
it
'
An oxxo charge
'
do
product
=
Product
.
create
conekta_object_mock
=
JSON
.
parse
(
ConektaChargeCreateObject
::
OXXO_CREATE_CHARGE_OBJECT
,
...
...
@@ -21,25 +29,23 @@ describe ActsAsChargeable do
allow
(
product
).
to
receive
(
:conekta_charge
).
and_return
(
conekta_object_mock
)
Var
.
create_charge
(
:conekta
,
product
,
{
"conekta_type"
:
"oxxo"
})
expect
(
product
.
var_id
).
to
eq
conekta_object_mock
.
id
expect
(
product
.
var_service
).
to
eq
'conekta'
expect
(
product
.
var_status
).
to
eq
'pending_payment'
expect
(
product
.
var_paid_amount
).
to
eq
conekta_object_mock
.
amount
expect
(
product
.
var_fee
).
to
eq
conekta_object_mock
.
fee
expect
(
product
.
var_payment_method
).
to
eq
'OXXO'
expect
(
product
.
var_payment_at
).
to
eq
(
Time
.
strptime
conekta_object_mock
.
paid_at
.
to_s
,
'%s'
)
end
it
'
: card
'
do
it
'
A card charge
'
do
product
=
Product
.
create
conekta_object_mock
=
JSON
.
parse
(
ConektaChargeCreateObject
::
CARD_CREATE_CHARGE_OBJECT
,
object_class:
OpenStruct
)
allow
(
product
).
to
receive
(
:conekta_charge
).
and_return
(
conekta_object_mock
)
Var
.
create_charge
(
:conekta
,
product
,
{
conekta_type:
'card'
})
Var
.
create_charge
(
:conekta
,
product
,
{
conekta_type:
'card'
,
card_token:
'token'
})
product
.
reload
expect
(
product
.
var_id
).
to
eq
conekta_object_mock
.
id
expect
(
product
.
var_service
).
to
eq
'conekta'
expect
(
product
.
var_status
).
to
eq
'paid'
...
...
@@ -52,6 +58,198 @@ describe ActsAsChargeable do
xit
': spei'
do
end
end
context
'instance methods'
do
it
'returns error message if does not support specified service'
do
product
=
instance_double
(
'Product'
)
expect
do
product
.
charge_with
(
"paypal"
,
{
conekta_type:
'card'
})
end
.
to
raise_error
"
#{
self
.
class
}
doesn't support"
\
" charges with
#{
service
}
"
end
it
'Chooses proper method to attend specified service payment'
do
product
=
instance_double
(
'Product'
)
options
=
{
conekta_type:
'card'
}
expect
do
product
.
charge_with
(
"conekta"
,
options
)
end
.
to
send
(
"charge_with_
#{
service
}
"
,
options
)
end
it
'Raises Conekta authentication error'
do
product
=
instance_double
(
'Product'
)
expect
do
charge
=
product
.
conekta_charge
({})
end
.
to
raise_error
Conekta
::
AuthenticationError
end
it
'Raises Conekta parameter validation error'
do
product
=
instance_double
(
'Product'
)
allow
(
product
).
to
receive
(
:conekta_charge
).
and_raise
(
Conekta
::
ParameterValidationError
)
expect
do
charge
=
product
.
conekta_charge
({})
end
.
to
raise_error
Conekta
::
ParameterValidationError
end
it
'Raises Conekta parameter processing error'
do
product
=
instance_double
(
'Product'
)
allow
(
product
).
to
receive
(
:conekta_charge
).
and_raise
(
Conekta
::
ProcessingError
)
expect
do
charge
=
product
.
conekta_charge
({})
end
.
to
raise_error
Conekta
::
ProcessingError
end
it
'Raises Conekta error'
do
product
=
instance_double
(
'Product'
)
allow
(
product
).
to
receive
(
:conekta_charge
).
and_raise
(
Conekta
::
Error
)
expect
do
charge
=
product
.
conekta_charge
({})
end
.
to
raise_error
Conekta
::
Error
end
it
'Returns card token'
do
product
=
instance_double
(
'Product'
)
hash
=
product
.
conekta_type_of_charge
(
{
conekta_type:
'card'
,
card_token:
'token'
})
returned_hash
=
{
card:
'token'
}
expect
(
hash
).
to
eq
returned_hash
end
it
'Returns card token'
do
product
=
Product
.
new
hash
=
product
.
conekta_type_of_charge
({
conekta_type:
'oxxo'
})
returned_hash
=
{
cash:
{
type:
'oxxo'
,
expires_at:
(
Time
.
zone
.
now
+
3
.
days
).
strftime
(
'%Y-%m-%d'
)
}
}
expect
(
hash
).
to
eq
returned_hash
end
it
'Updates conekta barcode'
do
product
=
instance_double
(
'Product'
)
conekta_object_mock
=
JSON
.
parse
(
ConektaChargeCreateObject
::
OXXO_CREATE_CHARGE_OBJECT
,
object_class:
OpenStruct
)
previous_payment_expiration
=
product
.
var_payment_expires_at
product
.
update_conekta_barcode
conekta_object_mock
expect
(
product
.
var_barcode
).
to
eq
conekta_object_mock
.
payment_method
.
barcode
expect
(
product
.
var_barcode_url
).
to
eq
conekta_object_mock
.
payment_method
.
barcode_url
expect
(
product
.
var_payment_expires_at
).
to_not
eq
previous_payment_expiration
end
it
'Makes manual charge'
do
product
=
instance_double
(
'Product'
)
product
.
manual_charge
previous_time
=
product
.
var_payment_at
expect
(
product
.
var_service
).
to
eq
'manual'
expect
(
product
.
status
).
to
eq
'paid'
expect
(
product
.
var_payment_at
).
to_not
eq
previous_time
end
it
'Makes manual discharge'
do
product
=
instance_double
(
'Product'
)
product
.
manual_charge
expect
(
product
.
var_service
).
to
eq
'manual'
expect
(
product
.
status
).
to
eq
'pending'
expect
(
product
.
var_payment_at
).
to
be_nil
end
it
'Return not charged yet error'
do
product
=
Product
.
create
msg
=
product
.
find_charge
error
=
{
error_message:
'Not charged yet'
}
expect
(
msg
).
to
eq
error
end
it
'Returns Conekta Object'
do
product
=
Product
.
create
conekta_object_mock
=
JSON
.
parse
(
ConektaChargeCreateObject
::
OXXO_CREATE_CHARGE_OBJECT
,
object_class:
OpenStruct
)
allow
(
product
).
to
receive
(
:find_conekta_charge
).
and_return
conekta_object_mock
expect
(
product
.
find_conekta_charge
).
to
eq
conekta_object_mock
end
it
'Returns true when object is charged'
do
product
=
Product
.
create
conekta_object_mock
=
JSON
.
parse
(
ConektaChargeCreateObject
::
CARD_CREATE_CHARGE_OBJECT
,
object_class:
OpenStruct
)
allow
(
product
).
to
receive
(
:find_charge
).
and_return
(
conekta_object_mock
)
expect
(
product
.
charged?
).
to
be
true
end
it
'Returns false when object has not been charged'
do
product
=
Product
.
create
expect
(
product
.
charged?
).
to
be
false
end
xit
'Test instance support'
do
end
xit
'Test sync'
do
end
xit
'Test conekta_attributes'
do
end
it
'Returns true if object is payed'
do
product
=
Product
.
new
product
.
status
=
'paid'
expect
(
product
.
payed?
).
to
be
true
end
it
'Returns true if object is payed'
do
product
=
Product
.
new
expect
(
product
.
payed?
).
to
be
false
end
it
'Returns already paid error when cancelling oxxo payment'
do
product
=
Product
.
new
product
.
status
=
'paid'
error_msg
=
{
error_message:
'Already paid'
}
expect
(
product
.
cancel_oxxo_payment
).
to
eq
error_msg
end
it
'Returns object not charged error when cancelling oxxo payment'
do
product
=
Product
.
new
error_msg
=
{
error_message:
'Not charged yet'
}
expect
(
product
.
cancel_oxxo_payment
).
to
eq
error_msg
end
it
'Returns not charged with oxxo error when cancelling oxxo payment'
do
product
=
Product
.
new
product
.
var_service
=
'conekta'
error_msg
=
{
error_message:
'Not charged with oxxo'
}
expect
(
product
.
cancel_oxxo_payment
).
to
eq
error_msg
end
it
'Nils every object attribute'
do
product
=
Product
.
create
conekta_object_mock
=
JSON
.
parse
(
ConektaChargeCreateObject
::
OXXO_CREATE_CHARGE_OBJECT
,
object_class:
OpenStruct
)
allow
(
product
).
to
receive
(
:conekta_charge
).
and_return
(
conekta_object_mock
)
Var
.
create_charge
(
:conekta
,
product
,
{
"conekta_type"
:
"oxxo"
})
product
.
clean_var_variables
# TODO: Check unused attribute in migration "var_payment::Datetime"
expect
(
product
.
var_id
).
to
be_nil
expect
(
product
.
var_service
).
to
be_nil
expect
(
product
.
var_status
).
to
be_nil
expect
(
product
.
var_paid_amount
).
to
be_nil
expect
(
product
.
var_fee
).
to
be_nil
expect
(
product
.
var_payment_method
).
to
be_nil
expect
(
product
.
var_barcode
).
to
be_nil
expect
(
product
.
var_barcode_url
).
to
be_nil
expect
(
product
.
var_payment_at
).
to
be_nil
expect
(
product
.
var_payment_expires_at
).
to
be_nil
end
end
end
# Tests for mock on Chargeable class
...
...
spec/conekta_oxxo_handler_spec.rb
View file @
7da9db0
...
...
@@ -12,6 +12,7 @@ describe Var::ConektaOxxoHandler do
ConektaChargeCreateObject
::
OXXO_CREATE_CHARGE_OBJECT
,
object_class:
OpenStruct
)
allow
(
product
).
to
receive
(
:conekta_charge
).
and_return
(
conekta_object_mock
)
Var
.
create_charge
(
:conekta
,
product
,
{
"conekta_type"
:
"oxxo"
})
Var
::
ConektaOxxoHandler
.
analyze
(
WebHookPostRequest
::
OXXO_CHARGE_CREATED
)
...
...
Please
register
or
login
to post a comment