def test_from_json_action_only_with_parent_and_ancestry(self): json_in = {'action': 'Top Flag', 'args': {}, 'filters': []} flag = Flag.from_json(json_in, parent_name='parent', ancestry=['a', 'b']) self.__compare_init(flag, 'Top Flag', 'parent', ['a', 'b', 'Top Flag'], [], {})
def from_json(json, parent_name='', ancestry=None): """Forms a NextStep object from the provided JSON object. Args: json (JSON object): The JSON object to convert from. parent_name (str, optional): The name of the parent for ancestry purposes. Defaults to an empty string. ancestry (list[str], optional): The ancestry for the new NextStep object. Defaults to None. Returns: The NextStep object parsed from the JSON object. """ name = json['name'] if 'name' in json else '' status = json['status'] if 'status' in json else 'Success' next_step = NextStep(name=name, status=status, parent_name=parent_name, ancestry=ancestry) if json['flags']: next_step.flags = [ Flag.from_json(flag, parent_name=next_step.parent_name, ancestry=next_step.ancestry) for flag in json['flags'] ] return next_step
def test_from_json_with_args(self): args = {'arg1': {'format': 'integer', 'key': 'arg1', 'value': 3}} json_in = {'action': 'mod1_flag2', 'args': args, 'filters': []} flag = Flag.from_json(json_in, parent_name='parent', ancestry=['a', 'b']) self.__compare_init(flag, 'mod1_flag2', 'parent', ['a', 'b', 'mod1_flag2'], [], {'arg1': 3})
def from_json(json, parent_name='', ancestry=None): next_step = NextStep(name=json['name'], parent_name=parent_name, ancestry=ancestry) next_step.flags = [ Flag.from_json(flag, parent_name=next_step.parent_name, ancestry=next_step.ancestry) for flag in json['flags'] ] return next_step
def test_from_json_with_filters_with_invalid_action(self): args = {'arg1': {'format': 'integer', 'key': 'arg1', 'value': 3}} filters_json = [{ 'action': 'Top Filter', 'args': {} }, { 'action': 'invalid', 'args': { 'arg1': { 'format': 'number', 'key': 'arg1', 'value': 5.4 } } }] json_in = { 'action': 'mod1_flag2', 'args': args, 'filters': filters_json } with self.assertRaises(UnknownFilter): Flag.from_json(json_in, parent_name='parent', ancestry=['a', 'b'])
def test_from_json_with_filters(self): filters = [ Filter(action='mod1_filter2', args={'arg1': '5.4'}), Filter(action='Top Filter') ] filters_json = [filter_elem.as_json() for filter_elem in filters] args = {'arg1': {'format': 'integer', 'key': 'arg1', 'value': 3}} json_in = { 'action': 'mod1_flag2', 'args': args, 'filters': filters_json } flag = Flag.from_json(json_in, parent_name='parent', ancestry=['a', 'b']) self.__compare_init(flag, 'mod1_flag2', 'parent', ['a', 'b', 'mod1_flag2'], filters, {'arg1': 3}) for filter_element in flag.filters: self.assertEqual(filter_element.parent_name, 'mod1_flag2') self.assertListEqual( filter_element.ancestry, ['a', 'b', 'mod1_flag2', filter_element.action])
def test_from_json_with_invalid_args(self): args = {'invalid': {'format': 'integer', 'key': 'invalid', 'value': 3}} json_in = {'action': 'mod1_flag2', 'args': args, 'filters': []} with self.assertRaises(InvalidInput): Flag.from_json(json_in, parent_name='parent', ancestry=['a', 'b'])
def test_from_json_invalid_action(self): json_in = {'action': 'invalid', 'args': {}, 'filters': []} with self.assertRaises(UnknownFlag): Flag.from_json(json_in)
def test_from_json_action_only(self): json_in = {'action': 'Top Flag', 'args': {}, 'filters': []} flag = Flag.from_json(json_in) self.__compare_init(flag, 'Top Flag', '', ['', 'Top Flag'], [], {})
def test_from_json(self): filters = [Filter(action='test_filter_action'), Filter()] args = {'arg1': 'a', 'arg2': 3, 'arg3': u'abc'} args = { arg_name: Argument(key=arg_name, value=arg_value, format=type(arg_value).__name__) for arg_name, arg_value in args.items() } input_output = { Flag(): ('', ['']), Flag(parent_name='test_parent'): ('test_parent', ['test_parent']), Flag(action='test_action'): ('', ['']), Flag(parent_name='test_parent', action='test_action', ancestry=['a', 'b']): ('test_parent', ['a', 'b']), Flag(action='test_action', args=args): ('', ['']) } flag1, expected1 = Flag(action='test_action'), ('', ['']) filters1 = [ Filter(parent_name=flag1.name, ancestry=flag1.ancestry), Filter(action='test_filter_action', parent_name=flag1.name, ancestry=flag1.ancestry) ] flag1.filters = filters1 flag2, expected2 = Flag(parent_name='test_parent', action='test_action', ancestry=['a', 'b'], filters=filters, args=args), ('test_parent', ['a', 'b']) filters2 = [ Filter(parent_name=flag2.name, ancestry=flag2.ancestry), Filter(action='test_filter_action', parent_name=flag2.name, ancestry=flag2.ancestry) ] flag2.filters = filters2 input_output[flag1] = expected1 input_output[flag2] = expected2 for flag, (parent_name, ancestry) in input_output.items(): flag_json = flag.as_json() original_filter_ancestries = [ list(filter_element.ancestry) for filter_element in flag.filters ] derived_flag = Flag.from_json(flag_json, parent_name=parent_name, ancestry=ancestry) derived_filters_ancestries = [ list(filter_element.ancestry) for filter_element in derived_flag.filters ] self.assertEqual(len(derived_filters_ancestries), len(original_filter_ancestries)) for derived_filter_ancestry, original_filter_ancestry in zip( derived_filters_ancestries, original_filter_ancestries): self.assertListEqual(derived_filter_ancestry, original_filter_ancestry) self.assertDictEqual(derived_flag.as_json(), flag_json) self.assertEqual(flag.parent_name, derived_flag.parent_name) self.assertListEqual(flag.ancestry, derived_flag.ancestry)