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)
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)
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)
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)