Skip to content

Commit 14237bb

Browse files
committed
adding users api structure and list endpoint, refactoring and testing
1 parent b4657c0 commit 14237bb

File tree

21 files changed

+412
-13
lines changed

21 files changed

+412
-13
lines changed

pants.toml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
[GLOBAL]
2-
pants_version = '2.19.0'
2+
pants_version = '2.19.1'
33

44
backend_packages = [
55
'pants.backend.python',
@@ -34,6 +34,7 @@ filter = [
3434
'http_client/src',
3535
'number_insight_v2/src',
3636
'sms/src',
37+
'users/src',
3738
'utils/src',
3839
'testutils',
3940
]

sms/src/vonage_sms/responses.py

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
from typing import List, Optional
22

3-
from pydantic import BaseModel, Field, field_validator
3+
from pydantic import BaseModel, Field
44

55

66
class MessageResponse(BaseModel):
@@ -16,12 +16,4 @@ class MessageResponse(BaseModel):
1616

1717
class SmsResponse(BaseModel):
1818
message_count: str = Field(..., validation_alias='message-count')
19-
messages: List[dict]
20-
21-
@field_validator('messages')
22-
@classmethod
23-
def create_message_response(cls, value):
24-
messages = []
25-
for message in value:
26-
messages.append(MessageResponse(**message))
27-
return messages
19+
messages: List[MessageResponse]

sms/tests/data/send_long_sms.json

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
{
2+
"message-count": "2",
3+
"messages": [
4+
{
5+
"to": "1234567890",
6+
"message-id": "62dfdf68-6c7c-479a-a190-5c52f798a787",
7+
"status": "0",
8+
"remaining-balance": "37.43563628",
9+
"message-price": "0.04120000",
10+
"network": "23420",
11+
"client-ref": "ref123"
12+
},
13+
{
14+
"to": "1234567890",
15+
"message-id": "72ff9536-62d6-455a-9f0b-65f3c265b423",
16+
"status": "0",
17+
"remaining-balance": "37.43563628",
18+
"message-price": "0.04120000",
19+
"network": "23420",
20+
"client-ref": "ref123"
21+
}
22+
]
23+
}

sms/tests/test_sms.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,16 @@ def test_send_message():
9393
assert response.messages[0].network == '23420'
9494

9595

96+
@responses.activate
97+
def test_send_long_message():
98+
build_response(path, 'POST', 'https://rest.nexmo.com/sms/json', 'send_long_sms.json')
99+
message = SmsMessage(to='1234567890', from_='Acme Inc.', text='Hello, World!')
100+
response = sms.send(message)
101+
assert response.message_count == '2'
102+
assert response.messages[0].message_id == '62dfdf68-6c7c-479a-a190-5c52f798a787'
103+
assert response.messages[1].message_id == '72ff9536-62d6-455a-9f0b-65f3c265b423'
104+
105+
96106
@responses.activate
97107
def test_send_message_with_signature():
98108
sms = Sms(

testutils/BUILD

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,3 @@
1-
python_sources()
1+
file(name='fake_private_key', source='data/fake_private_key.txt')
2+
3+
python_sources(dependencies=[':fake_private_key'])

testutils/__init__.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
from .testutils import build_response
2+
from .mock_auth import get_mock_api_key_auth, get_mock_jwt_auth
23

3-
__all__ = ['build_response']
4+
__all__ = ['build_response', 'get_mock_api_key_auth', 'get_mock_jwt_auth']
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
-----BEGIN PRIVATE KEY-----
2+
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDQdAHqJHs/a+Ra
3+
2ubvSd1vz/aWlJ9BqnMUtB7guTlyggdENAbleIkzep6mUHepDJdQh8Qv6zS3lpUe
4+
K0UkDfr1/FvsvxurGw/YYPagUEhP/HxMbs2rnQTiAdWOT+Ux9vPABoyNYvZB90xN
5+
IVhBDRWgkz1HPQBRNjFcm3NOol83h5Uwp5YroGTWx+rpmIiRhQj3mv6luk102d95
6+
4ulpPpzcYWKIpJNdclJrEkBZaghDZTOpbv79qd+ds9AVp1j8i9cG/owBJpsJWxfw
7+
StMDpNeEZqopeQWmA121sSEsxpAbKJ5DA7F/lmckx74sulKHX1fDWT76cRhloaEQ
8+
VmETdj0VAgMBAAECggEAZ+SBtchz8vKbsBqtAbM/XcR5Iqi1TR2eWMHDJ/65HpSm
9+
+XuyujjerN0e6EZvtT4Uxmq8QaPJNP0kmhI31hXvsB0UVcUUDa4hshb1pIYO3Gq7
10+
Kr8I29EZB2mhndm9Ii9yYhEBiVA66zrNeR225kkWr97iqjhBibhoVr8Vc6oiqcIP
11+
nFy5zSFtQSkhucaPge6rW00JSOD3wg2GM+rgS6r22t8YmqTzAwvwfil5pQfUngal
12+
oywqLOf6CUYXPBleJc1KgaIIP/cSvqh6b/t25o2VXnI4rpRhtleORvYBbH6K6xLa
13+
OWgg6B58T+0/QEqtZIAn4miYtVCkYLB78Ormc7Q9ewKBgQDuSytuYqxdZh/L/RDU
14+
CErFcNO5I1e9fkLAs5dQEBvvdQC74+oA1MsDEVv0xehFa1JwPKSepmvB2UznZg9L
15+
CtR7QKMDZWvS5xx4j0E/b+PiNQ/tlcFZB2UZ0JwviSxdd7omOTscq9c3RIhFHar1
16+
Y38Fixkfm44Ij/K3JqIi2v2QMwKBgQDf8TYOOmAr9UuipUDxMsRSqTGVIY8B+aEJ
17+
W+2aLrqJVkLGTRfrbjzXWYo3+n7kNJjFgNkltDq6HYtufHMYRs/0PPtNR0w0cDPS
18+
Xr7m2LNHTDcBalC/AS4yKZJLNLm+kXA84vkw4qiTjc0LSFxJkouTQzkea0l8EWHt
19+
zRMv/qYVlwKBgBaJOWRJJK/4lo0+M7c5yYh+sSdTNlsPc9Sxp1/FBj9RO26JkXne
20+
pgx2OdIeXWcjTTqcIZ13c71zhZhkyJF6RroZVNFfaCEcBk9IjQ0o0c504jq/7Pc0
21+
gdU9K2g7etykFBDFXNfLUKFDc/fFZIOskzi8/PVGStp4cqXrm23cdBqNAoGBAKtf
22+
A2bP9ViuVjsZCyGJIAPBxlfBXpa8WSe4WZNrvwPqJx9pT6yyp4yE0OkVoJUyStaZ
23+
S5M24NocUd8zDUC+r9TP9d+leAOI+Z87MgumOUuOX2mN2kzQsnFgrrsulhXnZmSx
24+
rNBkI20HTqobrcP/iSAgiU1l/M4c3zwDe3N3A9HxAoGBAM2hYu0Ij6htSNgo/WWr
25+
IEYYXuwf8hPkiuwzlaiWhD3eocgd4S8SsBu/bTCY19hQ2QbBPaYyFlNem+ynQyXx
26+
IOacrgIHCrYnRCxjPfFF/MxgUHJb8ZoiexprP/FME5p0PoRQIEFYa+jVht3hT5wC
27+
9aedWufq4JJb+akO6MVUjTvs
28+
-----END PRIVATE KEY-----

testutils/mock_auth.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
from os.path import join, dirname
2+
3+
from vonage_http_client.auth import Auth
4+
5+
6+
def read_file(path):
7+
with open(join(dirname(__file__), path)) as input_file:
8+
return input_file.read()
9+
10+
11+
def get_mock_api_key_auth():
12+
return Auth(api_key='test_api_key', api_secret='test_api_secret')
13+
14+
15+
def get_mock_jwt_auth():
16+
return Auth(
17+
application_id='test_application_id',
18+
private_key=read_file('data/fake_private_key.txt'),
19+
)

users/BUILD

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
resource(name='pyproject', source='pyproject.toml')
2+
file(name='readme', source='README.md')
3+
4+
files(sources=['tests/data/*'])
5+
6+
python_distribution(
7+
name='vonage-users',
8+
dependencies=[
9+
':pyproject',
10+
':readme',
11+
'users/src/vonage_users',
12+
],
13+
provides=python_artifact(),
14+
generate_setup=False,
15+
repositories=['@pypi'],
16+
)

users/CHANGES.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
# 1.0.0
2+
- Initial upload

0 commit comments

Comments
 (0)