from hc.test import BaseTestCase
from hc.api.models import Check


class BadgesTestCase(BaseTestCase):
    def setUp(self):
        super().setUp()

        self.url = "/projects/%s/badges/" % self.project.code

    def test_it_shows_badges(self):
        Check.objects.create(project=self.project, tags="foo a-B_1  baz@")
        Check.objects.create(project=self.bobs_project, tags="bobs-tag")

        self.client.login(username="alice@example.org", password="password")
        r = self.client.get(self.url)
        self.assertContains(r, "foo.svg")
        self.assertContains(r, "a-B_1.svg")

        # Expect badge URLs only for tags that match \w+
        self.assertNotContains(r, "baz@.svg")

        # Expect only Alice's tags
        self.assertNotContains(r, "bobs-tag.svg")

    def test_it_uses_badge_key(self):
        Check.objects.create(project=self.project, tags="foo bar")
        Check.objects.create(project=self.bobs_project, tags="bobs-tag")

        self.project.badge_key = "alices-badge-key"
        self.project.save()

        self.client.login(username="alice@example.org", password="password")
        r = self.client.get(self.url)
        self.assertContains(r, "badge/alices-badge-key/")
        self.assertContains(r, "badge/alices-badge-key/")

    def test_it_handles_special_characers_in_tags(self):
        Check.objects.create(project=self.project, tags="db@dc1")

        self.client.login(username="alice@example.org", password="password")
        r = self.client.get(self.url)
        self.assertContains(r, "db%2540dc1.svg")
