from configobj import ConfigObj
import unittest
import os
import upgrade2dot2


def create_cfg(cfg):
    config = ConfigObj()
    config.filename = cfg['path']
    for k,v in cfg['data'].iteritems(): config[k] = v
    return config

class TestUpgrade(unittest.TestCase):

    def setUp(self):
        self.source = 'ttt1.cfg'
        self.dest = 'ttt2.cfg'

    def test_upgrade(self):
        cf = {
                'source' : {
                    'path' : self.source,
                    'data' : {
                        'key1' : 'val1',
                        'key2' : 'val2',
                        'key3' : 5,
                        'key4' : 10,},
                },
                'dest' : {
                    'path' : self.dest,
                    'data' : {
                        'key1' : 'NEW_VAL',
                        'key3' : 25, }
                }
        }
        config1, config2 = create_cfg(cf['source']), create_cfg(cf['dest'])
        for c in [config1,config2]: c.write()
        self.assertTrue( os.path.exists(cf['source']['path']) )
        self.assertTrue( os.path.exists(cf['dest']['path']) )
        # Finished preparing
        upgrade2dot2.upgrade(cf['source']['path'], cf['dest']['path'] )
        c1, c2 = ConfigObj(cf['source']['path']), ConfigObj(cf['dest']['path'])
        self.assertEqual( c2['key2'], 'val2')
        self.assertEqual( c2['key4'], '10')
        self.assertEqual( c2['key3'], '25')

    def tearDown(self):
        for clean in [ self.source, self.dest ]:
            os.unlink(clean)

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