package com.constellio.app.modules.tasks.ui.pages; import static com.constellio.app.ui.entities.RecordVO.VIEW_MODE.FORM; import static com.constellio.model.services.search.query.logical.LogicalSearchQueryOperators.from; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.when; import java.util.HashMap; import java.util.Locale; import java.util.Map; import org.joda.time.LocalDate; import org.junit.Before; import org.junit.Test; import org.mockito.Mock; import com.constellio.app.modules.tasks.model.wrappers.Task; import com.constellio.app.modules.tasks.navigation.TasksNavigationConfiguration; import com.constellio.app.modules.tasks.services.TasksSchemasRecordsServices; import com.constellio.app.modules.tasks.ui.entities.TaskVO; import com.constellio.app.modules.tasks.ui.pages.tasks.AddEditTaskPresenter; import com.constellio.app.modules.tasks.ui.pages.tasks.AddEditTaskView; import com.constellio.app.ui.entities.RecordVO; import com.constellio.app.ui.framework.builders.RecordToVOBuilder; import com.constellio.app.ui.pages.base.SessionContext; import com.constellio.app.ui.params.ParamUtils; import com.constellio.model.entities.records.wrappers.User; import com.constellio.model.services.records.RecordServices; import com.constellio.model.services.search.SearchServices; import com.constellio.sdk.tests.ConstellioTest; import com.constellio.sdk.tests.FakeSessionContext; import com.constellio.sdk.tests.SDKViewNavigation; import com.constellio.sdk.tests.setups.Users; public class AddEditTaskPresenterAcceptanceTest extends ConstellioTest { Users users = new Users(); @Mock AddEditTaskView view; SessionContext sessionContext; private RecordServices recordServices; private SearchServices searchServices; private TasksSchemasRecordsServices tasksSchemas; AddEditTaskPresenter presenter; private LocalDate shishDate = LocalDate.now().minusDays(1); @Before public void setUp() throws Exception { prepareSystem(withZeCollection().withTasksModule().withAllTest(users)); givenTimeIs(shishDate); recordServices = getModelLayerFactory().newRecordServices(); searchServices = getModelLayerFactory().newSearchServices(); tasksSchemas = new TasksSchemasRecordsServices(zeCollection, getAppLayerFactory()); sessionContext = FakeSessionContext.chuckNorrisInCollection(zeCollection); sessionContext.setCurrentLocale(Locale.FRENCH); sessionContext.setCurrentCollection(zeCollection); recordServices.add(users.chuckNorrisIn(zeCollection).setCollectionWriteAccess(true).setCollectionReadAccess(true)); when(view.getSessionContext()).thenReturn(sessionContext); when(view.getCollection()).thenReturn(zeCollection); when(view.getConstellioFactories()).thenReturn(getConstellioFactories()); new SDKViewNavigation(view); presenter = new AddEditTaskPresenter(view); } @Test public void whenAddSubTaskThenTaskParentIdSetCorrectly() throws Exception { Map<String, String> params = new HashMap<>(); String parentTaskId = "zeParentTask"; params.put("parentId", parentTaskId); String viewPath = ParamUtils.addParams(TasksNavigationConfiguration.ADD_TASK, params); presenter.initTaskVO(viewPath); assertThat(presenter.getTask().get(Task.PARENT_TASK)).isEqualTo(parentTaskId); } @Test public void whenEditTaskThenTaskLoadedCorrectly() throws Exception { Task zeTask = tasksSchemas.newTask().setTitle("zeTask"); recordServices.add(zeTask.getWrappedRecord()); zeTask = tasksSchemas.getTask(zeTask.getId()); Map<String, String> parameters = new HashMap<>(); parameters.put("id", zeTask.getId()); String viewPath = ParamUtils.addParams(TasksNavigationConfiguration.EDIT_TASK, parameters); presenter.initTaskVO(viewPath); TaskVO taskVO = presenter.getTask(); assertThat(taskVO.getAssignee()).isEqualTo(null); assertThat(taskVO.getTitle()).isEqualTo("zeTask"); } @Test public void whenAddTaskThenAssigneeSetToCurrentUserAndDueDateSetByDefaultToCurrentDate() throws Exception { String viewPath = ParamUtils.addParams(TasksNavigationConfiguration.ADD_TASK, new HashMap<String, String>()); presenter.initTaskVO(viewPath); TaskVO taskVO = presenter.getTask(); assertThat(taskVO.getAssignee()).isEqualTo(getSessionCurrentUserId()); assertThat(taskVO.getDueDate()).isEqualTo(shishDate); } @Test public void givenTaskWithModifiedAssigneeAndAssignationDateWhenSaveTaskThenAssigneeAndAssignationDateSaved() throws Exception { String bobId = users.bobIn(zeCollection).getId(); String aliceId = users.aliceIn(zeCollection).getId(); Task zeTask = tasksSchemas.newTask().setTitle("zeTask").setAssignee(aliceId).setAssignationDate(shishDate.minusDays(1)) .setAssigner(bobId); RecordVO taskVO = new RecordToVOBuilder().build(zeTask.getWrappedRecord(), FORM, sessionContext); presenter.saveButtonClicked(taskVO); Task reloadedTask = tasksSchemas .wrapTask(searchServices.searchSingleResult(from(tasksSchemas.userTask.schema()).returnAll())); assertThat(reloadedTask.getAssignee()).isEqualTo(aliceId); assertThat(reloadedTask.getAssigner()).isEqualTo(getSessionCurrentUserId()); assertThat(reloadedTask.getAssignedOn()).isEqualTo(shishDate); } @Test public void givenTaskWithUnmodifiedAssigneeWhenSaveTaskThenAssignerAndAssignationDateNotSet() throws Exception { String bobId = users.bobIn(zeCollection).getId(); String aliceId = users.aliceIn(zeCollection).getId(); Task zeTask = tasksSchemas.newTask().setTitle("zeTask").setAssignee(aliceId).setAssignationDate(shishDate.minusDays(1)) .setAssigner(bobId); recordServices.add(zeTask); zeTask = tasksSchemas.getTask(zeTask.getId()); RecordVO taskVO = new RecordToVOBuilder().build(zeTask.getWrappedRecord(), FORM, sessionContext); presenter.saveButtonClicked(taskVO); Task reloadedTask = tasksSchemas.getTask(zeTask.getId()); assertThat(reloadedTask.getAssignee()).isEqualTo(aliceId); assertThat(reloadedTask.getAssigner()).isEqualTo(bobId); assertThat(reloadedTask.getAssignedOn()).isEqualTo(shishDate.minusDays(1)); } @Test public void givenTaskWithoutAssigneeWhenSavedThenAssignationDateAndAssignerAreNull() throws Exception { Task zeTask = tasksSchemas.newTask().setTitle("zeTask"); RecordVO taskVO = new RecordToVOBuilder().build(zeTask.getWrappedRecord(), FORM, sessionContext); presenter.saveButtonClicked(taskVO); Task reloadedTask = tasksSchemas .wrapTask(searchServices.searchSingleResult(from(tasksSchemas.userTask.schema()).returnAll())); assertThat(reloadedTask.getTitle()).isEqualTo("zeTask"); assertThat(reloadedTask.getAssignee()).isNull(); assertThat(reloadedTask.getAssignedOn()).isNull(); assertThat(reloadedTask.getAssigner()).isNull(); } @Test public void givenTaskWithAssigneeWhenSavedThenAssignationDateAndAssignerAreSetCorrectly() throws Exception { Task zeTask = tasksSchemas.newTask().setTitle("zeTask").setAssignee(users.aliceIn(zeCollection).getId()); RecordVO taskVO = new RecordToVOBuilder().build(zeTask.getWrappedRecord(), FORM, sessionContext); presenter.saveButtonClicked(taskVO); Task reloadedTask = tasksSchemas .wrapTask(searchServices.searchSingleResult(from(tasksSchemas.userTask.schema()).returnAll())); assertThat(reloadedTask.getTitle()).isEqualTo("zeTask"); assertThat(reloadedTask.getAssignee()).isEqualTo(users.aliceIn(zeCollection).getId()); assertThat(reloadedTask.getAssignedOn()).isEqualTo(shishDate); assertThat(reloadedTask.getAssigner()).isEqualTo(getSessionCurrentUserId()); } @Test public void whenCancelThenTaskNotSaved() throws Exception { String viewPath = ParamUtils.addParams(TasksNavigationConfiguration.ADD_TASK, new HashMap<String, String>()); presenter.initTaskVO(viewPath); presenter.cancelButtonClicked(); assertThat(searchServices.getResultsCount(from(tasksSchemas.userTask.schema()).returnAll())).isEqualTo(0); } protected String getSessionCurrentUserId() { //sessionContext.getCurrentUser().getid() dos not work because user reloaded return tasksSchemas .wrapUser(searchServices.searchSingleResult( from(tasksSchemas.userSchema()).where(tasksSchemas.userSchema().getMetadata(User.USERNAME)) .isEqualTo(sessionContext.getCurrentUser().getUsername()))).getId(); } }