# (c) cavaliba.com - test_housekeeping_daily

import shutil
import tempfile

from django.test import TestCase, override_settings

from app_data.models import DataEAV, DataInstance
from app_home.models import CavalibaLog
from app_home.tasks import housekeeping_daily
from tests import helper


class TestHousekeepingDaily(TestCase):
    def setUp(self):
        self.rootdir = tempfile.mkdtemp(prefix="cavaliba_test_filestore_")
        self.override = override_settings(CAVALIBA_FILESTORE=self.rootdir)
        self.override.enable()

    def tearDown(self):
        self.override.disable()
        shutil.rmtree(self.rootdir, ignore_errors=True)

    def test_runs_without_error(self):
        housekeeping_daily()

    def test_defaults_to_cron_username(self):
        housekeeping_daily()
        alog = CavalibaLog.objects.filter(app="housekeeping", action="done").last()
        self.assertEqual(alog.username, "cron")

    def test_uses_passed_username(self):
        housekeeping_daily(username="unittest")
        alog = CavalibaLog.objects.filter(app="housekeeping", action="done").last()
        self.assertEqual(alog.username, "unittest")

    def test_purges_orphan_eav_rows(self):
        # the daily eav_purge used to run in dryrun and delete nothing while
        # reporting the orphans it counted as removed
        helper.add_schema("testhousekeeping")
        helper.add_instance("testhousekeeping", "orphan01")
        DataInstance.objects.filter(classname="testhousekeeping", keyname="orphan01").delete()
        self.assertTrue(DataEAV.objects.filter(keyname="orphan01").exists())

        housekeeping_daily()

        self.assertFalse(DataEAV.objects.filter(keyname="orphan01").exists())
