def test_get_config_details_empty(self):
        ch = ConfigHolder(MACROS, MockVersionControl(), file_manager=MockConfigurationFileManager(), test_config=Configuration(MACROS))
        details = ch.get_config_details()

        self.assertEqual(len(details['blocks']), 0)
        self.assertEqual(len(details['groups']), 0)
        self.assertEqual(len(details['iocs']), 0)
        self.assertEqual(len(details['components']), 0)
        self.assertEqual(details['name'], "")
        self.assertEqual(details['description'], "")
        self.assertEqual(details['synoptic'], "")
    def test_set_config_details(self):
        # Need component
        ch = ConfigHolder(MACROS, MockVersionControl(), file_manager=MockConfigurationFileManager(), test_config=Configuration(MACROS))
        ch.save_configuration("TESTCOMPONENT", True)

        new_details = {"iocs":
                           [{"name": "TESTSIMPLE1", "autostart": True, "restart": True, "macros": [], "pvs": [],
                             "pvsets": [], "component": None},
                            {"name": "TESTSIMPLE2", "autostart": True, "restart": True, "macros": [], "pvs": [],
                             "pvsets": [], "component": None}],
                       "blocks":
                           [{"name": "TESTBLOCK1", "local": True, "pv": "PV1", "component": None,
                             "visible": True},
                            {"name": "TESTBLOCK2", "local": True, "pv": "PV2", "component": None,
                             "visible": True},
                            {"name": "TESTBLOCK3", "local": True, "pv": "PV3", "component": None,
                             "visible": True}],
                       "components": [{"name": "TESTCOMPONENT"}],
                       "groups":
                           [{"blocks": ["TESTBLOCK1"], "name": "Group1", "component": None},
                            {"blocks": ["TESTBLOCK2"], "name": "Group2", "component": None},
                            {"blocks": ["TESTBLOCK3"], "name": "NONE", "component": None}],
                       "name": "TESTCONFIG",
                       "description": "Test Description",
                       "synoptic": "TEST_SYNOPTIC"
                       }
        ch.set_config_details(new_details)
        details = ch.get_config_details()
        iocs = [x['name'] for x in details['iocs']]
        self.assertEqual(len(iocs), 2)
        self.assertTrue("TESTSIMPLE1" in iocs)
        self.assertTrue("TESTSIMPLE2" in iocs)

        self.assertEqual(len(details['blocks']), 3)
        blks = [x['name'] for x in details['blocks']]
        self.assertTrue("TESTBLOCK1" in blks)
        self.assertTrue("TESTBLOCK2" in blks)
        self.assertTrue("TESTBLOCK3" in blks)

        self.assertEqual(len(details['groups']), 3)
        self.assertEqual(details['groups'][0]['blocks'], ["TESTBLOCK1"])
        self.assertEqual(details['groups'][1]['blocks'], ["TESTBLOCK2"])
        self.assertEqual(details['groups'][2]['blocks'], ["TESTBLOCK3"])

        self.assertEqual(len(details['components']), 1)
        self.assertEqual(details['components'][0]['name'], "TESTCOMPONENT")

        self.assertEqual(details['name'], "TESTCONFIG")
        self.assertEqual(details['description'], "Test Description")
        self.assertEqual(details['synoptic'], "TEST_SYNOPTIC")
    def test_get_config_details_add_component(self):
        ch = ConfigHolder(MACROS, MockVersionControl(), file_manager=MockConfigurationFileManager(), test_config=Configuration(MACROS))
        comp = create_dummy_component()
        ch.add_component("TESTCOMPONENT", comp)

        details = ch.get_config_details()
        self.assertEqual(len(details['blocks']), 2)
        blks = [x['name'] for x in details['blocks']]
        self.assertTrue("COMPBLOCK1" in blks)
        self.assertTrue("COMPBLOCK2" in blks)
        self.assertEqual(len(details['groups']), 2)
        self.assertEqual(details['groups'][0]['blocks'], ["COMPBLOCK1"])
        self.assertEqual(details['groups'][1]['blocks'], ["COMPBLOCK2"])
        self.assertEqual(len(details['iocs']), 0)
        iocs = [x['name'] for x in details['iocs']]
        self.assertFalse("COMPSIMPLE1" in iocs)
        self.assertEqual(len(details['components']), 1)