def test_parse_menu_options(self): param_spec = ParamSpec.from_dict( dict(type='menu', id_name='id', name='name', options=[ { 'value': True, 'label': 't' }, 'separator', { 'value': False, 'label': 'f' }, ])) self.assertEqual( param_spec, ParamSpec.Menu( id_name='id', name='name', default=True, # Menu value can't be null. TODO reconsider? options=[ ParamSpec.Menu.Option.Value('t', True), ParamSpec.Menu.Option.Separator, ParamSpec.Menu.Option.Value('f', False) ]))
def test_to_dict_menu_separator(self): param_spec = ParamSpec.Menu( id_name='m', default='v', options=[ ParamSpec.Menu.Option.Value(value='v', label='l'), ParamSpec.Menu.Option.Separator, ParamSpec.Menu.Option.Value(value='v2', label='l2'), ], ) param_dict = param_spec.to_dict() self.assertEqual(param_dict, { 'type': 'menu', 'id_name': 'm', 'default': 'v', 'placeholder': '', 'name': '', 'visible_if': None, 'options': [ {'value': 'v', 'label': 'l'}, 'separator', {'value': 'v2', 'label': 'l2'}, ], }) # Just to make sure our unit-test is sane: verify from_dict(to_json) # returns the original. self.assertEqual(ParamSpec.from_dict(param_dict), param_spec)
def test_list_dtype(self): # Check that ParamSpec's with List type produce correct nested DTypes param_spec = ParamSpec.from_dict( dict(id_name='p', type='list', child_parameters=[ { 'id_name': 'intparam', 'type': 'integer', 'name': 'my number' }, { 'id_name': 'colparam', 'type': 'column', 'name': 'my column' }, ])) self.assertEqual( param_spec, ParamSpec.List(id_name='p', child_parameters=[ ParamSpec.Integer(id_name='intparam', name='my number'), ParamSpec.Column(id_name='colparam', name='my column'), ])) dtype = param_spec.dtype expected_dtype = DT.List( DT.Dict({ 'intparam': DT.Integer(), 'colparam': DT.Column(), })) # effectively do a deep compare with repr self.assertEqual(repr(dtype), repr(expected_dtype))
def test_to_dict_dict_factory(self): def upcasedict(tuples): return dict((x.upper(), y) for x, y in tuples) param_spec = ParamSpec.List(id_name='l', visible_if=dict(id_name='othermenu', value='showlist'), child_parameters=[ ParamSpec.String(id_name='s', default='foo'), ParamSpec.Column(id_name='c', visible_if=dict( id_name='s', value='iddqd')), ]) param_dict = param_spec.to_dict(dict_factory=upcasedict) self.assertEqual( param_dict, { 'TYPE': 'list', 'ID_NAME': 'l', 'NAME': '', 'VISIBLE_IF': { 'ID_NAME': 'othermenu', 'VALUE': 'showlist' }, 'CHILD_PARAMETERS': [ { 'TYPE': 'string', 'ID_NAME': 's', 'NAME': '', 'DEFAULT': 'foo', 'MULTILINE': False, 'PLACEHOLDER': '', 'VISIBLE_IF': None, }, { 'TYPE': 'column', 'ID_NAME': 'c', 'PLACEHOLDER': '', 'NAME': '', 'TAB_PARAMETER': None, 'COLUMN_TYPES': None, 'VISIBLE_IF': { 'ID_NAME': 's', 'VALUE': 'iddqd', }, }, ] })
def test_to_dict(self): param_spec = ParamSpec.List(id_name='l', child_parameters=[ ParamSpec.String(id_name='s', default='foo'), ParamSpec.Column(id_name='c', visible_if=dict( id_name='s', value='iddqd')), ]) param_dict = param_spec.to_dict() self.assertEqual( param_dict, { 'type': 'list', 'id_name': 'l', 'name': '', 'visible_if': None, 'child_parameters': [ { 'type': 'string', 'id_name': 's', 'name': '', 'default': 'foo', 'multiline': False, 'placeholder': '', 'visible_if': None, }, { 'type': 'column', 'id_name': 'c', 'placeholder': '', 'name': '', 'tab_parameter': None, 'column_types': None, 'visible_if': { 'id_name': 's', 'value': 'iddqd', }, }, ] }) # Just to make sure our unit-test is sane: verify from_dict(to_json) # returns the original. self.assertEqual(ParamSpec.from_dict(param_dict), param_spec)
def test_checkbox_default_false(self): param_spec = ParamSpec.from_dict(dict( id_name='b', type='checkbox', name='hi' )) self.assertFalse(param_spec.default)
def test_to_dict_secret_logic(self): param_spec = ParamSpec.Secret( id_name='s', secret_logic=dict( provider='string', label='Label', placeholder='Placeholder', help='Help', help_url='http://help.url', help_url_prompt='Help link', ), ) param_dict = param_spec.to_dict() self.assertEqual(param_dict, { 'type': 'secret', 'id_name': 's', 'visible_if': None, 'secret_logic': { 'provider': 'string', 'label': 'Label', 'placeholder': 'Placeholder', 'help': 'Help', 'help_url': 'http://help.url', 'help_url_prompt': 'Help link', }, })
def test_parse_radio_options(self): param_spec = ParamSpec.from_dict(dict( type='radio', id_name='id', name='name', options=[ {'value': True, 'label': 't'}, {'value': False, 'label': 'f'}, ] )) self.assertEqual(param_spec, ParamSpec.Radio( id_name='id', name='name', options=[ParamSpec.Radio.Option('t', True), ParamSpec.Radio.Option('f', False)], default=True ))
def test_multicolumn_column_types(self): param_spec = ParamSpec.from_dict(dict( id_name='c', type='multicolumn', column_types=['text', 'number'], )) self.assertEqual(param_spec.column_types, ['text', 'number']) self.assertEqual(param_spec.dtype.column_types, frozenset(['text', 'number']))
def test_bool_radio_default_false(self): # Handle odd edge case seen on production: # # If enum options are booleans and the first is True, and the _default_ # is False, don't overwrite the default. param_spec = ParamSpec.from_dict(dict( id_name='r', type='radio', options=[ {'value': True, 'label': 'First'}, {'value': False, 'label': 'Second'}, ], default=False # a valid option )) dtype = param_spec.dtype self.assertEqual(dtype.default, False)