Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Chester integration #192

Open
wants to merge 15 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions cuenca/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,13 +11,16 @@
'CardValidation',
'Commission',
'Deposit',
'FraudValidation',
'LoginToken',
'Saving',
'ServiceProvider',
'Statement',
'TransactionTokenValidation',
'Transfer',
'UserCredential',
'UserLogin',
'UserPldRiskLevel',
'WalletTransaction',
'WhatsappTransfer',
'configure',
Expand All @@ -39,13 +42,16 @@
CardValidation,
Commission,
Deposit,
FraudValidation,
LoginToken,
Saving,
ServiceProvider,
Statement,
TransactionTokenValidation,
Transfer,
UserCredential,
UserLogin,
UserPldRiskLevel,
WalletTransaction,
WhatsappTransfer,
)
Expand Down
9 changes: 9 additions & 0 deletions cuenca/resources/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,12 +10,15 @@
'CardValidation',
'Commission',
'Deposit',
'FraudValidation',
'LoginToken',
'Saving',
'ServiceProvider',
'Statement',
'TransactionTokenValidation',
'Transfer',
'UserLogin',
'UserPldRiskLevel',
'WalletTransaction',
'WhatsappTransfer',
]
Expand All @@ -31,14 +34,17 @@
from .cards import Card
from .commissions import Commission
from .deposits import Deposit
from .fraud_validations import FraudValidation
from .login_tokens import LoginToken
from .resources import RESOURCES
from .savings import Saving
from .service_providers import ServiceProvider
from .statements import Statement
from .transaction_token_validations import TransactionTokenValidation
from .transfers import Transfer
from .user_credentials import UserCredential
from .user_logins import UserLogin
from .user_pld_risk_levels import UserPldRiskLevel
from .wallet_transactions import WalletTransaction
from .whatsapp_transfers import WhatsappTransfer

Expand All @@ -55,13 +61,16 @@
CardValidation,
Commission,
Deposit,
FraudValidation,
LoginToken,
Saving,
ServiceProvider,
Statement,
TransactionTokenValidation,
Transfer,
UserCredential,
UserLogin,
UserPldRiskLevel,
WalletTransaction,
WhatsappTransfer,
]
Expand Down
59 changes: 59 additions & 0 deletions cuenca/resources/fraud_validations.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
import datetime as dt
from typing import ClassVar, Optional, cast

from cuenca_validations.types.enums import (
AuthorizerTransaction,
CardFraudType,
CardholderVerificationMethod,
CardStatus,
CardType,
EcommerceIndicator,
IssuerNetwork,
PosCapability,
TrackDataMethod,
)
from cuenca_validations.types.requests import FraudValidationRequest
from pydantic.dataclasses import dataclass

from cuenca.resources.base import Creatable, Retrievable

from ..http import Session, session as global_session


@dataclass
class FraudValidation(Retrievable, Creatable):
_resource: ClassVar = 'fraud_validations'

id: str
created_at: dt.datetime
updated_at: dt.datetime
card_id: Optional[str]
user_id: Optional[str]
amount: int
merchant_name: str
merchant_type: str
merchant_data: str
currency_code: str
card_type: Optional[CardType]
card_status: Optional[CardStatus]
transaction_type: AuthorizerTransaction
track_data_method: TrackDataMethod
pos_capability: PosCapability
logical_network: Optional[str]
issuer: IssuerNetwork
cardholder_verification_method: CardholderVerificationMethod
ecommerce_indicator: EcommerceIndicator
token_validation_id: Optional[str]
result: Optional[CardFraudType]
is_cvv: bool = False

@classmethod
def create(
cls,
request: FraudValidationRequest,
*,
session: Session = global_session,
) -> 'FraudValidation':
return cast(
'FraudValidation', cls._create(session=session, **request.dict())
)
33 changes: 33 additions & 0 deletions cuenca/resources/transaction_token_validations.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
import datetime as dt
from typing import ClassVar, cast

from cuenca_validations.types.enums import TransactionTokenValidationStatus
from cuenca_validations.types.requests import (
TransactionTokenValidationUpdateRequest,
)
from pydantic.dataclasses import dataclass

from cuenca.resources.base import Retrievable, Updateable

from ..http import Session, session as global_session


