def test_init_with_flags(self): triggers = [ Flag(action='regMatch', args={'regex': '(.*)'}), Flag(action='regMatch', args={'regex': 'a'}) ] step = Step('HelloWorld', 'helloWorld', triggers=triggers) self.__compare_init(step, '', 'helloWorld', 'HelloWorld', '', {}, triggers=['regMatch', 'regMatch'])
def __execute_trigger(conditional, data_in): filters = [ Filter(action=filter_element['action'], args=Triggers.__to_new_input_format(filter_element['args'])) for filter_element in conditional['filters'] ] return Flag(action=conditional['action'], args=Triggers.__to_new_input_format(conditional['args']), filters=filters).execute(data_in, {})
def test_execute_with_triggers(self): triggers = [Flag(action='regMatch', args={'regex': 'aaa'})] step = Step(app='HelloWorld', action='helloWorld', triggers=triggers) instance = AppInstance.create(app_name='HelloWorld', device_name='device1') step.send_data_to_trigger({"data_in": {"data": 'aaa'}}) result = {'triggered': False} @callbacks.data_sent.connect def callback_is_sent(sender, **kwargs): if kwargs['callback_name'] == "Trigger Step Taken": result['triggered'] = True step.execute(instance.instance, {}) self.assertTrue(result['triggered'])
def test_execute_multiple_triggers(self): triggers = [Flag(action='regMatch', args={'regex': 'aaa'})] step = Step(app='HelloWorld', action='helloWorld', triggers=triggers) instance = AppInstance.create(app_name='HelloWorld', device_name='device1') step.send_data_to_trigger({"data_in": {"data": 'a'}}) trigger_taken = {'triggered': 0} trigger_not_taken = {'triggered': 0} @callbacks.data_sent.connect def callback_is_sent(sender, **kwargs): if kwargs['callback_name'] == "Trigger Step Taken": trigger_taken['triggered'] += 1 elif kwargs['callback_name'] == "Trigger Step Not Taken": step.send_data_to_trigger({"data_in": {"data": 'aaa'}}) trigger_not_taken['triggered'] += 1 step.execute(instance.instance, {}) self.assertEqual(trigger_taken['triggered'], 1) self.assertEqual(trigger_not_taken['triggered'], 1)
def test_get_next_step(self): flag = Flag(action='regMatch', args={'regex': 'aaa'}) next_step = NextStep(name='next', flags=[flag], status='Success') step = Step('HelloWorld', 'helloWorld', next_steps=[next_step]) step._output = ActionResult(result='aaa', status='Success') result = {'triggered': False} @callbacks.data_sent.connect def validate_sent_data(sender, **kwargs): if isinstance(sender, Step): self.assertIs(sender, step) self.assertIn('callback_name', kwargs) self.assertEqual(kwargs['callback_name'], 'Conditionals Executed') self.assertIn('object_type', kwargs) self.assertEqual(kwargs['object_type'], 'Step') result['triggered'] = True self.assertEqual(step.get_next_step({}), 'next') self.assertEqual(step._next_up, 'next') self.assertTrue(result['triggered'])
def test_execute_action_with_valid_complex_args_valid_data(self): self.assertTrue(Flag(action='mod2_flag2', args={'arg1': {'a': '1', 'b': '5'}}).execute('some_long_string', {}))
def test_get_next_step_invalid_step(self): flag = Flag(action='regMatch', args={'regex': 'aaa'}) next_step = NextStep(name='next', flags=[flag], status='Success') step = Step('HelloWorld', 'helloWorld', next_steps=[next_step]) step._output = ActionResult(result='bbb', status='Success') self.assertIsNone(step.get_next_step({}))
def test_execute_action_with_valid_args_and_filters_invalid_data_and_routing(self): filters = [Filter(action='mod1_filter2', args={'arg1': '@step1'}), Filter(action='Top Filter')] # should go <input = invalid> -> <mod1_filter2 with error = invalid> -> <Top Filter with error = invalid> # -> <mod1_flag2 4+invalid throws error> -> False accumulator = {'step1': '5', 'step2': 4} self.assertFalse(Flag(action='mod1_flag2', args={'arg1': 4}, filters=filters).execute('invalid', accumulator))
def test_init_with_args_no_conversion(self): flag = Flag(action='mod1_flag2', args={'arg1': 3}) self.__compare_init(flag, 'mod1_flag2', [], {'arg1': 3})
def test_execute_action_with_valid_args_and_filters_valid_data(self): filters = [Filter(action='mod1_filter2', args={'arg1': '5'}), Filter(action='Top Filter')] # should go <input = 1> -> <mod1_filter2 = 5+1 = 6> -> <Top Filter 6=6> -> <mod1_flag2 4+6%2==0> -> True self.assertTrue(Flag(action='mod1_flag2', args={'arg1': 4}, filters=filters).execute('1', {}))
def test_execute_action_with_valid_args_and_filters_invalid_data(self): filters = [Filter(action='mod1_filter2', args={'arg1': '5'}), Filter(action='Top Filter')] # should go <input = invalid> -> <mod1_filter2 with error = invalid> -> <Top Filter with error = invalid> # -> <mod1_flag2 4+invalid throws error> -> False self.assertFalse(Flag(action='mod1_flag2', args={'arg1': 4}, filters=filters).execute('invalid', {}))
def test_init_with_args_with_routing(self): flag = Flag(action='mod1_flag2', args={'arg1': '@step2'}) self.__compare_init(flag, 'mod1_flag2', [], {'arg1': '@step2'})
def test_init_with_uid(self): uid = uuid.uuid4().hex flag = Flag(action='Top Flag', uid=uid) self.__compare_init(flag, 'Top Flag', [], {}, uid=uid)
def test_execute_action_only_no_args_invalid_data(self): self.assertFalse(Flag(action='Top Flag').execute('invalid', {}))
def test_execute_action_only_no_args_valid_data_with_conversion(self): self.assertTrue(Flag(action='Top Flag').execute('3.4', {}))
def test_init_with_filters(self): filters = [Filter(action='mod1_filter2', args={'arg1': '5.4'}), Filter(action='Top Filter')] flag = Flag(action='Top Flag', filters=filters) self.__compare_init(flag, 'Top Flag', filters, {})
def test_init_with_args_invalid_arg_type(self): with self.assertRaises(InvalidInput): Flag(action='mod1_flag2', args={'arg1': 'aaa'})
def test_init_with_args_invalid_arg_name(self): with self.assertRaises(InvalidInput): Flag(action='mod1_flag2', args={'invalid': '3'})
def test_execute_action_with_valid_args_invalid_data(self): self.assertFalse(Flag(action='mod1_flag2', args={'arg1': 3}).execute('invalid', {}))
def test_init_no_args_action_only(self): flag = Flag(action='Top Flag') self.__compare_init(flag, 'Top Flag', [], {})