TSK-1726: Review Findings

This commit is contained in:
Joerg Heffner 2021-10-07 11:06:55 +02:00 committed by gitgoodjhe
parent e264a20389
commit 676caaae84
18 changed files with 108 additions and 191 deletions

View File

@ -51,33 +51,6 @@ public interface TaskCommentQuery extends BaseQuery<TaskComment, TaskCommentQuer
*/ */
TaskCommentQuery taskIdIn(String... taskIds); TaskCommentQuery taskIdIn(String... taskIds);
/**
* Add your {@linkplain Task} ids to your query, which should not be contained.
*
* @param taskIds the {@linkplain Task} ids as Strings
* @return the query
*/
TaskCommentQuery taskIdNotIn(String... taskIds);
/**
* Add your {@linkplain Task} ids for pattern matching to your query. It will be compared in SQL
* with the LIKE operator. You may use a wildcard like % to specify the pattern. If you specify
* multiple arguments they are combined with the OR keyword.
*
* @param taskIds your {@linkplain Task} ids
* @return the query
*/
TaskCommentQuery taskIdLike(String... taskIds);
/**
* Add your {@linkplain Task} ids for pattern matching to your query, which should not be
* contained. It will be compared in SQL with the LIKE operator. You may use a wildcard like % to
* specify the pattern. If you specify multiple arguments they are combined with the OR keyword.
*
* @param taskIds your {@linkplain Task} ids
* @return the query
*/
TaskCommentQuery taskIdNotLike(String... taskIds);
/** /**
* Add your texts for pattern matching to your query. It will be compared in SQL with the LIKE * Add your texts for pattern matching to your query. It will be compared in SQL with the LIKE

View File

@ -8,7 +8,7 @@ public enum TaskCommentQueryColumnName implements QueryColumnName {
TASK_ID("tc.task_id"), TASK_ID("tc.task_id"),
TEXT_FIELD("tc.text_field"), TEXT_FIELD("tc.text_field"),
CREATOR("tc.creator"), CREATOR("tc.creator"),
CREATOR_LONG_NAME("u.long_name"), CREATOR_FULL_NAME("u.full_name"),
CREATED("tc.created"), CREATED("tc.created"),
MODIFIED("tc.modified"); MODIFIED("tc.modified");

View File

@ -31,7 +31,7 @@ public interface TaskComment {
* *
* @return the long Name of the creator * @return the long Name of the creator
*/ */
String getCreatorLongName(); String getCreatorFullName();
/** /**
* Gets the text field of the task comment. * Gets the text field of the task comment.

View File

@ -4,18 +4,25 @@ import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
import org.apache.ibatis.session.RowBounds; import org.apache.ibatis.session.RowBounds;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import pro.taskana.common.api.TaskanaRole; import pro.taskana.common.api.TaskanaRole;
import pro.taskana.common.api.TimeInterval; import pro.taskana.common.api.TimeInterval;
import pro.taskana.common.api.exceptions.NotAuthorizedException;
import pro.taskana.common.internal.InternalTaskanaEngine; import pro.taskana.common.internal.InternalTaskanaEngine;
import pro.taskana.task.api.TaskCommentQuery; import pro.taskana.task.api.TaskCommentQuery;
import pro.taskana.task.api.TaskCommentQueryColumnName; import pro.taskana.task.api.TaskCommentQueryColumnName;
import pro.taskana.task.api.exceptions.TaskNotFoundException;
import pro.taskana.task.api.models.TaskComment; import pro.taskana.task.api.models.TaskComment;
import pro.taskana.workbasket.api.exceptions.NotAuthorizedToQueryWorkbasketException;
import pro.taskana.workbasket.internal.WorkbasketQueryImpl; import pro.taskana.workbasket.internal.WorkbasketQueryImpl;
/** TaskCommentQuery for generating dynamic sql. */ /** TaskCommentQuery for generating dynamic sql. */
public class TaskCommentQueryImpl implements TaskCommentQuery { public class TaskCommentQueryImpl implements TaskCommentQuery {
private static final Logger LOGGER = LoggerFactory.getLogger(TaskCommentQueryImpl.class);
private static final String LINK_TO_MAPPER = private static final String LINK_TO_MAPPER =
"pro.taskana.task.internal.TaskCommentQueryMapper.queryTaskComments"; "pro.taskana.task.internal.TaskCommentQueryMapper.queryTaskComments";
@ -35,9 +42,6 @@ public class TaskCommentQueryImpl implements TaskCommentQuery {
private String[] idLike; private String[] idLike;
private String[] idNotLike; private String[] idNotLike;
private String[] taskIdIn; private String[] taskIdIn;
private String[] taskIdNotIn;
private String[] taskIdLike;
private String[] taskIdNotLike;
private String[] creatorIn; private String[] creatorIn;
private String[] creatorNotIn; private String[] creatorNotIn;
private String[] creatorLike; private String[] creatorLike;
@ -90,24 +94,6 @@ public class TaskCommentQueryImpl implements TaskCommentQuery {
return this; return this;
} }
@Override
public TaskCommentQuery taskIdNotIn(String... taskIds) {
this.taskIdNotIn = taskIds;
return this;
}
@Override
public TaskCommentQuery taskIdLike(String... taskIds) {
this.taskIdLike = toUpperCopy(taskIds);
return this;
}
@Override
public TaskCommentQuery taskIdNotLike(String... taskIds) {
this.taskIdNotLike = toUpperCopy(taskIds);
return this;
}
@Override @Override
public TaskCommentQuery textFieldLike(String... texts) { public TaskCommentQuery textFieldLike(String... texts) {
this.textFieldLike = toUpperCopy(texts); this.textFieldLike = toUpperCopy(texts);
@ -172,6 +158,7 @@ public class TaskCommentQueryImpl implements TaskCommentQuery {
@Override @Override
public List<TaskComment> list() { public List<TaskComment> list() {
checkTaskPermission();
setupAccessIds(); setupAccessIds();
return taskanaEngine.executeInDatabaseConnection( return taskanaEngine.executeInDatabaseConnection(
() -> taskanaEngine.getSqlSession().selectList(LINK_TO_MAPPER, this)); () -> taskanaEngine.getSqlSession().selectList(LINK_TO_MAPPER, this));
@ -179,6 +166,7 @@ public class TaskCommentQueryImpl implements TaskCommentQuery {
@Override @Override
public List<TaskComment> list(int offset, int limit) { public List<TaskComment> list(int offset, int limit) {
checkTaskPermission();
setupAccessIds(); setupAccessIds();
RowBounds rowBounds = new RowBounds(offset, limit); RowBounds rowBounds = new RowBounds(offset, limit);
return taskanaEngine.executeInDatabaseConnection( return taskanaEngine.executeInDatabaseConnection(
@ -188,10 +176,11 @@ public class TaskCommentQueryImpl implements TaskCommentQuery {
@Override @Override
public List<String> listValues( public List<String> listValues(
TaskCommentQueryColumnName columnName, SortDirection sortDirection) { TaskCommentQueryColumnName columnName, SortDirection sortDirection) {
checkTaskPermission();
setupAccessIds(); setupAccessIds();
queryColumnName = columnName; queryColumnName = columnName;
// TO-DO: order? // TO-DO: order?
if (columnName == TaskCommentQueryColumnName.CREATOR_LONG_NAME) { if (columnName == TaskCommentQueryColumnName.CREATOR_FULL_NAME) {
joinWithUserInfo = true; joinWithUserInfo = true;
} }
@ -201,6 +190,7 @@ public class TaskCommentQueryImpl implements TaskCommentQuery {
@Override @Override
public TaskComment single() { public TaskComment single() {
checkTaskPermission();
setupAccessIds(); setupAccessIds();
return taskanaEngine.executeInDatabaseConnection( return taskanaEngine.executeInDatabaseConnection(
() -> taskanaEngine.getSqlSession().selectOne(LINK_TO_MAPPER, this)); () -> taskanaEngine.getSqlSession().selectOne(LINK_TO_MAPPER, this));
@ -208,6 +198,7 @@ public class TaskCommentQueryImpl implements TaskCommentQuery {
@Override @Override
public long count() { public long count() {
checkTaskPermission();
setupAccessIds(); setupAccessIds();
Long rowCount = Long rowCount =
taskanaEngine.executeInDatabaseConnection( taskanaEngine.executeInDatabaseConnection(
@ -239,18 +230,6 @@ public class TaskCommentQueryImpl implements TaskCommentQuery {
return taskIdIn; return taskIdIn;
} }
public String[] getTaskIdNotIn() {
return taskIdNotIn;
}
public String[] getTaskIdLike() {
return taskIdLike;
}
public String[] getTaskIdNotLike() {
return taskIdNotLike;
}
public String[] getCreatorIn() { public String[] getCreatorIn() {
return creatorIn; return creatorIn;
} }
@ -313,6 +292,32 @@ public class TaskCommentQueryImpl implements TaskCommentQuery {
return addOrderCriteria("MODIFIED", sortDirection); return addOrderCriteria("MODIFIED", sortDirection);
} }
private void checkTaskPermission() {
if (taskIdIn != null) {
if (taskanaEngine.getEngine().isUserInRole(TaskanaRole.ADMIN, TaskanaRole.TASK_ADMIN)) {
if (LOGGER.isDebugEnabled()) {
LOGGER.debug("Skipping permissions check since user is in role ADMIN or TASK_ADMIN.");
}
return;
}
Arrays.stream(taskIdIn)
.forEach(
taskId -> {
try {
taskService.getTask(taskId);
} catch (NotAuthorizedException e) {
throw new NotAuthorizedToQueryWorkbasketException(
e.getMessage(), e.getErrorCode(), e);
} catch (TaskNotFoundException e) {
LOGGER.warn(
String.format("The Task with the ID ' %s ' does not exist.", taskId), e);
}
});
}
}
private TaskCommentQuery addOrderCriteria(String columnName, SortDirection sortDirection) { private TaskCommentQuery addOrderCriteria(String columnName, SortDirection sortDirection) {
String orderByDirection = String orderByDirection =
" " + (sortDirection == null ? SortDirection.ASCENDING : sortDirection); " " + (sortDirection == null ? SortDirection.ASCENDING : sortDirection);
@ -362,12 +367,6 @@ public class TaskCommentQueryImpl implements TaskCommentQuery {
+ Arrays.toString(idNotLike) + Arrays.toString(idNotLike)
+ ", taskIdIn=" + ", taskIdIn="
+ Arrays.toString(taskIdIn) + Arrays.toString(taskIdIn)
+ ", taskIdNotIn="
+ Arrays.toString(taskIdNotIn)
+ ", taskIdLike="
+ Arrays.toString(taskIdLike)
+ ", taskIdNotLike="
+ Arrays.toString(taskIdNotLike)
+ ", creatorIn=" + ", creatorIn="
+ Arrays.toString(creatorIn) + Arrays.toString(creatorIn)
+ ", creatorNotIn=" + ", creatorNotIn="

View File

@ -15,7 +15,7 @@ public interface TaskCommentQueryMapper {
@Result(property = "taskId", column = "TASK_ID") @Result(property = "taskId", column = "TASK_ID")
@Result(property = "textField", column = "TEXT_FIELD") @Result(property = "textField", column = "TEXT_FIELD")
@Result(property = "creator", column = "CREATOR") @Result(property = "creator", column = "CREATOR")
@Result(property = "creatorLongName", column = "FULL_NAME") @Result(property = "creatorFullName", column = "FULL_NAME")
@Result(property = "created", column = "CREATED") @Result(property = "created", column = "CREATED")
@Result(property = "modified", column = "MODIFIED") @Result(property = "modified", column = "MODIFIED")
List<TaskCommentImpl> queryTaskComments( List<TaskCommentImpl> queryTaskComments(

View File

@ -89,9 +89,6 @@ public class TaskCommentQuerySqlProvider {
whereLike("idLike", "tc.ID", sb); whereLike("idLike", "tc.ID", sb);
whereNotLike("idNotLike", "tc.ID", sb); whereNotLike("idNotLike", "tc.ID", sb);
whereIn("taskIdIn", "tc.TASK_ID", sb); whereIn("taskIdIn", "tc.TASK_ID", sb);
whereNotIn("taskIdNotIn", "tc.TASK_ID", sb);
whereLike("taskIdLike", "tc.TASK_ID", sb);
whereNotLike("taskIdNotLike", "tc.TASK_ID", sb);
whereLike("textFieldLike", "tc.TEXT_FIELD", sb); whereLike("textFieldLike", "tc.TEXT_FIELD", sb);
whereNotLike("textFieldNotLike", "tc.TEXT_FIELD", sb); whereNotLike("textFieldNotLike", "tc.TEXT_FIELD", sb);
whereIn("creatorIn", "tc.CREATOR", sb); whereIn("creatorIn", "tc.CREATOR", sb);

View File

@ -184,15 +184,15 @@ class TaskCommentServiceImpl {
throw new TaskCommentNotFoundException(taskCommentId); throw new TaskCommentNotFoundException(taskCommentId);
} }
taskService.getTask(result.getTaskId());
if (taskanaEngine.getEngine().getConfiguration().getAddAdditionalUserInfo()) { if (taskanaEngine.getEngine().getConfiguration().getAddAdditionalUserInfo()) {
User creator = userMapper.findById(result.getCreator()); User creator = userMapper.findById(result.getCreator());
if (creator != null) { if (creator != null) {
result.setCreatorLongName(creator.getFullName()); result.setCreatorFullName(creator.getFullName());
} }
} }
taskService.getTask(result.getTaskId());
return result; return result;
} finally { } finally {

View File

@ -12,7 +12,7 @@ public class TaskCommentImpl implements TaskComment {
private String taskId; private String taskId;
private String textField; private String textField;
private String creator; private String creator;
private String creatorLongName; private String creatorFullName;
private Instant created; private Instant created;
private Instant modified; private Instant modified;
@ -54,12 +54,12 @@ public class TaskCommentImpl implements TaskComment {
} }
@Override @Override
public String getCreatorLongName() { public String getCreatorFullName() {
return creatorLongName; return creatorFullName;
} }
public void setCreatorLongName(String creatorLongName) { public void setCreatorFullName(String creatorFullName) {
this.creatorLongName = creatorLongName; this.creatorFullName = creatorFullName;
} }
public String getTextField() { public String getTextField() {
@ -99,7 +99,7 @@ public class TaskCommentImpl implements TaskComment {
@Override @Override
public int hashCode() { public int hashCode() {
return Objects.hash(id, taskId, textField, creator, creatorLongName, created, modified); return Objects.hash(id, taskId, textField, creator, creatorFullName, created, modified);
} }
@Override @Override
@ -120,7 +120,7 @@ public class TaskCommentImpl implements TaskComment {
&& Objects.equals(taskId, other.getTaskId()) && Objects.equals(taskId, other.getTaskId())
&& Objects.equals(textField, other.getTextField()) && Objects.equals(textField, other.getTextField())
&& Objects.equals(creator, other.getCreator()) && Objects.equals(creator, other.getCreator())
&& Objects.equals(creatorLongName, other.getCreatorLongName()) && Objects.equals(creatorFullName, other.getCreatorFullName())
&& Objects.equals(created, other.getCreated()) && Objects.equals(created, other.getCreated())
&& Objects.equals(modified, other.getModified()); && Objects.equals(modified, other.getModified());
} }
@ -135,8 +135,8 @@ public class TaskCommentImpl implements TaskComment {
+ textField + textField
+ ", creator=" + ", creator="
+ creator + creator
+ ", creatorLongName=" + ", creatorFullName="
+ creatorLongName + creatorFullName
+ ", created=" + ", created="
+ created + created
+ ", modified=" + ", modified="

View File

@ -107,7 +107,7 @@ class TaskCommentBuilderTest {
expectedTaskComment.setCreator("user-1-1"); expectedTaskComment.setCreator("user-1-1");
assertThat(taskComment) assertThat(taskComment)
.hasNoNullFieldsOrPropertiesExcept("creatorLongName") .hasNoNullFieldsOrPropertiesExcept("creatorFullName")
.usingRecursiveComparison() .usingRecursiveComparison()
.ignoringFields("id") .ignoringFields("id")
.isEqualTo(expectedTaskComment); .isEqualTo(expectedTaskComment);

View File

@ -41,7 +41,9 @@ class TaskUpdatePriorityBatchStatementAccTest extends AbstractAccTest {
new TaskUpdatePriorityBatchStatement(connection); new TaskUpdatePriorityBatchStatement(connection);
batchStatement.addPriorityUpdate(taskId, priorityUpdate); batchStatement.addPriorityUpdate(taskId, priorityUpdate);
batchStatement.executeBatch(); batchStatement.executeBatch();
if (!connection.getAutoCommit()) {
connection.commit(); connection.commit();
}
}); });
// then // then

View File

@ -97,9 +97,9 @@ class GetTaskCommentAccTest extends AbstractAccTest {
TaskComment taskComment = TaskComment taskComment =
taskService.getTaskComment("TCI:000000000000000000000000000000000000"); taskService.getTaskComment("TCI:000000000000000000000000000000000000");
String creatorLongName = String creatorFullName =
taskanaEngine.getUserService().getUser(taskComment.getCreator()).getFullName(); taskanaEngine.getUserService().getUser(taskComment.getCreator()).getFullName();
assertThat(taskComment).extracting(TaskComment::getCreatorLongName).isEqualTo(creatorLongName); assertThat(taskComment).extracting(TaskComment::getCreatorFullName).isEqualTo(creatorFullName);
} }
@WithAccessId(user = "admin") @WithAccessId(user = "admin")
@ -112,7 +112,7 @@ class GetTaskCommentAccTest extends AbstractAccTest {
TaskComment taskComment = TaskComment taskComment =
taskService.getTaskComment("TCI:000000000000000000000000000000000000"); taskService.getTaskComment("TCI:000000000000000000000000000000000000");
assertThat(taskComment).extracting(TaskComment::getCreatorLongName).isNull(); assertThat(taskComment).extracting(TaskComment::getCreatorFullName).isNull();
} }
@WithAccessId(user = "admin") @WithAccessId(user = "admin")
@ -128,11 +128,11 @@ class GetTaskCommentAccTest extends AbstractAccTest {
taskComments.forEach( taskComments.forEach(
wrap( wrap(
taskComment -> { taskComment -> {
String creatorLongName = String creatorFullName =
taskanaEngine.getUserService().getUser(taskComment.getCreator()).getFullName(); taskanaEngine.getUserService().getUser(taskComment.getCreator()).getFullName();
assertThat(taskComment) assertThat(taskComment)
.extracting(TaskComment::getCreatorLongName) .extracting(TaskComment::getCreatorFullName)
.isEqualTo(creatorLongName); .isEqualTo(creatorFullName);
})); }));
} }
@ -148,6 +148,6 @@ class GetTaskCommentAccTest extends AbstractAccTest {
taskComments.forEach( taskComments.forEach(
taskComment -> taskComment ->
assertThat(taskComment).extracting(TaskComment::getCreatorLongName).isNull()); assertThat(taskComment).extracting(TaskComment::getCreatorFullName).isNull());
} }
} }

View File

@ -7,6 +7,7 @@ import acceptance.AbstractAccTest;
import java.time.Instant; import java.time.Instant;
import java.util.List; import java.util.List;
import org.apache.ibatis.exceptions.TooManyResultsException; import org.apache.ibatis.exceptions.TooManyResultsException;
import org.assertj.core.api.ThrowableAssert.ThrowingCallable;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith; import org.junit.jupiter.api.extension.ExtendWith;
@ -16,6 +17,7 @@ import pro.taskana.common.test.security.WithAccessId;
import pro.taskana.task.api.TaskCommentQuery; import pro.taskana.task.api.TaskCommentQuery;
import pro.taskana.task.api.TaskCommentQueryColumnName; import pro.taskana.task.api.TaskCommentQueryColumnName;
import pro.taskana.task.api.models.TaskComment; import pro.taskana.task.api.models.TaskComment;
import pro.taskana.workbasket.api.exceptions.NotAuthorizedToQueryWorkbasketException;
/** Test for TaskComment queries. */ /** Test for TaskComment queries. */
@ExtendWith(JaasExtension.class) @ExtendWith(JaasExtension.class)
@ -45,6 +47,20 @@ class QueryTaskCommentAccTest extends AbstractAccTest {
assertThat(comments).hasSize(3); assertThat(comments).hasSize(3);
} }
@WithAccessId(user = "user-1-1")
@Test
void should_ThrowException_When_NotAuthorizedToReadTaskComments() {
ThrowingCallable call =
() ->
taskService
.createTaskCommentQuery()
.taskIdIn("TKI:000000000000000000000000000000000020")
.list();
assertThatThrownBy(call).isInstanceOf(NotAuthorizedToQueryWorkbasketException.class);
}
@WithAccessId(user = "admin") @WithAccessId(user = "admin")
@Test @Test
void should_FilterTaskComments_For_CreatorIn() { void should_FilterTaskComments_For_CreatorIn() {
@ -70,30 +86,6 @@ class QueryTaskCommentAccTest extends AbstractAccTest {
assertThat(comments).isEmpty(); assertThat(comments).isEmpty();
} }
@WithAccessId(user = "admin")
@Test
void should_FilterTaskComments_For_IdNotIn() {
List<TaskComment> comments =
taskService
.createTaskCommentQuery()
.idNotIn(
"TCI:000000000000000000000000000000000000",
"TCI:000000000000000000000000000000000002")
.list();
assertThat(comments).hasSize(11);
}
@WithAccessId(user = "admin")
@Test
void should_FilterTaskComments_For_TaskIdNotIn() {
List<TaskComment> comments =
taskService
.createTaskCommentQuery()
.taskIdNotIn("TKI:000000000000000000000000000000000000")
.list();
assertThat(comments).hasSize(10);
}
@WithAccessId(user = "admin") @WithAccessId(user = "admin")
@Test @Test
void should_FilterTaskComments_For_CreatorNotIn() { void should_FilterTaskComments_For_CreatorNotIn() {
@ -127,13 +119,6 @@ class QueryTaskCommentAccTest extends AbstractAccTest {
assertThat(comments).hasSize(4); assertThat(comments).hasSize(4);
} }
@WithAccessId(user = "admin")
@Test
void should_FilterTaskComments_For_TaskIdLike() {
List<TaskComment> comments = taskService.createTaskCommentQuery().taskIdLike("%00026%").list();
assertThat(comments).hasSize(2);
}
@WithAccessId(user = "admin") @WithAccessId(user = "admin")
@Test @Test
void should_FilterTaskComments_For_TextFieldLike() { void should_FilterTaskComments_For_TextFieldLike() {
@ -156,14 +141,6 @@ class QueryTaskCommentAccTest extends AbstractAccTest {
assertThat(comments).hasSize(9); assertThat(comments).hasSize(9);
} }
@WithAccessId(user = "admin")
@Test
void should_FilterTaskComments_For_TaskIdNotLike() {
List<TaskComment> comments =
taskService.createTaskCommentQuery().taskIdNotLike("%00026%").list();
assertThat(comments).hasSize(11);
}
@WithAccessId(user = "admin") @WithAccessId(user = "admin")
@Test @Test
void should_FilterTaskComments_For_TextFieldNotLike() { void should_FilterTaskComments_For_TextFieldNotLike() {
@ -234,7 +211,7 @@ class QueryTaskCommentAccTest extends AbstractAccTest {
List<String> listedValues = List<String> listedValues =
taskService taskService
.createTaskCommentQuery() .createTaskCommentQuery()
.listValues(TaskCommentQueryColumnName.CREATOR_LONG_NAME, null); .listValues(TaskCommentQueryColumnName.CREATOR_FULL_NAME, null);
assertThat(listedValues).hasSize(3); assertThat(listedValues).hasSize(3);
} }
@ -277,7 +254,7 @@ class QueryTaskCommentAccTest extends AbstractAccTest {
@WithAccessId(user = "admin") @WithAccessId(user = "admin")
@Test @Test
void should_ReturnSingleHistoryEvent_When_UsingSingleMethod() { void should_ReturnSingleTaskComment_When_UsingSingleMethod() {
TaskComment single = TaskComment single =
taskService taskService
.createTaskCommentQuery() .createTaskCommentQuery()
@ -309,7 +286,7 @@ class QueryTaskCommentAccTest extends AbstractAccTest {
String creatorFullName = String creatorFullName =
taskanaEngine.getUserService().getUser(taskComments.get(0).getCreator()).getFullName(); taskanaEngine.getUserService().getUser(taskComments.get(0).getCreator()).getFullName();
assertThat(taskComments.get(0)) assertThat(taskComments.get(0))
.extracting(TaskComment::getCreatorLongName) .extracting(TaskComment::getCreatorFullName)
.isEqualTo(creatorFullName); .isEqualTo(creatorFullName);
} }
@ -324,7 +301,7 @@ class QueryTaskCommentAccTest extends AbstractAccTest {
.list(); .list();
assertThat(taskComments).hasSize(1); assertThat(taskComments).hasSize(1);
assertThat(taskComments.get(0)).extracting(TaskComment::getCreatorLongName).isNull(); assertThat(taskComments.get(0)).extracting(TaskComment::getCreatorFullName).isNull();
} }
@WithAccessId(user = "admin") @WithAccessId(user = "admin")
@ -338,6 +315,6 @@ class QueryTaskCommentAccTest extends AbstractAccTest {
.list(); .list();
assertThat(taskComments).hasSize(1); assertThat(taskComments).hasSize(1);
assertThat(taskComments.get(0)).extracting(TaskComment::getCreatorLongName).isNull(); assertThat(taskComments.get(0)).extracting(TaskComment::getCreatorFullName).isNull();
} }
} }

View File

@ -51,7 +51,7 @@ class UpdateTaskCommentAccTest extends AbstractAccTest {
List<TaskComment> taskComments = List<TaskComment> taskComments =
taskService.getTaskComments("TKI:000000000000000000000000000000000000"); taskService.getTaskComments("TKI:000000000000000000000000000000000000");
assertThat(taskComments).hasSize(3); assertThat(taskComments).hasSize(3);
assertThat(taskComments.get(0).getTextField()).isEqualTo("some other text in textfield"); assertThat(taskComments.get(0).getTextField()).isEqualTo("some text in textfield");
TaskComment taskComment = TaskComment taskComment =
taskService.getTaskComment("TCI:000000000000000000000000000000000001"); taskService.getTaskComment("TCI:000000000000000000000000000000000001");
@ -64,7 +64,7 @@ class UpdateTaskCommentAccTest extends AbstractAccTest {
List<TaskComment> taskCommentsAfterUpdateAttempt = List<TaskComment> taskCommentsAfterUpdateAttempt =
taskService.getTaskComments("TKI:000000000000000000000000000000000000"); taskService.getTaskComments("TKI:000000000000000000000000000000000000");
assertThat(taskCommentsAfterUpdateAttempt.get(0).getTextField()) assertThat(taskCommentsAfterUpdateAttempt.get(0).getTextField())
.isEqualTo("some other text in textfield"); .isEqualTo("some text in textfield");
} }
@WithAccessId(user = "user-1-1") @WithAccessId(user = "user-1-1")

View File

@ -38,26 +38,6 @@ public class TaskCommentQueryFilterParameter implements QueryParameter<TaskComme
@JsonProperty("task-id") @JsonProperty("task-id")
private final String[] taskIdIn; private final String[] taskIdIn;
/** Filter by what the task id of the TaskComment shouldn't be. This is an exact match. */
@JsonProperty("task-id-not")
private final String[] taskIdNotIn;
/**
* Filter by the task id of the TaskComment. This results in a substring search (% is appended to
* the front and end of the requested value). Further SQL "LIKE" wildcard characters will be
* resolved correctly.
*/
@JsonProperty("task-id-like")
private final String[] taskIdLike;
/**
* Filter by what the task id of the TaskComment shouldn't be. This results in a substring search
* (% is appended to the front and end of the requested value). Further SQL "LIKE" wildcard
* characters will be resolved correctly.
*/
@JsonProperty("task-id-not-like")
private final String[] taskIdNotLike;
/** Filter by the creator of the TaskComment. This is an exact match. */ /** Filter by the creator of the TaskComment. This is an exact match. */
@JsonProperty("creator") @JsonProperty("creator")
private final String[] creatorIn; private final String[] creatorIn;
@ -141,9 +121,6 @@ public class TaskCommentQueryFilterParameter implements QueryParameter<TaskComme
"id-like", "id-like",
"id-not-like", "id-not-like",
"task-id", "task-id",
"task-id-not",
"task-id-like",
"task-id-not-like",
"creator", "creator",
"creator-not", "creator-not",
"creator-like", "creator-like",
@ -161,9 +138,6 @@ public class TaskCommentQueryFilterParameter implements QueryParameter<TaskComme
String[] idLike, String[] idLike,
String[] idNotLike, String[] idNotLike,
String[] taskIdIn, String[] taskIdIn,
String[] taskIdNotIn,
String[] taskIdLike,
String[] taskIdNotLike,
String[] creatorIn, String[] creatorIn,
String[] creatorNotIn, String[] creatorNotIn,
String[] creatorLike, String[] creatorLike,
@ -179,9 +153,6 @@ public class TaskCommentQueryFilterParameter implements QueryParameter<TaskComme
this.idLike = idLike; this.idLike = idLike;
this.idNotLike = idNotLike; this.idNotLike = idNotLike;
this.taskIdIn = taskIdIn; this.taskIdIn = taskIdIn;
this.taskIdNotIn = taskIdNotIn;
this.taskIdLike = taskIdLike;
this.taskIdNotLike = taskIdNotLike;
this.creatorIn = creatorIn; this.creatorIn = creatorIn;
this.creatorNotIn = creatorNotIn; this.creatorNotIn = creatorNotIn;
this.creatorLike = creatorLike; this.creatorLike = creatorLike;
@ -203,13 +174,6 @@ public class TaskCommentQueryFilterParameter implements QueryParameter<TaskComme
.map(this::wrapElementsInLikeStatement) .map(this::wrapElementsInLikeStatement)
.ifPresent(query::idNotLike); .ifPresent(query::idNotLike);
Optional.ofNullable(taskIdIn).ifPresent(query::taskIdIn); Optional.ofNullable(taskIdIn).ifPresent(query::taskIdIn);
Optional.ofNullable(taskIdNotIn).ifPresent(query::taskIdNotIn);
Optional.ofNullable(taskIdLike)
.map(this::wrapElementsInLikeStatement)
.ifPresent(query::taskIdLike);
Optional.ofNullable(taskIdNotLike)
.map(this::wrapElementsInLikeStatement)
.ifPresent(query::taskIdNotLike);
Optional.ofNullable(creatorIn).ifPresent(query::creatorIn); Optional.ofNullable(creatorIn).ifPresent(query::creatorIn);
Optional.ofNullable(creatorNotIn).ifPresent(query::creatorNotIn); Optional.ofNullable(creatorNotIn).ifPresent(query::creatorNotIn);
Optional.ofNullable(creatorLike) Optional.ofNullable(creatorLike)

View File

@ -38,7 +38,7 @@ public class TaskCommentRepresentationModelAssembler
repModel.setTaskId(taskComment.getTaskId()); repModel.setTaskId(taskComment.getTaskId());
repModel.setTextField(taskComment.getTextField()); repModel.setTextField(taskComment.getTextField());
repModel.setCreator(taskComment.getCreator()); repModel.setCreator(taskComment.getCreator());
repModel.setCreatorLongName(taskComment.getCreatorLongName()); repModel.setCreatorFullName(taskComment.getCreatorFullName());
repModel.setCreated(taskComment.getCreated()); repModel.setCreated(taskComment.getCreated());
repModel.setModified(taskComment.getModified()); repModel.setModified(taskComment.getModified());
try { try {
@ -63,7 +63,7 @@ public class TaskCommentRepresentationModelAssembler
taskComment.setId(repModel.getTaskCommentId()); taskComment.setId(repModel.getTaskCommentId());
taskComment.setTextField(repModel.getTextField()); taskComment.setTextField(repModel.getTextField());
taskComment.setCreator(repModel.getCreator()); taskComment.setCreator(repModel.getCreator());
taskComment.setCreatorLongName(repModel.getCreatorLongName()); taskComment.setCreatorFullName(repModel.getCreatorFullName());
taskComment.setCreated(repModel.getCreated()); taskComment.setCreated(repModel.getCreated());
taskComment.setModified(repModel.getModified()); taskComment.setModified(repModel.getModified());
return taskComment; return taskComment;

View File

@ -18,7 +18,7 @@ public class TaskCommentRepresentationModel
/** The creator of the task comment. */ /** The creator of the task comment. */
private String creator; private String creator;
/** The long name of the task comment creator. */ /** The long name of the task comment creator. */
private String creatorLongName; private String creatorFullName;
/** The creation timestamp in the system. */ /** The creation timestamp in the system. */
private Instant created; private Instant created;
/** Timestamp of the last task comment modification. */ /** Timestamp of the last task comment modification. */
@ -56,12 +56,12 @@ public class TaskCommentRepresentationModel
this.creator = creator; this.creator = creator;
} }
public String getCreatorLongName() { public String getCreatorFullName() {
return creatorLongName; return creatorFullName;
} }
public void setCreatorLongName(String creatorLongName) { public void setCreatorFullName(String creatorFullName) {
this.creatorLongName = creatorLongName; this.creatorFullName = creatorFullName;
} }
public Instant getCreated() { public Instant getCreated() {

View File

@ -57,16 +57,21 @@ class TaskCommentControllerIntTest {
} }
@Test @Test
void should_ReturnEmptyTaskCommentList_When_TaskIstNotVisible() { void should_FailToReturnTaskComments_When_TaskIstNotVisible() {
String url = String url =
restHelper.toUrl( restHelper.toUrl(
RestEndpoints.URL_TASK_COMMENTS, "TKI:000000000000000000000000000000000004"); RestEndpoints.URL_TASK_COMMENTS, "TKI:000000000000000000000000000000000004");
HttpEntity<Object> auth = new HttpEntity<>(RestHelper.generateHeadersForUser("user-1-1")); HttpEntity<Object> auth = new HttpEntity<>(RestHelper.generateHeadersForUser("user-1-1"));
ResponseEntity<TaskCommentCollectionRepresentationModel> taskComments = ThrowingCallable httpCall =
() -> {
TEMPLATE.exchange(url, HttpMethod.GET, auth, TASK_COMMENT_PAGE_MODEL_TYPE); TEMPLATE.exchange(url, HttpMethod.GET, auth, TASK_COMMENT_PAGE_MODEL_TYPE);
};
assertThat(taskComments.getBody().getContent()).isEmpty(); assertThatThrownBy(httpCall)
.extracting(HttpStatusCodeException.class::cast)
.extracting(HttpStatusCodeException::getStatusCode)
.isEqualTo(HttpStatus.FORBIDDEN);
} }
@Test @Test

View File

@ -34,7 +34,7 @@ class TaskCommentRepresentationModelAssemblerTest {
taskComment.setId("taskCommentId"); taskComment.setId("taskCommentId");
taskComment.setCreator("user-1-1"); taskComment.setCreator("user-1-1");
taskComment.setCreatorLongName("longName"); taskComment.setCreatorFullName("fullName");
taskComment.setTextField("this is a task comment"); taskComment.setTextField("this is a task comment");
taskComment.setCreated(Instant.parse("2010-01-01T12:00:00Z")); taskComment.setCreated(Instant.parse("2010-01-01T12:00:00Z"));
taskComment.setModified(Instant.parse("2011-11-11T11:00:00Z")); taskComment.setModified(Instant.parse("2011-11-11T11:00:00Z"));
@ -52,7 +52,7 @@ class TaskCommentRepresentationModelAssemblerTest {
repModel.setTaskId("TKI:000000000000000000000000000000000000"); repModel.setTaskId("TKI:000000000000000000000000000000000000");
repModel.setTaskCommentId("TCI:000000000000000000000000000000000000"); repModel.setTaskCommentId("TCI:000000000000000000000000000000000000");
repModel.setCreator("user-1-1"); repModel.setCreator("user-1-1");
repModel.setCreatorLongName("longName"); repModel.setCreatorFullName("fullName");
repModel.setCreated(Instant.parse("2010-01-01T12:00:00Z")); repModel.setCreated(Instant.parse("2010-01-01T12:00:00Z"));
repModel.setModified(Instant.parse("2011-11-11T11:00:00Z")); repModel.setModified(Instant.parse("2011-11-11T11:00:00Z"));
repModel.setTextField("textField"); repModel.setTextField("textField");
@ -68,7 +68,7 @@ class TaskCommentRepresentationModelAssemblerTest {
(TaskCommentImpl) taskService.newTaskComment("TKI:000000000000000000000000000000000000"); (TaskCommentImpl) taskService.newTaskComment("TKI:000000000000000000000000000000000000");
taskComment.setId("taskCommentId"); taskComment.setId("taskCommentId");
taskComment.setCreator("user-1-1"); taskComment.setCreator("user-1-1");
taskComment.setCreatorLongName("longName"); taskComment.setCreatorFullName("fullName");
taskComment.setTextField("this is a task comment"); taskComment.setTextField("this is a task comment");
taskComment.setCreated(Instant.parse("2010-01-01T12:00:00Z")); taskComment.setCreated(Instant.parse("2010-01-01T12:00:00Z"));
taskComment.setModified(Instant.parse("2011-11-11T11:00:00Z")); taskComment.setModified(Instant.parse("2011-11-11T11:00:00Z"));
@ -89,7 +89,7 @@ class TaskCommentRepresentationModelAssemblerTest {
assertThat(taskComment.getTaskId()).isEqualTo(repModel.getTaskId()); assertThat(taskComment.getTaskId()).isEqualTo(repModel.getTaskId());
assertThat(taskComment.getTextField()).isEqualTo(repModel.getTextField()); assertThat(taskComment.getTextField()).isEqualTo(repModel.getTextField());
assertThat(taskComment.getCreator()).isEqualTo(repModel.getCreator()); assertThat(taskComment.getCreator()).isEqualTo(repModel.getCreator());
assertThat(taskComment.getCreatorLongName()).isEqualTo(repModel.getCreatorLongName()); assertThat(taskComment.getCreatorFullName()).isEqualTo(repModel.getCreatorFullName());
assertThat(taskComment.getCreated()).isEqualTo(repModel.getCreated()); assertThat(taskComment.getCreated()).isEqualTo(repModel.getCreated());
assertThat(taskComment.getModified()).isEqualTo(repModel.getModified()); assertThat(taskComment.getModified()).isEqualTo(repModel.getModified());
} }