#!/usr/bin/python

import sys, os.path
sys.path.insert(0, os.path.realpath(os.path.join(os.path.dirname(__file__), "..")))

import unittest

from xdiagnose.diagnostics import Diagnostic
from xdiagnose.config_update import (
    safe_backup,
    config_dict,
    config_update,
    )

class TestGrubFile(unittest.TestCase):
    def test_backup_nonexistant_file(self):
        path = '/tmp/foo'
        safe_backup(path, keep_original=True)

    def test_backup_existing_file(self):
        path = '/tmp/foo'
        safe_backup(path, keep_original=True)

    def test_backup_existing_file_already_backed_up(self):
        path = '/tmp/foo'
        safe_backup(path, keep_original=True)

    def test_backup_existing_symlink_file(self):
        path = '/tmp/foo'
        safe_backup(path, keep_original=True)

    def test_backup_existing_dir(self):
        path = '/tmp/foo'
        safe_backup(path, keep_original=True)

    def test_backup_existing_dir_already_backed_up(self):
        path = '/tmp/foo'
        safe_backup(path, keep_original=True)

    def test_load_sample(self):
        dict = config_dict('tests/sample.conf')
        # TODO: Verify dict is as expected

    def test_load_sample_grub(self):
        dict = config_dict('tests/sample_grub.conf')
        # TODO: Verify dict

    def test_save(self):
        # TODO: Set fileio to something testable (memory file?)
        filename = 'tests/sample.conf'
        config_update(filename)

    def test_save_overrides(self):
        # TODO
        filename = "tests/sample.conf"
        overrides = {'param_1': 'overridden'}
        config_update(filename, override_params=overrides)

    def test_save_merges(self):
        filename = 'tests/sample.conf'
        merges = {'param_1': 'merged'}
        config_update(filename, merge_params=merges)

    def test_save_overridden_and_merged(self):
        filename = 'tests/sample.conf'
        merges = {'param_1': 'merged'}
        overrides = {'param_1': 'overridden'}
        config_update(filename, merge_params=merges, override_params=overrides)

    def test_save_overrides_with_merges(self):
        filename = 'tests/sample.conf'
        merges = {'param_1': 'merged', 'param_2': 'also_merged'}
        overrides = {'param_3': 'overridden', 'param_4': 'overridden_too'}
        config_update(filename, merge_params=merges, override_params=overrides)

    def test_save_additions(self):
        filename = 'tests/sample.conf'
        merges = {'new_param_1': 'merged'}
        overrides = {'new_param_2': 'overridden'}
        config_update(filename, merge_params=merges, override_params=overrides)

    def test_save_additions_of_disabled(self):
        filename = 'tests/sample.conf'
        merges = {'new_param_1': 'merged'}
        overrides = {'new_param_2': 'overridden'}
        config_update(filename, merge_params=merges, override_params=overrides)
        
    # TODO: Migrate some of the stuff from config_update.py to here
    # 

if __name__ == '__main__':
    unittest.main()
