TSK-1168: made interfaces clonable with a new "copy()" method, added tests

This commit is contained in:
Christopher Heiting 2020-03-26 15:33:15 +01:00 committed by Mustapha Zorgati
parent 9013eaa573
commit 7d7a9e123e
29 changed files with 449 additions and 148 deletions

View File

@ -36,6 +36,27 @@ public interface Classification extends ClassificationSummary {
*/
String getDomain();
/**
* Get the logical name of the associated application entry point.
*
* @return applicationEntryPoint
*/
String getApplicationEntryPoint();
/**
* Set the logical name of the associated application entry point.
*
* @param applicationEntryPoint The application entry point
*/
void setApplicationEntryPoint(String applicationEntryPoint);
/**
* Duplicates this Classification.
*
* @return a copy of this Classification
*/
Classification copy();
/**
* Get a flag if the classification if currently valid in the used domain.
*
@ -101,20 +122,6 @@ public interface Classification extends ClassificationSummary {
*/
void setServiceLevel(String serviceLevel);
/**
* Get the logical name of the associated application entry point.
*
* @return applicationEntryPoint
*/
String getApplicationEntryPoint();
/**
* Set the logical name of the associated application entry point.
*
* @param applicationEntryPoint The application entry point
*/
void setApplicationEntryPoint(String applicationEntryPoint);
/**
* Set/Change the 1. custom-attribute.
*
@ -177,11 +184,4 @@ public interface Classification extends ClassificationSummary {
* @return the ClassificationSummary object for the current classification
*/
ClassificationSummary asSummary();
/**
* Duplicates this Classification
*
* @return a copy of this Classification
*/
Classification clone();
}

View File

