Exemplo n.º 1
0
class TestConfig(lib.ITest):
    def setup_method(self, method):
        # prepare session
        self.r = RequestFactory().get('/rand')
        middleware = SessionMiddleware()
        middleware.process_request(self.r)
        self.r.session.save()
        self.rs = self.root.sf.getConfigService()
        self.conn = BlitzGateway(client_obj=self.new_client())

    def teardown_method(self, method):
        self.conn.seppuku()
        self.r.session.flush()

    def testDefaultConfig(self):
        """ Test loading default config """
        deprecated = [
            'omero.client.ui.menu.dropdown.everyone',
            'omero.client.ui.menu.dropdown.leaders',
            'omero.client.ui.menu.dropdown.colleagues'
        ]
        default = self.rs.getClientConfigDefaults()
        login_required(default_view).load_server_settings(self.conn, self.r)
        s = {"omero": {"client": self.r.session.get('server_settings', {})}}
        ss = self.r.session['server_settings']
        # assert if alias gives the same value as deprecated
        # rather then ${property}
        for d in deprecated:
            ds = d.split(".")
            assert ss['ui']['menu']['dropdown'][ds[-1]]['label'] == default[d]
            # workaround for alias as getClientConfigDefaults returns
            # ${property} rather then value
            assert ss['ui']['menu']['dropdown'][ds[-1]]['label'] == \
                self.conn.getConfigService().getConfigValue(
                    default['%s.label' % d][2:-1])

        # compare keys in default and config loaded by decorator
        a = filter(lambda x: x not in (set(default.keys()) - set(deprecated)),
                   set(flattenProperties(s).keys()))
        assert a == ['omero.client.email']

    def testDefaultConfigConversion(self):
        default = self.rs.getClientConfigDefaults()

        # bool
        key1 = 'omero.client.ui.tree.orphans.enabled'
        self.rs.setConfigValue(key1, default[key1])

        key11 = 'omero.client.ui.tree.orphans.name'
        self.rs.setConfigValue(key11, default[key11])

        # digit
        key2 = 'omero.client.viewer.roi_limit'
        self.rs.setConfigValue(key2, default[key2])

        login_required(default_view).load_server_settings(self.conn, self.r)
        ss = self.r.session['server_settings']

        assert isinstance(ss['ui']['tree']['orphans']['enabled'], bool)
        assert ss['ui']['tree']['orphans']['enabled'] == bool(default[key1])

        assert isinstance(ss['ui']['tree']['orphans']['name'], str)
        assert ss['ui']['tree']['orphans']['name'] == default[key11]

        assert isinstance(ss['viewer']['roi_limit'], int)
        assert ss['viewer']['roi_limit'] == json.loads(default[key2])

    @pytest.mark.parametrize("prop", [
        "colleagues", "leaders", "everyone", "colleagues.label",
        "leaders.label", "everyone.label"
    ])
    @pytest.mark.parametrize("label", ["foo"])
    def testUpgradeDropdownMenuConfig(self, prop, label):
        """ Test if alias loads deprecated property value """
        d = self.rs.getClientConfigDefaults()
        key = "omero.client.ui.menu.dropdown.%s" % prop
        try:
            self.rs.setConfigValue(key, label)
            # test load_server_settings directly
            login_required(default_view).load_server_settings(
                self.conn, self.r)
            s = self.r.session.get('server_settings', {})
            prop = prop.replace(".label", "")
            assert s['ui']['menu']['dropdown'][prop]['label'] == label
        finally:
            self.rs.setConfigValue(key, d[key])

    def mock_getClientSettings(self, monkeypatch, default):
        def get_clientSettings(*args, **kwargs):
            not_exist = [
                'omero.client.ui.menu.dropdown.everyone.label',
                'omero.client.ui.menu.dropdown.leaders.label',
                'omero.client.ui.menu.dropdown.colleagues.label',
                'omero.client.ui.tree.orphans.enabled',
                'omero.client.viewer.initial_zoom_level'
            ]
            for n in not_exist:
                if n in default:
                    del default[n]
            return default

        monkeypatch.setattr(omero.gateway.BlitzGateway, 'getClientSettings',
                            get_clientSettings)

    @pytest.mark.parametrize("prop", ["colleagues", "leaders", "everyone"])
    @pytest.mark.parametrize("label", ["foo"])
    def testOldDropdownMenuConfig(self, monkeypatch, prop, label):
        """ Test against older server with monkeypatch """
        d = self.rs.getClientConfigDefaults()
        key = "omero.client.ui.menu.dropdown.%s" % prop
        try:
            if label is not None:
                self.rs.setConfigValue(key, label)
            self.mock_getClientSettings(monkeypatch,
                                        self.rs.getClientConfigValues())
            # validate old config
            ocs = self.conn.getClientSettings()
            not_exist = [
                'omero.client.ui.menu.dropdown.everyone.label',
                'omero.client.ui.menu.dropdown.leaders.label',
                'omero.client.ui.menu.dropdown.colleagues.label',
                'omero.client.ui.tree.orphans.enabled',
                'omero.client.viewer.initial_zoom_level'
            ]
            for n in not_exist:
                assert n not in ocs
            # test load_server_settings directly
            login_required(default_view).load_server_settings(
                self.conn, self.r)
            s = self.r.session.get('server_settings', {})
            if label is not None:
                assert s['ui']['menu']['dropdown'][prop]['label'] == label
            else:
                assert s['ui']['menu']['dropdown'][prop]['label'] == d[key]
        finally:
            self.rs.setConfigValue(key, d[key])
