예제 #1
0
 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'],
                         [], {})
예제 #2
0
 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
예제 #3
0
 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})
예제 #4
0
 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
예제 #5
0
 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'])
예제 #6
0
 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])
예제 #7
0
 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'])
예제 #8
0
 def test_from_json_invalid_action(self):
     json_in = {'action': 'invalid', 'args': {}, 'filters': []}
     with self.assertRaises(UnknownFlag):
         Flag.from_json(json_in)
예제 #9
0
 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'], [], {})
예제 #10
0
    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)