You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by ro...@apache.org on 2019/08/01 07:22:28 UTC

[james-project] 06/09: JAMES-2813 Extract TaskExecutionDetailsProjectionContract

This is an automated email from the ASF dual-hosted git repository.

rouazana pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git

commit eb17179a358308f312cd9240361e246b14e6af67
Author: Gautier DI FOLCO <gd...@linagora.com>
AuthorDate: Tue Jul 30 11:44:47 2019 +0200

    JAMES-2813 Extract TaskExecutionDetailsProjectionContract
---
 ...assandraTaskExecutionDetailsProjectionTest.java | 79 +++-------------------
 .../MemoryTaskExecutionDetailsProjectionTest.java  | 29 ++++++++
 .../TaskExecutionDetailsProjectionContract.java}   | 70 +++++++++----------
 3 files changed, 71 insertions(+), 107 deletions(-)

diff --git a/server/task-cassandra/src/test/java/org/apache/james/task/eventsourcing/cassandra/CassandraTaskExecutionDetailsProjectionTest.java b/server/task-cassandra/src/test/java/org/apache/james/task/eventsourcing/cassandra/CassandraTaskExecutionDetailsProjectionTest.java
index 0c1743a..5e7229d 100644
--- a/server/task-cassandra/src/test/java/org/apache/james/task/eventsourcing/cassandra/CassandraTaskExecutionDetailsProjectionTest.java
+++ b/server/task-cassandra/src/test/java/org/apache/james/task/eventsourcing/cassandra/CassandraTaskExecutionDetailsProjectionTest.java
@@ -19,96 +19,35 @@
 
 package org.apache.james.task.eventsourcing.cassandra;
 
-import static org.assertj.core.api.Assertions.assertThat;
-
-import java.util.List;
-import java.util.Optional;
-import java.util.stream.Stream;
+import java.util.function.Supplier;
 
 import org.apache.james.backends.cassandra.CassandraCluster;
 import org.apache.james.backends.cassandra.CassandraClusterExtension;
 import org.apache.james.backends.cassandra.components.CassandraModule;
 import org.apache.james.backends.cassandra.init.CassandraZonedDateTimeModule;
 import org.apache.james.backends.cassandra.versions.CassandraSchemaVersionModule;
-import org.apache.james.task.TaskExecutionDetails;
-import org.apache.james.task.TaskId;
-import org.apache.james.task.TaskManager;
+import org.apache.james.task.eventsourcing.TaskExecutionDetailsProjection;
+import org.apache.james.task.eventsourcing.TaskExecutionDetailsProjectionContract;
 
 import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.RegisterExtension;
