def test_7_400_2(self): '''Test changes related to the 7.400.2 version of master.xml ''' coad = COAD('coad/master_7.400.2.xml') # Test model first, as the horizons will attach themselves to the copied base model oldobj = coad['Model']['Base'] newobj = oldobj.copy('Test Base Model') self.assertIn('Test Base Model', coad['Model']) should_contain = [ coad['Horizon']['Base'], coad['Report']['Base'], coad['ST Schedule']['Base'] ] self.assertItemsEqual(should_contain, coad['Model']['Test Base Model'].get_children()) oldobj = coad['Horizon']['Base'] newobj = oldobj.copy('New Horizon') self.assertNotEqual(oldobj.meta['name'], newobj.meta['name']) for (k, v) in oldobj.items(): self.assertEqual(v, newobj[k]) self.assertEqual(['Base', 'New Horizon'], coad.list('Horizon')) self.assertNotEqual(coad['Horizon']['Base'].meta['GUID'], coad['Horizon']['New Horizon'].meta['GUID']) newobj = oldobj.copy() self.assertNotEqual(oldobj.meta['name'], newobj.meta['name'])
class TestObjectDict(unittest.TestCase): def setUp(self): # TODO: Move into setupclass for big files # May have to copy data in the write tests to avoid poisoning the other tests filename = 'coad/master.xml' #filename='test/118-Bus.xml' #filename='test/Solar33P.xml' #filename='test/WFIP-MISO.xml' #filename='test/WWSIS.xml' self.coad = COAD(filename) # Fix bad api for python 3.2 if not hasattr(self, 'assertItemsEqual'): self.assertItemsEqual = self.assertCountEqual def test_copy(self): oldobj = self.coad['Performance']['Gurobi'] newobj = oldobj.copy() self.assertNotEqual(oldobj.meta['name'], newobj.meta['name']) for (k, v) in oldobj.items(): self.assertEqual(v, newobj[k]) self.coad.list('Performance') newobj = oldobj.copy() self.assertNotEqual(oldobj.meta['name'], newobj.meta['name']) oldobj = self.coad['Model']['Base'] newobj = oldobj.copy('Test Base Model') self.assertIn('Test Base Model', self.coad['Model']) should_contain = [ self.coad['Horizon']['Base'], self.coad['Report']['Base'], self.coad['ST Schedule']['Base'] ] self.assertItemsEqual( should_contain, self.coad['Model']['Test Base Model'].get_children()) self.assertItemsEqual( [self.coad['System']['System']], self.coad['Model']['Test Base Model'].get_parents()) self.assertRaises(Exception, self.coad['Model']['Base'].copy, 'Test Base Model') def test_get_parents(self): should_contain = [ master_coad['System']['System'], master_coad['Model']['Base'] ] self.assertItemsEqual(should_contain, master_coad['Horizon']['Base'].get_parents()) self.assertItemsEqual( [master_coad['Model']['Base']], master_coad['Horizon']['Base'].get_parents('Model')) def test_get_children(self): should_contain = [ self.coad['Horizon']['Base'], self.coad['Report']['Base'], self.coad['ST Schedule']['Base'] ] self.assertItemsEqual(should_contain, self.coad['Model']['Base'].get_children()) self.assertItemsEqual( [self.coad['Horizon']['Base']], self.coad['Model']['Base'].get_children('Horizon')) def test_set_children(self): # Single new child self.coad['Model']['Base'].set_children( self.coad['Performance']['Gurobi']) should_contain = [ self.coad['Horizon']['Base'], self.coad['Report']['Base'], self.coad['ST Schedule']['Base'], self.coad['Performance']['Gurobi'] ] self.assertEqual(should_contain, self.coad['Model']['Base'].get_children()) # Duplicates self.coad['Model']['Base'].set_children( self.coad['Performance']['Gurobi'], replace=False) self.assertEqual( 1, len(self.coad['Model']['Base'].get_children('Performance'))) # TODO: Test multiple new children of different classes that overwrites existing # TODO: Test adding new child once collection functionality is understood # TODO: Add mix of new child classes once collection functionality is understood # Children with multiple collections available filename = 'coad/test/RTS-96.xml' coad = COAD(filename) self.assertRaises(Exception, coad['Node']['101'].set_children, coad['Zone'].meta['class_id']) self.assertEqual( 178, coad['Node']['101'].get_collection_id( coad['Zone'].meta['class_id'], name="Zone")) dzone = coad['Zone'].new("Dummy Zone") coad['Node']['101'].set_children(dzone, name="Zone") def test_get_class(self): g_class = self.coad['Performance']['Gurobi'].get_class() self.assertItemsEqual(self.coad['Performance'], g_class) def test_del(self): # Existing attribute del (self.coad['Model']['Base']['Enabled']) # Make sure the db has been modified fresh_obj = ObjectDict(self.coad, self.coad['Model']['Base'].meta) #print(fresh_obj) self.assertNotIn('Enabled', fresh_obj.keys()) #self.coad.save('master_noenable.xml') def test_get_category_id(self): '''Test get category id for class ''' self.assertEqual("1", self.coad['System'].get_category_id('-')) def test_get_categories(self): '''Test class and object category retrieval ''' self.assertEqual("-", self.coad['Performance'].get_categories()[0]['name']) self.assertEqual("-", self.coad['Performance']['Gurobi'].get_category()) def test_7_400_2(self): '''Test changes related to the 7.400.2 version of master.xml ''' coad = COAD('coad/master_7.400.2.xml') # Test model first, as the horizons will attach themselves to the copied base model oldobj = coad['Model']['Base'] newobj = oldobj.copy('Test Base Model') self.assertIn('Test Base Model', coad['Model']) should_contain = [ coad['Horizon']['Base'], coad['Report']['Base'], coad['ST Schedule']['Base'] ] self.assertItemsEqual(should_contain, coad['Model']['Test Base Model'].get_children()) oldobj = coad['Horizon']['Base'] newobj = oldobj.copy('New Horizon') self.assertNotEqual(oldobj.meta['name'], newobj.meta['name']) for (k, v) in oldobj.items(): self.assertEqual(v, newobj[k]) self.assertEqual(['Base', 'New Horizon'], coad.list('Horizon')) self.assertNotEqual(coad['Horizon']['Base'].meta['GUID'], coad['Horizon']['New Horizon'].meta['GUID']) newobj = oldobj.copy() self.assertNotEqual(oldobj.meta['name'], newobj.meta['name']) def test_blank_elements(self): '''Make sure blank elements are saved properly ''' filename = 'coad/test/118-Bus_with_blanks.xml' pre = COAD(filename) cur = pre.dbcon.execute( "SELECT name FROM category WHERE category_id=49") val = cur.fetchone()[0] self.assertEqual(val, "") pre.save('coad/test/118-Bus_with_blanks_test.xml') post = COAD('coad/test/118-Bus_with_blanks_test.xml') cur = post.dbcon.execute( "SELECT name FROM category WHERE category_id=49") val = cur.fetchone()[0] self.assertEqual(val, "")