import unittest

from packaging.version import parse as parse_version

from uptime_kuma_api import UptimeKumaException
from uptime_kuma_test_case import UptimeKumaTestCase


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)

        if parse_version(self.api.version) >= parse_version("1.20"):
            # edit tag
            expected_tag["name"] = "tag 1 new"
            expected_tag["color"] = "#000000"
            r = self.api.edit_tag(tag_id, **expected_tag)
            self.assertEqual(r["msg"], "Saved")
            tag = self.api.get_tag(tag_id)
            self.compare(tag, expected_tag)

        # delete tag
        r = self.api.delete_tag(tag_id)
        self.assertEqual(r["msg"], "Deleted Successfully.")
        with self.assertRaises(UptimeKumaException):
            self.api.get_tag(tag_id)


if __name__ == '__main__':
    unittest.main()