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()
|
|
|
|
|