# (c) cavaliba.com - test / views / instance_list search resets pagination to page 1

from django.test import TestCase, override_settings
from django.urls import reverse

import app_home.cache as cache
from tests import helper


@override_settings(CAVALIBA_AUTH_MODE="unittest")
class InstanceListPaginationResetTest(TestCase):
    def setUp(self):
        cache.clear()
        helper.add_admin_user(login="unittest")
        helper.add_schema(
            classname="paginationtest",
            field_definition={"tag": {"dataformat": "string", "displayname": "Tag"}},
        )
        for i in range(1, 4):
            helper.add_instance(
                classname="paginationtest", keyname=f"obj{i:02d}", fields={"tag": "match"}
            )

    def test_get_page_2_stays_on_page_2(self):
        url = reverse("app_data:instance_list", kwargs={"classname": "paginationtest"})
        response = self.client.get(url, {"page": 2, "size": 1})
        self.assertEqual(response.status_code, 200)
        self.assertEqual(response.context["paginator"].page, 2)

    def test_search_from_page_2_resets_to_page_1(self):
        url = reverse("app_data:instance_list", kwargs={"classname": "paginationtest"})

        # land on page 2 first, remembered in session
        self.client.get(url, {"page": 2, "size": 1})

        # submit a new search via the search form (POST) - even though the
        # query still matches all 3 instances, page must reset to 1
        response = self.client.post(url, {"query": "tag:match"})

        self.assertEqual(response.status_code, 200)
        self.assertEqual(response.context["paginator"].page, 1)
        self.assertEqual(response.context["instances_count"], 1)
