class TestUBCalculationJSONPersister(object):
    def setup_method(self):
        self.tmpdir = tempfile.mkdtemp()
        print self.tmpdir
        self.persister = UBCalculationJSONPersister(self.tmpdir,
                                                    UBCalcStateEncoder)
        f = open(os.path.join(self.tmpdir, 'unexpected_file'), 'w')
        f.close()

    def test_list_with_empty_dir(self):
        eq_(self.persister.list(), [])

    def test_save_load(self):
        d = {'a': 1, 'b': 2}
        self.persister.save(d, 'first')
        eq_(self.persister.load('first'), d)

    def test_save_overwites(self):
        d1 = {'a': 1, 'b': 2}
        self.persister.save(d1, 'first')
        eq_(self.persister.load('first'), d1)

        d2 = {'a': 3, 'b': 4, 'c': 5}
        self.persister.save(d2, 'first')
        eq_(self.persister.load('first'), d2)

    def test_list(self):
        d = {'a': 1, 'b': 2}
        self.persister.save(d, 'first')
        eq_(self.persister.list(), ['first'])

    def test_multiple_list(self):
        d = {'a': 1, 'b': 2}
        self.persister.save(d, 'first_written')
        time.sleep(1.)
        eq_(self.persister.list(), ['first_written'])
        self.persister.save(d, 'second_written')
        time.sleep(1.)
        eq_(self.persister.list(), ['second_written', 'first_written'])
        self.persister.save(d, 'third_written')
        time.sleep(1.)
        eq_(self.persister.list(),
            ['third_written', 'second_written', 'first_written'])

    def test_remove_list(self):
        d = {'a': 1, 'b': 2}
        self.persister.save(d, 'first')
        self.persister.remove('first')
        eq_(self.persister.list(), [])
class TestUBCalculationJSONPersister(unittest.TestCase):

    def setUp(self):
        self.tmpdir = tempfile.mkdtemp()
        print self.tmpdir
        self.persister = UBCalculationJSONPersister(self.tmpdir)
        f = open(os.path.join(self.tmpdir, 'unexpected_file'), 'w')
        f.close()
        
    def test_list_with_empty_dir(self):
        eq_(self.persister.list(), [])
        
    def test_save_load(self):
        d = {'a' : 1, 'b': 2}
        self.persister.save(d, 'first')
        eq_(self.persister.load('first'), d)

    def test_save_overwites(self):
        d1 = {'a' : 1, 'b': 2}
        self.persister.save(d1, 'first')
        eq_(self.persister.load('first'), d1)

        d2 = {'a' : 3, 'b': 4, 'c' : 5}
        self.persister.save(d2, 'first')
        eq_(self.persister.load('first'), d2)

    def test_list(self):
        d = {'a' : 1, 'b': 2}
        self.persister.save(d, 'first')
        eq_(self.persister.list(), ['first'])
        
    def test_multiple_list(self):
        d = {'a' : 1, 'b': 2}
        self.persister.save(d, 'first')
        time.sleep(.5)
        self.persister.save(d, 'second')
        time.sleep(.5)
        self.persister.save(d, 'alphabetically_first')
        eq_(self.persister.list(), ['alphabetically_first', 'second', 'first'])
        
    def test_remove_list(self):
        d = {'a' : 1, 'b': 2}
        self.persister.save(d, 'first')
        self.persister.remove('first')
        eq_(self.persister.list(), [])