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

from django.test import TestCase
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"]}


class TestDataViewDatetimeCellFormat(TestCase):
    def setUp(self):
        cache.clear()
        helper.add_schema(
            classname="dtformat",
            field_definition={"mystring": {"dataformat": "string", "displayname": "MyString"}},
        )
        helper.add_instance(
            classname="_dataview",
            keyname="dtformat_view",
            fields={
                "target_class": "dtformat",
                "content": (
                    "columns:\n  - keyname\n  - last_update\n  - Synced:\n      from: last_sync\n"
                ),
            },
        )

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

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

    def test_datapoint_mode_is_friendly_format(self):
        dataview = DataView(keyname="dtformat_view")
        values = dataview.filter(instance=self.instance, mode="datapoint")
        # datapoint mode has no keyname/classname prepend guarantee:
        # keyname, last_update, Synced (from: last_sync)
        last_update_cell = values[1]
        synced_cell = values[2]

        self.assertRegex(last_update_cell, r"^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$")
        self.assertRegex(synced_cell, r"^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$")

    def test_value_and_csv_modes_stay_iso_formatted(self):
        dataview = DataView(keyname="dtformat_view")
        for mode in ("value", "csv"):
            values = dataview.filter(instance=self.instance, mode=mode)
            # value/csv mode prepends classname (not already a column source);
            # keyname, last_update, Synced (from: last_sync) follow
            last_update_cell = values[2]
            synced_cell = values[3]
            self.assertIn("T", last_update_cell)
            self.assertIn("T", synced_cell)
