def test_detail_database_validity_flag(self): """ Tests that the validity flag is correctly set and unset when a component's widget value is set to a correct and incorrect value. """ site = SiteConfigurationManager.get_blank_site() database = site.database control_agent = DetailDatabaseControlAgent(database, read_only=True) presentation_agent = control_agent.get_presentation_agent() database.enabled = True refresh_gui() for widget in ('name', 'username'): observer = ValidityObserver() control_agent.get_event_bus().subscribe( DataValidityEvent, observer.validity_changed) presentation_agent[widget].set_text('abc') refresh_gui() self.assertTrue(observer.notified, 'validity observer has not been notified') self.assertTrue(observer.flag, 'database validity should be true') observer.reset() presentation_agent[widget].set_text('ab c') refresh_gui() self.assertTrue(observer.notified, 'validity observer has not been notified') self.assertFalse(observer.flag, 'database validity should be false') control_agent.get_event_bus().unsubscribe( DataValidityEvent, observer.validity_changed)
def test_detail_database_abstraction_actions(self): """ Tests that database detail component's abstractions changes are correctly reported to GUI. """ site = SiteConfigurationManager.get_blank_site() database = site.database control_agent = DetailDatabaseControlAgent(database) presentation_agent = control_agent.get_presentation_agent() database.enabled = True refresh_gui() # All widgets should be enabled flags = { 'enabled': True, 'type': True, 'name': True, 'username': True, 'password': True, } self.assert_widgets_sensitive_flag(presentation_agent, flags) # Enabled widget should be activated self.assert_widgets_active_flag(presentation_agent, {'enabled': True}) # When a name, username or password is set, correpsonding widget # should follow for name in ('name', 'username', 'password'): setattr(database, name, 'abc') refresh_gui() self.assertEquals(presentation_agent[name].get_text(), 'abc', 'database %s widget is wrong' % name) # Comboboxes value should reflect abstraction changes dbtype = SiteDefaultsManager.get_database_types().keys()[0] for name, value in {'type': dbtype}.items(): setattr(database, name, value) refresh_gui() self.assertEquals(presentation_agent.get_combobox_selection( presentation_agent[name]), value, 'database %s widget selection is wrong' % name) # Tests that when done flag is set, allw widgets are disabled database.done = True refresh_gui() # Tests widgets sensitivity after enablement flags = { 'enabled': False, 'type': False, 'name': False, 'username': False, 'password': False, } self.assert_widgets_sensitive_flag(presentation_agent, flags)
def test_detail_database_gui_actions(self): """ Tests that database detail component's presentation_agent works as expected, and that abstraction attributes are set correspondingly to GUI actions. """ site = SiteConfigurationManager.get_blank_site() database = site.database control_agent = DetailDatabaseControlAgent(database) presentation_agent = control_agent.get_presentation_agent() presentation_agent['enabled'].set_active(True) refresh_gui() # Enables component presentation_agent['enabled'].set_active(True) refresh_gui() # Tests widgets sensitivity after enablement flags = { 'enabled': True, 'type': True, 'name': True, 'username': True, 'password': True, } self.assert_widgets_sensitive_flag(presentation_agent, flags) # When a widget is enabled, the corresponding attribute should follow for name in ('enabled',): setattr(database, name, True) refresh_gui() self.assert_widgets_active_flag(presentation_agent, {name: True}) # When an entry is set, the abstraction should have corresponding # value set for name in ('name', 'username', 'password'): presentation_agent[name].set_text('abc') refresh_gui() self.assertEquals(getattr(database, name), 'abc', 'database %s attribute is wrong' % name) # Comboboxes value should be reported to abstraction dbtype = SiteDefaultsManager.get_database_types().keys()[0] for name, value in {'type': dbtype}.items(): presentation_agent.set_value(name, value) refresh_gui() self.assertEquals(getattr(database, name), value, 'site %s attribute is wrong' % name)
def test_detail_database_read_only(self): """ Tests that database detail component's abstractions changes are correctly reported to GUI. """ site = SiteConfigurationManager.get_blank_site() database = site.database control_agent = DetailDatabaseControlAgent(database, read_only=True) presentation_agent = control_agent.get_presentation_agent() refresh_gui() # Ine read-only mode, all widgets should be disabled flags = { 'enabled': False, 'name': False, 'username': False, 'password': False, 'type': False } self.assert_widgets_sensitive_flag(presentation_agent, flags)
def detail_database_state_test(self, database): """ Tests site detail component's presentation_agent initial state """ done = database.done enabled = database.enabled control_agent = DetailDatabaseControlAgent(database) presentation_agent = control_agent.get_presentation_agent() refresh_gui() # Tests checkboxes state flags = { 'enabled': enabled } self.assert_widgets_active_flag(presentation_agent, flags) # Tests widgets sensitivity flags = { 'enabled': not done, 'name': enabled and not done, 'username': enabled and not done, 'password': enabled and not done, 'type': enabled and not done, } self.assert_widgets_sensitive_flag(presentation_agent, flags)