Exemplo n.º 2
0
class TestConfig(lib.ITest):

    def setup_method(self, method):
        # prepare session
        self.r = RequestFactory().get('/rand')
        middleware = SessionMiddleware()
        middleware.process_request(self.r)
        self.r.session.save()
        self.rs = self.root.sf.getConfigService()
        self.conn = BlitzGateway(client_obj=self.new_client())

    def teardown_method(self, method):
        self.conn.seppuku()
        self.r.session.flush()

    def testDefaultConfig(self):
        """ Test loading default config """
        deprecated = [
            'omero.client.ui.menu.dropdown.everyone',
            'omero.client.ui.menu.dropdown.leaders',
            'omero.client.ui.menu.dropdown.colleagues'
        ]
        default = self.rs.getClientConfigDefaults()
        login_required(default_view).load_server_settings(self.conn, self.r)
        s = {"omero": {"client": self.r.session.get('server_settings', {})}}
        ss = self.r.session['server_settings']
        # assert if alias gives the same value as deprecated
        # rather then ${property}
        for d in deprecated:
            ds = d.split(".")
            assert ss['ui']['menu']['dropdown'][ds[-1]]['label'] == default[d]
            # workaround for alias as getClientConfigDefaults returns
            # ${property} rather then value
            assert ss['ui']['menu']['dropdown'][ds[-1]]['label'] == \
                self.conn.getConfigService().getConfigValue(
                    default['%s.label' % d][2:-1])

        # compare keys in default and config loaded by decorator
        a = filter(lambda x: x not in (
            set(default.keys()) - set(deprecated)),
            set(flattenProperties(s).keys()))
        assert a == ['omero.client.email']

    def testDefaultConfigConversion(self):
        default = self.rs.getClientConfigDefaults()

        # bool
        key1 = 'omero.client.ui.tree.orphans.enabled'
        self.rs.setConfigValue(key1, default[key1])

        key11 = 'omero.client.ui.tree.orphans.name'
        self.rs.setConfigValue(key11, default[key11])

        # digit
        key2 = 'omero.client.viewer.roi_limit'
        self.rs.setConfigValue(key2, default[key2])

        login_required(default_view).load_server_settings(self.conn, self.r)
        ss = self.r.session['server_settings']

        assert isinstance(ss['ui']['tree']['orphans']['enabled'], bool)
        assert ss['ui']['tree']['orphans']['enabled'] == bool(default[key1])

        assert isinstance(ss['ui']['tree']['orphans']['name'], str)
        assert ss['ui']['tree']['orphans']['name'] == default[key11]

        assert isinstance(ss['viewer']['roi_limit'], int)
        assert ss['viewer']['roi_limit'] == json.loads(default[key2])

    @pytest.mark.parametrize("prop", ["colleagues", "leaders", "everyone",
                                      "colleagues.label", "leaders.label",
                                      "everyone.label"])
    @pytest.mark.parametrize("label", ["foo"])
    def testUpgradeDropdownMenuConfig(self, prop, label):
        """ Test if alias loads deprecated property value """
        d = self.rs.getClientConfigDefaults()
        key = "omero.client.ui.menu.dropdown.%s" % prop
        try:
            self.rs.setConfigValue(key, label)
            # test load_server_settings directly
            login_required(default_view).load_server_settings(
                self.conn, self.r)
            s = self.r.session.get('server_settings', {})
            prop = prop.replace(".label", "")
            assert s['ui']['menu']['dropdown'][prop]['label'] == label
        finally:
            self.rs.setConfigValue(key, d[key])

    def mock_getClientSettings(self, monkeypatch, default):
        def get_clientSettings(*args, **kwargs):
            not_exist = [
                'omero.client.ui.menu.dropdown.everyone.label',
                'omero.client.ui.menu.dropdown.leaders.label',
                'omero.client.ui.menu.dropdown.colleagues.label',
                'omero.client.ui.tree.orphans.enabled',
                'omero.client.viewer.initial_zoom_level'
            ]
            for n in not_exist:
                if n in default:
                    del default[n]
            return default
        monkeypatch.setattr(omero.gateway.BlitzGateway,
                            'getClientSettings',
                            get_clientSettings)

    @pytest.mark.parametrize("prop", ["colleagues", "leaders", "everyone"])
    @pytest.mark.parametrize("label", ["foo"])
    def testOldDropdownMenuConfig(self, monkeypatch, prop, label):
        """ Test against older server with monkeypatch """
        d = self.rs.getClientConfigDefaults()
        key = "omero.client.ui.menu.dropdown.%s" % prop
        try:
            if label is not None:
                self.rs.setConfigValue(key, label)
            self.mock_getClientSettings(monkeypatch,
                                        self.rs.getClientConfigValues())
            # validate old config
            ocs = self.conn.getClientSettings()
            not_exist = [
                'omero.client.ui.menu.dropdown.everyone.label',
                'omero.client.ui.menu.dropdown.leaders.label',
                'omero.client.ui.menu.dropdown.colleagues.label',
                'omero.client.ui.tree.orphans.enabled',
                'omero.client.viewer.initial_zoom_level'
            ]
            for n in not_exist:
                assert n not in ocs
            # test load_server_settings directly
            login_required(default_view).load_server_settings(
                self.conn, self.r)
            s = self.r.session.get('server_settings', {})
            if label is not None:
                assert s['ui']['menu']['dropdown'][prop]['label'] == label
            else:
                assert s['ui']['menu']['dropdown'][prop]['label'] == d[key]
        finally:
            self.rs.setConfigValue(key, d[key])