#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sh
import unittest
from jsmin import jsmin
from json import loads
from os.path import exists, expanduser, join

from core.commands import drop, prepare
from core.conf.constants import EXPERIMENT_FOLDER


JSON = 'test-campaign.json'


class ExperimentTestCase(unittest.TestCase):
    path = expanduser(join(EXPERIMENT_FOLDER, JSON))
    backup = path + '.backup'


class Test6Prepare(ExperimentTestCase):
    """ 6. Prepare a simulation campaign """

    @classmethod
    def setUpClass(cls):
        if exists(cls.path):
            sh.mv(cls.path, cls.backup)
        prepare(JSON, ask=False, silent=True)

    def test1_campaign_format(self):
        """ > Is the new experiment campaign a correct JSON file ? """
        try:
            with open(self.path) as f:
                loads(jsmin(f.read()))
            passed = True
        except:
            passed = False
        self.assertTrue(passed)


class Test7Drop(ExperimentTestCase):
    """ 7. Drop the same simulation campaign """

    @classmethod
    def setUpClass(cls):
        drop(JSON, ask=False, silent=True)

    @classmethod
    def tearDownClass(cls):
        if exists(cls.backup):
            sh.mv(cls.backup, cls.path)

    def test1_campaign_dropped(self):
        """ > Is the campaign JSON file removed ? """
        self.assertFalse(exists(self.path))