TSK-1964: refactored builders to reduce code duplication
This commit is contained in:
parent
3c71c08684
commit
2dbdd874d5
|
@ -7,7 +7,6 @@ import static pro.taskana.testapi.DefaultTestEntities.defaultTestClassification;
|
|||
import static pro.taskana.testapi.DefaultTestEntities.defaultTestObjectReference;
|
||||
import static pro.taskana.testapi.DefaultTestEntities.defaultTestWorkbasket;
|
||||
|
||||
import java.security.PrivilegedActionException;
|
||||
import java.time.Instant;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
@ -81,15 +80,14 @@ class TaskQueryImplAccTest {
|
|||
.workbasketSummary(wb);
|
||||
}
|
||||
|
||||
private WorkbasketSummary createWorkbasketWithPermission() throws PrivilegedActionException {
|
||||
private WorkbasketSummary createWorkbasketWithPermission() throws Exception {
|
||||
WorkbasketSummary workbasketSummary =
|
||||
defaultTestWorkbasket().buildAndStoreAsSummary(workbasketService, "businessadmin");
|
||||
persistPermission(workbasketSummary);
|
||||
return workbasketSummary;
|
||||
}
|
||||
|
||||
private void persistPermission(WorkbasketSummary workbasketSummary)
|
||||
throws PrivilegedActionException {
|
||||
private void persistPermission(WorkbasketSummary workbasketSummary) throws Exception {
|
||||
WorkbasketAccessItemBuilder.newWorkbasketAccessItem()
|
||||
.workbasketId(workbasketSummary.getId())
|
||||
.accessId(currentUserContext.getUserid())
|
||||
|
|
|
@ -1,9 +1,16 @@
|
|||
package pro.taskana.testapi;
|
||||
|
||||
import static pro.taskana.testapi.builder.ClassificationBuilder.newClassification;
|
||||
import static pro.taskana.testapi.builder.ObjectReferenceBuilder.newObjectReference;
|
||||
import static pro.taskana.testapi.builder.UserBuilder.newUser;
|
||||
import static pro.taskana.testapi.builder.WorkbasketBuilder.newWorkbasket;
|
||||
|
||||
import java.util.Random;
|
||||
import java.util.UUID;
|
||||
|
||||
import pro.taskana.testapi.builder.ClassificationBuilder;
|
||||
import pro.taskana.testapi.builder.ObjectReferenceBuilder;
|
||||
import pro.taskana.testapi.builder.UserBuilder;
|
||||
import pro.taskana.testapi.builder.WorkbasketBuilder;
|
||||
import pro.taskana.workbasket.api.WorkbasketType;
|
||||
|
||||
|
@ -14,13 +21,13 @@ public class DefaultTestEntities {
|
|||
}
|
||||
|
||||
public static ClassificationBuilder defaultTestClassification() {
|
||||
return ClassificationBuilder.newClassification()
|
||||
return newClassification()
|
||||
.key(UUID.randomUUID().toString().replace("-", ""))
|
||||
.domain("DOMAIN_A");
|
||||
}
|
||||
|
||||
public static WorkbasketBuilder defaultTestWorkbasket() {
|
||||
return WorkbasketBuilder.newWorkbasket()
|
||||
return newWorkbasket()
|
||||
.key(UUID.randomUUID().toString())
|
||||
.domain("DOMAIN_A")
|
||||
.name("Megabasket")
|
||||
|
@ -29,11 +36,32 @@ public class DefaultTestEntities {
|
|||
}
|
||||
|
||||
public static ObjectReferenceBuilder defaultTestObjectReference() {
|
||||
return ObjectReferenceBuilder.newObjectReference()
|
||||
return newObjectReference()
|
||||
.company("Company1")
|
||||
.system("System1")
|
||||
.systemInstance("Instance1")
|
||||
.type("Type1")
|
||||
.value("Value1");
|
||||
}
|
||||
|
||||
public static UserBuilder randomTestUser() {
|
||||
return newUser()
|
||||
.id(UUID.randomUUID().toString().replace("-", ""))
|
||||
.firstName(RandomStringGenerator.generateRandomString(10))
|
||||
.lastName(RandomStringGenerator.generateRandomString(12));
|
||||
}
|
||||
|
||||
private static class RandomStringGenerator {
|
||||
private static final Random RANDOM = new Random(15);
|
||||
|
||||
private static String generateRandomString(int length) {
|
||||
// see ascii table for details number -> char conversion.
|
||||
return RANDOM
|
||||
.ints('0', 'z' + 1)
|
||||
.filter(i -> (i <= '9' || i >= 'A') && (i <= 'Z' || i >= 'a'))
|
||||
.limit(length)
|
||||
.collect(StringBuilder::new, StringBuilder::appendCodePoint, StringBuilder::append)
|
||||
.toString();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,9 +1,6 @@
|
|||
package pro.taskana.testapi.builder;
|
||||
|
||||
import java.security.PrivilegedActionException;
|
||||
import java.security.PrivilegedExceptionAction;
|
||||
import java.time.Instant;
|
||||
import javax.security.auth.Subject;
|
||||
|
||||
import pro.taskana.classification.api.ClassificationCustomField;
|
||||
import pro.taskana.classification.api.ClassificationService;
|
||||
|
@ -15,9 +12,10 @@ import pro.taskana.classification.api.models.ClassificationSummary;
|
|||
import pro.taskana.common.api.exceptions.DomainNotFoundException;
|
||||
import pro.taskana.common.api.exceptions.InvalidArgumentException;
|
||||
import pro.taskana.common.api.exceptions.NotAuthorizedException;
|
||||
import pro.taskana.common.api.security.UserPrincipal;
|
||||
import pro.taskana.testapi.builder.EntityBuilder.SummaryEntityBuilder;
|
||||
|
||||
public class ClassificationBuilder {
|
||||
public class ClassificationBuilder
|
||||
implements SummaryEntityBuilder<ClassificationSummary, Classification, ClassificationService> {
|
||||
|
||||
private final ClassificationTestImpl testClassification = new ClassificationTestImpl();
|
||||
|
||||
|
@ -113,6 +111,12 @@ public class ClassificationBuilder {
|
|||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ClassificationSummary entityToSummary(Classification classification) {
|
||||
return classification.asSummary();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Classification buildAndStore(ClassificationService classificationService)
|
||||
throws InvalidArgumentException, ClassificationAlreadyExistException, DomainNotFoundException,
|
||||
MalformedServiceLevelException, NotAuthorizedException, ClassificationNotFoundException {
|
||||
|
@ -123,25 +127,4 @@ public class ClassificationBuilder {
|
|||
testClassification.setId(null);
|
||||
}
|
||||
}
|
||||
|
||||
public Classification buildAndStore(ClassificationService classificationService, String userId)
|
||||
throws PrivilegedActionException {
|
||||
Subject subject = new Subject();
|
||||
subject.getPrincipals().add(new UserPrincipal(userId));
|
||||
PrivilegedExceptionAction<Classification> performBuildAndStore =
|
||||
() -> buildAndStore(classificationService);
|
||||
|
||||
return Subject.doAs(subject, performBuildAndStore);
|
||||
}
|
||||
|
||||
public ClassificationSummary buildAndStoreAsSummary(ClassificationService classificationService)
|
||||
throws InvalidArgumentException, ClassificationAlreadyExistException, DomainNotFoundException,
|
||||
MalformedServiceLevelException, NotAuthorizedException, ClassificationNotFoundException {
|
||||
return buildAndStore(classificationService).asSummary();
|
||||
}
|
||||
|
||||
public ClassificationSummary buildAndStoreAsSummary(
|
||||
ClassificationService classificationService, String userId) throws PrivilegedActionException {
|
||||
return buildAndStore(classificationService, userId).asSummary();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,38 @@
|
|||
package pro.taskana.testapi.builder;
|
||||
|
||||
import java.security.PrivilegedActionException;
|
||||
import java.security.PrivilegedExceptionAction;
|
||||
import javax.security.auth.Subject;
|
||||
|
||||
import pro.taskana.common.api.security.UserPrincipal;
|
||||
|
||||
public interface EntityBuilder<EntityT, ServiceT> {
|
||||
|
||||
EntityT buildAndStore(ServiceT service) throws Exception;
|
||||
|
||||
default EntityT buildAndStore(ServiceT service, String userId) throws Exception {
|
||||
return execAsUser(userId, () -> buildAndStore(service));
|
||||
}
|
||||
|
||||
private <T> T execAsUser(String userId, PrivilegedExceptionAction<T> runnable)
|
||||
throws PrivilegedActionException {
|
||||
Subject subject = new Subject();
|
||||
subject.getPrincipals().add(new UserPrincipal(userId));
|
||||
|
||||
return Subject.doAs(subject, runnable);
|
||||
}
|
||||
|
||||
interface SummaryEntityBuilder<SummaryEntityT, EntityT extends SummaryEntityT, ServiceT>
|
||||
extends EntityBuilder<EntityT, ServiceT> {
|
||||
SummaryEntityT entityToSummary(EntityT entity);
|
||||
|
||||
default SummaryEntityT buildAndStoreAsSummary(ServiceT service) throws Exception {
|
||||
return entityToSummary(buildAndStore(service));
|
||||
}
|
||||
|
||||
default SummaryEntityT buildAndStoreAsSummary(ServiceT service, String userId)
|
||||
throws Exception {
|
||||
return entityToSummary(buildAndStore(service, userId));
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,17 +1,13 @@
|
|||
package pro.taskana.testapi.builder;
|
||||
|
||||
import java.security.PrivilegedActionException;
|
||||
import java.security.PrivilegedExceptionAction;
|
||||
import java.time.Instant;
|
||||
import java.util.Arrays;
|
||||
import java.util.Map;
|
||||
import javax.security.auth.Subject;
|
||||
|
||||
import pro.taskana.classification.api.exceptions.ClassificationNotFoundException;
|
||||
import pro.taskana.classification.api.models.ClassificationSummary;
|
||||
import pro.taskana.common.api.exceptions.InvalidArgumentException;
|
||||
import pro.taskana.common.api.exceptions.NotAuthorizedException;
|
||||
import pro.taskana.common.api.security.UserPrincipal;
|
||||
import pro.taskana.task.api.CallbackState;
|
||||
import pro.taskana.task.api.TaskCustomField;
|
||||
import pro.taskana.task.api.TaskCustomIntField;
|
||||
|
@ -25,10 +21,11 @@ import pro.taskana.task.api.models.Attachment;
|
|||
import pro.taskana.task.api.models.ObjectReference;
|
||||
import pro.taskana.task.api.models.Task;
|
||||
import pro.taskana.task.api.models.TaskSummary;
|
||||
import pro.taskana.testapi.builder.EntityBuilder.SummaryEntityBuilder;
|
||||
import pro.taskana.workbasket.api.exceptions.WorkbasketNotFoundException;
|
||||
import pro.taskana.workbasket.api.models.WorkbasketSummary;
|
||||
|
||||
public class TaskBuilder {
|
||||
public class TaskBuilder implements SummaryEntityBuilder<TaskSummary, Task, TaskService> {
|
||||
|
||||
private final TaskTestImpl testTask = new TaskTestImpl();
|
||||
|
||||
|
@ -210,6 +207,12 @@ public class TaskBuilder {
|
|||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public TaskSummary entityToSummary(Task entity) {
|
||||
return entity.asSummary();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Task buildAndStore(TaskService taskService)
|
||||
throws TaskAlreadyExistException, InvalidArgumentException, WorkbasketNotFoundException,
|
||||
ClassificationNotFoundException, NotAuthorizedException, AttachmentPersistenceException,
|
||||
|
@ -222,25 +225,4 @@ public class TaskBuilder {
|
|||
testTask.setExternalId(null);
|
||||
}
|
||||
}
|
||||
|
||||
public Task buildAndStore(TaskService taskService, String userId)
|
||||
throws PrivilegedActionException {
|
||||
Subject subject = new Subject();
|
||||
subject.getPrincipals().add(new UserPrincipal(userId));
|
||||
PrivilegedExceptionAction<Task> performBuildAndStore = () -> buildAndStore(taskService);
|
||||
|
||||
return Subject.doAs(subject, performBuildAndStore);
|
||||
}
|
||||
|
||||
public TaskSummary buildAndStoreAsSummary(TaskService taskService)
|
||||
throws TaskAlreadyExistException, InvalidArgumentException, TaskNotFoundException,
|
||||
WorkbasketNotFoundException, ClassificationNotFoundException, NotAuthorizedException,
|
||||
AttachmentPersistenceException, ObjectReferencePersistenceException {
|
||||
return buildAndStore(taskService).asSummary();
|
||||
}
|
||||
|
||||
public TaskSummary buildAndStoreAsSummary(TaskService taskService, String userId)
|
||||
throws PrivilegedActionException {
|
||||
return buildAndStore(taskService, userId).asSummary();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,19 +1,15 @@
|
|||
package pro.taskana.testapi.builder;
|
||||
|
||||
import java.security.PrivilegedActionException;
|
||||
import java.security.PrivilegedExceptionAction;
|
||||
import java.time.Instant;
|
||||
import javax.security.auth.Subject;
|
||||
|
||||
import pro.taskana.common.api.exceptions.InvalidArgumentException;
|
||||
import pro.taskana.common.api.exceptions.NotAuthorizedException;
|
||||
import pro.taskana.common.api.security.UserPrincipal;
|
||||
import pro.taskana.task.api.TaskService;
|
||||
import pro.taskana.task.api.exceptions.TaskCommentNotFoundException;
|
||||
import pro.taskana.task.api.exceptions.TaskNotFoundException;
|
||||
import pro.taskana.task.api.models.TaskComment;
|
||||
|
||||
public class TaskCommentBuilder {
|
||||
public class TaskCommentBuilder implements EntityBuilder<TaskComment, TaskService> {
|
||||
|
||||
private final TaskCommentTestImpl testTaskComment = new TaskCommentTestImpl();
|
||||
|
||||
|
@ -51,6 +47,7 @@ public class TaskCommentBuilder {
|
|||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public TaskComment buildAndStore(TaskService taskService)
|
||||
throws InvalidArgumentException, TaskNotFoundException, NotAuthorizedException,
|
||||
TaskCommentNotFoundException {
|
||||
|
@ -61,13 +58,4 @@ public class TaskCommentBuilder {
|
|||
testTaskComment.setId(null);
|
||||
}
|
||||
}
|
||||
|
||||
public TaskComment buildAndStore(TaskService taskService, String userId)
|
||||
throws PrivilegedActionException {
|
||||
Subject subject = new Subject();
|
||||
subject.getPrincipals().add(new UserPrincipal(userId));
|
||||
PrivilegedExceptionAction<TaskComment> performBuildAndStore = () -> buildAndStore(taskService);
|
||||
|
||||
return Subject.doAs(subject, performBuildAndStore);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,12 +1,7 @@
|
|||
package pro.taskana.testapi.builder;
|
||||
|
||||
import java.security.PrivilegedActionException;
|
||||
import java.security.PrivilegedExceptionAction;
|
||||
import javax.security.auth.Subject;
|
||||
|
||||
import pro.taskana.common.api.exceptions.InvalidArgumentException;
|
||||
import pro.taskana.common.api.exceptions.NotAuthorizedException;
|
||||
import pro.taskana.common.api.security.UserPrincipal;
|
||||
import pro.taskana.workbasket.api.WorkbasketPermission;
|
||||
import pro.taskana.workbasket.api.WorkbasketService;
|
||||
import pro.taskana.workbasket.api.exceptions.WorkbasketAccessItemAlreadyExistException;
|
||||
|
@ -14,7 +9,8 @@ import pro.taskana.workbasket.api.exceptions.WorkbasketNotFoundException;
|
|||
import pro.taskana.workbasket.api.models.WorkbasketAccessItem;
|
||||
import pro.taskana.workbasket.internal.models.WorkbasketAccessItemImpl;
|
||||
|
||||
public class WorkbasketAccessItemBuilder {
|
||||
public class WorkbasketAccessItemBuilder
|
||||
implements EntityBuilder<WorkbasketAccessItem, WorkbasketService> {
|
||||
|
||||
WorkbasketAccessItemImpl testWorkbasketAccessItem = new WorkbasketAccessItemImpl();
|
||||
|
||||
|
@ -48,19 +44,10 @@ public class WorkbasketAccessItemBuilder {
|
|||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public WorkbasketAccessItem buildAndStore(WorkbasketService workbasketService)
|
||||
throws InvalidArgumentException, WorkbasketAccessItemAlreadyExistException,
|
||||
WorkbasketNotFoundException, NotAuthorizedException {
|
||||
return workbasketService.createWorkbasketAccessItem(testWorkbasketAccessItem);
|
||||
}
|
||||
|
||||
public WorkbasketAccessItem buildAndStore(WorkbasketService workbasketService, String userId)
|
||||
throws PrivilegedActionException {
|
||||
Subject subject = new Subject();
|
||||
subject.getPrincipals().add(new UserPrincipal(userId));
|
||||
PrivilegedExceptionAction<WorkbasketAccessItem> performBuildAndStore =
|
||||
() -> buildAndStore(workbasketService);
|
||||
|
||||
return Subject.doAs(subject, performBuildAndStore);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,14 +1,11 @@
|
|||
package pro.taskana.testapi.builder;
|
||||
|
||||
import java.security.PrivilegedActionException;
|
||||
import java.security.PrivilegedExceptionAction;
|
||||
import java.time.Instant;
|
||||
import javax.security.auth.Subject;
|
||||
|
||||
import pro.taskana.common.api.exceptions.DomainNotFoundException;
|
||||
import pro.taskana.common.api.exceptions.InvalidArgumentException;
|
||||
import pro.taskana.common.api.exceptions.NotAuthorizedException;
|
||||
import pro.taskana.common.api.security.UserPrincipal;
|
||||
import pro.taskana.testapi.builder.EntityBuilder.SummaryEntityBuilder;
|
||||
import pro.taskana.workbasket.api.WorkbasketCustomField;
|
||||
import pro.taskana.workbasket.api.WorkbasketService;
|
||||
import pro.taskana.workbasket.api.WorkbasketType;
|
||||
|
@ -17,7 +14,8 @@ import pro.taskana.workbasket.api.exceptions.WorkbasketNotFoundException;
|
|||
import pro.taskana.workbasket.api.models.Workbasket;
|
||||
import pro.taskana.workbasket.api.models.WorkbasketSummary;
|
||||
|
||||
public class WorkbasketBuilder {
|
||||
public class WorkbasketBuilder
|
||||
implements SummaryEntityBuilder<WorkbasketSummary, Workbasket, WorkbasketService> {
|
||||
|
||||
private final WorkbasketTestImpl testWorkbasket = new WorkbasketTestImpl();
|
||||
|
||||
|
@ -108,6 +106,12 @@ public class WorkbasketBuilder {
|
|||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public WorkbasketSummary entityToSummary(Workbasket workbasket) {
|
||||
return workbasket.asSummary();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Workbasket buildAndStore(WorkbasketService workbasketService)
|
||||
throws InvalidArgumentException, WorkbasketAlreadyExistException, DomainNotFoundException,
|
||||
NotAuthorizedException, WorkbasketNotFoundException {
|
||||
|
@ -118,25 +122,4 @@ public class WorkbasketBuilder {
|
|||
testWorkbasket.setId(null);
|
||||
}
|
||||
}
|
||||
|
||||
public Workbasket buildAndStore(WorkbasketService workbasketService, String userId)
|
||||
throws PrivilegedActionException {
|
||||
Subject subject = new Subject();
|
||||
subject.getPrincipals().add(new UserPrincipal(userId));
|
||||
PrivilegedExceptionAction<Workbasket> performBuildAndStore =
|
||||
() -> buildAndStore(workbasketService);
|
||||
|
||||
return Subject.doAs(subject, performBuildAndStore);
|
||||
}
|
||||
|
||||
public WorkbasketSummary buildAndStoreAsSummary(WorkbasketService workbasketService)
|
||||
throws InvalidArgumentException, WorkbasketAlreadyExistException, WorkbasketNotFoundException,
|
||||
DomainNotFoundException, NotAuthorizedException {
|
||||
return buildAndStore(workbasketService).asSummary();
|
||||
}
|
||||
|
||||
public WorkbasketSummary buildAndStoreAsSummary(
|
||||
WorkbasketService workbasketService, String userId) throws PrivilegedActionException {
|
||||
return buildAndStore(workbasketService, userId).asSummary();
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue