Skip to content

Commit

Permalink
Chore: update_schedule and delete_schedule
Browse files Browse the repository at this point in the history
  • Loading branch information
mbasadi committed Mar 1, 2024
1 parent 63ce8a1 commit 2483576
Show file tree
Hide file tree
Showing 3 changed files with 184 additions and 0 deletions.
15 changes: 15 additions & 0 deletions notificationapi_python_server_sdk/notificationapi.py
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,21 @@ async def delete_sub_notification(params):
% (params["notification_id"], params["sub_notification_id"]),
)

async def update_schedule(params):
await request(
"PATCH",
"schedule/%s"
% (params["tracking_id"]),
params["send_request"],
)


async def delete_schedule(params):
await request(
"DELETE",
"schedule/%s"
% (params["tracking_id"]),
)

async def set_user_preferences(params):
await request(
Expand Down
71 changes: 71 additions & 0 deletions tests/test_notificationapi_deleteSchedule.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
#!/usr/bin/env python

"""Tests for `notificationapi_python_server_sdk` package."""

import pytest
from httpx import Response
from notificationapi_python_server_sdk import notificationapi

client_id = "client_id"
client_secret = "client_secret"
tracking_id = "tracking_id"
api_paths = {
"delete_schedule": f"https://api.notificationapi.com/{client_id}/schedule/{tracking_id}"
}


@pytest.mark.asyncio
@pytest.mark.parametrize(
"func,params",
[
(
"delete_schedule",
{
"tracking_id": tracking_id,
},
),
],
)
async def test_makes_one_delete_api_call(respx_mock, func, params):
route = respx_mock.delete(api_paths[func]).mock(return_value=Response(200))
notificationapi.init(client_id, client_secret)
await getattr(notificationapi, func)(params)
assert route.called


@pytest.mark.asyncio
@pytest.mark.parametrize(
"func,params",
[
(
"delete_schedule",
{
"tracking_id": tracking_id,
},
),
],
)
async def test_uses_basic_authorization(respx_mock, func, params):
route = respx_mock.delete(api_paths[func]).mock(return_value=Response(200))
notificationapi.init(client_id, client_secret)
await getattr(notificationapi, func)(params)
assert route.calls.last.request.headers["Authorization"] == "Basic Y2xpZW50X2lkOmNsaWVudF9zZWNyZXQ="


@pytest.mark.asyncio
@pytest.mark.parametrize(
"func,params",
[
(
"delete_schedule",
{
"tracking_id": tracking_id,
},
),
],
)
async def test_logs_and_throws_on_500(respx_mock, caplog, func, params):
respx_mock.delete(api_paths[func]).mock(return_value=Response(500, text="big oof 500"))
notificationapi.init(client_id, client_secret)
await getattr(notificationapi, func)(params)
assert "NotificationAPI request failed. Response: big oof 500" in caplog.text
98 changes: 98 additions & 0 deletions tests/test_notificationapi_updateSchedule.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
#!/usr/bin/env python

"""Tests for `notificationapi_python_server_sdk` package."""

import pytest
import json
from httpx import Response
from notificationapi_python_server_sdk import notificationapi

client_id = "client_id"
client_secret = "client_secret"
tracking_id = "tracking_id"
send_request={
'notificationId':'notification_id'
}
api_paths = {
"update_schedule": f"https://api.notificationapi.com/{client_id}/schedule/{tracking_id}",
}


@pytest.mark.asyncio
@pytest.mark.parametrize(
"func,params",
[
(
"update_schedule",
{
"tracking_id": tracking_id,
"send_request": send_request,
},
),
],
)
async def test_makes_one_patch_api_call(respx_mock, func, params):
route = respx_mock.patch(api_paths[func]).mock(return_value=Response(200))
notificationapi.init(client_id, client_secret)
await getattr(notificationapi, func)(params)
assert route.called


@pytest.mark.asyncio
@pytest.mark.parametrize(
"func,params",
[
(
"update_schedule",
{
"tracking_id": tracking_id,
"send_request": send_request,
},
),
],
)
async def test_uses_basic_authorization(respx_mock, func, params):
route = respx_mock.patch(api_paths[func]).mock(return_value=Response(200))
notificationapi.init(client_id, client_secret)
await getattr(notificationapi, func)(params)
assert route.calls.last.request.headers["Authorization"] == "Basic Y2xpZW50X2lkOmNsaWVudF9zZWNyZXQ="


@pytest.mark.asyncio
@pytest.mark.parametrize(
"func,params",
[
(
"update_schedule",
{
"tracking_id": tracking_id,
"send_request": send_request,
},
),
],
)
async def test_passes_send_request_as_json_body(respx_mock, func, params):
route = respx_mock.patch(api_paths[func]).mock(return_value=Response(200))
notificationapi.init(client_id, client_secret)
await getattr(notificationapi, func)(params)
assert json.loads(route.calls.last.request.content) == params["send_request"]


@pytest.mark.asyncio
@pytest.mark.parametrize(
"func,params",
[
(
"update_schedule",
{
"tracking_id": tracking_id,
"send_request": send_request,
},
),
],
)
async def test_logs_and_throws_on_500(respx_mock, caplog, func, params):
respx_mock.patch(api_paths[func]).mock(return_value=Response(500, text="big oof 500"))
notificationapi.init(client_id, client_secret)
await getattr(notificationapi, func)(params)
assert "NotificationAPI request failed. Response: big oof 500" in caplog.text

0 comments on commit 2483576

Please sign in to comment.