# (c) cavaliba.com - tests dataview last_sync/last_update cell timezone consistency

from django.template import Context, Template
from django.test import TestCase, override_settings
from django.utils import timezone

import app_home.cache as cache
from app_data.data import Instance
from app_data.dataview import DataView
from tests import helper

AAA = {"username": "testuser", "perms": ["p_data_admin"]}

DETAIL_TEMPLATE = Template("{{ dt|default_if_none:''|date:'Y-m-d H:i:s' }}")


@override_settings(USE_TZ=True, TIME_ZONE="Europe/Paris")
class TestDataViewDatetimeCellMatchesDetailTz(TestCase):
    def setUp(self):
        cache.clear()
        helper.add_schema(
            classname="dtformat_tz",
            field_definition={"mystring": {"dataformat": "string", "displayname": "MyString"}},
        )
        helper.add_instance(
            classname="_dataview",
            keyname="dtformat_tz_view",
            fields={
                "target_class": "dtformat_tz",
                "content": "columns:\n  - keyname\n  - last_sync\n",
            },
        )

        instance = Instance(classname="dtformat_tz")
        instance.merge_import({"classname": "dtformat_tz", "keyname": "obj01"}, aaa=AAA)
        instance.last_sync = timezone.now()
        instance.save(aaa=AAA, action="create")

        self.instance = Instance.from_keyname("dtformat_tz", "obj01")

    def test_list_datapoint_matches_detail_template_rendering(self):
        dataview = DataView(keyname="dtformat_tz_view")
        values = dataview.filter(instance=self.instance, mode="datapoint")
        last_sync_cell = values[1]

        detail_rendering = DETAIL_TEMPLATE.render(Context({"dt": self.instance.last_sync}))

        self.assertEqual(last_sync_cell, detail_rendering)
