Skip to content

Commit 3c2ebf1

Browse files
committed
Add physical/social/virtual docs (no mfa yet)
1 parent 5f64bb6 commit 3c2ebf1

9 files changed

Lines changed: 201 additions & 76 deletions

File tree

synapse_pay_rest/models/users/base_document.py

Lines changed: 23 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -108,17 +108,34 @@ def payload_for_update(self, **kwargs):
108108
}
109109
for kwarg in kwargs:
110110
if kwarg == 'physical_documents':
111-
physical_docs = [physical_doc.dict() for physical_doc
112-
in kwargs['physical_documents']]
111+
physical_docs = kwargs['physical_documents']
113112
payload['documents'][0]['physical_docs'] = physical_docs
114113
elif kwarg == 'social_documents':
115-
social_docs = [social_doc.dict() for social_doc
116-
in kwargs['social_documents']]
114+
social_docs = kwargs['social_documents']
117115
payload['documents'][0]['social_docs'] = social_docs
118116
elif kwarg == 'virtual_documents':
119-
virtual_docs = [virtual_doc.dict() for virtual_doc
120-
in kwargs['virtual_documents']]
117+
virtual_docs = kwargs['virtual_documents']
121118
payload['documents'][0]['virtual_docs'] = virtual_docs
122119
else:
123120
payload['documents'][0][kwarg] = kwargs[kwarg]
124121
return payload
122+
123+
def add_physical_document(self, **kwargs):
124+
return PhysicalDocument.create(base_document=self, type=kwargs['type'],
125+
value=kwargs['value'])
126+
127+
def add_social_document(self, **kwargs):
128+
return SocialDocument.create(base_document=self, type=kwargs['type'],
129+
value=kwargs['value'])
130+
# base_doc = self.update(social_documents=[doc])
131+
# doc = [doc for doc in base_doc.social_documents
132+
# if doc.type == kwargs['type']]
133+
# return doc[-1]
134+
135+
def add_virtual_document(self, **kwargs):
136+
return VirtualDocument.create(base_document=self, type=kwargs['type'],
137+
value=kwargs['value'])
138+
# base_doc = self.update(virtual_documents=[doc])
139+
# doc = [doc for doc in base_doc.virtual_documents
140+
# if doc.type == kwargs['type']]
141+
# return doc[-1]

synapse_pay_rest/models/users/document.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,10 @@ def __init__(self, **kwargs):
88
for arg, value in kwargs.items():
99
setattr(self, arg, value)
1010

