package com.constellio.app.modules.tasks.ui.pages;
import com.constellio.app.modules.rm.RMTestRecords;
import com.constellio.app.modules.rm.services.RMSchemasRecordsServices;
import com.constellio.app.modules.rm.services.events.RMEventsSearchServices;
import com.constellio.app.modules.tasks.model.wrappers.Task;
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.DisplayTaskPresenter;
import com.constellio.app.modules.tasks.ui.pages.tasks.DisplayTaskView;
import com.constellio.app.ui.entities.RecordVO;
import com.constellio.app.ui.framework.builders.RecordToVOBuilder;
import com.constellio.app.ui.framework.data.RecordVODataProvider;
import com.constellio.app.ui.pages.base.SessionContext;
import com.constellio.model.entities.records.Transaction;
import com.constellio.model.entities.records.wrappers.EventType;
import com.constellio.model.services.records.RecordServices;
import com.constellio.model.services.search.SearchServices;
import com.constellio.model.services.search.query.logical.condition.LogicalSearchCondition;
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;
import org.joda.time.LocalDate;
import org.joda.time.LocalDateTime;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mock;
import java.util.List;
import java.util.Locale;
import static com.constellio.app.ui.entities.RecordVO.VIEW_MODE.DISPLAY;
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;
public class DisplayTaskPresenterAcceptanceTest extends ConstellioTest {
Users users = new Users();
@Mock
DisplayTaskView view;
SessionContext sessionContext;
private RecordServices recordServices;
private SearchServices searchServices;
private TasksSchemasRecordsServices tasksSchemas;
DisplayTaskPresenter presenter;
Task zeTask;
private LocalDate testDate = LocalDate.now().minusDays(1);
private TaskVO zeTaskAssociatedVO;
RMTestRecords rmRecords = new RMTestRecords(zeCollection);
// TODO Francis Baril faire passer sans RMModule.
@Before
public void setUp()
throws Exception {
prepareSystem(withZeCollection().withConstellioRMModule().withTasksModule().withAllTest(users));
givenTimeIs(testDate);
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)
.setCollectionDeleteAccess(true));
when(view.getSessionContext()).thenReturn(sessionContext);
when(view.getCollection()).thenReturn(zeCollection);
when(view.getConstellioFactories()).thenReturn(getConstellioFactories());
new SDKViewNavigation(view);
presenter = new DisplayTaskPresenter(view);
zeTask = tasksSchemas.newTask().setTitle("zeTask");
recordServices.add(zeTask);
zeTaskAssociatedVO = new TaskVO(new RecordToVOBuilder().build(zeTask.getWrappedRecord(), DISPLAY, sessionContext));
}
@Test
public void whenDisplayTaskThenTaskLoadedCorrectly()
throws Exception {
presenter.initTaskVO(zeTask.getId());
TaskVO taskVO = (TaskVO) presenter.getTask();
assertThat(taskVO.getTitle()).isEqualTo("zeTask");
}
@Test
public void whenDeleteTaskThenTaskDeletedCorrectly()
throws Exception {
presenter.initTaskVO(zeTask.getId());
presenter.deleteButtonClicked();
LogicalSearchCondition allTasksQuery = from(
tasksSchemas.userTask.schema()).returnAll();
Task deletedTask = tasksSchemas.wrapTask(searchServices.searchSingleResult(allTasksQuery));
assertThat(deletedTask.getLogicallyDeletedStatus()).isTrue();
}
@Test
public void givenEventsThenEventsDataProviderReturnValidEvents() throws Exception {
prepareSystem(
withCollection("collectionTest").withConstellioRMModule().withTasksModule().withAllTest(users)
.withFoldersAndContainersOfEveryStatus().withDocumentsHavingContent()
);
sessionContext = FakeSessionContext.adminInCollection("collectionTest");
sessionContext.setCurrentLocale(Locale.FRENCH);
sessionContext.setCurrentCollection("collectionTest");
when(view.getSessionContext()).thenReturn(sessionContext);
when(view.getCollection()).thenReturn("collectionTest");
when(view.getConstellioFactories()).thenReturn(getConstellioFactories());
new SDKViewNavigation(view);
presenter = new DisplayTaskPresenter(view);
Task zeTask2 = tasksSchemas.newTask().setTitle("zeTask2");
recordServices.add(zeTask2);
RMSchemasRecordsServices rmSchemasRecordsServices = new RMSchemasRecordsServices("collectionTest", getAppLayerFactory());
RMEventsSearchServices rmEventsSearchServices = new RMEventsSearchServices(getModelLayerFactory(), "collectionTest");
Transaction transaction = new Transaction();
transaction.add(rmSchemasRecordsServices.newEvent().setRecordId(zeTask.getId())
.setTitle(zeTask.getTitle()).setUsername(users.adminIn("collectionTest").getUsername()).setType(EventType.MODIFY_TASK)
.setCreatedOn(LocalDateTime.now()));
transaction.add(rmSchemasRecordsServices.newEvent().setRecordId(zeTask2.getId())
.setTitle(zeTask2.getTitle()).setUsername(users.adminIn("collectionTest").getUsername()).setType(EventType.MODIFY_TASK)
.setCreatedOn(LocalDateTime.now()));
recordServices.execute(transaction);
getDataLayerFactory().newEventsDao().flush();
assertThat(searchServices.getResultsCount(rmEventsSearchServices.newFindEventByRecordIDQuery(users.adminIn("collectionTest"), zeTask.getId()))).isEqualTo(1);
assertThat(searchServices.getResultsCount(rmEventsSearchServices.newFindEventByRecordIDQuery(users.adminIn("collectionTest"), zeTask2.getId()))).isEqualTo(1);
presenter.initTaskVO(zeTask.getId());
RecordVODataProvider provider = presenter.getEventsDataProvider();
List<RecordVO> eventList = provider.listRecordVOs(0, 100);
assertThat(eventList).hasSize(1);
}
}