@dataclass
class TransactionTokenValidation(Retrievable, Updateable):
_resource: ClassVar = 'transaction_token_validations'

created_at: dt.datetime
deactivated_at: dt.datetime
status: TransactionTokenValidationStatus

@classmethod
def update(
cls,
id: str,
status: TransactionTokenValidationStatus,
*,
session: Session = global_session,
) -> 'TransactionTokenValidation':
req = TransactionTokenValidationUpdateRequest(status=status)
resp = cls._update(id, session=session, **req.dict())
return cast('TransactionTokenValidation', resp)
28 changes: 28 additions & 0 deletions cuenca/resources/user_pld_risk_levels.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
import datetime as dt
from typing import ClassVar, cast

from cuenca_validations.types.requests import UserPldRiskLevelRequest
from pydantic.dataclasses import dataclass

from cuenca.resources.base import Creatable, Retrievable

from ..http import Session, session as global_session


@dataclass
class UserPldRiskLevel(Retrievable, Creatable):
_resource: ClassVar = 'user_pld_risk_levels'

created_at: dt.datetime
updated_at: dt.datetime
level: float
is_user_defined: bool

@classmethod
def create(
cls, user_id: str, level: float, *, session: Session = global_session
) -> 'UserPldRiskLevel':
req = UserPldRiskLevelRequest(user_id=user_id, level=level)
return cast(
'UserPldRiskLevel', cls._create(session=session, **req.dict())
)
2 changes: 1 addition & 1 deletion cuenca/version.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
__version__ = '0.7.13'
__version__ = '0.7.14.dev7'
CLIENT_VERSION = __version__
API_VERSION = '2020-03-19'
2 changes: 1 addition & 1 deletion requirements.txt
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
requests==2.26.0
cuenca-validations==0.9.16
cuenca-validations==0.9.18.dev1
dataclasses>=0.7;python_version<"3.7"
61 changes: 61 additions & 0 deletions tests/resources/cassettes/test_create_fraud_validation.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
interactions:
- request:
body: '{"card_id": "CA1234567890", "user_id": "US1234", "amount": 123, "merchant_name":
"AMAZON MX MARKETPLACE MEXICO DF 000MX", "merchant_type": "wtype", "merchant_data":
"0279288357 00012558", "currency_code": "458", "prosa_transaction_id":
"12345", "retrieval_reference": "who ks", "card_type": "virtual", "card_status":
"active", "transaction_type": "normal_purchase", "authorizer_number": "1231223123",
"track_data_method": "terminal", "pos_capability": "pin_accepted", "logical_network":
null, "is_cvv": true, "get_balance": false, "atm_fee": null, "issuer": "Mastercard",
"cardholder_verification_method": "signature", "ecommerce_indicator": "0"}'
headers:
Accept:
- '*/*'
Accept-Encoding:
- gzip, deflate
Authorization:
- DUMMY
Connection:
- keep-alive
Content-Length:
- '657'
Content-Type:
- application/json
User-Agent:
- cuenca-python/0.7.12
X-Cuenca-Api-Version:
- '2020-03-19'
method: POST
uri: https://sandbox.cuenca.com/fraud_validations
response:
body:
string: '{"id":"FVDnqqjjbXQ92OvY6g0Jf9nQ","created_at":"2021-10-21T20:20:58.240300","updated_at":"2021-10-21T20:20:58.240307","card_id":"CA1234567890","user_id":"US1234","amount":123,"merchant_name":"AMAZON
MX MARKETPLACE MEXICO DF 000MX","merchant_type":"wtype","merchant_data":"0279288357 00012558","currency_code":"458","prosa_transaction_id":"12345","retrieval_reference":"who
ks","card_type":"virtual","card_status":"active","transaction_type":"normal_purchase","authorizer_number":"1231223123","track_data_method":"terminal","pos_capability":"pin_accepted","logical_network":null,"is_cvv":true,"get_balance":false,"atm_fee":null,"issuer":"Mastercard","cardholder_verification_method":"signature","ecommerce_indicator":"0","token_validation_id":null,"result":null}'
headers:
Connection:
- keep-alive
Content-Length:
- '771'
Content-Type:
- application/json
Date:
- Thu, 21 Oct 2021 20:20:58 GMT
X-Request-Time:
- 'value: 0.563'
x-amz-apigw-id:
- HkzCkG_uCYcF2yg=
x-amzn-Remapped-Connection:
- keep-alive
x-amzn-Remapped-Content-Length:
- '771'
x-amzn-Remapped-Date:
- Thu, 21 Oct 2021 20:20:58 GMT
x-amzn-Remapped-Server:
- nginx/1.20.1
x-amzn-RequestId:
- 9a30606c-f5e3-4406-aa00-ddac3137c3bf
status:
code: 201
message: Created
version: 1
52 changes: 52 additions & 0 deletions tests/resources/cassettes/test_create_user_pld_risk_level.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
interactions:
- request:
body: '{"user_id": "US6D1wbTEdLuTjf227iF05js", "level": 0.7}'
headers:
Accept:
- '*/*'
Accept-Encoding:
- gzip, deflate
Authorization:
- DUMMY
Connection:
- keep-alive
Content-Length:
- '53'
Content-Type:
- application/json
User-Agent:
- cuenca-python/0.7.12
X-Cuenca-Api-Version:
- '2020-03-19'
method: POST
uri: https://sandbox.cuenca.com/user_pld_risk_levels
response:
body:
string: '{"id":"US6D1wbTEdLuTjf227iF05js","created_at":"2021-10-21T22:20:30.516179","updated_at":"2021-10-21T22:20:30.516191","level":"0.7","is_user_defined":true}'
headers:
Connection:
- keep-alive
Content-Length:
- '154'
Content-Type:
- application/json
Date:
- Thu, 21 Oct 2021 22:20:30 GMT
X-Request-Time:
- 'value: 0.450'
x-amz-apigw-id:
- HlEjOFkZiYcF2iw=
x-amzn-Remapped-Connection:
- keep-alive
x-amzn-Remapped-Content-Length:
- '154'
x-amzn-Remapped-Date:
- Thu, 21 Oct 2021 22:20:30 GMT
x-amzn-Remapped-Server:
- nginx/1.20.1
x-amzn-RequestId:
- 0a21550f-54d1-4608-b4e6-7e5a32e10754
status:
code: 201
message: Created
version: 1
50 changes: 50 additions & 0 deletions tests/resources/cassettes/test_retrieve_fraud_validation.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
interactions:
- request:
body: null
headers:
Accept:
- '*/*'
Accept-Encoding:
- gzip, deflate
Authorization:
- DUMMY
Connection:
- keep-alive
User-Agent:
- cuenca-python/0.7.12
X-Cuenca-Api-Version:
- '2020-03-19'
method: GET
uri: https://sandbox.cuenca.com/fraud_validations/FVDnqqjjbXQ92OvY6g0Jf9nQ
response:
body:
string: '{"id":"FVDnqqjjbXQ92OvY6g0Jf9nQ","created_at":"2021-10-21T20:20:58.240000","updated_at":"2021-10-21T20:20:58.240000","card_id":"CA1234567890","user_id":"US1234","amount":123,"merchant_name":"AMAZON
MX MARKETPLACE MEXICO DF 000MX","merchant_type":"wtype","merchant_data":"0279288357 00012558","currency_code":"458","prosa_transaction_id":"12345","retrieval_reference":"who
ks","card_type":"virtual","card_status":"active","transaction_type":"normal_purchase","authorizer_number":"1231223123","track_data_method":"terminal","pos_capability":"pin_accepted","logical_network":null,"is_cvv":true,"get_balance":false,"atm_fee":null,"issuer":"Mastercard","cardholder_verification_method":"signature","ecommerce_indicator":"0","token_validation_id":null,"result":"authorize"}'
headers:
Connection:
- keep-alive
Content-Length:
- '778'
Content-Type:
- application/json
Date:
- Thu, 21 Oct 2021 21:45:35 GMT
X-Request-Time:
- 'value: 0.245'
x-amz-apigw-id:
- Hk_b2Fe6CYcFbhg=
x-amzn-Remapped-Connection:
- keep-alive
x-amzn-Remapped-Content-Length:
- '778'
x-amzn-Remapped-Date:
- Thu, 21 Oct 2021 21:45:35 GMT
x-amzn-Remapped-Server:
- nginx/1.20.1
x-amzn-RequestId:
- 632daa8a-074e-48ed-9bb0-a7de3e553a90
status:
code: 200
message: OK
version: 1
Loading