11+
@classmethod
12+
def payload_for_create(cls, type, value):
13+
return {'document_value': value, 'document_type': type}
14+
1115
@classmethod
1216
def from_response(cls, response):
1317
return cls(type=response['document_type'],
@@ -17,6 +21,5 @@ def from_response(cls, response):
1721

1822
@classmethod
1923
def multiple_from_response(cls, response):
20-
base_docs = [cls.from_response(doc_data)
21-
for doc_data in response]
24+
base_docs = [cls.from_response(doc_data) for doc_data in response]
2225
return base_docs

synapse_pay_rest/models/users/physical_document.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,13 @@
22

33

44
class PhysicalDocument(Document):
5-
pass
5+
"""
6+
"""
7+
8+
@classmethod
9+
def create(cls, base_document=None, type=None, value=None):
10+
payload = cls.payload_for_create(type, value)
11+
base_doc = base_document.update(physical_documents=[payload])
12+
physical_doc = [doc for doc in base_doc.physical_documents
13+
if doc.type == type][0]
14+
return physical_doc

synapse_pay_rest/models/users/social_document.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,13 @@
22

33

44
class SocialDocument(Document):
5-
pass
5+
"""
6+
"""
7+
8+
@classmethod
9+
def create(cls, base_document=None, type=None, value=None):
10+
payload = cls.payload_for_create(type, value)
11+
base_doc = base_document.update(social_documents=[payload])
12+
social_doc = [doc for doc in base_doc.social_documents
13+
if doc.type == type][0]
14+
return social_doc

synapse_pay_rest/models/users/user.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,7 @@ def from_response(cls, client, response):
3232

3333
@classmethod
3434
def multiple_from_response(cls, client, response):
35-
users = [cls.from_response(client, user_data)
36-
for user_data in response]
35+
users = [cls.from_response(client, user_data) for user_data in response]
3736
return users
3837

3938
@staticmethod

synapse_pay_rest/models/users/virtual_document.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,11 @@
44
class VirtualDocument(Document):
55
"""
66
"""
7-
pass
7+
8+
@classmethod
9+
def create(cls, base_document=None, type=None, value=None):
10+
payload = cls.payload_for_create(type, value)
11+
base_doc = base_document.update(virtual_documents=[payload])
12+
virtual_doc = [doc for doc in base_doc.virtual_documents
13+
if doc.type == type][0]
14+
return virtual_doc

synapse_pay_rest/tests/models/base_document_tests.py

Lines changed: 44 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,15 @@
44
from synapse_pay_rest.tests.fixtures.user import *
55
from synapse_pay_rest.models import User
66
from synapse_pay_rest.models import BaseDocument
7+
from synapse_pay_rest.models import PhysicalDocument
8+
from synapse_pay_rest.models import SocialDocument
9+
from synapse_pay_rest.models import VirtualDocument
710

811

9-
class UserTestCases(unittest.TestCase):
12+
class BaseDocumentTestCases(unittest.TestCase):
1013
def setUp(self):
1114
self.client = test_client
1215
self.user = User.create(self.client, **user_create_args)
13-
14-
def test_edit_base_document(self):
1516
args = {
1617
'email': 'scoobie@doo.com',
1718
'phone_number': '707-555-5555',
@@ -29,6 +30,44 @@ def test_edit_base_document(self):
2930
'address_postal_code': '94114',
3031
'address_country_code': 'US'
3132
}
32-
base_document = self.user.add_base_document(**args)
33-
base_document = base_document.update(entity_scope='Lawyer')
33+
self.base_document = self.user.add_base_document(**args)
34+
35+
def test_edit_base_document(self):
36+
base_document = self.base_document.update(entity_scope='Lawyer')
3437
self.assertIsInstance(base_document, BaseDocument)
38+
39+
def test_add_physical_documents(self):
40+
type = 'GOVT_ID'
41+
value = 'data:text/csv;base64,SUQs=='
42+
physical_doc = self.base_document.add_physical_document(type=type,
43+
value=value)
44+
self.assertIsInstance(physical_doc, PhysicalDocument)
45+
self.assertEqual(physical_doc.type, type)
46+
47+
properties = ['type', 'id', 'status', 'last_updated']
48+
for prop in properties:
49+
self.assertIsNotNone(getattr(physical_doc, prop))
50+
51+
def test_add_social_documents(self):
52+
type = 'FACEBOOK'
53+
value = 'facebook.com/barnabus'
54+
social_doc = self.base_document.add_social_document(type=type,
55+
value=value)
56+
self.assertIsInstance(social_doc, SocialDocument)
57+
self.assertEqual(social_doc.type, type)
58+
59+
properties = ['type', 'id', 'status', 'last_updated']
60+
for prop in properties:
61+
self.assertIsNotNone(getattr(social_doc, prop))
62+
63+
def test_add_virtual_documents(self):
64+
type = 'SSN'
65+
value = '2222'
66+
virtual_doc = self.base_document.add_virtual_document(type=type,
67+
value=value)
68+
self.assertIsInstance(virtual_doc, VirtualDocument)
69+
self.assertEqual(virtual_doc.type, type)
70+
71+
properties = ['type', 'id', 'status', 'last_updated']
72+
for prop in properties:
73+
self.assertIsNotNone(getattr(virtual_doc, prop))

synapse_pay_rest/tests/models/user_tests.py

Lines changed: 58 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -10,70 +10,70 @@ class UserTestCases(unittest.TestCase):
1010
def setUp(self):
1111
self.client = test_client
1212

13-
# def test_create(self):
14-
# user = User.create(self.client, **user_create_args)
15-
# properties = ['client', 'id', 'refresh_token', 'logins',
16-
# 'phone_numbers', 'legal_names', 'permission',
17-
# 'supp_id', 'is_business', 'cip_tag']
18-
# # check properties assigned
19-
# for prop in properties:
20-
# self.assertIsNotNone(getattr(user, prop))
13+
def test_create(self):
14+
user = User.create(self.client, **user_create_args)
15+
properties = ['client', 'id', 'refresh_token', 'logins',
16+
'phone_numbers', 'legal_names', 'permission',
17+
'supp_id', 'is_business', 'cip_tag']
18+
# check properties assigned
19+
for prop in properties:
20+
self.assertIsNotNone(getattr(user, prop))
2121

22-
# def test_by_id(self):
23-
# user_id = User.create(self.client, **user_create_args).id
24-
# user = User.by_id(self.client, user_id)
25-
# self.assertIsInstance(user, User)
26-
# self.assertEqual(user_id, user.id)
22+
def test_by_id(self):
23+
user_id = User.create(self.client, **user_create_args).id
24+
user = User.by_id(self.client, user_id)
25+
self.assertIsInstance(user, User)
26+
self.assertEqual(user_id, user.id)
2727

28-
# def test_all(self):
29-
# users = User.all(self.client)
30-
# self.assertIsInstance(users, list)
31-
# self.assertIsInstance(users[0], User)
32-
# # with params
33-
# query = "test"
34-
# per_page = 5
35-
# page1 = User.all(self.client, query=query, page=1, per_page=per_page)
36-
# page2 = User.all(self.client, query=query, page=2, per_page=per_page)
37-
# self.assertNotEqual(page1[0].id, page2[0].id)
38-
# self.assertEqual(per_page, len(page1))
39-
# # TODO should test query in legal names or emails
28+
def test_all(self):
29+
users = User.all(self.client)
30+
self.assertIsInstance(users, list)
31+
self.assertIsInstance(users[0], User)
32+
# with params
33+
query = "test"
34+
per_page = 5
35+
page1 = User.all(self.client, query=query, page=1, per_page=per_page)
36+
page2 = User.all(self.client, query=query, page=2, per_page=per_page)
37+
self.assertNotEqual(page1[0].id, page2[0].id)
38+
self.assertEqual(per_page, len(page1))
39+
# TODO should test query in legal names or emails
4040

41-
# def test_add_legal_name(self):
42-
# user = User.create(self.client, **user_create_args)
43-
# new_name = "Barb Holland"
44-
# self.assertNotIn(new_name, user.legal_names)
45-
# user = user.add_legal_name(new_name)
46-
# self.assertIn(new_name, user.legal_names)
41+
def test_add_legal_name(self):
42+
user = User.create(self.client, **user_create_args)
43+
new_name = "Barb Holland"
44+
self.assertNotIn(new_name, user.legal_names)
45+
user = user.add_legal_name(new_name)
46+
self.assertIn(new_name, user.legal_names)
4747

48-
# def test_add_and_remove_login(self):
49-
# user = User.create(self.client, **user_create_args)
50-
# email = 'foo@foo.com'
51-
# # add login
52-
# user = user.add_login(email, password='letmein', read_only=True)
53-
# self.assertEqual(2, len(user.logins))
54-
# self.assertEqual(email, user.logins[-1]['email'])
55-
# self.assertEqual('READ', user.logins[-1]['scope'])
56-
# # remove login
57-
# user = user.remove_login(email)
58-
# self.assertEqual(1, len(user.logins))
48+
def test_add_and_remove_login(self):
49+
user = User.create(self.client, **user_create_args)
50+
email = 'foo@foo.com'
51+
# add login
52+
user = user.add_login(email, password='letmein', read_only=True)
53+
self.assertEqual(2, len(user.logins))
54+
self.assertEqual(email, user.logins[-1]['email'])
55+
self.assertEqual('READ', user.logins[-1]['scope'])
56+
# remove login
57+
user = user.remove_login(email)
58+
self.assertEqual(1, len(user.logins))
5959

60-
# def test_add_and_remove_phone_number(self):
61-
# user = User.create(self.client, **user_create_args)
62-
# phone_number = '4155555555'
63-
# # add phone number
64-
# user = user.add_phone_number(phone_number)
65-
# self.assertEqual(2, len(user.phone_numbers))
66-
# self.assertEqual(phone_number, user.phone_numbers[-1])
67-
# # remove phone number
68-
# user = user.remove_phone_number(phone_number)
69-
# self.assertNotIn(phone_number, user.phone_numbers)
60+
def test_add_and_remove_phone_number(self):
61+
user = User.create(self.client, **user_create_args)
62+
phone_number = '4155555555'
63+
# add phone number
64+
user = user.add_phone_number(phone_number)
65+
self.assertEqual(2, len(user.phone_numbers))
66+
self.assertEqual(phone_number, user.phone_numbers[-1])
67+
# remove phone number
68+
user = user.remove_phone_number(phone_number)
69+
self.assertNotIn(phone_number, user.phone_numbers)
7070

71-
# def test_update_cip_tag(self):
72-
# user = User.create(self.client, **user_create_args)
73-
# self.assertEqual(1, user.cip_tag)
74-
# new_cip = 3
75-
# user = user.change_cip_tag(new_cip)
76-
# self.assertEqual(new_cip, user.cip_tag)
71+
def test_update_cip_tag(self):
72+
user = User.create(self.client, **user_create_args)
73+
self.assertEqual(1, user.cip_tag)
74+
new_cip = 3
75+
user = user.change_cip_tag(new_cip)
76+
self.assertEqual(new_cip, user.cip_tag)
7777

7878
def test_add_base_document(self):
7979
user = User.create(self.client, **user_create_args)
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
import unittest
2+
import pdb
3+
from synapse_pay_rest.tests.fixtures.client import *
4+
from synapse_pay_rest.tests.fixtures.user import *
5+
from synapse_pay_rest.models import User
6+
from synapse_pay_rest.models import BaseDocument
7+
from synapse_pay_rest.models import PhysicalDocument
8+
from synapse_pay_rest.models import SocialDocument
9+
from synapse_pay_rest.models import VirtualDocument
10+
11+
12+
class VirtualDocumentTestCases(unittest.TestCase):
13+
def setUp(self):
14+
self.client = test_client
15+
self.user = User.create(self.client, **user_create_args)
16+
args = {
17+
'email': 'scoobie@doo.com',
18+
'phone_number': '707-555-5555',
19+
'ip': '127.0.0.1',
20+
'name': 'Doctor BaseDoc',
21+
'aka': 'Basey',
22+
'entity_type': 'F',
23+
'entity_scope': 'Arts & Entertainment',
24+
'birth_day': 28,
25+
'birth_month': 2,
26+
'birth_year': 1990,
27+
'address_street': '42 Base Blvd',
28+
'address_city': 'San Francisco',
29+
'address_subdivision': 'CA',
30+
'address_postal_code': '94114',
31+
'address_country_code': 'US'
32+
}
33+
self.base_document = self.user.add_base_document(**args)
34+
35+
def test_with_valid_ssn(self):
36+
pass
37+
38+
def test_with_invalid_ssn(self):
39+
pass
40+
41+
def test_with_ssn_mfa(self):
42+
pass

0 commit comments

Comments
 (0)