# (c) cavaliba.com - tests / loader csv error paths

import os
import tempfile

from django.test import TestCase

import app_home.cache as cache
from app_data.loader import load_file_csv


class TestLoaderCsvErrors(TestCase):
    def setUp(self):
        cache.clear()

    def test_missing_file_returns_none_and_error(self):
        datalist, err = load_file_csv(filename="/no/such/file.csv")

        self.assertIsNone(datalist)
        self.assertIsNotNone(err)
        self.assertIn("not a file", err)

    def test_no_filename_and_no_file_returns_none_and_error(self):
        datalist, err = load_file_csv()

        self.assertIsNone(datalist)
        self.assertIsNotNone(err)
        self.assertIn("not a file", err)

    def test_encoding_mismatch_returns_none_and_error(self):
        fd, path = tempfile.mkstemp(suffix=".csv")
        with os.fdopen(fd, "w", encoding="iso-8859-1") as f:
            f.write("keyname,mystring\nrow1,café\n")

        try:
            datalist, err = load_file_csv(filename=path, encoding="ascii")
        finally:
            os.remove(path)

        self.assertIsNone(datalist)
        self.assertIsNotNone(err)
        self.assertIn("encoding error", err)
