TSK-1227: made ObjectReference#System, Objectreference#SystemInstance optional, allow null in database

This commit is contained in:
sfrevel 2020-05-13 13:00:31 +02:00
parent 9dc3cc68e8
commit 5588d72691
9 changed files with 130 additions and 98 deletions

View File

@ -36,13 +36,6 @@ public class ObjectReference {
} else if (objectReference.getCompany() == null || objectReference.getCompany().length() == 0) {
throw new InvalidArgumentException(
String.format("Company of %s of %s must not be empty", objRefType, objName));
} else if (objectReference.getSystem() == null || objectReference.getSystem().length() == 0) {
throw new InvalidArgumentException(
String.format("System of %s of %s must not be empty", objRefType, objName));
} else if (objectReference.getSystemInstance() == null
|| objectReference.getSystemInstance().length() == 0) {
throw new InvalidArgumentException(
String.format("SystemInstance of %s of %s must not be empty", objRefType, objName));
} else if (objectReference.getType() == null || objectReference.getType().length() == 0) {
throw new InvalidArgumentException(
String.format("Type of %s of %s must not be empty", objRefType, objName));

View File

@ -85,8 +85,8 @@ CREATE TABLE TASK (
PARENT_BUSINESS_PROCESS_ID VARCHAR(128) NULL,
OWNER VARCHAR(32) NULL,
POR_COMPANY VARCHAR(32) NOT NULL,
POR_SYSTEM VARCHAR(32) NOT NULL,
POR_INSTANCE VARCHAR(32) NOT NULL,
POR_SYSTEM VARCHAR(32),
POR_INSTANCE VARCHAR(32),
POR_TYPE VARCHAR(32) NOT NULL,
POR_VALUE VARCHAR(128) NOT NULL,
IS_READ SMALLINT NOT NULL,
@ -152,8 +152,8 @@ CREATE TABLE WORKBASKET_ACCESS_LIST(
CREATE TABLE OBJECT_REFERENCE(
ID VARCHAR(40) NOT NULL,
COMPANY VARCHAR(32) NOT NULL,
SYSTEM VARCHAR(32) NOT NULL,
SYSTEM_INSTANCE VARCHAR(32) NOT NULL,
SYSTEM VARCHAR(32),
SYSTEM_INSTANCE VARCHAR(32),
TYPE VARCHAR(32) NOT NULL,
VALUE VARCHAR(128) NOT NULL
);

View File

@ -54,3 +54,13 @@ REORG TABLE TASK_COMMENT;
CREATE TABLE CONFIGURATION (
ENFORCE_SECURITY BOOLEAN NOT NULL
);
-- TSK-1227 allow null values in OBJECT_REFERENCE#SYSTEM and OBJECT_REFERENCE#SYSTEM_INSTANCE
ALTER TABLE OBJECT_REFERENCE ALTER COLUMN SYSTEM DROP NOT NULL;
ALTER TABLE OBJECT_REFERENCE ALTER COLUMN SYSTEM_INSTANCE DROP NOT NULL;
REORG TABLE OBJECT_REFERENCE;
ALTER TABLE TASK ALTER COLUMN POR_SYSTEM DROP NOT NULL;
ALTER TABLE TASK ALTER COLUMN POR_SYSTEM_INSTANCE DROP NOT NULL;
REORG TABLE TASK;

View File

@ -92,8 +92,8 @@ CREATE TABLE TASK (
PARENT_BUSINESS_PROCESS_ID VARCHAR(128) NULL,
OWNER VARCHAR(32) NULL,
POR_COMPANY VARCHAR(32) NOT NULL,
POR_SYSTEM VARCHAR(32) NOT NULL,
POR_INSTANCE VARCHAR(32) NOT NULL,
POR_SYSTEM VARCHAR(32),
POR_INSTANCE VARCHAR(32),
POR_TYPE VARCHAR(32) NOT NULL,
POR_VALUE VARCHAR(128) NOT NULL,
IS_READ SMALLINT NOT NULL,
@ -159,8 +159,8 @@ CREATE TABLE WORKBASKET_ACCESS_LIST(
CREATE TABLE OBJECT_REFERENCE(
ID VARCHAR(40) NOT NULL,
COMPANY VARCHAR(32) NOT NULL,
SYSTEM VARCHAR(32) NOT NULL,
SYSTEM_INSTANCE VARCHAR(32) NOT NULL,
SYSTEM VARCHAR(32),
SYSTEM_INSTANCE VARCHAR(32),
TYPE VARCHAR(32) NOT NULL,
VALUE VARCHAR(128) NOT NULL
);

View File

@ -39,3 +39,12 @@ ALTER TABLE TASK_COMMENT ALTER COLUMN TASK_ID VARCHAR(40);
CREATE TABLE CONFIGURATION (
ENFORCE_SECURITY BOOLEAN NOT NULL
);
-- TSK-1227 allow null values in OBJECT_REFERENCE#SYSTEM and OBJECT_REFERENCE#SYSTEM_INSTANCE
ALTER TABLE OBJECT_REFERENCE ALTER COLUMN SYSTEM DROP NOT NULL;
ALTER TABLE OBJECT_REFERENCE ALTER COLUMN SYSTEM_INSTANCE DROP NOT NULL;
ALTER TABLE TASK ALTER COLUMN POR_SYSTEM DROP NOT NULL;
ALTER TABLE TASK ALTER COLUMN POR_SYSTEM_INSTANCE DROP NOT NULL;

View File

@ -87,8 +87,8 @@ CREATE TABLE TASK (
PARENT_BUSINESS_PROCESS_ID VARCHAR(128) NULL,
OWNER VARCHAR(32) NULL,
POR_COMPANY VARCHAR(32) NOT NULL,
POR_SYSTEM VARCHAR(32) NOT NULL,
POR_INSTANCE VARCHAR(32) NOT NULL,
POR_SYSTEM VARCHAR(32),
POR_INSTANCE VARCHAR(32),
POR_TYPE VARCHAR(32) NOT NULL,
POR_VALUE VARCHAR(128) NOT NULL,
IS_READ BOOLEAN NOT NULL,
@ -154,8 +154,8 @@ CREATE TABLE WORKBASKET_ACCESS_LIST(
CREATE TABLE OBJECT_REFERENCE(
ID VARCHAR(40) NOT NULL,
COMPANY VARCHAR(32) NOT NULL,
SYSTEM VARCHAR(32) NOT NULL,
SYSTEM_INSTANCE VARCHAR(32) NOT NULL,
SYSTEM VARCHAR(32),
SYSTEM_INSTANCE VARCHAR(32),
TYPE VARCHAR(32) NOT NULL,
VALUE VARCHAR(128) NOT NULL
);

View File

@ -39,3 +39,12 @@ ALTER TABLE TASK_COMMENT ALTER COLUMN TASK_ID TYPE VARCHAR(40);
CREATE TABLE CONFIGURATION (
ENFORCE_SECURITY BOOLEAN NOT NULL
);
-- TSK-1227 allow null values in OBJECT_REFERENCE#SYSTEM and OBJECT_REFERENCE#SYSTEM_INSTANCE
ALTER TABLE OBJECT_REFERENCE ALTER COLUMN SYSTEM SET NULL;
ALTER TABLE OBJECT_REFERENCE ALTER COLUMN SYSTEM_INSTANCE SET NULL;
ALTER TABLE TASK ALTER COLUMN POR_SYSTEM SET NULL;
ALTER TABLE TASK ALTER COLUMN POR_SYSTEM_INSTANCE SET NULL;

View File

@ -48,9 +48,7 @@ import pro.taskana.workbasket.api.models.Workbasket;
// import static org.assertj.core.api.AssertionsForClassTypes.assertThatThrownBy;
/**
* Acceptance test for all "create task" scenarios.
*/
/** Acceptance test for all "create task" scenarios. */
@ExtendWith(JaasExtension.class)
class CreateTaskAccTest extends AbstractAccTest {
@ -112,6 +110,26 @@ class CreateTaskAccTest extends AbstractAccTest {
assertThat(createdTask.isTransferred()).isFalse();
}
@WithAccessId(user = "user_1_1", groups = "group_1")
@Test
void should_createTask_When_ObjectReferenceSystemAndSystemInstanceIsNull()
throws NotAuthorizedException, InvalidArgumentException, ClassificationNotFoundException,
WorkbasketNotFoundException, TaskAlreadyExistException {
String currentUser = CurrentUserContext.getUserid();
Task newTask = taskService.newTask("USER_1_1", "DOMAIN_A");
newTask.setClassificationKey("T2100");
ObjectReference objectReference =
createObjectReference("COMPANY_A", null, null, "VNR", "1234567");
newTask.setPrimaryObjRef(objectReference);
newTask.setOwner(currentUser);
Task createdTask = taskService.createTask(newTask);
assertThat(createdTask).isNotNull();
assertThat(createdTask.getCreator()).isEqualTo(CurrentUserContext.getUserid());
}
@WithAccessId(user = "admin")
@WithAccessId(user = "taskadmin")
@TestTemplate
@ -632,32 +650,6 @@ class CreateTaskAccTest extends AbstractAccTest {
"2018-01-15",
createSimpleCustomProperties(3)));
testCreateTask.accept(
createAttachment(
"DOCTYPE_DEFAULT",
createObjectReference(
"COMPANY_A",
"SYSTEM_B",
null,
"ArchiveId",
"12345678901234567890123456789012345678901234567890"),
"E-MAIL",
"2018-01-15",
createSimpleCustomProperties(3)));
testCreateTask.accept(
createAttachment(
"DOCTYPE_DEFAULT",
createObjectReference(
"COMPANY_A",
null,
"INSTANCE_B",
"ArchiveId",
"12345678901234567890123456789012345678901234567890"),
"E-MAIL",
"2018-01-15",
createSimpleCustomProperties(3)));
testCreateTask.accept(
createAttachment(
"DOCTYPE_DEFAULT",
@ -766,8 +758,10 @@ class CreateTaskAccTest extends AbstractAccTest {
createObjectReference("COMPANY_A", "SYSTEM_A", "INSTANCE_A", "VNR", null));
testCreateTask.accept(
createObjectReference("COMPANY_A", "SYSTEM_A", "INSTANCE_A", null, "1234567"));
testCreateTask.accept(createObjectReference("COMPANY_A", "SYSTEM_A", null, "VNR", "1234567"));
testCreateTask.accept(createObjectReference("COMPANY_A", null, "INSTANCE_A", "VNR", "1234567"));
// testCreateTask.accept(createObjectReference("COMPANY_A", "SYSTEM_A", null, "VNR",
// "1234567"));
// testCreateTask.accept(createObjectReference("COMPANY_A", null, "INSTANCE_A", "VNR",
// "1234567"));
testCreateTask.accept(createObjectReference(null, "SYSTEM_A", "INSTANCE_A", "VNR", "1234567"));
}

View File

@ -34,9 +34,7 @@ import pro.taskana.task.api.models.Task;
import pro.taskana.task.internal.models.TaskImpl;
import pro.taskana.workbasket.api.exceptions.WorkbasketNotFoundException;
/**
* Acceptance test for all "update task" scenarios.
*/
/** Acceptance test for all "update task" scenarios. */
@ExtendWith(JaasExtension.class)
class UpdateTaskAccTest extends AbstractAccTest {
@ -73,6 +71,36 @@ class UpdateTaskAccTest extends AbstractAccTest {
assertThat(updatedTask.getParentBusinessProcessId()).isEqualTo("MY_PARENT_PROCESS_ID");
}
@WithAccessId(user = "user_1_1", groups = "group_1")
@Test
void should_UpdatePrimaryObjectReferenceOfTask_When_ObjectreferenceSystemAndSystemInstanceIsNull()
throws NotAuthorizedException, InvalidArgumentException, ClassificationNotFoundException,
TaskNotFoundException, ConcurrencyException, AttachmentPersistenceException,
InvalidStateException {
TaskService taskService = taskanaEngine.getTaskService();
Task task = taskService.getTask("TKI:000000000000000000000000000000000000");
final Instant modifiedOriginal = task.getModified();
task.setPrimaryObjRef(createObjectReference("COMPANY_A", null, null, "VNR", "7654321"));
task.setBusinessProcessId("MY_PROCESS_ID");
task.setParentBusinessProcessId("MY_PARENT_PROCESS_ID");
Task updatedTask = taskService.updateTask(task);
updatedTask = taskService.getTask(updatedTask.getId());
assertThat(updatedTask).isNotNull();
assertThat(updatedTask.getPrimaryObjRef().getValue()).isEqualTo("7654321");
assertThat(updatedTask.getPrimaryObjRef().getSystem()).isNull();
assertThat(updatedTask.getPrimaryObjRef().getSystemInstance()).isNull();
assertThat(updatedTask.getCreated()).isNotNull();
assertThat(updatedTask.getModified()).isNotNull();
assertThat(modifiedOriginal.isAfter(updatedTask.getModified())).isFalse();
assertThat(updatedTask.getModified()).isNotEqualTo(updatedTask.getCreated());
assertThat(updatedTask.getCreated()).isEqualTo(task.getCreated());
assertThat(updatedTask.isRead()).isEqualTo(task.isRead());
assertThat(updatedTask.getBusinessProcessId()).isEqualTo("MY_PROCESS_ID");
assertThat(updatedTask.getParentBusinessProcessId()).isEqualTo("MY_PARENT_PROCESS_ID");
}
@WithAccessId(user = "user_1_1", groups = "group_1")
@Test
void should_ThrowException_When_MandatoryPrimaryObjectReferenceIsNotSetOrIncomplete()
@ -97,20 +125,9 @@ class UpdateTaskAccTest extends AbstractAccTest {
.isInstanceOf(InvalidArgumentException.class);
Task task3 = taskService.getTask("TKI:000000000000000000000000000000000000");
task3.setPrimaryObjRef(createObjectReference("COMPANY_A", "SYSTEM_A", null, "VNR", "1234567"));
task3.setPrimaryObjRef(createObjectReference(null, "SYSTEM_A", "INSTANCE_A", "VNR", "1234567"));
assertThatThrownBy(() -> taskService.updateTask(task3))
.isInstanceOf(InvalidArgumentException.class);
Task task4 = taskService.getTask("TKI:000000000000000000000000000000000000");
task4.setPrimaryObjRef(
createObjectReference("COMPANY_A", null, "INSTANCE_A", "VNR", "1234567"));
assertThatThrownBy(() -> taskService.updateTask(task4))
.isInstanceOf(InvalidArgumentException.class);
Task task5 = taskService.getTask("TKI:000000000000000000000000000000000000");
task5.setPrimaryObjRef(createObjectReference(null, "SYSTEM_A", "INSTANCE_A", "VNR", "1234567"));
assertThatThrownBy(() -> taskService.updateTask(task5))
.isInstanceOf(InvalidArgumentException.class);
}
@WithAccessId(user = "user_1_1", groups = "group_1")
@ -144,11 +161,11 @@ class UpdateTaskAccTest extends AbstractAccTest {
Task task = taskService.getTask("TKI:000000000000000000000000000000000000");
final ClassificationSummary classificationSummary = task.getClassificationSummary();
task.setClassificationKey("T2100");
ThrowingCallable updateTaskCall = () -> {
ThrowingCallable updateTaskCall =
() -> {
taskService.updateTask(task);
};
assertThatCode(updateTaskCall).doesNotThrowAnyException();
}
@WithAccessId(user = "user_1_1", groups = "group_1")