add tests
This commit is contained in:
parent
6b5b54afe5
commit
a1a483efce
9 changed files with 320 additions and 1 deletions
4
.coveragerc
Normal file
4
.coveragerc
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
[run]
|
||||||
|
omit =
|
||||||
|
*tests*
|
||||||
|
*scripts*
|
59
tests/test_monitor.py
Normal file
59
tests/test_monitor.py
Normal file
|
@ -0,0 +1,59 @@
|
||||||
|
import unittest
|
||||||
|
from uptime_kuma_test_case import UptimeKumaTestCase
|
||||||
|
from uptime_kuma_api import UptimeKumaException
|
||||||
|
|
||||||
|
|
||||||
|
class TestMonitor(UptimeKumaTestCase):
|
||||||
|
def test_monitor(self):
|
||||||
|
expected_monitor = {
|
||||||
|
"type_": "http",
|
||||||
|
"name": "monitor 1",
|
||||||
|
"url": "http://192.168.20.135"
|
||||||
|
}
|
||||||
|
|
||||||
|
# add monitor
|
||||||
|
r = self.api.add_monitor(
|
||||||
|
type_=expected_monitor["type_"],
|
||||||
|
name=expected_monitor["name"],
|
||||||
|
url=expected_monitor["url"]
|
||||||
|
)
|
||||||
|
self.assertEqual(r["msg"], "Added Successfully.")
|
||||||
|
monitor_id = r["monitor_id"]
|
||||||
|
|
||||||
|
# get monitor
|
||||||
|
monitor = self.api.get_monitor(monitor_id)
|
||||||
|
self.compare(monitor, expected_monitor)
|
||||||
|
|
||||||
|
# get monitors
|
||||||
|
monitors = self.api.get_monitors()
|
||||||
|
monitor = self.find_by_id(monitors, monitor_id)
|
||||||
|
self.assertIsNotNone(monitor)
|
||||||
|
self.compare(monitor, expected_monitor)
|
||||||
|
|
||||||
|
# edit monitor
|
||||||
|
expected_monitor["type_"] = "ping"
|
||||||
|
expected_monitor["name"] = "monitor 1 new"
|
||||||
|
expected_monitor["hostname"] = "127.0.0.1"
|
||||||
|
del expected_monitor["url"]
|
||||||
|
r = self.api.edit_monitor(monitor_id, **expected_monitor)
|
||||||
|
self.assertEqual(r["msg"], "Saved.")
|
||||||
|
monitor = self.api.get_monitor(monitor_id)
|
||||||
|
self.compare(monitor, expected_monitor)
|
||||||
|
|
||||||
|
# pause monitor
|
||||||
|
r = self.api.pause_monitor(monitor_id)
|
||||||
|
self.assertEqual(r["msg"], "Paused Successfully.")
|
||||||
|
|
||||||
|
# resume monitor
|
||||||
|
r = self.api.resume_monitor(monitor_id)
|
||||||
|
self.assertEqual(r["msg"], "Resumed Successfully.")
|
||||||
|
|
||||||
|
# delete monitor
|
||||||
|
r = self.api.delete_monitor(monitor_id)
|
||||||
|
self.assertEqual(r["msg"], "Deleted Successfully.")
|
||||||
|
with self.assertRaises(UptimeKumaException):
|
||||||
|
self.api.get_monitor(monitor_id)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
unittest.main()
|
28
tests/test_monitor_tag.py
Normal file
28
tests/test_monitor_tag.py
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
import unittest
|
||||||
|
from uptime_kuma_test_case import UptimeKumaTestCase
|
||||||
|
|
||||||
|
|
||||||
|
class TestMonitorTag(UptimeKumaTestCase):
|
||||||
|
def test_monitor_tag(self):
|
||||||
|
r = self.api.add_tag(name="tag 1", color="#ffffff")
|
||||||
|
tag_id = r["id"]
|
||||||
|
r = self.api.add_monitor(type_="http", name="monitor 1", url="http://127.0.0.1")
|
||||||
|
monitor_id = r["monitor_id"]
|
||||||
|
|
||||||
|
expected_monitor_tag = {
|
||||||
|
"tag_id": tag_id,
|
||||||
|
"monitor_id": monitor_id,
|
||||||
|
"value": "value 1"
|
||||||
|
}
|
||||||
|
|
||||||
|
# add monitor tag
|
||||||
|
r = self.api.add_monitor_tag(**expected_monitor_tag)
|
||||||
|
self.assertEqual(r["msg"], "Added Successfully.")
|
||||||
|
|
||||||
|
# delete monitor tag
|
||||||
|
r = self.api.delete_monitor_tag(**expected_monitor_tag)
|
||||||
|
self.assertEqual(r["msg"], "Deleted Successfully.")
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
unittest.main()
|
55
tests/test_notification.py
Normal file
55
tests/test_notification.py
Normal file
|
@ -0,0 +1,55 @@
|
||||||
|
import unittest
|
||||||
|
from uptime_kuma_test_case import UptimeKumaTestCase
|
||||||
|
from uptime_kuma_api import UptimeKumaException
|
||||||
|
|
||||||
|
|
||||||
|
class TestNotification(UptimeKumaTestCase):
|
||||||
|
def test_notification(self):
|
||||||
|
expected_notification = {
|
||||||
|
"name": "notification 1",
|
||||||
|
"default": True,
|
||||||
|
"apply_existing": True,
|
||||||
|
"type_": "push_by_techulus",
|
||||||
|
"push_by_techulus_apikey": "123456789"
|
||||||
|
}
|
||||||
|
|
||||||
|
# test notification
|
||||||
|
with self.assertRaisesRegex(UptimeKumaException, r'Invalid API key'):
|
||||||
|
self.api.test_notification(**expected_notification)
|
||||||
|
|
||||||
|
# add notification
|
||||||
|
r = self.api.add_notification(**expected_notification)
|
||||||
|
self.assertEqual(r["msg"], "Saved")
|
||||||
|
notification_id = r["id"]
|
||||||
|
|
||||||
|
# get notification
|
||||||
|
notification = self.api.get_notification(notification_id)
|
||||||
|
self.compare(notification, expected_notification)
|
||||||
|
|
||||||
|
# get notifications
|
||||||
|
notifications = self.api.get_notifications()
|
||||||
|
notification = self.find_by_id(notifications, notification_id)
|
||||||
|
self.assertIsNotNone(notification)
|
||||||
|
self.compare(notification, expected_notification)
|
||||||
|
|
||||||
|
# edit notification
|
||||||
|
expected_notification["name"] = "notification 1 new"
|
||||||
|
expected_notification["default"] = False
|
||||||
|
expected_notification["apply_existing"] = False
|
||||||
|
expected_notification["type_"] = "push_deer"
|
||||||
|
expected_notification["push_deer_deer_key"] = "987654321"
|
||||||
|
del expected_notification["push_by_techulus_apikey"]
|
||||||
|
r = self.api.edit_notification(notification_id, **expected_notification)
|
||||||
|
self.assertEqual(r["msg"], "Saved")
|
||||||
|
notification = self.api.get_notification(notification_id)
|
||||||
|
self.compare(notification, expected_notification)
|
||||||
|
|
||||||
|
# delete notification
|
||||||
|
r = self.api.delete_notification(notification_id)
|
||||||
|
self.assertEqual(r["msg"], "Deleted")
|
||||||
|
with self.assertRaises(UptimeKumaException):
|
||||||
|
self.api.delete_notification(notification_id)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
unittest.main()
|
43
tests/test_proxy.py
Normal file
43
tests/test_proxy.py
Normal file
|
@ -0,0 +1,43 @@
|
||||||
|
import unittest
|
||||||
|
from uptime_kuma_test_case import UptimeKumaTestCase
|
||||||
|
from uptime_kuma_api import UptimeKumaException
|
||||||
|
|
||||||
|
|
||||||
|
class TestProxy(UptimeKumaTestCase):
|
||||||
|
def test_proxy(self):
|
||||||
|
expected_proxy = {
|
||||||
|
"protocol": "http",
|
||||||
|
"host": "127.0.0.1",
|
||||||
|
"port": 8080,
|
||||||
|
"active": True
|
||||||
|
}
|
||||||
|
|
||||||
|
# add proxy
|
||||||
|
r = self.api.add_proxy(**expected_proxy)
|
||||||
|
self.assertEqual(r["msg"], "Saved")
|
||||||
|
proxy_id = r["id"]
|
||||||
|
|
||||||
|
# get proxy
|
||||||
|
proxy = self.api.get_proxy(proxy_id)
|
||||||
|
self.compare(proxy, expected_proxy)
|
||||||
|
|
||||||
|
# edit proxy
|
||||||
|
expected_proxy["protocol"] = "https"
|
||||||
|
expected_proxy["host"] = "127.0.0.2"
|
||||||
|
expected_proxy["port"] = 8888
|
||||||
|
expected_proxy["active"] = False
|
||||||
|
r = self.api.edit_proxy(proxy_id, **expected_proxy)
|
||||||
|
self.assertEqual(r["msg"], "Saved")
|
||||||
|
proxy = self.api.get_proxy(proxy_id)
|
||||||
|
self.compare(proxy, expected_proxy)
|
||||||
|
|
||||||
|
# delete proxy
|
||||||
|
r = self.api.delete_proxy(proxy_id)
|
||||||
|
self.assertEqual(r["msg"], "Deleted")
|
||||||
|
print(r)
|
||||||
|
with self.assertRaises(UptimeKumaException):
|
||||||
|
self.api.get_proxy(proxy_id)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
unittest.main()
|
65
tests/test_status_page.py
Normal file
65
tests/test_status_page.py
Normal file
|
@ -0,0 +1,65 @@
|
||||||
|
import unittest
|
||||||
|
from uptime_kuma_test_case import UptimeKumaTestCase
|
||||||
|
from uptime_kuma_api import UptimeKumaException, IncidentStyle
|
||||||
|
|
||||||
|
|
||||||
|
class TestStatusPage(UptimeKumaTestCase):
|
||||||
|
def test_status_page(self):
|
||||||
|
slug = "slug1"
|
||||||
|
expected_status_page = {
|
||||||
|
"slug": slug,
|
||||||
|
"title": "status page 1",
|
||||||
|
"description": "description 1",
|
||||||
|
"show_powered_by": False
|
||||||
|
}
|
||||||
|
|
||||||
|
# slug must be unique
|
||||||
|
try:
|
||||||
|
self.api.delete_status_page(slug)
|
||||||
|
except UptimeKumaException:
|
||||||
|
pass
|
||||||
|
|
||||||
|
# add status page
|
||||||
|
r = self.api.add_status_page(slug, expected_status_page["title"])
|
||||||
|
self.assertEqual(r["msg"], "OK!")
|
||||||
|
|
||||||
|
# save status page
|
||||||
|
self.api.save_status_page(**expected_status_page)
|
||||||
|
|
||||||
|
# get status page
|
||||||
|
status_page = self.api.get_status_page(slug)
|
||||||
|
self.compare(status_page, expected_status_page)
|
||||||
|
|
||||||
|
# get status pages
|
||||||
|
status_pages = self.api.get_status_pages()
|
||||||
|
status_page = self.find_by_id(status_pages, slug, "slug")
|
||||||
|
self.assertIsNotNone(status_page)
|
||||||
|
self.compare(status_page, expected_status_page)
|
||||||
|
|
||||||
|
# edit status page
|
||||||
|
expected_status_page["title"] = "status page 1 new"
|
||||||
|
expected_status_page["theme"] = "dark"
|
||||||
|
self.api.save_status_page(**expected_status_page)
|
||||||
|
status_page = self.api.get_status_page(slug)
|
||||||
|
self.compare(status_page, expected_status_page)
|
||||||
|
|
||||||
|
# pin incident
|
||||||
|
incident_expected = {
|
||||||
|
"title": "title 1",
|
||||||
|
"content": "content 1",
|
||||||
|
"style": IncidentStyle.DANGER
|
||||||
|
}
|
||||||
|
incident = self.api.post_incident(slug, **incident_expected)
|
||||||
|
self.compare(incident, incident_expected)
|
||||||
|
|
||||||
|
# unpin incident
|
||||||
|
self.api.unpin_incident(slug)
|
||||||
|
|
||||||
|
# delete status page
|
||||||
|
self.api.delete_status_page(slug)
|
||||||
|
with self.assertRaises(UptimeKumaException):
|
||||||
|
self.api.get_status_page(slug)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
unittest.main()
|
37
tests/test_tag.py
Normal file
37
tests/test_tag.py
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
import unittest
|
||||||
|
from uptime_kuma_test_case import UptimeKumaTestCase
|
||||||
|
from uptime_kuma_api import UptimeKumaException
|
||||||
|
|
||||||
|
|
||||||
|
class TestTag(UptimeKumaTestCase):
|
||||||
|
def test_tag(self):
|
||||||
|
expected_tag = {
|
||||||
|
"name": "tag 1",
|
||||||
|
"color": "#ffffff"
|
||||||
|
}
|
||||||
|
|
||||||
|
# add tag
|
||||||
|
tag = self.api.add_tag(**expected_tag)
|
||||||
|
self.compare(tag, expected_tag)
|
||||||
|
tag_id = tag["id"]
|
||||||
|
|
||||||
|
# get tag
|
||||||
|
tag = self.api.get_tag(tag_id)
|
||||||
|
self.compare(tag, expected_tag)
|
||||||
|
|
||||||
|
# get tags
|
||||||
|
tags = self.api.get_tags()
|
||||||
|
tag = self.find_by_id(tags, tag_id)
|
||||||
|
self.assertIsNotNone(tag)
|
||||||
|
self.compare(tag, expected_tag)
|
||||||
|
|
||||||
|
# delete tag
|
||||||
|
r = self.api.delete_tag(tag_id)
|
||||||
|
self.assertEqual(r["msg"], "Deleted Successfully.")
|
||||||
|
print(r)
|
||||||
|
with self.assertRaises(UptimeKumaException):
|
||||||
|
self.api.get_proxy(tag_id)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
unittest.main()
|
28
tests/uptime_kuma_test_case.py
Normal file
28
tests/uptime_kuma_test_case.py
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
import unittest
|
||||||
|
from uptime_kuma_api import UptimeKumaApi
|
||||||
|
|
||||||
|
|
||||||
|
class UptimeKumaTestCase(unittest.TestCase):
|
||||||
|
api = None
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def setUpClass(cls):
|
||||||
|
cls.api = UptimeKumaApi("http://127.0.0.1:3001")
|
||||||
|
username = "testuser"
|
||||||
|
password = "zS7zhQSc"
|
||||||
|
if cls.api.need_setup():
|
||||||
|
cls.api.setup(username, password)
|
||||||
|
cls.api.login(username, password)
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def tearDownClass(cls):
|
||||||
|
cls.api.logout()
|
||||||
|
cls.api.disconnect()
|
||||||
|
|
||||||
|
def compare(self, superset, subset):
|
||||||
|
return subset.items() <= superset.items()
|
||||||
|
|
||||||
|
def find_by_id(self, objects, value, key="id"):
|
||||||
|
for obj in objects:
|
||||||
|
if obj[key] == value:
|
||||||
|
return obj
|
|
@ -370,7 +370,7 @@ def _check_arguments_notification(kwargs):
|
||||||
|
|
||||||
def _check_arguments_proxy(kwargs):
|
def _check_arguments_proxy(kwargs):
|
||||||
required_args = ["protocol", "host", "port"]
|
required_args = ["protocol", "host", "port"]
|
||||||
if "auth" in kwargs:
|
if kwargs.get("auth"):
|
||||||
required_args.extend(["username", "password"])
|
required_args.extend(["username", "password"])
|
||||||
_check_missing_arguments(required_args, kwargs, params_map_proxy)
|
_check_missing_arguments(required_args, kwargs, params_map_proxy)
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue