-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathtest_api.py
More file actions
129 lines (103 loc) · 3.81 KB
/
Copy pathtest_api.py
File metadata and controls
129 lines (103 loc) · 3.81 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
import uuid
import pytest
from django.urls import reverse
from rest_framework.authtoken.models import Token
from api.factories import DeliveryLogFactory
from api.models import DeliveryLog
from api.types import MessageWebhookPayload, SendMessagePayload
from common.tests.mock_data import QURIIRI_SMS_RESPONSE
@pytest.fixture(autouse=True)
def autouse_db(db):
"""Rename the db fixture"""
SMS_PAYLOAD: SendMessagePayload = {
"sender": "Hel.fi",
"to": [{"destination": "+358461231231", "format": "MOBILE"}],
"text": "SMS message",
}
SMS_WEBHOOK_DATA: MessageWebhookPayload = {
"sender": "hel.fi",
"destination": "+358461231231",
"status": "DELIVERED",
"statustime": "2020-07-21T09:18:00Z",
"smscount": "1",
"billingref": "Palvelutarjotin",
}
def test_send_sms_unauthentication(anonymous_api_client):
response = anonymous_api_client.post(
reverse("send_message"), SMS_PAYLOAD, format="json"
)
assert response.status_code == 401
def test_send_sms(token_api_client, snapshot, mock_send_sms):
response = token_api_client.post(
reverse("send_message"), SMS_PAYLOAD, format="json"
)
assert DeliveryLog.objects.count() == 1
snapshot.assert_match(response.data["report"])
def test_send_sms_bad_request_as_recipients_missing(
token_api_client, snapshot, mock_send_sms
):
response = token_api_client.post(
reverse("send_message"),
{
"sender": "Hel.fi",
"text": "Missing the 'to' from data.",
},
format="json",
)
assert response.status_code == 400
assert DeliveryLog.objects.count() == 0
assert (
response.content.decode()
== "Missing required keys: 'sender', 'to', and 'text' are required."
) # Check the error message
def test_send_sms_bad_request_as_no_valid_phone_numbers(
token_api_client, snapshot, mock_send_sms
):
response = token_api_client.post(
reverse("send_message"),
{**SMS_PAYLOAD, "to": [{"destination": "invalid", "format": "MOBILE"}]},
format="json",
)
assert response.status_code == 400
assert DeliveryLog.objects.count() == 0
assert (
response.content.decode() == "No valid destinations for SMS sender."
) # Check the error message
def test_webhook_delivery_log(
token_api_client, anonymous_api_client, snapshot, mock_send_sms
):
response = anonymous_api_client.post(
reverse("delivery_log_webhook", kwargs={"id": uuid.uuid4()})
)
assert response.status_code == 404
# Send a message to initiate delivery log
token_api_client.post(reverse("send_message"), SMS_PAYLOAD, format="json")
assert DeliveryLog.objects.count() == 1
log = DeliveryLog.objects.first()
snapshot.assert_match(log.report)
webhook_data = SMS_WEBHOOK_DATA
anonymous_api_client.post(
reverse("delivery_log_webhook", kwargs={"id": str(log.id)}),
data=webhook_data,
format="json",
)
log.refresh_from_db()
snapshot.assert_match(log.report)
def test_get_delivery_log_unauthenticated_or_unauthorized(
anonymous_api_client, token_api_client
):
log = DeliveryLogFactory()
response = anonymous_api_client.get(
reverse("get_message", kwargs={"id": str(log.id)})
)
# Unauthenticated
assert response.status_code == 401
response = token_api_client.get(reverse("get_message", kwargs={"id": str(log.id)}))
# Not found
assert response.status_code == 404
def test_get_delivery_log(token_api_client, snapshot):
log = DeliveryLogFactory(report=QURIIRI_SMS_RESPONSE)
token, _ = Token.objects.get_or_create(user=log.user)
token_api_client.credentials(HTTP_AUTHORIZATION="Token " + token.key)
response = token_api_client.get(reverse("get_message", kwargs={"id": str(log.id)}))
snapshot.assert_match(response.data["report"])