kopia lustrzana https://github.com/dgtlmoon/changedetection.io
108 wiersze
3.6 KiB
Python
108 wiersze
3.6 KiB
Python
![]() |
#!/usr/bin/env python3
|
||
|
|
||
|
from flask import url_for
|
||
|
from .util import live_server_setup
|
||
|
import json
|
||
|
|
||
|
def test_api_notifications_crud(client, live_server):
|
||
|
live_server_setup(live_server)
|
||
|
api_key = live_server.app.config['DATASTORE'].data['settings']['application'].get('api_access_token')
|
||
|
|
||
|
# Confirm notifications are initially empty
|
||
|
res = client.get(
|
||
|
url_for("notifications"),
|
||
|
headers={'x-api-key': api_key}
|
||
|
)
|
||
|
assert res.status_code == 200
|
||
|
assert res.json == {"notification_urls": []}
|
||
|
|
||
|
# Add notification URLs
|
||
|
test_urls = ["posts://example.com/notify1", "posts://example.com/notify2"]
|
||
|
res = client.post(
|
||
|
url_for("notifications"),
|
||
|
data=json.dumps({"notification_urls": test_urls}),
|
||
|
headers={'content-type': 'application/json', 'x-api-key': api_key}
|
||
|
)
|
||
|
assert res.status_code == 201
|
||
|
for url in test_urls:
|
||
|
assert url in res.json["notification_urls"]
|
||
|
|
||
|
# Confirm the notification URLs were added
|
||
|
res = client.get(
|
||
|
url_for("notifications"),
|
||
|
headers={'x-api-key': api_key}
|
||
|
)
|
||
|
assert res.status_code == 200
|
||
|
for url in test_urls:
|
||
|
assert url in res.json["notification_urls"]
|
||
|
|
||
|
# Delete one notification URL
|
||
|
res = client.delete(
|
||
|
url_for("notifications"),
|
||
|
data=json.dumps({"notification_urls": [test_urls[0]]}),
|
||
|
headers={'content-type': 'application/json', 'x-api-key': api_key}
|
||
|
)
|
||
|
assert res.status_code == 204
|
||
|
|
||
|
# Confirm it was removed and the other remains
|
||
|
res = client.get(
|
||
|
url_for("notifications"),
|
||
|
headers={'x-api-key': api_key}
|
||
|
)
|
||
|
assert res.status_code == 200
|
||
|
assert test_urls[0] not in res.json["notification_urls"]
|
||
|
assert test_urls[1] in res.json["notification_urls"]
|
||
|
|
||
|
# Try deleting a non-existent URL
|
||
|
res = client.delete(
|
||
|
url_for("notifications"),
|
||
|
data=json.dumps({"notification_urls": ["posts://nonexistent.com"]}),
|
||
|
headers={'content-type': 'application/json', 'x-api-key': api_key}
|
||
|
)
|
||
|
assert res.status_code == 400
|
||
|
|
||
|
res = client.post(
|
||
|
url_for("notifications"),
|
||
|
data=json.dumps({"notification_urls": test_urls}),
|
||
|
headers={'content-type': 'application/json', 'x-api-key': api_key}
|
||
|
)
|
||
|
assert res.status_code == 201
|
||
|
|
||
|
# Replace with a new list
|
||
|
replacement_urls = ["posts://new.example.com"]
|
||
|
res = client.put(
|
||
|
url_for("notifications"),
|
||
|
data=json.dumps({"notification_urls": replacement_urls}),
|
||
|
headers={'content-type': 'application/json', 'x-api-key': api_key}
|
||
|
)
|
||
|
assert res.status_code == 200
|
||
|
assert res.json["notification_urls"] == replacement_urls
|
||
|
|
||
|
# Replace with an empty list
|
||
|
res = client.put(
|
||
|
url_for("notifications"),
|
||
|
data=json.dumps({"notification_urls": []}),
|
||
|
headers={'content-type': 'application/json', 'x-api-key': api_key}
|
||
|
)
|
||
|
assert res.status_code == 200
|
||
|
assert res.json["notification_urls"] == []
|
||
|
|
||
|
# Provide an invalid AppRise URL to trigger validation error
|
||
|
invalid_urls = ["ftp://not-app-rise"]
|
||
|
res = client.post(
|
||
|
url_for("notifications"),
|
||
|
data=json.dumps({"notification_urls": invalid_urls}),
|
||
|
headers={'content-type': 'application/json', 'x-api-key': api_key}
|
||
|
)
|
||
|
assert res.status_code == 400
|
||
|
assert "is not a valid AppRise URL." in res.data.decode()
|
||
|
|
||
|
res = client.put(
|
||
|
url_for("notifications"),
|
||
|
data=json.dumps({"notification_urls": invalid_urls}),
|
||
|
headers={'content-type': 'application/json', 'x-api-key': api_key}
|
||
|
)
|
||
|
assert res.status_code == 400
|
||
|
assert "is not a valid AppRise URL." in res.data.decode()
|
||
|
|
||
|
|