@ -4,7 +4,7 @@ package pro.taskana.classification.api.models;
* Interface for ClassificationSummaries. This is a specific short model-object which only requieres
* the most important informations. Specific ones can be load afterwards via ID.
*/
public interface ClassificationSummary extends Cloneable {
public interface ClassificationSummary {
/**
* Gets the id of the classification.
@ -141,9 +141,9 @@ public interface ClassificationSummary extends Cloneable {
String getCustom8();
/**
* Duplicates this ClassificationSummary
* Duplicates this ClassificationSummary.
*
* @return a copy of this ClassificationSummary
*/
ClassificationSummary clone();
ClassificationSummary copy();
}

View File

@ -335,7 +335,7 @@ public class ClassificationServiceImpl implements ClassificationService {
private void addClassificationToMasterDomain(ClassificationImpl classificationImpl) {
if (!Objects.equals(classificationImpl.getDomain(), "")) {
boolean doesExist = true;
ClassificationImpl masterClassification = new ClassificationImpl(classificationImpl);
ClassificationImpl masterClassification = classificationImpl.copy();
masterClassification.setId(IdGenerator.generateWithPrefix(ID_PREFIX_CLASSIFICATION));
masterClassification.setParentKey(classificationImpl.getParentKey());
masterClassification.setDomain("");

View File

@ -62,16 +62,6 @@ public class ClassificationImpl extends ClassificationSummaryImpl implements Cla
this.description = description;
}
@Override
public String getApplicationEntryPoint() {
return applicationEntryPoint;
}
@Override
public void setApplicationEntryPoint(String applicationEntryPoint) {
this.applicationEntryPoint = applicationEntryPoint;
}
@Override
public ClassificationSummary asSummary() {
ClassificationSummaryImpl summary = new ClassificationSummaryImpl();
@ -97,15 +87,25 @@ public class ClassificationImpl extends ClassificationSummaryImpl implements Cla
return summary;
}
protected boolean canEqual(Object other) {
return (other instanceof ClassificationImpl);
@Override
public String getApplicationEntryPoint() {
return applicationEntryPoint;
}
@Override
public ClassificationImpl clone() {
public void setApplicationEntryPoint(String applicationEntryPoint) {
this.applicationEntryPoint = applicationEntryPoint;
}
@Override
public ClassificationImpl copy() {
return new ClassificationImpl(this);
}
protected boolean canEqual(Object other) {
return (other instanceof ClassificationImpl);
}
@Override
public int hashCode() {
return Objects.hash(super.hashCode(), isValidInDomain, created, modified, description);

View File

@ -222,13 +222,13 @@ public class ClassificationSummaryImpl implements ClassificationSummary {
this.custom8 = custom8;
}
protected boolean canEqual(Object other) {
return (other instanceof ClassificationSummaryImpl);
@Override
public ClassificationSummaryImpl copy() {
return new ClassificationSummaryImpl(this);
}
@Override
public ClassificationSummaryImpl clone() {
return new ClassificationSummaryImpl(this);
protected boolean canEqual(Object other) {
return (other instanceof ClassificationSummaryImpl);
}
@Override

View File

@ -59,9 +59,9 @@ public interface Attachment extends AttachmentSummary {
AttachmentSummary asSummary();
/**
* Duplicates this Attachment
* Duplicates this Attachment.
*
* @return a copy of this Attachment
*/
Attachment clone();
Attachment copy();
}

View File

@ -8,7 +8,7 @@ import pro.taskana.classification.api.models.ClassificationSummary;
* Interface for AttachmentSummaries. This is a specific short model-object which only contains the
* most important information.
*/
public interface AttachmentSummary extends Cloneable {
public interface AttachmentSummary {
/**
* Gets the id of the attachment.
@ -67,9 +67,9 @@ public interface AttachmentSummary extends Cloneable {
Instant getReceived();
/**
* Duplicates this AttachmentSummary
* Duplicates this AttachmentSummary.
*
* @return a copy of this AttachmentSummary
*/
AttachmentSummary clone();
AttachmentSummary copy();
}

View File

@ -7,7 +7,7 @@ import org.slf4j.LoggerFactory;
import pro.taskana.common.api.exceptions.InvalidArgumentException;
/** ObjectReference entity. */
public class ObjectReference implements Cloneable {
public class ObjectReference {
private static final Logger LOGGER = LoggerFactory.getLogger(ObjectReference.class);
private String id;
private String company;
@ -102,8 +102,7 @@ public class ObjectReference implements Cloneable {
this.value = value;
}
@Override
protected ObjectReference clone() {
protected ObjectReference copy() {
return new ObjectReference(this);
}

View File

@ -189,9 +189,9 @@ public interface Task extends TaskSummary {
String getClassificationCategory();
/**
* Duplicates this Task
* Duplicates this Task.
*
* @return a copy of this Task
*/
Task clone();
Task copy();
}

View File

@ -3,7 +3,7 @@ package pro.taskana.task.api.models;
import java.time.Instant;
/** TaskComment-Interface to specify TaskComment Attributes. */
public interface TaskComment extends Cloneable {
public interface TaskComment {
/**
* Gets the id of the task comment.
@ -33,8 +33,11 @@ public interface TaskComment extends Cloneable {
*/
String getTextField();
/** Sets the text field of the task comment. */
/**
* Sets the text field of the task comment.
*
* @param textField the text field
*/
void setTextField(String textField);
/**
@ -52,9 +55,9 @@ public interface TaskComment extends Cloneable {
Instant getModified();
/**
* Duplicates this TaskComment
* Duplicates this TaskComment.
*
* @return a copy of this TaskComment
*/
TaskComment clone();
TaskComment copy();
}

View File

@ -12,7 +12,7 @@ import pro.taskana.workbasket.api.models.WorkbasketSummary;
* Interface for TaskSummary. This is a specific short model-object which only contains the most
* important information.
*/
public interface TaskSummary extends Cloneable {
public interface TaskSummary {
/**
* Gets the id of the task.
@ -194,9 +194,9 @@ public interface TaskSummary extends Cloneable {
String getCustomAttribute(String num) throws InvalidArgumentException;
/**
* Duplicates this TaskSummary
* Duplicates this TaskSummary.
*
* @return a copy of this TaskSummary
*/
TaskSummary clone();
TaskSummary copy();
}

View File

@ -50,13 +50,13 @@ public class AttachmentImpl extends AttachmentSummaryImpl implements Attachment
return summary;
}
protected boolean canEqual(Object other) {
return (!(other instanceof AttachmentImpl));
@Override
public AttachmentImpl copy() {
return new AttachmentImpl(this);
}
@Override
public AttachmentImpl clone() {
return new AttachmentImpl(this);
protected boolean canEqual(Object other) {
return (!(other instanceof AttachmentImpl));
}
@Override

View File

@ -137,6 +137,11 @@ public class AttachmentSummaryImpl implements AttachmentSummary {
this.received = received;
}
@Override
public AttachmentSummaryImpl copy() {
return new AttachmentSummaryImpl(this);
}
// auxiliary method to enable MyBatis access to classificationSummary
@SuppressWarnings("unused")
public ClassificationSummaryImpl getClassificationSummaryImpl() {
@ -153,11 +158,6 @@ public class AttachmentSummaryImpl implements AttachmentSummary {
return (!(other instanceof AttachmentSummaryImpl));
}
@Override
public AttachmentSummaryImpl clone() {
return new AttachmentSummaryImpl(this);
}
@Override
public int hashCode() {
return Objects.hash(

View File

@ -16,7 +16,7 @@ public class TaskCommentImpl implements TaskComment {
public TaskCommentImpl() {}
private TaskCommentImpl(TaskCommentImpl copyFrom) {
public TaskCommentImpl(TaskCommentImpl copyFrom) {
id = copyFrom.id;
taskId = copyFrom.taskId;
textField = copyFrom.textField;
@ -78,13 +78,13 @@ public class TaskCommentImpl implements TaskComment {
this.modified = modified;
}
protected boolean canEqual(Object other) {
return (other instanceof TaskCommentImpl);
@Override
public TaskCommentImpl copy() {
return new TaskCommentImpl(this);
}
@Override
public TaskCommentImpl clone() {
return new TaskCommentImpl(this);
protected boolean canEqual(Object other) {
return (other instanceof TaskCommentImpl);
}
@Override

View File

@ -262,6 +262,11 @@ public class TaskImpl extends TaskSummaryImpl implements Task {
((ClassificationSummaryImpl) this.classificationSummary).setCategory(classificationCategory);
}
@Override
public TaskImpl copy() {
return new TaskImpl(this);
}
public String getClassificationId() {
return classificationSummary == null ? null : classificationSummary.getId();
}
@ -270,11 +275,6 @@ public class TaskImpl extends TaskSummaryImpl implements Task {
return (other instanceof TaskImpl);
}
@Override
public TaskImpl clone() {
return new TaskImpl(this);
}
@Override
public int hashCode() {
return Objects.hash(

View File

@ -472,6 +472,11 @@ public class TaskSummaryImpl implements TaskSummary {
}
}
@Override
public TaskSummaryImpl copy() {
return new TaskSummaryImpl(this);
}
// utility method to allow mybatis access to workbasketSummary
public WorkbasketSummaryImpl getWorkbasketSummaryImpl() {
return (WorkbasketSummaryImpl) workbasketSummary;
@ -647,11 +652,6 @@ public class TaskSummaryImpl implements TaskSummary {
return (other instanceof TaskSummaryImpl);
}
@Override
public TaskSummaryImpl clone() {
return new TaskSummaryImpl(this);
}
@Override
public int hashCode() {
return Objects.hash(

View File

@ -99,6 +99,13 @@ public interface Workbasket extends WorkbasketSummary {
*/
void setMarkedForDeletion(boolean markedForDeletion);
/**
* Duplicates this Workbasket.
*
* @return a copy of this Workbasket
*/
Workbasket copy();
/**
* Sets the owner-ID of the workbasket.
*
@ -126,11 +133,4 @@ public interface Workbasket extends WorkbasketSummary {
* @return the WorkbasketSummary object for the current work basket
*/
WorkbasketSummary asSummary();
/**
* Duplicates this Workbasket
*
* @return a copy of this Workbasket
*/
Workbasket clone();
}

View File

@ -6,7 +6,7 @@ package pro.taskana.workbasket.api.models;
*
* @author bbr
*/
public interface WorkbasketAccessItem extends Cloneable {
public interface WorkbasketAccessItem {
/**
* Returns the current id of the WorkbasketAccessItem.
@ -317,9 +317,9 @@ public interface WorkbasketAccessItem extends Cloneable {
void setPermCustom12(boolean permCustom12);
/**
* Duplicates this WorkbasketAccessItem
* Duplicates this WorkbasketAccessItem.
*
* @return a copy of this WorkbasketAccessItem
*/
WorkbasketAccessItem clone();
WorkbasketAccessItem copy();
}

View File

@ -6,7 +6,7 @@ import pro.taskana.workbasket.api.WorkbasketType;
* Interface for WorkbasketSummary. This is a specific short model-object which only contains the
* most important information.
*/
public interface WorkbasketSummary extends Cloneable {
public interface WorkbasketSummary {
/**
* Gets the id of the workbasket.
@ -121,9 +121,9 @@ public interface WorkbasketSummary extends Cloneable {
boolean isMarkedForDeletion();
/**
* Duplicates this WorkbasketSummary
* Duplicates this WorkbasketSummary.
*
* @return a copy of this WorkbasketSummary
*/
WorkbasketSummary clone();
WorkbasketSummary copy();
}

View File

@ -430,7 +430,7 @@ public class WorkbasketAccessItemImpl implements WorkbasketAccessItem {
}
@Override
public WorkbasketAccessItemImpl clone() {
public WorkbasketAccessItemImpl copy() {
return new WorkbasketAccessItemImpl(this);
}

View File

@ -60,6 +60,11 @@ public class WorkbasketImpl extends WorkbasketSummaryImpl implements Workbasket
return result;
}
@Override
public WorkbasketImpl copy() {
return new WorkbasketImpl(this);
}
protected boolean canEqual(Object other) {
return (other instanceof WorkbasketImpl);
}
@ -105,11 +110,6 @@ public class WorkbasketImpl extends WorkbasketSummaryImpl implements Workbasket
return Objects.equals(created, other.created) && Objects.equals(modified, other.modified);
}
@Override
public WorkbasketImpl clone() {
return new WorkbasketImpl(this);
}
@Override
public String toString() {
return "WorkbasketImpl [id="

View File

@ -250,6 +250,11 @@ public class WorkbasketSummaryImpl implements WorkbasketSummary {
this.markedForDeletion = markedForDeletion;
}
@Override
public WorkbasketSummaryImpl copy() {
return new WorkbasketSummaryImpl(this);
}
protected boolean canEqual(Object other) {
return (other instanceof WorkbasketSummaryImpl);
}
@ -305,11 +310,6 @@ public class WorkbasketSummaryImpl implements WorkbasketSummary {
&& Objects.equals(orgLevel4, other.orgLevel4);
}
@Override
public WorkbasketSummaryImpl clone() {
return new WorkbasketSummaryImpl(this);
}
@Override
public String toString() {
return "WorkbasketSummaryImpl [id="

View File

@ -0,0 +1,62 @@
package pro.taskana.classification.api.models;
import static org.assertj.core.api.Assertions.assertThat;
import org.junit.jupiter.api.Test;
import pro.taskana.classification.internal.models.ClassificationImpl;
class ClassificationModelsCloneTest {
@Test
void testCloneInClassificationSummary() {
Classification dummyClassificationForSummaryTest = new ClassificationImpl();
dummyClassificationForSummaryTest.setApplicationEntryPoint("dummyEntryPoint");
dummyClassificationForSummaryTest.setCategory("dummyCategory");
dummyClassificationForSummaryTest.setCustom1("dummyCustom1");
dummyClassificationForSummaryTest.setCustom2("dummyCustom2");
dummyClassificationForSummaryTest.setCustom3("dummyCustom3");
dummyClassificationForSummaryTest.setCustom4("dummyCustom4");
dummyClassificationForSummaryTest.setCustom5("dummyCustom5");
dummyClassificationForSummaryTest.setCustom6("dummyCustom6");
dummyClassificationForSummaryTest.setCustom7("dummyCustom7");
dummyClassificationForSummaryTest.setCustom8("dummyCustom8");
dummyClassificationForSummaryTest.setDescription("dummyDescription");
dummyClassificationForSummaryTest.setIsValidInDomain(true);
dummyClassificationForSummaryTest.setParentId("dummyParentId");
dummyClassificationForSummaryTest.setServiceLevel("dummyServiceLevel");
dummyClassificationForSummaryTest.setPriority(1);
dummyClassificationForSummaryTest.setName("dummyName");
dummyClassificationForSummaryTest.setParentKey("dummyParentKey");
ClassificationSummary dummyClassificationSummary =
dummyClassificationForSummaryTest.asSummary();
ClassificationSummary dummyClassificationSummaryCloned = dummyClassificationSummary.copy();
assertThat(dummyClassificationSummaryCloned).isEqualTo(dummyClassificationSummary);
assertThat(dummyClassificationSummaryCloned).isNotSameAs(dummyClassificationSummary);
}
@Test
void testCloneInClassification() {
Classification dummyClassification = new ClassificationImpl();
dummyClassification.setApplicationEntryPoint("dummyEntryPoint");
dummyClassification.setCategory("dummyCategory");
dummyClassification.setCustom1("dummyCustom1");
dummyClassification.setCustom2("dummyCustom2");
dummyClassification.setCustom3("dummyCustom3");
dummyClassification.setCustom4("dummyCustom4");
dummyClassification.setCustom5("dummyCustom5");
dummyClassification.setCustom6("dummyCustom6");
dummyClassification.setCustom7("dummyCustom7");
dummyClassification.setCustom8("dummyCustom8");
dummyClassification.setDescription("dummyDescription");
dummyClassification.setIsValidInDomain(true);
dummyClassification.setParentId("dummyParentId");
dummyClassification.setServiceLevel("dummyServiceLevel");
dummyClassification.setPriority(1);
dummyClassification.setName("dummyName");
dummyClassification.setParentKey("dummyParentKey");
Classification dummyClassificationCloned = dummyClassification.copy();
assertThat(dummyClassificationCloned).isEqualTo(dummyClassification);
assertThat(dummyClassificationCloned).isNotSameAs(dummyClassification);
}
}

View File

@ -0,0 +1,112 @@
package pro.taskana.task.api.models;
import static org.assertj.core.api.Assertions.assertThat;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import org.junit.jupiter.api.Test;
import pro.taskana.task.internal.CreateTaskModelHelper;
import pro.taskana.task.internal.models.TaskCommentImpl;
import pro.taskana.task.internal.models.TaskSummaryImpl;
class TaskModelsCloneTest {
@Test
void testCloneInTaskSummary() {
TaskSummaryImpl dummyTaskSummary = new TaskSummaryImpl();
Attachment dummyAttachmentForSummaryTestPreClone =
CreateTaskModelHelper.createAttachment("uniqueIdForDeepTest", "uniqueTaskIdForDeepTest");
AttachmentSummary dummyAttachmentSummary = dummyAttachmentForSummaryTestPreClone.asSummary();
ArrayList<AttachmentSummary> attachmentSummaries = new ArrayList<>();
attachmentSummaries.add(dummyAttachmentSummary);
dummyTaskSummary.setAttachmentSummaries(attachmentSummaries);
TaskSummary dummyTaskSummaryCloned = dummyTaskSummary.copy();
assertThat(dummyTaskSummaryCloned).isEqualTo(dummyTaskSummary);
assertThat(dummyTaskSummaryCloned).isNotSameAs(dummyTaskSummary);
Attachment dummyAttachmentForSummaryTestPostClone =
CreateTaskModelHelper.createAttachment(
"differentIdForDeepTest", "differentTaskIdForDeepTest");
AttachmentSummary dummyAttachmentSummary2 = dummyAttachmentForSummaryTestPostClone.asSummary();
attachmentSummaries.add(dummyAttachmentSummary2);
assertThat(dummyTaskSummaryCloned).isNotEqualTo(dummyTaskSummary);
}
@Test
void testCloneInTask() {
Task dummyTask =
CreateTaskModelHelper.createUnitTestTask(
"dummyTaskId",
"dummyTaskName",
"workbasketKey",
CreateTaskModelHelper.createDummyClassification());
Map<String, String> dummyCustomAttributesPreClone = new HashMap<>();
dummyCustomAttributesPreClone.put("dummyAttributeKey", "dummyAttributeValue");
dummyTask.setCustomAttributes(dummyCustomAttributesPreClone);
Map<String, String> dummyCallbackInfoPreClone = new HashMap<>();
dummyCallbackInfoPreClone.put("dummyCallbackKey", "dummyCallbackValue");
dummyTask.setCallbackInfo(dummyCallbackInfoPreClone);
Task dummyTaskCloned = dummyTask.copy();
assertThat(dummyTaskCloned).isEqualTo(dummyTask);
assertThat(dummyTaskCloned).isNotSameAs(dummyTask);
dummyCustomAttributesPreClone.put("deepTestAttributeKey", "deepTestAttributeValue");
dummyCallbackInfoPreClone.put("deepTestCallbackKey", "deepTestCallbackValue");
assertThat(dummyTaskCloned).isNotEqualTo(dummyTask);
}
@Test
void testCloneInTaskComment() {
TaskCommentImpl dummyComment = new TaskCommentImpl();
dummyComment.setTextField("dummyTextField");
TaskComment dummyCommentCloned = dummyComment.copy();
assertThat(dummyCommentCloned).isEqualTo(dummyComment);
assertThat(dummyCommentCloned).isNotSameAs(dummyComment);
}
@Test
void testCloneInObjectReference() {
ObjectReference dummyReference = new ObjectReference();
dummyReference.setId("dummyId");
dummyReference.setSystem("dummySystem");
dummyReference.setCompany("dummyCompany");
dummyReference.setSystemInstance("dummySystemInstance");
dummyReference.setType("dummyType");
dummyReference.setValue("dummyValue");
ObjectReference dummyReferenceCloned = dummyReference.copy();
assertThat(dummyReferenceCloned).isEqualTo(dummyReference);
assertThat(dummyReferenceCloned).isNotSameAs(dummyReference);
}
@Test
void testCloneInAttachmentSummary() {
Attachment dummyAttachmentForSummaryTest =
CreateTaskModelHelper.createAttachment("dummyAttachmentId", "dummyTaskId");
AttachmentSummary dummyAttachmentSummary = dummyAttachmentForSummaryTest.asSummary();
AttachmentSummary dummyAttachmentSummaryCloned = dummyAttachmentSummary.copy();
assertThat(dummyAttachmentSummaryCloned).isEqualTo(dummyAttachmentSummary);
assertThat(dummyAttachmentSummaryCloned).isNotSameAs(dummyAttachmentSummary);
}
@Test
void testCloneInAttachment() {
Attachment dummyAttachment =
CreateTaskModelHelper.createAttachment("dummyAttachmentId", "dummyTaskId");
Map<String, String> dummyMapPreClone = new HashMap<>();
dummyMapPreClone.put("dummyString1", "dummyString2");
dummyAttachment.setCustomAttributes(dummyMapPreClone);
Attachment dummyAttachmentCloned = dummyAttachment.copy();
assertThat(dummyAttachmentCloned).isEqualTo(dummyAttachment);
assertThat(dummyAttachmentCloned).isNotSameAs(dummyAttachment);
dummyMapPreClone.put("deepTestString1", "deepTestString2");
assertThat(dummyAttachment).isNotEqualTo(dummyAttachmentCloned);
}
}

View File

@ -0,0 +1,61 @@
package pro.taskana.task.internal;
import java.time.Duration;
import java.time.Instant;
import java.util.ArrayList;
import pro.taskana.classification.api.models.Classification;
import pro.taskana.classification.internal.models.ClassificationImpl;
import pro.taskana.task.api.models.Attachment;
import pro.taskana.task.internal.models.AttachmentImpl;
import pro.taskana.task.internal.models.TaskImpl;
import pro.taskana.workbasket.internal.models.WorkbasketImpl;
public class CreateTaskModelHelper {
public static TaskImpl createUnitTestTask(
String id, String name, String workbasketKey, Classification classification) {
TaskImpl task = new TaskImpl();
task.setId(id);
task.setExternalId(id);
task.setName(name);
task.setWorkbasketKey(workbasketKey);
task.setDomain("");
task.setAttachments(new ArrayList<>());
Instant now = Instant.now().minus(Duration.ofMinutes(1L));
task.setCreated(now);
task.setModified(now);
if (classification == null) {
classification = createDummyClassification();
}
task.setClassificationSummary(classification.asSummary());
task.setClassificationKey(classification.getKey());
task.setDomain(classification.getDomain());
return task;
}
public static Classification createDummyClassification() {
ClassificationImpl classification = new ClassificationImpl();
classification.setName("dummy-classification");
classification.setDomain("dummy-domain");
classification.setKey("dummy-classification-key");
classification.setId("DummyClassificationId");
return classification;
}
public static WorkbasketImpl createWorkbasket(String id, String key) {
WorkbasketImpl workbasket = new WorkbasketImpl();
workbasket.setId(id);
workbasket.setDomain("Domain1");
workbasket.setKey(key);
workbasket.setName("Workbasket " + id);
return workbasket;
}
public static Attachment createAttachment(String id, String taskId) {
AttachmentImpl attachment = new AttachmentImpl();
attachment.setId(id);
attachment.setTaskId(taskId);
return attachment;
}
}

View File

@ -9,15 +9,11 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
import org.mockito.junit.jupiter.MockitoExtension;
import pro.taskana.classification.internal.models.ClassificationImpl;
import pro.taskana.task.api.models.Attachment;
import pro.taskana.task.api.models.AttachmentSummary;
import pro.taskana.task.api.models.ObjectReference;
import pro.taskana.task.internal.models.AttachmentImpl;
import pro.taskana.task.internal.models.TaskImpl;
/**
@ -25,16 +21,15 @@ import pro.taskana.task.internal.models.TaskImpl;
* This test should test every interaction with Attachments, which means adding, removing, nulling
* them.
*/
@ExtendWith(MockitoExtension.class)
class TaskAttachmentTest {
@InjectMocks private TaskImpl cut;
private TaskImpl cut = new TaskImpl();
@Test
void testAddAttachmentWithValidValue() {
Attachment attachment1 = createAttachment("ID1", "taskId1");
Attachment attachment2 = createAttachment("ID2", "taskId1");
Attachment attachment3 = createAttachment("ID3", "taskId1");
Attachment attachment1 = CreateTaskModelHelper.createAttachment("ID1", "taskId1");
Attachment attachment2 = CreateTaskModelHelper.createAttachment("ID2", "taskId1");
Attachment attachment3 = CreateTaskModelHelper.createAttachment("ID3", "taskId1");
cut.addAttachment(attachment1);
cut.addAttachment(attachment2);
@ -45,7 +40,7 @@ class TaskAttachmentTest {
@Test
void testAddNullValue() {
Attachment attachment1 = createAttachment("ID1", "taskId1");
Attachment attachment1 = CreateTaskModelHelper.createAttachment("ID1", "taskId1");
cut.addAttachment(attachment1);
cut.addAttachment(null);
@ -56,8 +51,8 @@ class TaskAttachmentTest {
@Test
void testAddSameTwice() {
// Same values, not same REF. Important.
Attachment attachment1 = createAttachment("ID1", "taskId1");
Attachment attachment2 = createAttachment("ID1", "taskId1");
Attachment attachment1 = CreateTaskModelHelper.createAttachment("ID1", "taskId1");
Attachment attachment2 = CreateTaskModelHelper.createAttachment("ID1", "taskId1");
cut.addAttachment(attachment1);
cut.addAttachment(attachment2);
@ -75,8 +70,8 @@ class TaskAttachmentTest {
@Test
void testRemoveAttachment() {
// Testing normal way
Attachment attachment1 = createAttachment("ID1", "taskId1");
Attachment attachment2 = createAttachment("ID2", "taskId1");
Attachment attachment1 = CreateTaskModelHelper.createAttachment("ID1", "taskId1");
Attachment attachment2 = CreateTaskModelHelper.createAttachment("ID2", "taskId1");
cut.addAttachment(attachment1);
cut.addAttachment(attachment2);
@ -88,7 +83,7 @@ class TaskAttachmentTest {
@Test
void testRemoveLoopStopsAtResult() {
Attachment attachment1 = createAttachment("ID2", "taskId1");
Attachment attachment1 = CreateTaskModelHelper.createAttachment("ID2", "taskId1");
// adding same uncommon way to test that the loop will stop.
cut.getAttachments().add(attachment1);
cut.getAttachments().add(attachment1);
@ -110,7 +105,7 @@ class TaskAttachmentTest {
Map<String, String> customAttr = new HashMap<>();
customAttr.put("key", "value");
Attachment attachment1 = createAttachment("ID1", "taskId1");
Attachment attachment1 = CreateTaskModelHelper.createAttachment("ID1", "taskId1");
attachment1.setChannel("channel");
attachment1.setClassificationSummary(new ClassificationImpl().asSummary());
attachment1.setReceived(Instant.now());
@ -143,11 +138,4 @@ class TaskAttachmentTest {
summaries = cut.asSummary().getAttachmentSummaries();
assertThat(summaries.size(), equalTo(0));
}
private Attachment createAttachment(String id, String taskId) {
AttachmentImpl attachment = new AttachmentImpl();
attachment.setId(id);
attachment.setTaskId(taskId);
return attachment;
}
}

View File

@ -3,20 +3,15 @@ package pro.taskana.task.internal;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotEquals;
import java.time.Duration;
import java.time.Instant;
import java.util.ArrayList;
import org.junit.jupiter.api.Test;
import pro.taskana.classification.api.models.Classification;
import pro.taskana.classification.internal.models.ClassificationImpl;
import pro.taskana.common.internal.JunitHelper;
import pro.taskana.task.api.TaskState;
import pro.taskana.task.api.models.ObjectReference;
import pro.taskana.task.api.models.TaskSummary;
import pro.taskana.task.internal.models.TaskImpl;
import pro.taskana.workbasket.api.models.Workbasket;
import pro.taskana.workbasket.internal.models.WorkbasketImpl;
/**
* Unit Test for TaskServiceImpl.
@ -27,13 +22,15 @@ class TaskServiceImplTest {
@Test
void testTaskSummaryEqualsHashCode() throws InterruptedException {
Classification classification = createDummyClassification();
Workbasket wb = createWorkbasket("WB-ID", "WB-Key");
Classification classification = CreateTaskModelHelper.createDummyClassification();
Workbasket wb = CreateTaskModelHelper.createWorkbasket("WB-ID", "WB-Key");
ObjectReference objectReference = JunitHelper.createDefaultObjRef();
TaskImpl taskBefore = createUnitTestTask("ID", "taskName", wb.getKey(), classification);
TaskImpl taskBefore =
CreateTaskModelHelper.createUnitTestTask("ID", "taskName", wb.getKey(), classification);
taskBefore.setPrimaryObjRef(objectReference);
Thread.sleep(10);
TaskImpl taskAfter = createUnitTestTask("ID", "taskName", wb.getKey(), classification);
TaskImpl taskAfter =
CreateTaskModelHelper.createUnitTestTask("ID", "taskName", wb.getKey(), classification);
taskAfter.setPrimaryObjRef(objectReference);
TaskSummary summaryBefore = taskBefore.asSummary();
TaskSummary summaryAfter = taskAfter.asSummary();
@ -57,7 +54,7 @@ class TaskServiceImplTest {
assertEquals(summaryBefore, summaryAfter);
assertEquals(summaryBefore.hashCode(), summaryAfter.hashCode());
}
static TaskImpl createUnitTestTask(
String id, String name, String workbasketKey, Classification classification) {
TaskImpl task = new TaskImpl();
@ -97,4 +94,5 @@ class TaskServiceImplTest {
workbasket.setName("Workbasket " + id);
return workbasket;
}
}

View File

@ -74,12 +74,12 @@ class TaskTransferrerTest {
cut = new TaskTransferrer(internalTaskanaEngineMock, taskMapperMock, taskServiceImplMock);
final TaskTransferrer cutSpy = Mockito.spy(cut);
Workbasket destinationWorkbasket = TaskServiceImplTest.createWorkbasket("2", "k1");
Workbasket sourceWorkbasket = TaskServiceImplTest.createWorkbasket("47", "key47");
Classification dummyClassification = TaskServiceImplTest.createDummyClassification();
Workbasket destinationWorkbasket = CreateTaskModelHelper.createWorkbasket("2", "k1");
Workbasket sourceWorkbasket = CreateTaskModelHelper.createWorkbasket("47", "key47");
Classification dummyClassification = CreateTaskModelHelper.createDummyClassification();
TaskImpl task =
TaskServiceImplTest.createUnitTestTask(
"1", "Unit Test Task 1", "key47", dummyClassification);
CreateTaskModelHelper
.createUnitTestTask("1", "Unit Test Task 1", "key47", dummyClassification);
task.setWorkbasketSummary(sourceWorkbasket.asSummary());
task.setRead(true);
when(workbasketServiceMock.getWorkbasket(destinationWorkbasket.getId()))

View File

@ -0,0 +1,78 @@
package pro.taskana.workbasket.api.models;
import static org.assertj.core.api.Assertions.assertThat;
import org.junit.jupiter.api.Test;
import pro.taskana.workbasket.internal.models.WorkbasketAccessItemImpl;
import pro.taskana.workbasket.internal.models.WorkbasketImpl;
class WorkbasketModelsCloneTest {
@Test
void testCloneInWorkbasketSummary() {
Workbasket dummyWorkbasketForSummaryTest = new WorkbasketImpl();
dummyWorkbasketForSummaryTest.setCustom1("dummyCustom1");
dummyWorkbasketForSummaryTest.setCustom2("dummyCustom2");
dummyWorkbasketForSummaryTest.setCustom3("dummyCustom3");
dummyWorkbasketForSummaryTest.setCustom4("dummyCustom4");
dummyWorkbasketForSummaryTest.setDescription("dummyDescription");
dummyWorkbasketForSummaryTest.setMarkedForDeletion(false);
dummyWorkbasketForSummaryTest.setName("dummyName");
dummyWorkbasketForSummaryTest.setOrgLevel1("dummyOrgLevel1");
dummyWorkbasketForSummaryTest.setOrgLevel2("dummyOrgLevel2");
dummyWorkbasketForSummaryTest.setOrgLevel3("dummyOrgLevel3");
dummyWorkbasketForSummaryTest.setOrgLevel4("dummyOrgLevel4");
dummyWorkbasketForSummaryTest.setOwner("dummyOwner");
WorkbasketSummary dummyWorkbasketSummary = dummyWorkbasketForSummaryTest.asSummary();
WorkbasketSummary dummyWorkbasketSummaryCloned = dummyWorkbasketSummary.copy();
assertThat(dummyWorkbasketSummaryCloned).isEqualTo(dummyWorkbasketSummary);
assertThat(dummyWorkbasketSummaryCloned).isNotSameAs(dummyWorkbasketSummary);
}
@Test
void testCloneInWorkbasket() {
Workbasket dummyWorkbasket = new WorkbasketImpl();
dummyWorkbasket.setCustom1("dummyCustom1");
dummyWorkbasket.setCustom2("dummyCustom2");
dummyWorkbasket.setCustom3("dummyCustom3");
dummyWorkbasket.setCustom4("dummyCustom4");
dummyWorkbasket.setDescription("dummyDescription");
dummyWorkbasket.setMarkedForDeletion(false);
dummyWorkbasket.setName("dummyName");
dummyWorkbasket.setOrgLevel1("dummyOrgLevel1");
dummyWorkbasket.setOrgLevel2("dummyOrgLevel2");
dummyWorkbasket.setOrgLevel3("dummyOrgLevel3");
dummyWorkbasket.setOrgLevel4("dummyOrgLevel4");
dummyWorkbasket.setOwner("dummyOwner");
Workbasket dummyWorkbasketCloned = dummyWorkbasket.copy();
assertThat(dummyWorkbasketCloned).isEqualTo(dummyWorkbasket);
assertThat(dummyWorkbasketCloned).isNotSameAs(dummyWorkbasket);
}
@Test
void testCloneInWorkbasketAccessItem() {
WorkbasketAccessItem dummyWorkbasketAccessItem = new WorkbasketAccessItemImpl();
dummyWorkbasketAccessItem.setAccessName("dummyAccessName");
dummyWorkbasketAccessItem.setPermAppend(false);
dummyWorkbasketAccessItem.setPermCustom1(false);
dummyWorkbasketAccessItem.setPermCustom2(false);
dummyWorkbasketAccessItem.setPermCustom3(false);
dummyWorkbasketAccessItem.setPermCustom4(false);
dummyWorkbasketAccessItem.setPermCustom5(false);
dummyWorkbasketAccessItem.setPermCustom6(false);
dummyWorkbasketAccessItem.setPermCustom7(false);
dummyWorkbasketAccessItem.setPermCustom8(false);
dummyWorkbasketAccessItem.setPermCustom9(false);
dummyWorkbasketAccessItem.setPermCustom10(false);
dummyWorkbasketAccessItem.setPermCustom11(false);
dummyWorkbasketAccessItem.setPermCustom12(false);
dummyWorkbasketAccessItem.setPermDistribute(false);
dummyWorkbasketAccessItem.setPermOpen(false);
dummyWorkbasketAccessItem.setPermRead(false);
dummyWorkbasketAccessItem.setPermTransfer(false);
WorkbasketAccessItem dummyWorkbasketAccessItemCloned = dummyWorkbasketAccessItem.copy();
assertThat(dummyWorkbasketAccessItemCloned).isEqualTo(dummyWorkbasketAccessItem);
assertThat(dummyWorkbasketAccessItemCloned).isNotSameAs(dummyWorkbasketAccessItem);
}
}