[Freeipa-devel] [PATCH] 694 webui: new navigation structure

Petr Vobornik pvoborni at redhat.com
Thu Jul 3 13:06:45 UTC 2014


On 3.7.2014 08:13, Fraser Tweedale wrote:
> On Wed, Jul 02, 2014 at 04:14:13PM +0200, Petr Vobornik wrote:
>> https://fedorahosted.org/freeipa/ticket/4418
>>
>> according to latest
>> proposal:http://www.redhat.com/archives/freeipa-devel/2014-June/msg00839.html
>> --
>> Petr Vobornik
>
> Haven't run the webui tests but lines up with the proposal and looks
> very nice!
>
> ACK if webui tests pass.

I've run the complete test suite and discovered that I forgot to modify 
2 other tests. Also there was an existing fail in test_navigation in 
DNS-less installation.

All fixed, updated patch attached.

>
>>  From 97cc94163e8ae57058b07741c7d70e44697c113f Mon Sep 17 00:00:00 2001
>> From: Petr Vobornik <pvoborni at redhat.com>
>> Date: Wed, 2 Jul 2014 15:09:22 +0200
>> Subject: [PATCH] webui: new navigation structure
>>
>> https://fedorahosted.org/freeipa/ticket/4418
>> ---
>>   install/ui/src/freeipa/certificate.js          |   2 +-
>>   install/ui/src/freeipa/dns.js                  |   2 +-
>>   install/ui/src/freeipa/navigation/menu_spec.js | 195 +++++++++++++++----------
>>   install/ui/test/data/ipa_init.json             |   2 +
>>   ipalib/plugins/internal.py                     |   2 +
>>   ipatests/test_webui/test_navigation.py         |  62 +++++---
>>   ipatests/test_webui/ui_driver.py               |   2 +-
>>   7 files changed, 160 insertions(+), 107 deletions(-)
>>
>> diff --git a/install/ui/src/freeipa/certificate.js b/install/ui/src/freeipa/certificate.js
>> index 01dfee2b64c14f487b66b91d449f63b6415dea69..6a11d959398517db6f720a36ff2a323e1d0c74a7 100755
>> --- a/install/ui/src/freeipa/certificate.js
>> +++ b/install/ui/src/freeipa/certificate.js
>> @@ -1293,7 +1293,7 @@ IPA.cert.cert_update_policy = function(spec) {
>>
>>   exp.remove_menu_item = function() {
>>       if (!IPA.cert.is_enabled()) {
>> -        menu.remove_item('identity/cert');
>> +        menu.remove_item('authentication/cert');
>>       }
>>   };
>>
>> diff --git a/install/ui/src/freeipa/dns.js b/install/ui/src/freeipa/dns.js
>> index c7143ca91fef9bbc372654080fe899be1ae8367f..a566ccf61adcf4f688ac803bf5e3658b4f3a0253 100644
>> --- a/install/ui/src/freeipa/dns.js
>> +++ b/install/ui/src/freeipa/dns.js
>> @@ -2543,7 +2543,7 @@ IPA.network_validator = function(spec) {
>>
>>   exp.remove_menu_item = function() {
>>       if (!IPA.dns_enabled) {
>> -        menu.remove_item('identity/dns');
>> +        menu.remove_item('network_services/dns');
>>       }
>>   };
>>
>> diff --git a/install/ui/src/freeipa/navigation/menu_spec.js b/install/ui/src/freeipa/navigation/menu_spec.js
>> index 01738cbe60b10bc0f1671093fc1616980780bac1..9182d11bf56c73e1fce724d438fe2211105b75ad 100644
>> --- a/install/ui/src/freeipa/navigation/menu_spec.js
>> +++ b/install/ui/src/freeipa/navigation/menu_spec.js
>> @@ -43,101 +43,134 @@ var nav = {};
>>                   { entity: 'netgroup' },
>>                   { entity: 'service' },
>>                   {
>> +                    name: 'automember',
>> +                    label: '@i18n:tabs.automember',
>> +                    children: [
>> +                        {
>> +                            name: 'amgroup',
>> +                            entity: 'automember',
>> +                            facet: 'searchgroup',
>> +                            label: '@i18n:objects.automember.usergrouprules',
>> +                            children: [
>> +                                {
>> +                                    entity: 'automember',
>> +                                    facet: 'usergrouprule',
>> +                                    hidden: true
>> +                                }
>> +                            ]
>> +                        },
>> +                        {
>> +                            name: 'amhostgroup',
>> +                            entity: 'automember',
>> +                            facet: 'searchhostgroup',
>> +                            label: '@i18n:objects.automember.hostgrouprules',
>> +                            children: [
>> +                                {
>> +                                    entity: 'automember',
>> +                                    facet: 'hostgrouprule',
>> +                                    hidden: true
>> +                                }
>> +                            ]
>> +                        }
>> +                    ]
>> +                }
>> +            ]
>> +        },
>> +        {
>> +            name: 'policy',
>> +            label: '@i18n:tabs.policy',
>> +            children: [
>> +                {
>> +                    name: 'hbac',
>> +                    label: '@i18n:tabs.hbac',
>> +                    children: [
>> +                        { entity: 'hbacrule' },
>> +                        { entity: 'hbacsvc' },
>> +                        { entity: 'hbacsvcgroup' },
>> +                        { entity: 'hbactest' }
>> +                    ]
>> +                },
>> +                {
>> +                    name: 'sudo',
>> +                    label: '@i18n:tabs.sudo',
>> +                    children: [
>> +                        { entity: 'sudorule' },
>> +                        { entity: 'sudocmd' },
>> +                        { entity: 'sudocmdgroup' }
>> +                    ]
>> +                },
>> +                { entity: 'selinuxusermap' },
>> +                { entity: 'pwpolicy' },
>> +                { entity: 'krbtpolicy' }
>> +            ]
>> +        },
>> +        {
>> +            name: 'authentication',
>> +            label: '@i18n:tabs.authentication',
>> +            children: [
>> +                { entity: 'cert', label: '@i18n:tabs.cert' },
>> +                { entity: 'otptoken' },
>> +                { entity: 'radiusproxy' }
>> +            ]
>> +        },
>> +        {
>> +            name: 'network_services',
>> +            label: '@i18n:tabs.network_services',
>> +            children: [
>> +                {
>> +                    name:'automount',
>> +                    label: '@i18n:tabs.automount',
>> +                    entity: 'automountlocation',
>> +                    children: [
>> +                        { entity: 'automountlocation', hidden: true },
>> +                        { entity: 'automountmap', hidden: true },
>> +                        { entity: 'automountkey', hidden: true }
>> +                    ]
>> +                },
>> +                {
>>                       name:'dns',
>>                       label: '@i18n:tabs.dns',
>>                       children: [
>>                           {
>>                               entity: 'dnszone',
>>                               children: [
>> -                                { entity: 'dnsrecord', hidden:true }
>> +                                { entity: 'dnsrecord', hidden: true }
>>                               ]
>>                           },
>>                           { entity: 'dnsforwardzone' },
>>                           { entity: 'dnsconfig' }
>>                       ]
>> +                }
>> +            ]
>> +        },
>> +        {
>> +            name: 'ipaserver',
>> +            label: '@i18n:tabs.ipaserver',
>> +            children: [
>> +                {
>> +                    name: 'rbac',
>> +                    label: '@i18n:tabs.role',
>> +                    children: [
>> +                        { entity: 'role' },
>> +                        { entity: 'privilege' },
>> +                        { entity: 'permission' },
>> +                        { entity: 'selfservice' },
>> +                        { entity: 'delegation' }
>> +                    ]
>>                   },
>> -                { entity: 'cert', label: '@i18n:tabs.cert' },
>> +                { entity: 'idrange' },
>>                   { entity: 'realmdomains' },
>> -                { entity: 'otptoken' }
>> +                {
>> +                    name: 'trusts',
>> +                    label: '@i18n:tabs.trust',
>> +                    children: [
>> +                        { entity: 'trust' },
>> +                        { entity: 'trustconfig' }
>> +                    ]
>> +                },
>> +                { entity: 'config' }
>>               ]
>> -        },
>> -        {name: 'policy', label: '@i18n:tabs.policy', children: [
>> -            {name: 'hbac', label: '@i18n:tabs.hbac', children: [
>> -                {entity: 'hbacrule'},
>> -                {entity: 'hbacsvc'},
>> -                {entity: 'hbacsvcgroup'},
>> -                {entity: 'hbactest'}
>> -            ]},
>> -            {name: 'sudo', label: '@i18n:tabs.sudo', children: [
>> -                {entity: 'sudorule'},
>> -                {entity: 'sudocmd'},
>> -                {entity: 'sudocmdgroup'}
>> -            ]},
>> -            {
>> -                name:'automount',
>> -                label: '@i18n:tabs.automount',
>> -                entity: 'automountlocation',
>> -                children:[
>> -                 {entity: 'automountlocation', hidden:true},
>> -                 {entity: 'automountmap', hidden: true},
>> -                 {entity: 'automountkey', hidden: true}]
>> -            },
>> -            {entity: 'pwpolicy'},
>> -            {entity: 'krbtpolicy'},
>> -            {entity: 'selinuxusermap'},
>> -            {
>> -                name: 'automember',
>> -                label: '@i18n:tabs.automember',
>> -                children: [
>> -                    {
>> -                        name: 'amgroup',
>> -                        entity: 'automember',
>> -                        facet: 'searchgroup',
>> -                        label: '@i18n:objects.automember.usergrouprules',
>> -                        children: [
>> -                            {
>> -                                entity: 'automember',
>> -                                facet: 'usergrouprule',
>> -                                hidden: true
>> -                            }
>> -                        ]
>> -                    },
>> -                    {
>> -                        name: 'amhostgroup',
>> -                        entity: 'automember',
>> -                        facet: 'searchhostgroup',
>> -                        label: '@i18n:objects.automember.hostgrouprules',
>> -                        children: [
>> -                            {
>> -                                entity: 'automember',
>> -                                facet: 'hostgrouprule',
>> -                                hidden: true
>> -                            }
>> -                        ]
>> -                    }
>> -                ]
>> -            }
>> -        ]},
>> -        {name: 'ipaserver', label: '@i18n:tabs.ipaserver', children: [
>> -            {name: 'rolebased', label: '@i18n:tabs.role', children: [
>> -                {entity: 'role'},
>> -                {entity: 'privilege'},
>> -                {entity: 'permission'}
>> -            ]},
>> -            {entity: 'selfservice'},
>> -            {entity: 'delegation'},
>> -            {entity: 'idrange'},
>> -            {
>> -                name: 'trusts',
>> -                label: '@i18n:tabs.trust',
>> -                children:[
>> -                    {entity: 'trust'},
>> -                    {entity: 'trustconfig'}
>> -                ]
>> -            },
>> -            {entity: 'radiusproxy'},
>> -            {entity: 'config'}
>> -        ]}
>> +        }
>>       ]
>>   };
>>
>> diff --git a/install/ui/test/data/ipa_init.json b/install/ui/test/data/ipa_init.json
>> index 6c387690aac0f85dce7f32f9cec84d55d200f40c..284c0a643391a23f8702ed99078acd1f0250cdf6 100644
>> --- a/install/ui/test/data/ipa_init.json
>> +++ b/install/ui/test/data/ipa_init.json
>> @@ -553,6 +553,7 @@
>>                       },
>>                       "tabs": {
>>                           "audit": "Audit",
>> +                        "authentication": "Authentication",
>>                           "automember": "Automember",
>>                           "automount": "Automount",
>>                           "cert": "Certificates",
>> @@ -560,6 +561,7 @@
>>                           "hbac": "Host Based Access Control",
>>                           "identity": "Identity",
>>                           "ipaserver": "IPA Server",
>> +                        "network_services": "Network Services",
>>                           "policy": "Policy",
>>                           "role": "Role Based Access Control",
>>                           "sudo": "Sudo",
>> diff --git a/ipalib/plugins/internal.py b/ipalib/plugins/internal.py
>> index d95794cc6806dc44fd533f277d02b330c938f99f..4d9448ab065d5b261d74ef4f126fed07eced4d5e 100644
>> --- a/ipalib/plugins/internal.py
>> +++ b/ipalib/plugins/internal.py
>> @@ -698,6 +698,7 @@ class i18n_messages(Command):
>>           },
>>           "tabs": {
>>               "audit": _("Audit"),
>> +            "authentication": _("Authentication"),
>>               "automember": _("Automember"),
>>               "automount": _("Automount"),
>>               "cert": _("Certificates"),
>> @@ -705,6 +706,7 @@ class i18n_messages(Command):
>>               "hbac": _("Host Based Access Control"),
>>               "identity": _("Identity"),
>>               "ipaserver": _("IPA Server"),
>> +            "network_services": _("Network Services"),
>>               "policy": _("Policy"),
>>               "role": _("Role Based Access Control"),
>>               "sudo": _("Sudo"),
>> diff --git a/ipatests/test_webui/test_navigation.py b/ipatests/test_webui/test_navigation.py
>> index caf291a908ec2fc9c4e1a6ee8b2f73f48924f23e..a9adb2327d5e195e3505b9657c5a6e62a2fce44b 100644
>> --- a/ipatests/test_webui/test_navigation.py
>> +++ b/ipatests/test_webui/test_navigation.py
>> @@ -37,6 +37,8 @@ ENTITIES = [
>>       # TODO: dnsrecord
>>       'dnsconfig',
>>       'cert',
>> +    'otptoken',
>> +    'radiusproxy',
>>       'realmdomains',
>>       'hbacrule',
>>       'hbacsvc',
>> @@ -99,6 +101,7 @@ class test_navigation(UI_driver):
>>
>>           self.init_app()
>>
>> +        # Identity
>>           # don't start by users (default)
>>           self.navigate_by_menu('identity/group', False)
>>           self.navigate_by_menu('identity/user', False)
>> @@ -106,18 +109,11 @@ class test_navigation(UI_driver):
>>           self.navigate_by_menu('identity/hostgroup', False)
>>           self.navigate_by_menu('identity/netgroup', False)
>>           self.navigate_by_menu('identity/service', False)
>> -        if self.has_dns():
>> -            self.navigate_by_menu('identity/dns/dnsconfig', True)
>> -            self.navigate_by_menu('identity/dns', False)
>> -            self.navigate_by_menu('identity/dns/dnszone', False)
>> -            self.navigate_by_menu('identity/dns/dnsforwardzone')
>> -        else:
>> -            self.assert_menu_item('identity/dns', False)
>> -        if self.has_ca():
>> -            self.navigate_by_menu('identity/cert', False)
>> -        else:
>> -            self.assert_menu_item('identity/cert', False)
>> -        self.navigate_by_menu('identity/realmdomains', False)
>> +        self.navigate_by_menu('identity/automember', False)
>> +        self.navigate_by_menu('identity/automember/amhostgroup')
>> +        self.navigate_by_menu('identity/automember/amgroup')
>> +
>> +        # Policy
>>           self.navigate_by_menu('policy')
>>           self.navigate_by_menu('policy/hbac', False)
>>           self.navigate_by_menu('policy/hbac/hbacsvc', False)
>> @@ -128,21 +124,40 @@ class test_navigation(UI_driver):
>>           self.navigate_by_menu('policy/sudo/sudorule', False)
>>           self.navigate_by_menu('policy/sudo/sudocmd')
>>           self.navigate_by_menu('policy/sudo/sudocmdgroup')
>> -        self.navigate_by_menu('policy/automount', False)
>> +        self.navigate_by_menu('policy/selinuxusermap', False)
>>           self.navigate_by_menu('policy/pwpolicy', False)
>>           self.navigate_by_menu('policy/krbtpolicy', False)
>> -        self.navigate_by_menu('policy/selinuxusermap', False)
>> -        self.navigate_by_menu('policy/automember', False)
>> -        self.navigate_by_menu('policy/automember/amhostgroup')
>> -        self.navigate_by_menu('policy/automember/amgroup')
>> +
>> +        # Authentication
>> +        self.navigate_by_menu('authentication')
>> +        self.navigate_by_menu('authentication/radiusproxy', False)
>> +        self.navigate_by_menu('authentication/otptoken', False)
>> +        if self.has_ca():
>> +            self.navigate_by_menu('authentication/cert', False)
>> +        else:
>> +            self.assert_menu_item('authentication/cert', False)
>> +
>> +        # Network Services
>> +        self.navigate_by_menu('network_services')
>> +        self.navigate_by_menu('network_services/automount')
>> +        if self.has_dns():
>> +            self.navigate_by_menu('network_services/dns/dnsconfig', True)
>> +            self.navigate_by_menu('network_services/dns', False)
>> +            self.navigate_by_menu('network_services/dns/dnszone', False)
>> +            self.navigate_by_menu('network_services/dns/dnsforwardzone')
>> +        else:
>> +            self.assert_menu_item('network_services/dns', False)
>> +
>> +        # IPA Server
>>           self.navigate_by_menu('ipaserver')
>> -        self.navigate_by_menu('ipaserver/rolebased', False)
>> -        self.navigate_by_menu('ipaserver/rolebased/privilege', False)
>> -        self.navigate_by_menu('ipaserver/rolebased/role')
>> -        self.navigate_by_menu('ipaserver/rolebased/permission')
>> -        self.navigate_by_menu('ipaserver/selfservice', False)
>> -        self.navigate_by_menu('ipaserver/delegation', False)
>> +        self.navigate_by_menu('ipaserver/rbac', False)
>> +        self.navigate_by_menu('ipaserver/rbac/privilege', False)
>> +        self.navigate_by_menu('ipaserver/rbac/role')
>> +        self.navigate_by_menu('ipaserver/rbac/permission')
>> +        self.navigate_by_menu('ipaserver/rbac/selfservice')
>> +        self.navigate_by_menu('ipaserver/rbac/delegation')
>>           self.navigate_by_menu('ipaserver/idrange', False)
>> +        self.navigate_by_menu('ipaserver/realmdomains', False)
>>           if self.has_trusts():
>>               self.navigate_by_menu('ipaserver/trusts', False)
>>               self.navigate_by_menu('ipaserver/trusts/trust', False)
>> @@ -151,6 +166,7 @@ class test_navigation(UI_driver):
>>               self.assert_menu_item('ipaserver/trusts', False)
>>           self.navigate_by_menu('ipaserver/config', False)
>>
>> +
>>       def assert_e_url(self, url, e):
>>           """
>>           Assert correct url for entity
>> diff --git a/ipatests/test_webui/ui_driver.py b/ipatests/test_webui/ui_driver.py
>> index 047009a295838d0053c9c0e378e97b480db6a0e7..a1371806c2f11a42534cfcac330683e2a35853d8 100644
>> --- a/ipatests/test_webui/ui_driver.py
>> +++ b/ipatests/test_webui/ui_driver.py
>> @@ -427,7 +427,7 @@ class UI_driver(object):
>>
>>           s = ".navbar a[href='#%s']" % item
>>           link = self.find(s, By.CSS_SELECTOR, strict=True)
>> -        assert link.is_displayed(), 'Navigation link is not displayed'
>> +        assert link.is_displayed(), 'Navigation link is not displayed: %s' % item
>>           link.click()
>>           self.wait_for_request()
>>           self.wait_for_request(0.4)
>> --
>> 1.9.0
>>


-- 
Petr Vobornik
-------------- next part --------------
A non-text attachment was scrubbed...
Name: freeipa-pvoborni-0694-1-webui-new-navigation-structure.patch
Type: text/x-patch
Size: 19115 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/freeipa-devel/attachments/20140703/77c2819c/attachment.bin>


More information about the Freeipa-devel mailing list