import argparse import os import shutil import tempfile import unittest from unittest.mock import Mock from gen_config.initializer import JSONInitializer as Initializer from tests import FIXTURES_PATH class InitializerTestCase(unittest.TestCase): def setUp(self): self.test_dir = tempfile.mkdtemp() self.ctx = {"input": argparse.Namespace(environment="dev")} def tearDown(self): # Remove the directory after the test shutil.rmtree(self.test_dir) def test_load_json(self): path = os.path.join(FIXTURES_PATH, 'test.json') expected = { "test1": 1, "test2": "value", "test3": True } result = Initializer.load_json(path) self.assertEqual(result, expected) def test_load_yaml(self): path = os.path.join(FIXTURES_PATH, 'test.yaml') with open(path) as f: content = f.read() expected = { "apple": { "uow_active_days_limit": 14, "implementations": [ {"rule": "*/*", "label": "apple"} ], "days_offset": 1, "validation_thresholds": {"low": 40, "high": 50} }, "spotify": { "uow_active_days_limit": 14, "implementations": [ {"rule": "*/*", "label": "spotify"} ], "days_offset": 1, "validation_thresholds": {"low": 10, "high": 20} } } result = Initializer.load_yaml(content) self.assertEqual(result, expected) def test_generate_json_config1(self): initializer = Initializer( logger=Mock(), yaml_dir_path=FIXTURES_PATH, config_dir_path=self.test_dir, config_name="test1", ctx=self.ctx ) result = initializer.generate_json_config() expected = { "apple": {"uow_active_days_limit": 14}, "spotify": {"uow_active_days_limit": 14} } self.assertEqual(result, expected) def test_generate_json_config2(self): initializer = Initializer( logger=Mock(), yaml_dir_path=FIXTURES_PATH, config_dir_path=self.test_dir, config_name="test2", ctx=self.ctx ) result = initializer.generate_json_config() expected = { "apple": {"uow_active_days_limit": 5}, "spotify": {"uow_active_days_limit": 14} } self.assertEqual(result, expected) def test_write_to_json(self): content = { "apple": {"uow_active_days_limit": 444}, "spotify": {"uow_active_days_limit": 14444} } file_name = "test_sample.json" Initializer.write_to_json(content, self.test_dir, file_name) result = Initializer.load_json(os.path.join(self.test_dir, file_name)) self.assertEqual(content, result) def test_validate_json_valid(self): initializer = Initializer( logger=Mock(), yaml_dir_path="", config_dir_path="", config_name="", ctx=self.ctx ) data = {"uow_active_days_limit": 444} schema = initializer.load_json(os.path.join(FIXTURES_PATH, "test_schema.json")) result = initializer.validate_json(data, schema) self.assertTrue(result) def test_validate_json_invalid(self): initializer = Initializer( logger=Mock(), yaml_dir_path="", config_dir_path="", config_name="", ctx=self.ctx ) data = {"uow_active_days_limit": False} schema = initializer.load_json(os.path.join(FIXTURES_PATH, "test_schema.json")) result = initializer.validate_json(data, schema) self.assertFalse(result) def test_process_config_success(self): initializer = Initializer( logger=Mock(), yaml_dir_path=FIXTURES_PATH, config_dir_path=self.test_dir, config_name="test1", ctx=self.ctx ) initializer.process_config() self.assertTrue(os.path.exists(os.path.join(self.test_dir, "test1.json"))) def test_process_config_fail(self): initializer = Initializer( logger=Mock(), yaml_dir_path=FIXTURES_PATH, config_dir_path=self.test_dir, config_name="test2", ctx=self.ctx ) initializer.process_config() self.assertFalse(os.path.exists(os.path.join(self.test_dir, "test2.json")))