Esempio n. 1
0
    def test_to_from_json(self):
        filter_params = ['test_filter_action', '']
        flags_params = [('', []), ('test_action', []),
                        ('test_action', filter_params)]
        input_params = [('', '', None, []), ('test_name', '', None, []),
                        ('test_name', 'test_parent', None, []),
                        ('test_name', 'test_parent', ['a', 'b'], []),
                        ('test_name', 'test_parent', ['a', 'b'], flags_params)]

        for (name, parent_name, ancestry, flag_params) in input_params:
            next_step = NextStep(name=name,
                                 parent_name=parent_name,
                                 ancestry=ancestry)
            if flag_params:
                flags = []
                for flag_action, flag_filter_params in flag_params:
                    flag = Flag(action=flag_action,
                                parent_name=next_step.name,
                                ancestry=next_step.ancestry)
                    if filter_params:
                        flag.filters = [
                            Filter(action=flag_action,
                                   parent_name=flag.name,
                                   ancestry=flag.ancestry)
                            for flag_action in flag_filter_params
                        ]
                    flags.append(flag)
                next_step.flags = flags
            next_step_json = next_step.as_json()
            derived_next_step = NextStep.from_json(next_step_json,
                                                   parent_name=parent_name,
                                                   ancestry=ancestry)
            self.assertDictEqual(derived_next_step.as_json(), next_step_json)
            self.assertEqual(next_step.parent_name,
                             derived_next_step.parent_name)
            self.assertListEqual(next_step.ancestry,
                                 derived_next_step.ancestry)

            derived_json_without_children = next_step_json
            derived_json_without_children['flags'] = [
                flag['action']
                for flag in derived_json_without_children['flags']
            ]
            self.assertDictEqual(
                derived_next_step.as_json(with_children=False),
                derived_json_without_children)

            # check the ancestry of the flags
            original_flag_ancestries = [
                list(flag.ancestry) for flag in next_step.flags
            ]
            derived_flag_ancestries = [
                list(flag.ancestry) for flag in derived_next_step.flags
            ]
            self.assertEqual(len(original_flag_ancestries),
                             len(derived_flag_ancestries))
            for original_flag_ancestry, derived_flag_ancestry in zip(
                    original_flag_ancestries, derived_flag_ancestries):
                self.assertListEqual(derived_flag_ancestry,
                                     original_flag_ancestry)
Esempio n. 2
0
    def test_name_parent_filter_rename(self):
        flag = Flag(ancestry=['flag_parent'], action='test_flag')
        filter_element = Filter(action="test_filter", ancestry=flag.ancestry)
        flag.filters = [filter_element]

        new_ancestry = ["flag_parent_update"]
        flag.reconstruct_ancestry(new_ancestry)
        new_ancestry.append("test_flag")
        new_ancestry.append("test_filter")
        self.assertListEqual(new_ancestry, flag.filters[0].ancestry)
Esempio n. 3
0
    def test_name_parent_multiple_filter_rename(self):
        flag = Flag(ancestry=['flag_parent'], action='test_flag')
        filter_one = Filter(action="test_filter_one", ancestry=flag.ancestry)
        filter_two = Filter(action="test_filter_two", ancestry=flag.ancestry)
        flag.filters = [filter_one, filter_two]

        new_ancestry = ["flag_parent_update"]
        flag.reconstruct_ancestry(new_ancestry)
        new_ancestry.append("test_flag")
        new_ancestry.append("test_filter_one")
        self.assertListEqual(new_ancestry, flag.filters[0].ancestry)

        new_ancestry.remove("test_filter_one")
        new_ancestry.append("test_filter_two")
        self.assertListEqual(new_ancestry, flag.filters[1].ancestry)
Esempio n. 4
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)