Skip to content

Commit 670d610

Browse files
authored
questionnare first version (#372)
* questionnare first version * fix * ups * bump cv * add form_id * ups2 * f * rebase * linter * test * inter * userlists
1 parent 79eefa7 commit 670d610

File tree

9 files changed

+166
-4
lines changed

9 files changed

+166
-4
lines changed

cuenca/__init__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
'LimitedWallet',
2525
'LoginToken',
2626
'Platform',
27+
'Questionnaires',
2728
'Saving',
2829
'ServiceProvider',
2930
'Session',
@@ -70,6 +71,7 @@
7071
LimitedWallet,
7172
LoginToken,
7273
Platform,
74+
Questionnaires,
7375
Saving,
7476
ServiceProvider,
7577
Session,

cuenca/resources/__init__.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
'LimitedWallet',
2424
'LoginToken',
2525
'Platform',
26+
'Questionnaires',
2627
'Saving',
2728
'ServiceProvider',
2829
'Session',
@@ -62,6 +63,7 @@
6263
from .limited_wallets import LimitedWallet
6364
from .login_tokens import LoginToken
6465
from .platforms import Platform
66+
from .questionnaires import Questionnaires
6567
from .resources import RESOURCES
6668
from .savings import Saving
6769
from .service_providers import ServiceProvider
@@ -103,6 +105,7 @@
103105
KYCVerification,
104106
LimitedWallet,
105107
LoginToken,
108+
Questionnaires,
106109
Saving,
107110
Session,
108111
ServiceProvider,

cuenca/resources/questionnaires.py

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
import datetime as dt
2+
from typing import ClassVar, cast
3+
4+
from cuenca_validations.types import QuestionnairesRequest
5+
6+
from ..http import Session, session as global_session
7+
from .base import Creatable, Retrievable
8+
9+
10+
class Questionnaires(Creatable, Retrievable):
11+
_resource: ClassVar = 'questionnaires'
12+
13+
created_at: dt.datetime
14+
token: str
15+
form_id: str
16+
user_id: str
17+
18+
class Config:
19+
schema_extra = {
20+
'example': {
21+
'user_id': 'US234i23jh23h4h23',
22+
'token': '3223j23ij23ij3',
23+
'alert_id': 'ALewifjwiejf',
24+
}
25+
}
26+
27+
@classmethod
28+
def create(
29+
cls,
30+
user_id: str,
31+
token: str,
32+
form_id: str,
33+
*,
34+
session: Session = global_session,
35+
) -> 'Questionnaires':
36+
req = QuestionnairesRequest(
37+
user_id=user_id,
38+
token=token,
39+
form_id=form_id,
40+
)
41+
return cast(
42+
'Questionnaires', cls._create(session=session, **req.dict())
43+
)

cuenca/version.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
1-
__version__ = '0.15.10'
1+
__version__ = '0.15.11'
22
CLIENT_VERSION = __version__
33
API_VERSION = '2020-03-19'

requirements.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
requests==2.31.0
2-
cuenca-validations==0.11.21
2+
cuenca-validations==0.11.24
33
dataclasses>=0.7;python_version<"3.7"
Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
interactions:
2+
- request:
3+
body: '{"user_id": "US2aaB809x842cq8PxhhdgyC", "token": "some_token",
4+
"form_id": "some_form"}'
5+
headers:
6+
Authorization:
7+
- DUMMY
8+
Content-Length:
9+
- '107'
10+
Content-Type:
11+
- application/json
12+
User-Agent:
13+
- cuenca-python/0.15.11
14+
X-Cuenca-Api-Version:
15+
- '2020-03-19'
16+
method: POST
17+
uri: https://sandbox.cuenca.com/questionnaires
18+
response:
19+
body:
20+
string: "{\"id\":\"QUqXfdjpsZRyuuh9MUW9Q-3Q\",\"created_at\":\"2024-01-03T22:29:11.051000\",\"token\":\"some_token\",\"form_id\":\"some_form\",\"user_id\":\"US2aaB809x842cq8PxhhdgyC\",\"form\":[{\"question\":\"\xBFNos
21+
compartes tu n\xFAmero telef\xF3nico registrado en tu cuenta Cuenca?\",\"answer\":\"a\",\"response_id\":\"uTyodLrQ0wyW\"},{\"question\":\"Selecciona
22+
bajo que r\xE9gimen fiscal realizas tu principal actividad econ\xF3mica \",\"answer\":\"{'id':
23+
'CKsgoVykwW05', 'ref': '01HJRZNRKCBQ8VQFE4Z33J25XC', 'label': 'Sueldos y salarios'}\",\"response_id\":\"vD5T276dHEyT\"},{\"question\":\"Selecciona
24+
bajo cuales reg\xEDmenes fiscales tributas:\",\"answer\":\"{'id': 'fnWb4meY0ZgO',
25+
'ref': '01HJRZNRKC487ZPX6JW4CQPPTT', 'label': 'Sueldos y salarios y otro'}\",\"response_id\":\"DHSs4PjTxYLy\"},{\"question\":\"Especifica
26+
cu\xE1l es el otro r\xE9gimen bajo el cual tributas:\",\"answer\":\"Actividad
27+
empresarial o profesional\",\"response_id\":\"uZWUtfD4Tbdh\"},{\"question\":\"Selecciona
28+
el motivo por el que no est\xE1s inscrito en el RFC\",\"answer\":\"{'id':
29+
'1GaQx17R9jsJ', 'ref': '01HJRZNRKCG7JRCPBW2XKB0WET', 'label': 'Estudiante'}\",\"response_id\":\"qzhgw8sZFKEl\"},{\"question\":\"Selecciona
30+
en que sector trabajas\",\"answer\":\"{'id': 'B4zGIvVH1rSA', 'ref': '01HJRZNRKCSMPH5E61ZZGVQ45K',
31+
'label': 'Sector p\xFAblico'}\",\"response_id\":\"XmUCaI9SQrQz\"},{\"question\":\"Selecciona
32+
en que Poder de la Federaci\xF3n trabajas\",\"answer\":\"{'id': 'XGZkWGhHDC6O',
33+
'ref': '01HJRZNRKCQYVGVGDEMF796MNZ', 'label': 'Legislativo'}\",\"response_id\":\"rgXH4rWWWIDh\"},{\"question\":\"Selecciona
34+
en que \xE1mbito es\",\"answer\":\"None\",\"response_id\":\"7m5gPCyj0vV0\"},{\"question\":\"Especifica
35+
el nombre de la dependencia gubernamental\",\"answer\":\"1312\",\"response_id\":\"xl92fwD9t2uO\"},{\"question\":\"Especifica
36+
que puesto desempe\xF1as\",\"answer\":\"12321\",\"response_id\":\"qJ1rrWUC93kC\"},{\"question\":\"Especifica
37+
el nombre de la empresa privada en la que trabajas\",\"answer\":\"31312\",\"response_id\":\"QLSXgdaqzplR\"},{\"question\":\"Especifica
38+
que puesto desempe\xF1as\",\"answer\":\"12312\",\"response_id\":\"xgrZiSA3hype\"},{\"question\":\"Selecciona
39+
cu\xE1l es tu ingreso promedio mensual\",\"answer\":\"{'id': '2pCoii1owjDr',
40+
'ref': '01HJRZNRKCSWJW3FQC41YBF8KT', 'label': '$100,000 - $200,000'}\",\"response_id\":\"a7fj4ANQOYay\"},{\"question\":\"Selecciona
41+
cu\xE1l es tu ingreso promedio mensual\",\"answer\":\"{'id': 'wqVwW98JRrWa',
42+
'ref': '01HJRZNRKDJ7M3A7EHZTCGCM40', 'label': '$25,000 a $50,000'}\",\"response_id\":\"ifh7tM7hy749\"},{\"question\":\"\xBFCu\xE1l
43+
es la actividad econ\xF3mica predominante, giro y ocupaci\xF3n a la que te
44+
dedicas?\\nEjemplos: M\xE9dico, compraventa de ropa, carpinter\xEDa\",\"answer\":\"211\",\"response_id\":\"ITHJFxFj8FCg\"},{\"question\":\"Selecciona
45+
cu\xE1l es tu ingreso promedio mensual\",\"answer\":\"{'id': 'hVlmvHAOiIfs',
46+
'ref': '01HJRZNRKD8HWQG28C6SSF3Y51', 'label': '$200,000 - $500,000'}\",\"response_id\":\"EPYdAz52N8dk\"},{\"question\":\"Favor
47+
de especificar la cantidad de tu ingreso promedio mensual\",\"answer\":\"2112\",\"response_id\":\"3IpYyzuWzGDV\"},{\"question\":\"Favor
48+
de indicar el motivo por el cu\xE1l hubo un incremento en el n\xFAmero de
49+
operaciones en tu cuenta durante el \xFAltimo bimestre\",\"answer\":\"121\",\"response_id\":\"OZoZ3VGz8WQf\"},{\"question\":\"Especifica
50+
cu\xE1l es el origen (de d\xF3nde viene el dinero) de las operaciones que
51+
realizas desde tu cuenta y tu relaci\xF3n con quien te deposita.\",\"answer\":\"asd\",\"response_id\":\"BJx6m3xKfEAQ\"},{\"question\":\"\xBFPuedes
52+
proporcionar las facturas y/o documentos que justifiquen las transacciones
53+
con los mismos?\",\"answer\":\"{'id': 'xzMVhWY9VB2b', 'ref': '01HJRZNRKDW183FRGMM31TPKVT',
54+
'label': 'No'}\",\"response_id\":\"JxSvlRwyQ2TA\"},{\"question\":\"Especifica
55+
cu\xE1l es el destino (a d\xF3nde env\xEDas el dinero) de las operaciones
56+
que realizas desde tu cuenta y tu relaci\xF3n con dichos beneficiarios.\",\"answer\":\"asad\",\"response_id\":\"Oxk0wJp811Uv\"},{\"question\":\"\xBFPuedes
57+
proporcionar las facturas y/o documentos que justifiquen las transacciones
58+
con los mismos?\",\"answer\":\"{'id': 'S9qvNFod6qVb', 'ref': '01HJRZNRKDE8YMMCHSRJDD2ZF0',
59+
'label': 'No'}\",\"response_id\":\"dQcpm6VZfeRn\"},{\"question\":\"Especifica
60+
el/los motivos por los que no cuentas con las facturas y/o documentos que
61+
justifiquen las transacciones.\",\"answer\":\"sads\",\"response_id\":\"Xd5R4a2k8xHq\"},{\"question\":\"Especifica
62+
el/los motivos por los que no cuentas con las facturas y/o documentos que
63+
justifiquen las transacciones.\",\"answer\":\"asdasd\",\"response_id\":\"CVxD5E3TKGkf\"},{\"question\":\"\xBFRecibes
64+
recursos en nombre y por cuenta de alg\xFAn tercero?\",\"answer\":\"{'id':
65+
'1uvBgLOLLaJn', 'ref': '01HJRZNRKDRKBRYJRHX7TBRXZM', 'label': 'No'}\",\"response_id\":\"QWZ6KBYbJ0pp\"},{\"question\":\"Especifica
66+
el nombre de dicha persona\",\"answer\":\"sddsds\",\"response_id\":\"5AxLkxI43fPc\"},{\"question\":\"Especifica
67+
la relaci\xF3n que mantienes con dicha persona\",\"answer\":\"{'id': 'R4MCIs5FR3jy',
68+
'ref': '01HJRZNRKDB0XZMWNSVJ0JS63R', 'label': 'Patr\xF3n'}\",\"response_id\":\"M9IvXhxgcixS\"},{\"question\":\"Declaro
69+
que las respuestas a las preguntas anteriores son bajo protesta de decir verdad
70+
y que la informaci\xF3n que he proporcionado es ver\xEDdica.\",\"answer\":\"{'id':
71+
'arfd8aK9B72v', 'ref': '01HJRZNRKD75GTJSSZ2RQP6NWS', 'label': 'S\xED'}\",\"response_id\":\"igST89RXYtQz\"}]}"
72+
headers:
73+
Connection:
74+
- keep-alive
75+
Content-Length:
76+
- '5057'
77+
Content-Type:
78+
- application/json
79+
Date:
80+
- Wed, 10 Jan 2024 18:25:56 GMT
81+
X-Request-Time:
82+
- 'value: 0.599'
83+
x-amz-apigw-id:
84+
- RVggIFpGiYcEC9A=
85+
x-amzn-Remapped-Connection:
86+
- keep-alive
87+
x-amzn-Remapped-Content-Length:
88+
- '5057'
89+
x-amzn-Remapped-Date:
90+
- Wed, 10 Jan 2024 18:25:56 GMT
91+
x-amzn-Remapped-Server:
92+
- nginx/1.24.0
93+
x-amzn-RequestId:
94+
- aba22cf5-522b-460d-b4b5-57670ee0569e
95+
status:
96+
code: 200
97+
message: OK
98+
version: 1

