use of org.motechproject.tasks.domain.mds.task.TaskConfig in project motech by motech.
the class TaskServiceImplTest method shouldSaveTask.
@Test
public void shouldSaveTask() {
Map<String, String> map = new HashMap<>();
map.put("phone", "12345");
TaskConfig config = new TaskConfig().add(new DataSource("TestProvider", 1234L, 1L, "Test", "id", "specifiedName", asList(new Lookup("id", "trigger.value")), true));
action.setValues(map);
Task task = new Task("name", trigger, asList(action), config, true, false);
task.setNumberOfRetries(5);
task.setRetryTaskOnFailure(true);
Channel triggerChannel = new Channel("test", "test-trigger", "0.15", "", asList(new TriggerEvent("send", "SEND", "", asList(new EventParameter("test", "value")), "")), null);
ActionEvent actionEvent = new ActionEventBuilder().setDisplayName("receive").setSubject("RECEIVE").setDescription("").setActionParameters(null).build();
actionEvent.addParameter(new ActionParameterBuilder().setDisplayName("Phone").setKey("phone").build(), true);
Channel actionChannel = new Channel("test", "test-action", "0.14", "", null, asList(actionEvent));
TaskDataProvider provider = new TaskDataProvider("TestProvider", asList(new TaskDataProviderObject("test", "Test", asList(new LookupFieldsParameter("id", asList("id"))), null)));
provider.setId(1234L);
when(channelService.getChannel(trigger.getModuleName())).thenReturn(triggerChannel);
when(channelService.getChannel(action.getModuleName())).thenReturn(actionChannel);
when(providerService.getProvider("TestProvider")).thenReturn(provider);
when(triggerEventService.triggerExists(task.getTrigger())).thenReturn(true);
taskService.save(task);
verify(triggerHandler).registerHandlerFor(task.getTrigger().getEffectiveListenerSubject());
// Because task has set number of retries to 5, it should register retries handler for this task
verify(triggerHandler).registerHandlerFor(task.getTrigger().getEffectiveListenerRetrySubject(), true);
verifyCreateAndCaptureTask();
}
use of org.motechproject.tasks.domain.mds.task.TaskConfig in project motech by motech.
the class TaskServiceImplTest method shouldNotValidateTasksAfterChannelUpdateIfDataSourceDoesNotExistForGivenProvider.
@Test
public void shouldNotValidateTasksAfterChannelUpdateIfDataSourceDoesNotExistForGivenProvider() {
TaskConfig config = new TaskConfig().add(new DataSource("TestProvider", 1234L, 1L, "Test", "id", "specifiedName", asList(new Lookup("id", "trigger.value")), true));
Task task = new Task("name", trigger, asList(action), config, true, false);
TaskDataProvider dataProvider = new TaskDataProvider("abc", null);
dataProvider.setId(5678L);
when(tasksDataService.retrieveAll()).thenReturn(asList(task));
when(providerService.getProvider(dataProvider.getName())).thenReturn(dataProvider);
taskService.validateTasksAfterTaskDataProviderUpdate(getProviderUpdateEvent("abc"));
verify(tasksDataService, never()).create(any(Task.class));
verify(tasksDataService, never()).update(any(Task.class));
}
use of org.motechproject.tasks.domain.mds.task.TaskConfig in project motech by motech.
the class TaskFilterExecutorTest method testcheckFilters.
@Test
public void testcheckFilters() throws TaskHandlerException {
DateTime dateTime = DateTime.now().minusDays(2);
DataSource dataSource = new DataSource("ProviderName", null, 0L, "", "", "", null, false);
TaskConfig taskConfig = mock(TaskConfig.class);
when(taskConfig.getDataSource(anyString(), anyLong(), anyString())).thenReturn(dataSource);
Task task = new TaskBuilder().addAction(new TaskActionInformation()).build();
TaskContext taskContext = new TaskContext(task, null, null, activityService);
TaskFilterExecutor taskFilterExecutor = new TaskFilterExecutor();
assertTrue(taskFilterExecutor.checkFilters(null, null, taskContext));
assertTrue(taskFilterExecutor.checkFilters(new ArrayList<>(), null, taskContext));
List<Filter> filters = new ArrayList<>();
List<String> filtersManipulations = new ArrayList<>();
filters.add(new Filter("EventName", "trigger.eventName", UNICODE, true, CONTAINS.getValue(), "ven", filtersManipulations));
filters.add(new Filter("EventName", "trigger.eventName", TEXTAREA, true, EXIST.getValue(), "", filtersManipulations));
filters.add(new Filter("EventName", "trigger.eventName", UNICODE, true, EQUALS.getValue(), "event name", filtersManipulations));
filters.add(new Filter("EventName", "trigger.eventName", UNICODE, true, EQUALS_IGNORE_CASE.getValue(), "EvEnT nAmE", filtersManipulations));
filters.add(new Filter("EventName", "trigger.eventName", UNICODE, true, STARTSWITH.getValue(), "ev", filtersManipulations));
filters.add(new Filter("EventName", "trigger.eventName", UNICODE, true, ENDSWITH.getValue(), "me", filtersManipulations));
filters.add(new Filter("ExternalID", "trigger.externalId", INTEGER, true, GT.getValue(), "19", filtersManipulations));
filters.add(new Filter("ExternalID", "trigger.externalId", INTEGER, false, GT.getValue(), "1234567891", filtersManipulations));
filters.add(new Filter("ExternalID", "trigger.externalId", INTEGER, true, LT.getValue(), "1234567891", filtersManipulations));
filters.add(new Filter("ExternalID", "trigger.externalId", INTEGER, false, LT.getValue(), "123", filtersManipulations));
filters.add(new Filter("ExternalID", "trigger.externalId", INTEGER, true, EQ_NUMBER.getValue(), "123456789", filtersManipulations));
filters.add(new Filter("ExternalID", "trigger.externalId", INTEGER, false, EQ_NUMBER.getValue(), "789", filtersManipulations));
filters.add(new Filter("ExternalID", "trigger.externalId", INTEGER, true, EXIST.getValue(), "", filtersManipulations));
filters.add(new Filter("CMS Lite.StreamContent#0.Name", "ad.1.StreamContent#0.name", UNICODE, true, CONTAINS.getValue(), "am", filtersManipulations));
filters.add(new Filter("CMS Lite.StreamContent#0.Name", "ad.1.StreamContent#0.name", UNICODE, true, EXIST.getValue(), "", filtersManipulations));
filters.add(new Filter("CMS Lite.StreamContent#0.Name", "ad.1.StreamContent#0.name", UNICODE, true, EQUALS.getValue(), "name", filtersManipulations));
filters.add(new Filter("CMS Lite.StreamContent#0.Name", "ad.1.StreamContent#0.name", UNICODE, true, EQUALS_IGNORE_CASE.getValue(), "nAmE", filtersManipulations));
filters.add(new Filter("CMS Lite.StreamContent#0.Name", "ad.1.StreamContent#0.name", UNICODE, true, STARTSWITH.getValue(), "na", filtersManipulations));
filters.add(new Filter("CMS Lite.StreamContent#0.Name", "ad.1.StreamContent#0.name", UNICODE, true, ENDSWITH.getValue(), "me", filtersManipulations));
filters.add(new Filter("MRS.Person#1.Age", "ad.2.Person#1.age", INTEGER, true, GT.getValue(), "30", filtersManipulations));
filters.add(new Filter("MRS.Person#1.Age", "ad.2.Person#1.age", INTEGER, true, LT.getValue(), "50", filtersManipulations));
filters.add(new Filter("MRS.Person#1.Age", "ad.2.Person#1.age", INTEGER, true, EQ_NUMBER.getValue(), "46", filtersManipulations));
filters.add(new Filter("MRS.Person#1.Age", "ad.2.Person#1.age", INTEGER, true, EXIST.getValue(), "", filtersManipulations));
filters.add(new Filter("MRS.Person#1.Age", "ad.2.Person#1.age", INTEGER, false, GT.getValue(), "100", filtersManipulations));
filters.add(new Filter("MRS.Person#1.Dead", "ad.2.Person#1.dead", BOOLEAN, false, EXIST.getValue(), "", filtersManipulations));
filters.add(new Filter("MRS.Person#1.Dead", "ad.2.Person#1.dead", BOOLEAN, false, AND.getValue(), "false", filtersManipulations));
filters.add(new Filter("MRS.Person#1.Dead", "ad.2.Person#1.dead", BOOLEAN, true, OR.getValue(), "true", filtersManipulations));
taskContext = new TaskContext(task, new HashMap<>(), new HashMap<>(), activityService);
assertFalse(taskFilterExecutor.checkFilters(filters, LogicalOperator.AND, taskContext));
assertTrue(taskFilterExecutor.checkFilters(filters, LogicalOperator.OR, taskContext));
Map<String, Object> triggerParameters = new HashMap<>();
triggerParameters.put("eventName", "etName");
triggerParameters.put("externalId", "12345");
taskContext = new TaskContext(task, triggerParameters, new HashMap<>(), activityService);
taskContext.addDataSourceObject("0", new StreamContent("Eman"), false);
taskContext.addDataSourceObject("1", new Person(150, true), false);
assertFalse(taskFilterExecutor.checkFilters(filters, LogicalOperator.AND, taskContext));
assertTrue(taskFilterExecutor.checkFilters(filters, LogicalOperator.OR, taskContext));
triggerParameters.put("eventName", "event name");
triggerParameters.put("externalId", "123456789");
taskContext = new TaskContext(task, triggerParameters, new HashMap<>(), activityService);
taskContext.addDataSourceObject("0", new StreamContent("name"), false);
taskContext.addDataSourceObject("1", new Person(46, false), false);
assertTrue(taskFilterExecutor.checkFilters(filters, LogicalOperator.AND, taskContext));
Filter equals = new Filter("Test date", "trigger.test_date", DATE, true, EQUALS.getValue(), dateTime.toString(), filtersManipulations);
Filter after = new Filter("Test date", "trigger.test_date", DATE, false, AFTER.getValue(), DateUtil.now().toString(), filtersManipulations);
Filter afterNow = new Filter("Test date", "trigger.test_date", DATE, false, AFTER_NOW.getValue(), "", filtersManipulations);
Filter before = new Filter("Test date", "trigger.test_date", DATE, true, BEFORE.getValue(), DateUtil.now().toString(), filtersManipulations);
Filter beforeNow = new Filter("Test date", "trigger.test_date", DATE, true, BEFORE_NOW.getValue(), "", filtersManipulations);
Filter lessDays = new Filter("Test date", "trigger.test_date", DATE, true, LESS_DAYS_FROM_NOW.getValue(), "3", filtersManipulations);
Filter moreDays = new Filter("Test date", "trigger.test_date", DATE, true, MORE_DAYS_FROM_NOW.getValue(), "0", filtersManipulations);
filters.add(equals);
filters.add(after);
filters.add(afterNow);
filters.add(before);
filters.add(beforeNow);
filters.add(new Filter("Test date", "trigger.test_date", DATE, true, EXIST.getValue(), "", filtersManipulations));
filters.add(lessDays);
filters.add(moreDays);
triggerParameters.put("test_date", dateTime.toString());
taskContext = new TaskContext(task, triggerParameters, new HashMap<>(), activityService);
taskContext.addDataSourceObject("0", new StreamContent("name"), false);
taskContext.addDataSourceObject("1", new Person(46, false), false);
assertTrue(taskFilterExecutor.checkFilters(filters, LogicalOperator.AND, taskContext));
dateTime = dateTime.plusDays(4);
triggerParameters.put("test_date", dateTime.toString());
filters.remove(equals);
filters.remove(after);
filters.remove(afterNow);
filters.remove(before);
filters.remove(beforeNow);
filters.remove(lessDays);
filters.remove(moreDays);
filters.add(new Filter("Test date", "trigger.test_date", DATE, true, LESS_MONTHS_FROM_NOW.getValue(), "5", filtersManipulations));
filters.add(new Filter("Test date", "trigger.test_date", DATE, true, MORE_MONTHS_FROM_NOW.getValue(), "1", filtersManipulations));
dateTime = DateTime.now().minusMonths(3);
triggerParameters.put("test_date", dateTime.toString());
taskContext = new TaskContext(task, triggerParameters, new HashMap<>(), activityService);
taskContext.addDataSourceObject("0", new StreamContent("name"), false);
taskContext.addDataSourceObject("1", new Person(46, false), false);
assertTrue(taskFilterExecutor.checkFilters(filters, LogicalOperator.AND, taskContext));
dateTime = dateTime.plusMonths(6);
triggerParameters.put("test_date", dateTime.toString());
taskContext = new TaskContext(task, triggerParameters, new HashMap<>(), activityService);
taskContext.addDataSourceObject("0", new StreamContent("name"), false);
taskContext.addDataSourceObject("1", new Person(46, false), false);
assertTrue(taskFilterExecutor.checkFilters(filters, LogicalOperator.AND, taskContext));
equals.setExpression(dateTime.toString());
after.setNegationOperator(!after.isNegationOperator());
afterNow.setNegationOperator(!afterNow.isNegationOperator());
before.setNegationOperator(!before.isNegationOperator());
beforeNow.setNegationOperator(!beforeNow.isNegationOperator());
taskContext = new TaskContext(task, triggerParameters, new HashMap<>(), activityService);
taskContext.addDataSourceObject("0", new StreamContent("name"), false);
taskContext.addDataSourceObject("1", new Person(46, false), false);
assertTrue(taskFilterExecutor.checkFilters(filters, LogicalOperator.AND, taskContext));
Filter triggerFilter = new Filter("Trigger.Event Name", "trigger.eventName", UNICODE, true, "abc", "", filtersManipulations);
filters.add(triggerFilter);
Filter additionalDataFilter = new Filter("CMS Lite.StreamContent#0.Name", "ad.1.StreamContent#0.name", UNICODE, true, "abc", "", filtersManipulations);
filters.add(additionalDataFilter);
taskContext = new TaskContext(task, triggerParameters, new HashMap<>(), activityService);
taskContext.addDataSourceObject("0", new StreamContent("name"), false);
taskContext.addDataSourceObject("1", new Person(46, true), false);
assertFalse(taskFilterExecutor.checkFilters(filters, LogicalOperator.AND, taskContext));
assertTrue(taskFilterExecutor.checkFilters(filters, LogicalOperator.OR, taskContext));
filters.remove(triggerFilter);
filters.add(new Filter("Trigger.External Id", "trigger.externalId", INTEGER, true, "abc", "", filtersManipulations));
filters.remove(additionalDataFilter);
filters.add(new Filter("MRS.Person#1.Age", "ad.2.Person#1.age", INTEGER, true, "abc", "", filtersManipulations));
taskContext = new TaskContext(task, triggerParameters, new HashMap<>(), activityService);
taskContext.addDataSourceObject("0", new StreamContent("name"), false);
taskContext.addDataSourceObject("1", new Person(46, true), false);
assertFalse(taskFilterExecutor.checkFilters(filters, LogicalOperator.AND, taskContext));
assertTrue(taskFilterExecutor.checkFilters(filters, LogicalOperator.OR, taskContext));
}
use of org.motechproject.tasks.domain.mds.task.TaskConfig in project motech by motech.
the class TaskBuilderTest method shouldReturnBuiltTaskObject.
@Test
public void shouldReturnBuiltTaskObject() throws Exception {
TaskBuilder builder = new TaskBuilder();
Task task = builder.withName(TASK_NAME).withDescription(TASK_DESCRIPTION).isEnabled(isEnabled).withTrigger(new TaskTriggerInformation()).addAction(new TaskActionInformation()).withTaskConfig(new TaskConfig()).addFilterSet(new FilterSet()).addDataSource(new DataSource()).build();
assertNotNull(task);
assertEquals(TASK_NAME, task.getName());
assertEquals(TASK_DESCRIPTION, task.getDescription());
assertEquals(isEnabled, task.isEnabled());
assertNotNull(task.getTrigger());
assertNotNull(task.getActions());
assertFalse(task.getActions().isEmpty());
assertNotNull(task.getTaskConfig());
assertFalse(task.getTaskConfig().getDataSources().isEmpty());
assertFalse(task.getTaskConfig().getFilters().isEmpty());
}
use of org.motechproject.tasks.domain.mds.task.TaskConfig in project motech by motech.
the class TaskTriggerHandlerTest method shouldNotTriggerErrorWhenActionDoesNotFindDataSourceWithFailIfDataNotFoundNotSelected.
@Test
public void shouldNotTriggerErrorWhenActionDoesNotFindDataSourceWithFailIfDataNotFoundNotSelected() throws Exception {
Map<String, DataProvider> providers = new HashMap<>();
DataProvider provider = mock(DataProvider.class);
Map<String, String> lookup = new HashMap<>();
lookup.put("patientId", "123");
when(provider.lookup("Patient", null, lookup)).thenReturn(null);
providers.put(TASK_DATA_PROVIDER_NAME, provider);
handler.setDataProviders(providers);
TriggerEvent trigger = new TriggerEvent();
trigger.setSubject("trigger");
List<EventParameter> triggerEventParameters = new ArrayList<>();
triggerEventParameters.add(new EventParameter("patientId", "123"));
trigger.setEventParameters(triggerEventParameters);
ActionEvent action = new ActionEventBuilder().build();
action.setSubject("action");
SortedSet<ActionParameter> actionEventParameters = new TreeSet<>();
actionEventParameters.add(new ActionParameterBuilder().setDisplayName("Patient ID").setKey("patientId").setType(UNICODE).setOrder(0).build());
action.setActionParameters(actionEventParameters);
Task task = new Task();
task.setName("task");
task.setTrigger(new TaskTriggerInformation("Trigger", "channel", "module", "0.1", "trigger", "listener"));
Map<String, String> actionValues = new HashMap<>();
actionValues.put("patientId", "{{ad.12345.Patient#1.patientId}}");
task.addAction(new TaskActionInformation("Action", "channel", "module", "0.1", "action", actionValues));
task.setId(7l);
task.setHasRegisteredChannel(true);
TaskConfig taskConfig = new TaskConfig();
task.setTaskConfig(taskConfig);
taskConfig.add(new DataSource(TASK_DATA_PROVIDER_NAME, 3L, 1L, "Patient", "provider", "specifiedName", asList(new Lookup("patientId", "trigger.patientId")), false));
List<Task> tasks = asList(task);
when(taskService.findActiveTasksForTriggerSubject("trigger")).thenReturn(tasks);
when(taskService.getActionEventFor(task.getActions().get(0))).thenReturn(action);
setTaskActivities();
task.setFailuresInRow(taskActivities.size());
Map<String, Object> param = new HashMap<>(4);
param.put("patientId", "123");
handler.handle(new MotechEvent("trigger", param));
verify(postExecutionHandler, never()).handleError(anyMap(), anyMap(), eq(task), any(TaskHandlerException.class), eq(TASK_ACTIVITY_ID));
verify(taskActivityService).addWarning(eq(task), eq("task.warning.notFoundObjectForType"), eq("Patient"));
}
Aggregations