def test_detail_website_abstraction_actions(self): """ Tests that site detail component's abstractions changes are correctly reported to GUI. """ site = SiteConfigurationManager.get_blank_site() website = site.website control_agent = DetailSiteControlAgent(website) presentation_agent = control_agent.get_presentation_agent() refresh_gui() # Enables component website.enabled = True refresh_gui() # Tests widgets sensitivity after enablement flags = { 'enabled': True, 'maintenance': True, 'template': True, 'access': True, } self.assert_widgets_sensitive_flag(presentation_agent, flags) # When a widget is enabled, the corresponding attribute should follow for name in ('enabled', 'maintenance'): setattr(website, name, True) refresh_gui() self.assert_widgets_active_flag(presentation_agent, {name: True}) # Comboboxes value should reflect abstraction changes template = SiteDefaultsManager.get_site_templates().keys()[0] access = SiteDefaultsManager.get_site_accesses().keys()[0] for name, value in {'template': template, 'access': access}.items(): setattr(website, name, value) refresh_gui() self.assertEquals(presentation_agent.get_combobox_selection( presentation_agent[name]), value, 'site %s: %s/%s widget selection is wrong' % (name, value, presentation_agent.get_combobox_selection(presentation_agent[name]))) # Tests that when done flag is set, sentivity is disabled on enabled # and template widgets. Maintenance and access should remain sensitive website.done = True refresh_gui() # Tests final widgets sensitivity flags = { 'enabled': False, 'template': False, 'maintenance': True, 'access': True, } self.assert_widgets_sensitive_flag(presentation_agent, flags)
def get_default_config_data(): """ Generates the default site used to initialize internal site structures """ return { # General attributes 'general' : { 'id' : (None, int, 'Id should be a number'), 'platform' : (SiteDefaultsManager.get_default_platform(), SiteDefaultsManager.get_platforms().keys(), 'Unknown platform'), 'domain' : (SiteDefaultsManager.get_default_domain(), SiteDefaultsManager.get_domains().keys(), 'Unknown domain'), 'name' : ('', '^[\d\w_-]*$', 'Name should be an alphanumeric string'), 'description' : ('', None), 'done' : (False, bool), }, # Repository related attriutes 'repository' : { 'enabled' : (False, bool), 'type' : (SiteDefaultsManager.get_default_repository_type(), SiteDefaultsManager.get_repository_types().keys(), 'Unsupported RCS type'), 'name' : ('', '^[\d\w_-]*$', 'Name should be an alphanumeric string or _, without spaces'), 'done' : (False, bool) }, # Sites related attributes (for each available platform) 'website' : { 'enabled' : (False, bool), 'access' : (SiteDefaultsManager.get_default_site_access(), SiteDefaultsManager.get_site_accesses().keys(), 'Unsupported access'), 'maintenance' : (False, bool), 'template' : ('standard', SiteDefaultsManager.get_site_templates().keys(), 'Unsupported site template'), 'done' : (False, bool) }, # Databases related attributes (for each available platform) 'database' : { 'enabled' : (False, bool), 'type' : (SiteDefaultsManager.get_default_database_type(), SiteDefaultsManager.get_database_types().keys(), 'Unsupported database type'), 'name' : ('', '^[a-z0-9_]+$', 'Name should be a simple alphanumeric string without spaces'), 'username' : ('', '^[a-z0-9_]+$', 'Username should be a simple alphanumeric string without spaces'), 'password' : ('', None), 'done' : (False, bool) }, }
def __init__(self, site, read_only=False): DetailBaseControlAgent.__init__(self) site.get_event_bus().subscribe(DataChangeEvent, self.load_widgets_data) self.set_site(site) self.set_read_only_flag(read_only) pa = DetailSitePresentationAgent(self) self.set_presentation_agent(pa) # Loads comboboxes items pa.set_items('template', SiteDefaultsManager.get_site_templates()) pa.set_items('access', SiteDefaultsManager.get_site_accesses()) pa.get_event_bus().subscribe(UIWidgetEvent, self.widget_evt_callback) # Initializes widget values self.load_widgets_data()
def test_default_site(self): """ Tests that default site builds correctly and that attributes work as expected. """ config = SiteConfigurationManager.get_blank_site() dnshost = config.dnshost self.assertEquals(dnshost.domain, SiteDefaultsManager.get_default_domain()) self.assertEquals(dnshost.name, u'') self.assertEquals(dnshost.platform, SiteDefaultsManager.get_default_platform()) self.assertTrue(dnshost.platform in \ SiteDefaultsManager.get_platforms()) self.assertEquals(dnshost.description, u'') repository = config.repository self.assertEquals(repository.enabled, False) self.assertEquals(repository.done, False) self.assertEquals(repository.name, u'') self.assertEquals(repository.type, SiteDefaultsManager.get_default_repository_type()) self.assertTrue(repository.type in \ SiteDefaultsManager.get_repository_types()) site = config.website self.assertEquals(site.enabled, False) self.assertEquals(site.done, False) self.assertEquals(site.maintenance, False) self.assertEquals(site.template, SiteDefaultsManager.get_default_site_template()) self.assertTrue(site.template in \ SiteDefaultsManager.get_site_templates()) self.assertEquals(site.access, SiteDefaultsManager.get_default_site_access()) self.assertTrue(site.access in \ SiteDefaultsManager.get_site_accesses()) database = config.database self.assertEquals(database.enabled, False) self.assertEquals(database.done, False) self.assertEquals(database.name, u'') self.assertEquals(database.username, u'') self.assertEquals(database.password, u'') self.assertEquals(database.type, SiteDefaultsManager.get_default_database_type()) self.assertTrue(database.type in \ SiteDefaultsManager.get_database_types())
def test_detail_website_gui_actions(self): """ Tests that site detail component's presentation_agent works as expected, and that abstraction attributes are set correspondingly to GUI actions. """ site = SiteConfigurationManager.get_blank_site() website = site.website control_agent = DetailSiteControlAgent(website) presentation_agent = control_agent.get_presentation_agent() refresh_gui() # Enables component presentation_agent['enabled'].set_active(True) refresh_gui() # Tests widgets sensitivity after enablement flags = { 'enabled': True, 'maintenance': True, 'template': True, 'access': True, } self.assert_widgets_sensitive_flag(presentation_agent, flags) # When a checkbox is enabled, the corresponding attribute should follow for name in ('enabled', 'maintenance'): presentation_agent[name].set_active(True) refresh_gui() self.assertTrue(getattr(website, name), 'site %s attribute is not enabled' % name) # Comboboxes value should be reported to abstraction template = SiteDefaultsManager.get_site_templates().keys()[0] access = SiteDefaultsManager.get_site_accesses().keys()[0] for name, value in {'template': template, 'access': access}.items(): presentation_agent.set_value(name, value) refresh_gui() self.assertEquals(getattr(website, name), value, 'site %s attribute is wrong' % name)