-import scala.collection.JavaConverters;
-import scala.compat.java8.OptionConverters;
-
-class CassandraTaskExecutionDetailsProjectionTest {
-
-    private static final TaskId TASK_ID = TaskId.fromString("2c7f4081-aa30-11e9-bf6c-2d3b9e84aafd");
-    private static final TaskId TASK_ID_2 = TaskId.fromString("2c7f4081-aa30-11e9-bf6c-2d3b9e84aafe");
 
-    private static TaskExecutionDetails TASK_EXECUTION_DETAILS =  new TaskExecutionDetails(TASK_ID, "type", Optional.empty(),
-            TaskManager.Status.COMPLETED, Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty());
-    private static TaskExecutionDetails TASK_EXECUTION_DETAILS_2 =  new TaskExecutionDetails(TASK_ID_2, "type", Optional.empty(),
-            TaskManager.Status.COMPLETED, Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty());
-    private static TaskExecutionDetails TASK_EXECUTION_DETAILS_UPDATED =  new TaskExecutionDetails(TASK_ID, "type", Optional.empty(),
-            TaskManager.Status.FAILED, Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty());
+class CassandraTaskExecutionDetailsProjectionTest implements TaskExecutionDetailsProjectionContract {
 
     @RegisterExtension
     static CassandraClusterExtension cassandraCluster = new CassandraClusterExtension(
             CassandraModule.aggregateModules(CassandraSchemaVersionModule.MODULE, CassandraZonedDateTimeModule.MODULE, CassandraTaskExecutionDetailsProjectionModule.MODULE()));
 
-    private CassandraTaskExecutionDetailsProjection testee;
+    private Supplier<CassandraTaskExecutionDetailsProjection> testeeSupplier;
 
     @BeforeEach
     void setUp(CassandraCluster cassandra) {
         CassandraTaskExecutionDetailsProjectionDAO cassandraTaskExecutionDetailsProjectionDAO = new CassandraTaskExecutionDetailsProjectionDAO(cassandra.getConf(), cassandra.getTypesProvider());
-        testee = new CassandraTaskExecutionDetailsProjection(cassandraTaskExecutionDetailsProjectionDAO);
-    }
-
-    @Test
-    void loadShouldBeAbleToRetrieveASavedRecord() {
-        testee.update(TASK_EXECUTION_DETAILS);
-
-        Optional<TaskExecutionDetails> taskExecutionDetails = OptionConverters.toJava(testee.load(TASK_ID));
-        assertThat(taskExecutionDetails).contains(TASK_EXECUTION_DETAILS);
-    }
-
-    @Test
-    void updateShouldUpdateRecords() {
-        testee.update(TASK_EXECUTION_DETAILS);
-
-        testee.update(TASK_EXECUTION_DETAILS_UPDATED);
-
-        Optional<TaskExecutionDetails> taskExecutionDetails = OptionConverters.toJava(testee.load(TASK_ID));
-        assertThat(taskExecutionDetails).contains(TASK_EXECUTION_DETAILS_UPDATED);
-    }
-
-    @Test
-    void loadShouldReturnEmptyWhenNone() {
-        Optional<TaskExecutionDetails> taskExecutionDetails = OptionConverters.toJava(testee.load(TASK_ID));
-        assertThat(taskExecutionDetails).isEmpty();
-    }
-
-    @Test
-    void listShouldReturnEmptyWhenNone() {
-        List<TaskExecutionDetails> taskExecutionDetails = JavaConverters.asJava(testee.list());
-        assertThat(taskExecutionDetails).isEmpty();
+        testeeSupplier = () -> new CassandraTaskExecutionDetailsProjection(cassandraTaskExecutionDetailsProjectionDAO);
     }
 
-    @Test
-    void listShouldReturnAllRecords() {
-        testee.update(TASK_EXECUTION_DETAILS);
-        testee.update(TASK_EXECUTION_DETAILS_2);
-
-        List<TaskExecutionDetails> taskExecutionDetails = JavaConverters.asJava(testee.list());
-        assertThat(taskExecutionDetails).containsOnly(TASK_EXECUTION_DETAILS, TASK_EXECUTION_DETAILS_2);
-    }
-
-    @Test
-    void listDetailsShouldReturnLastUpdatedRecords() {
-        testee.update(TASK_EXECUTION_DETAILS);
-        testee.update(TASK_EXECUTION_DETAILS_UPDATED);
-
-        List<TaskExecutionDetails> taskExecutionDetails = JavaConverters.asJava(testee.list());
-        assertThat(taskExecutionDetails).containsOnly(TASK_EXECUTION_DETAILS_UPDATED);
+    @Override
+    public TaskExecutionDetailsProjection testee() {
+        return testeeSupplier.get();
     }
 }
diff --git a/server/task/src/test/java/org/apache/james/task/eventsourcing/MemoryTaskExecutionDetailsProjectionTest.java b/server/task/src/test/java/org/apache/james/task/eventsourcing/MemoryTaskExecutionDetailsProjectionTest.java
new file mode 100644
index 0000000..5908b21
--- /dev/null
+++ b/server/task/src/test/java/org/apache/james/task/eventsourcing/MemoryTaskExecutionDetailsProjectionTest.java
@@ -0,0 +1,29 @@
+/**
+ * *************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one   *
+ * or more contributor license agreements.  See the NOTICE file *
+ * distributed with this work for additional information        *
+ * regarding copyright ownership.  The ASF licenses this file   *
+ * to you under the Apache License, Version 2.0 (the            *
+ * "License"); you may not use this file except in compliance   *
+ * with the License.  You may obtain a copy of the License at   *
+ *                                                              *
+ * http://www.apache.org/licenses/LICENSE-2.0                   *
+ *                                                              *
+ * Unless required by applicable law or agreed to in writing,   *
+ * software distributed under the License is distributed on an  *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
+ * KIND, either express or implied.  See the License for the    *
+ * specific language governing permissions and limitations      *
+ * under the License.                                           *
+ ***************************************************************/
+
+package org.apache.james.task.eventsourcing;
+
+class MemoryTaskExecutionDetailsProjectionTest implements TaskExecutionDetailsProjectionContract {
+
+    @Override
+    public TaskExecutionDetailsProjection testee() {
+        return new MemoryTaskExecutionDetailsProjection();
+    }
+}
\ No newline at end of file
diff --git a/server/task-cassandra/src/test/java/org/apache/james/task/eventsourcing/cassandra/CassandraTaskExecutionDetailsProjectionTest.java b/server/task/src/test/java/org/apache/james/task/eventsourcing/TaskExecutionDetailsProjectionContract.java
similarity index 52%
copy from server/task-cassandra/src/test/java/org/apache/james/task/eventsourcing/cassandra/CassandraTaskExecutionDetailsProjectionTest.java
copy to server/task/src/test/java/org/apache/james/task/eventsourcing/TaskExecutionDetailsProjectionContract.java
index 0c1743a..54fd347 100644
--- a/server/task-cassandra/src/test/java/org/apache/james/task/eventsourcing/cassandra/CassandraTaskExecutionDetailsProjectionTest.java
+++ b/server/task/src/test/java/org/apache/james/task/eventsourcing/TaskExecutionDetailsProjectionContract.java
@@ -17,55 +17,46 @@
  * under the License.                                           *
  * ***************************************************************/
 
-package org.apache.james.task.eventsourcing.cassandra;
+package org.apache.james.task.eventsourcing;
 
 import static org.assertj.core.api.Assertions.assertThat;
 
+import java.time.ZonedDateTime;
 import java.util.List;
 import java.util.Optional;
-import java.util.stream.Stream;
 
-import org.apache.james.backends.cassandra.CassandraCluster;
-import org.apache.james.backends.cassandra.CassandraClusterExtension;
-import org.apache.james.backends.cassandra.components.CassandraModule;
-import org.apache.james.backends.cassandra.init.CassandraZonedDateTimeModule;
-import org.apache.james.backends.cassandra.versions.CassandraSchemaVersionModule;
 import org.apache.james.task.TaskExecutionDetails;
 import org.apache.james.task.TaskId;
 import org.apache.james.task.TaskManager;
 
-import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.extension.RegisterExtension;
 import scala.collection.JavaConverters;
 import scala.compat.java8.OptionConverters;
 
-class CassandraTaskExecutionDetailsProjectionTest {
+public interface TaskExecutionDetailsProjectionContract {
 
-    private static final TaskId TASK_ID = TaskId.fromString("2c7f4081-aa30-11e9-bf6c-2d3b9e84aafd");
-    private static final TaskId TASK_ID_2 = TaskId.fromString("2c7f4081-aa30-11e9-bf6c-2d3b9e84aafe");
+    TaskId TASK_ID = TaskId.fromString("2c7f4081-aa30-11e9-bf6c-2d3b9e84aafd");
+    TaskId TASK_ID_2 = TaskId.fromString("2c7f4081-aa30-11e9-bf6c-2d3b9e84aafe");
 
-    private static TaskExecutionDetails TASK_EXECUTION_DETAILS =  new TaskExecutionDetails(TASK_ID, "type", Optional.empty(),
-            TaskManager.Status.COMPLETED, Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty());
-    private static TaskExecutionDetails TASK_EXECUTION_DETAILS_2 =  new TaskExecutionDetails(TASK_ID_2, "type", Optional.empty(),
-            TaskManager.Status.COMPLETED, Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty());
-    private static TaskExecutionDetails TASK_EXECUTION_DETAILS_UPDATED =  new TaskExecutionDetails(TASK_ID, "type", Optional.empty(),
-            TaskManager.Status.FAILED, Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty());
+    Optional<TaskExecutionDetails.AdditionalInformation> ADDITIONAL_INFORMATION = Optional.empty();
+    Optional<ZonedDateTime> SUBMIT_DATE = Optional.empty();
+    Optional<ZonedDateTime> STARTED_DATE = Optional.empty();
+    Optional<ZonedDateTime> COMPLETED_DATE = Optional.empty();
+    Optional<ZonedDateTime> CANCELLED_DATE = Optional.empty();
+    Optional<ZonedDateTime> FAILED_DATE = Optional.empty();
 
-    @RegisterExtension
-    static CassandraClusterExtension cassandraCluster = new CassandraClusterExtension(
-            CassandraModule.aggregateModules(CassandraSchemaVersionModule.MODULE, CassandraZonedDateTimeModule.MODULE, CassandraTaskExecutionDetailsProjectionModule.MODULE()));
+    TaskExecutionDetails TASK_EXECUTION_DETAILS =  new TaskExecutionDetails(TASK_ID, "type", ADDITIONAL_INFORMATION,
+        TaskManager.Status.COMPLETED, SUBMIT_DATE, STARTED_DATE, COMPLETED_DATE, CANCELLED_DATE, FAILED_DATE);
+    TaskExecutionDetails TASK_EXECUTION_DETAILS_2 =  new TaskExecutionDetails(TASK_ID_2, "type", ADDITIONAL_INFORMATION,
+        TaskManager.Status.COMPLETED, STARTED_DATE, STARTED_DATE, COMPLETED_DATE, CANCELLED_DATE, FAILED_DATE);
+    TaskExecutionDetails TASK_EXECUTION_DETAILS_UPDATED =  new TaskExecutionDetails(TASK_ID, "type", ADDITIONAL_INFORMATION,
+        TaskManager.Status.FAILED, STARTED_DATE, STARTED_DATE, COMPLETED_DATE, CANCELLED_DATE, FAILED_DATE);
 
-    private CassandraTaskExecutionDetailsProjection testee;
-
-    @BeforeEach
-    void setUp(CassandraCluster cassandra) {
-        CassandraTaskExecutionDetailsProjectionDAO cassandraTaskExecutionDetailsProjectionDAO = new CassandraTaskExecutionDetailsProjectionDAO(cassandra.getConf(), cassandra.getTypesProvider());
-        testee = new CassandraTaskExecutionDetailsProjection(cassandraTaskExecutionDetailsProjectionDAO);
-    }
+    TaskExecutionDetailsProjection testee();
 
     @Test
-    void loadShouldBeAbleToRetrieveASavedRecord() {
+    default void loadShouldBeAbleToRetrieveASavedRecord() {
+        TaskExecutionDetailsProjection testee = testee();
         testee.update(TASK_EXECUTION_DETAILS);
 
         Optional<TaskExecutionDetails> taskExecutionDetails = OptionConverters.toJava(testee.load(TASK_ID));
@@ -73,7 +64,8 @@ class CassandraTaskExecutionDetailsProjectionTest {
     }
 
     @Test
-    void updateShouldUpdateRecords() {
+    default void updateShouldUpdateRecords() {
+        TaskExecutionDetailsProjection testee = testee();
         testee.update(TASK_EXECUTION_DETAILS);
 
         testee.update(TASK_EXECUTION_DETAILS_UPDATED);
@@ -83,32 +75,36 @@ class CassandraTaskExecutionDetailsProjectionTest {
     }
 
     @Test
-    void loadShouldReturnEmptyWhenNone() {
+    default void loadShouldReturnEmptyWhenNone() {
+        TaskExecutionDetailsProjection testee = testee();
         Optional<TaskExecutionDetails> taskExecutionDetails = OptionConverters.toJava(testee.load(TASK_ID));
         assertThat(taskExecutionDetails).isEmpty();
     }
 
     @Test
-    void listShouldReturnEmptyWhenNone() {
-        List<TaskExecutionDetails> taskExecutionDetails = JavaConverters.asJava(testee.list());
+    default void listShouldReturnEmptyWhenNone() {
+        TaskExecutionDetailsProjection testee = testee();
+        List<TaskExecutionDetails> taskExecutionDetails = JavaConverters.seqAsJavaList(testee.list());
         assertThat(taskExecutionDetails).isEmpty();
     }
 
     @Test
-    void listShouldReturnAllRecords() {
+    default void listShouldReturnAllRecords() {
+        TaskExecutionDetailsProjection testee = testee();
         testee.update(TASK_EXECUTION_DETAILS);
         testee.update(TASK_EXECUTION_DETAILS_2);
 
-        List<TaskExecutionDetails> taskExecutionDetails = JavaConverters.asJava(testee.list());
+        List<TaskExecutionDetails> taskExecutionDetails = JavaConverters.seqAsJavaList(testee.list());
         assertThat(taskExecutionDetails).containsOnly(TASK_EXECUTION_DETAILS, TASK_EXECUTION_DETAILS_2);
     }
 
     @Test
-    void listDetailsShouldReturnLastUpdatedRecords() {
+    default void listDetailsShouldReturnLastUpdatedRecords() {
+        TaskExecutionDetailsProjection testee = testee();
         testee.update(TASK_EXECUTION_DETAILS);
         testee.update(TASK_EXECUTION_DETAILS_UPDATED);
 
-        List<TaskExecutionDetails> taskExecutionDetails = JavaConverters.asJava(testee.list());
+        List<TaskExecutionDetails> taskExecutionDetails = JavaConverters.seqAsJavaList(testee.list());
         assertThat(taskExecutionDetails).containsOnly(TASK_EXECUTION_DETAILS_UPDATED);
     }
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org