tests/resources/cassettes/test_create_user_validation_invalid_inputs.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
interactions:
22
- request:
3-
body: '{"curp": null, "account_number": null, "names": null, "first_surname":
3+
body: '{"curp": "MAVM112222HWIERN02", "account_number": null, "names": null, "first_surname":
44
null, "second_surname": null}'
55
headers:
66
Accept:
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import pytest
2+
3+
from cuenca import Questionnaires
4+
5+
6+
@pytest.mark.vcr
7+
def test_create_questionnaire():
8+
qn = Questionnaires.create(
9+
user_id='US2aaB809x842cq8PxhhdgyC',
10+
token='some_token',
11+
form_id='some_form',
12+
)
13+
assert qn.id
14+
assert qn.user_id
15+
assert qn.form_id
16+
assert qn.token

tests/resources/test_user_lists_validation.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,6 @@ def test_create_user_validation(user_lists_request):
1515
@pytest.mark.vcr
1616
def test_create_user_validation_invalid_inputs():
1717
with pytest.raises(CuencaResponseException) as exc:
18-
UserListsValidation.create(**dict())
18+
UserListsValidation.create(**dict(curp='MAVM112222HWIERN02'))
1919
assert exc.status_code == 403
2020
assert exc.json['error'] == 'There is an error with the inputs'

0 commit comments

Comments
 (0)