TSK-1957: migrate UserServiceAccTest to new test-api

This commit is contained in:
Norman Schmidt 2022-09-22 11:42:27 +02:00 committed by norman-schmidt
parent 50915ef4e1
commit d6da6f8124
3 changed files with 321 additions and 244 deletions

View File

@ -0,0 +1,321 @@
package acceptance.user;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
import java.util.Arrays;
import java.util.Iterator;
import java.util.stream.Stream;
import org.assertj.core.api.ThrowableAssert.ThrowingCallable;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.DynamicTest;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.TestFactory;
import org.junit.jupiter.api.function.ThrowingConsumer;
import pro.taskana.common.api.TaskanaRole;
import pro.taskana.common.api.exceptions.InvalidArgumentException;
import pro.taskana.common.api.exceptions.MismatchedRoleException;
import pro.taskana.testapi.TaskanaInject;
import pro.taskana.testapi.TaskanaIntegrationTest;
import pro.taskana.testapi.security.WithAccessId;
import pro.taskana.user.api.UserService;
import pro.taskana.user.api.exceptions.UserAlreadyExistException;
import pro.taskana.user.api.exceptions.UserNotFoundException;
import pro.taskana.user.api.models.User;
/** Acceptance test which tests the functionality of the UserService. */
@TaskanaIntegrationTest
class UserServiceAccTest {
@TaskanaInject UserService userService;
protected User createExampleUser(String id) {
User user = userService.newUser();
user.setId(id);
user.setFirstName("Hans");
user.setLastName("Georg");
user.setFullName("Georg, Hans");
user.setLongName("Georg, Hans - (user-10-20)");
user.setEmail("hans.georg@web.com");
user.setPhone("1234");
user.setMobilePhone("01574275632");
user.setOrgLevel4("level4");
user.setOrgLevel3("level3");
user.setOrgLevel2("level2");
user.setOrgLevel1("level1");
user.setData("ab");
return user;
}
@WithAccessId(user = "admin")
@BeforeAll
void setup() throws Exception {
User testuser1 = userService.newUser();
testuser1.setId("testuser1");
testuser1.setFirstName("Max");
testuser1.setLastName("Mustermann");
testuser1.setFullName("Max, Mustermann");
testuser1.setLongName("Max, Mustermann - (testuser1)");
testuser1.setEmail("max.mustermann@web.com");
testuser1.setPhone("040-2951854");
testuser1.setMobilePhone("015637683197");
testuser1.setOrgLevel4("Novatec");
testuser1.setOrgLevel3("BPM");
testuser1.setOrgLevel2("Human Workflow");
testuser1.setOrgLevel1("TASKANA");
testuser1.setData("");
userService.createUser(testuser1);
User testuser2 = userService.newUser();
testuser2.setId("testuser2");
testuser2.setFirstName("Elena");
testuser2.setLastName("Eifrig");
testuser2.setFullName("Elena, Eifrig");
testuser2.setLongName("Elena, Eifrig - (testuser2)");
testuser2.setEmail("elena.eifrig@web.com");
testuser2.setPhone("040-2951854");
testuser2.setMobilePhone("015637683197");
testuser2.setOrgLevel4("Novatec");
testuser2.setOrgLevel3("BPM");
testuser2.setOrgLevel2("Human Workflow");
testuser2.setOrgLevel1("TASKANA");
testuser2.setData("");
userService.createUser(testuser2);
}
@WithAccessId(user = "user-1-2")
@Test
void should_ReturnUserWithAllFields_When_IdExisting() throws Exception {
User userInDatabase = userService.getUser("testuser1");
User userToCompare = userService.newUser();
userToCompare.setId("testuser1");
userToCompare.setFirstName("Max");
userToCompare.setLastName("Mustermann");
userToCompare.setFullName("Max, Mustermann");
userToCompare.setLongName("Max, Mustermann - (testuser1)");
userToCompare.setEmail("max.mustermann@web.com");
userToCompare.setPhone("040-2951854");
userToCompare.setMobilePhone("015637683197");
userToCompare.setOrgLevel4("Novatec");
userToCompare.setOrgLevel3("BPM");
userToCompare.setOrgLevel2("Human Workflow");
userToCompare.setOrgLevel1("TASKANA");
userToCompare.setData("");
assertThat(userInDatabase).hasNoNullFieldsOrProperties().isEqualTo(userToCompare);
}
@WithAccessId(user = "user-1-2")
@Test
void should_ThrowUserNotFoundException_When_TryingToGetUserWithNonExistingId() {
ThrowingCallable callable = () -> userService.getUser("NOT_EXISTING");
assertThatThrownBy(callable)
.isInstanceOf(UserNotFoundException.class)
.hasFieldOrPropertyWithValue("userId", "NOT_EXISTING")
.hasMessage("User with id 'NOT_EXISTING' was not found.");
}
@WithAccessId(user = "admin")
@Test
void should_InsertUserInDatabase_When_CreatingUser() throws Exception {
User userToCreate = createExampleUser("user-10-20");
userService.createUser(userToCreate);
User userInDatabse = userService.getUser(userToCreate.getId());
assertThat(userToCreate)
.hasNoNullFieldsOrProperties()
.isNotSameAs(userInDatabse)
.isEqualTo(userInDatabse);
}
@WithAccessId(user = "admin")
@Test
void should_SetTheLongAndFullNameAccordingToRules_When_CreatingUserWithThoseFieldsEmpty()
throws Exception {
User userToCreate = createExampleUser("user-10-21");
userToCreate.setLongName(null);
userToCreate.setFullName(null);
String fullName = userToCreate.getLastName() + ", " + userToCreate.getFirstName();
String longName =
userToCreate.getLastName()
+ ", "
+ userToCreate.getFirstName()
+ " - ("
+ userToCreate.getId()
+ ")";
User createdUser = userService.createUser(userToCreate);
assertThat(createdUser.getLongName()).isEqualTo(longName);
assertThat(createdUser.getFullName()).isEqualTo(fullName);
}
@WithAccessId(user = "admin")
@Test
void should_ThrowInvalidArgumentException_When_TryingToCreateUserWithFirstOrLastNameNull()
throws Exception {
User userToCreate = createExampleUser("user-10-20");
userToCreate.setFirstName(null);
ThrowingCallable callable = () -> userService.createUser(userToCreate);
assertThatThrownBy(callable)
.isInstanceOf(InvalidArgumentException.class)
.hasMessage("First and last name of User must be set or empty.");
}
@WithAccessId(user = "admin")
@Test
void should_ThrowInvalidArgumentException_When_TryingToCreateUserWithLastNameNull() {
User userToCreate = createExampleUser("user-10-20");
userToCreate.setLastName(null);
ThrowingCallable callable = () -> userService.createUser(userToCreate);
assertThatThrownBy(callable)
.isInstanceOf(InvalidArgumentException.class)
.hasMessage("First and last name of User must be set or empty.");
}
@WithAccessId(user = "admin")
@TestFactory
Stream<DynamicTest> should_ThrowInvalidArgumentException_When_TryingToCreateUserWithNotSetId()
throws Exception {
Iterator<String> iterator = Arrays.asList("", null).iterator();
ThrowingConsumer<String> test =
userId -> {
User userToCreate = createExampleUser("user-10-20");
userToCreate.setId(userId);
ThrowingCallable callable = () -> userService.createUser(userToCreate);
assertThatThrownBy(callable)
.isInstanceOf(InvalidArgumentException.class)
.hasMessage("UserId must not be empty when creating User.");
};
return DynamicTest.stream(iterator, c -> "for " + c, test);
}
@WithAccessId(user = "admin")
@Test
void should_ThrowUserAlreadyExistException_When_TryingToCreateUserWithExistingId() {
User userToCreate = createExampleUser("testuser1"); // existing userId
ThrowingCallable callable = () -> userService.createUser(userToCreate);
assertThatThrownBy(callable)
.isInstanceOf(UserAlreadyExistException.class)
.hasFieldOrPropertyWithValue("userId", "testuser1")
.hasMessage("User with id 'testuser1' already exists.");
}
@WithAccessId(user = "user-1-2")
@Test
void should_ThrowNotAuthorizedException_When_TryingToCreateUserWithoutAdminRole() {
User userToCreate = createExampleUser("user-10-22");
ThrowingCallable callable = () -> userService.createUser(userToCreate);
assertThatThrownBy(callable)
.isInstanceOf(MismatchedRoleException.class)
.hasFieldOrPropertyWithValue("currentUserId", "user-1-2")
.hasFieldOrPropertyWithValue(
"roles", new TaskanaRole[] {TaskanaRole.BUSINESS_ADMIN, TaskanaRole.ADMIN})
.hasMessage(
"Not authorized. The current user 'user-1-2' is not member of role(s) "
+ "'[BUSINESS_ADMIN, ADMIN]'.");
}
@WithAccessId(user = "admin")
@Test
void should_UpdateUserInDatabase_When_IdExisting() throws Exception {
User userToUpdate = createExampleUser("testuser1"); // existing userId
userService.updateUser(userToUpdate);
User userInDatabase = userService.getUser("testuser1");
assertThat(userToUpdate).isNotSameAs(userInDatabase).isEqualTo(userInDatabase);
}
@WithAccessId(user = "admin")
@Test
void should_ThrowUserNotFoundException_When_TryingToUpdateUserWithNonExistingId() {
User userToUpdate = createExampleUser("NOT_EXISTING");
ThrowingCallable callable = () -> userService.updateUser(userToUpdate);
assertThatThrownBy(callable)
.isInstanceOf(UserNotFoundException.class)
.hasFieldOrPropertyWithValue("userId", "NOT_EXISTING")
.hasMessage("User with id 'NOT_EXISTING' was not found.");
}
@WithAccessId(user = "user-1-2")
@Test
void should_ThrowNotAuthorizedException_When_TryingToUpdateUserWithNoAdminRole() {
User userToUpdate = createExampleUser("testuser1"); // existing userId
ThrowingCallable callable = () -> userService.updateUser(userToUpdate);
assertThatThrownBy(callable)
.isInstanceOf(MismatchedRoleException.class)
.hasFieldOrPropertyWithValue("currentUserId", "user-1-2")
.hasFieldOrPropertyWithValue(
"roles", new TaskanaRole[] {TaskanaRole.BUSINESS_ADMIN, TaskanaRole.ADMIN})
.hasMessage(
"Not authorized. The current user 'user-1-2' is not member of role(s) "
+ "'[BUSINESS_ADMIN, ADMIN]'.");
}
@WithAccessId(user = "admin")
@Test
void should_DeleteUserFromDatabase_When_IdExisting() throws Exception {
String id = "testuser2";
userService.getUser(id); // User existing
userService.deleteUser(id);
ThrowingCallable callable = () -> userService.getUser(id); // User deleted
assertThatThrownBy(callable)
.isInstanceOf(UserNotFoundException.class)
.hasFieldOrPropertyWithValue("userId", "testuser2")
.hasMessage("User with id 'testuser2' was not found.");
}
@WithAccessId(user = "admin")
@Test
void should_ThrowUserNotFoundException_When_TryingToDeleteUserWithNonExistingId() {
ThrowingCallable callable = () -> userService.deleteUser("NOT_EXISTING");
assertThatThrownBy(callable)
.isInstanceOf(UserNotFoundException.class)
.hasFieldOrPropertyWithValue("userId", "NOT_EXISTING")
.hasMessage("User with id 'NOT_EXISTING' was not found.");
}
@WithAccessId(user = "user-1-2")
@Test
void should_ThrowNotAuthorizedException_When_TryingToDeleteUserWithNoAdminRole() {
ThrowingCallable callable = () -> userService.deleteUser("testuser1");
assertThatThrownBy(callable)
.isInstanceOf(MismatchedRoleException.class)
.hasFieldOrPropertyWithValue("currentUserId", "user-1-2")
.hasFieldOrPropertyWithValue(
"roles", new TaskanaRole[] {TaskanaRole.BUSINESS_ADMIN, TaskanaRole.ADMIN})
.hasMessage(
"Not authorized. The current user 'user-1-2' is not member of role(s) "
+ "'[BUSINESS_ADMIN, ADMIN]'.");
}
}

View File

@ -28,7 +28,6 @@ import pro.taskana.task.api.models.Attachment;
import pro.taskana.task.api.models.ObjectReference; import pro.taskana.task.api.models.ObjectReference;
import pro.taskana.task.internal.TaskServiceImpl; import pro.taskana.task.internal.TaskServiceImpl;
import pro.taskana.task.internal.models.ObjectReferenceImpl; import pro.taskana.task.internal.models.ObjectReferenceImpl;
import pro.taskana.user.api.models.User;
/** Base class for all acceptance tests. */ /** Base class for all acceptance tests. */
public abstract class AbstractAccTest { public abstract class AbstractAccTest {
@ -120,25 +119,6 @@ public abstract class AbstractAccTest {
return attachment; return attachment;
} }
protected User createExampleUser(String id) {
User user = taskanaEngine.getUserService().newUser();
user.setId(id);
user.setFirstName("Hans");
user.setLastName("Georg");
user.setFullName("Georg, Hans");
user.setLongName("Georg, Hans - (user-10-20)");
user.setEmail("hans.georg@web.com");
user.setPhone("1234");
user.setMobilePhone("01574275632");
user.setOrgLevel4("level4");
user.setOrgLevel3("level3");
user.setOrgLevel2("level2");
user.setOrgLevel1("level1");
user.setData("ab");
return user;
}
protected TimeInterval toDaysInterval() { protected TimeInterval toDaysInterval() {
Instant begin = Instant begin =
ZonedDateTime.of(LocalDate.now(ZoneId.of("UTC")), LocalTime.MIN, ZoneId.of("UTC")) ZonedDateTime.of(LocalDate.now(ZoneId.of("UTC")), LocalTime.MIN, ZoneId.of("UTC"))

View File

@ -1,224 +0,0 @@
package acceptance.user;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
import acceptance.AbstractAccTest;
import java.util.Arrays;
import java.util.Iterator;
import java.util.stream.Stream;
import org.assertj.core.api.ThrowableAssert.ThrowingCallable;
import org.junit.jupiter.api.DynamicTest;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.TestFactory;
import org.junit.jupiter.api.extension.ExtendWith;
import org.junit.jupiter.api.function.ThrowingConsumer;
import pro.taskana.common.api.exceptions.InvalidArgumentException;
import pro.taskana.common.api.exceptions.MismatchedRoleException;
import pro.taskana.common.test.security.JaasExtension;
import pro.taskana.common.test.security.WithAccessId;
import pro.taskana.user.api.UserService;
import pro.taskana.user.api.exceptions.UserAlreadyExistException;
import pro.taskana.user.api.exceptions.UserNotFoundException;
import pro.taskana.user.api.models.User;
/** Acceptance test which tests the functionality of the UserService. */
@ExtendWith(JaasExtension.class)
class UserServiceAccTest extends AbstractAccTest {
private static final UserService USER_SERVICE = taskanaEngine.getUserService();
@WithAccessId(user = "user-1-2")
@Test
void should_ReturnUserWithAllFields_When_IdExisting() throws Exception {
User user = USER_SERVICE.getUser("teamlead-1");
assertThat(user.getFirstName()).isEqualTo("Titus");
assertThat(user.getLastName()).isEqualTo("Toll");
assertThat(user.getFullName()).isEqualTo("Toll, Titus");
assertThat(user.getLongName()).isEqualTo("Toll, Titus - (teamlead-1)");
assertThat(user.getEmail()).isEqualTo("titus.toll@web.de");
assertThat(user.getPhone()).isEqualTo("040-2951854");
assertThat(user.getMobilePhone()).isEqualTo("015637683197");
assertThat(user.getOrgLevel4()).isEqualTo("Novatec");
assertThat(user.getOrgLevel3()).isEqualTo("BPM");
assertThat(user.getOrgLevel2()).isEqualTo("Human Workflow");
assertThat(user.getOrgLevel1()).isEqualTo("TASKANA");
assertThat(user.getData()).isEqualTo("xy");
}
@WithAccessId(user = "user-1-2")
@Test
void should_ThrowUserNotFoundException_When_TryingToGetUserWithNonExistingId() {
ThrowingCallable callable = () -> USER_SERVICE.getUser("NOT_EXISTING");
assertThatThrownBy(callable)
.isInstanceOf(UserNotFoundException.class)
.hasMessage("User with id 'NOT_EXISTING' was not found.");
}
@WithAccessId(user = "admin")
@Test
void should_InsertUserInDatabase_When_CreatingUser() throws Exception {
User userToCreate = createExampleUser("user-10-20");
USER_SERVICE.createUser(userToCreate);
User userInDatabse = USER_SERVICE.getUser(userToCreate.getId());
assertThat(userToCreate)
.hasNoNullFieldsOrProperties()
.isNotSameAs(userInDatabse)
.isEqualTo(userInDatabse);
}
@WithAccessId(user = "admin")
@Test
void should_SetTheLongAndFullNameAccordingToRules_When_CreatingUserWithThoseFieldsEmpty()
throws Exception {
User userToCreate = createExampleUser("user-10-21");
userToCreate.setLongName(null);
userToCreate.setFullName(null);
String fullName = userToCreate.getLastName() + ", " + userToCreate.getFirstName();
String longName =
userToCreate.getLastName()
+ ", "
+ userToCreate.getFirstName()
+ " - ("
+ userToCreate.getId()
+ ")";
User createdUser = USER_SERVICE.createUser(userToCreate);
assertThat(createdUser.getLongName()).isEqualTo(longName);
assertThat(createdUser.getFullName()).isEqualTo(fullName);
}
@WithAccessId(user = "admin")
@Test
void should_ThrowInvalidArgumentException_When_TryingToCreateUserWithFirstOrLastNameNull()
throws Exception {
User userToCreate = createExampleUser("user-10-20");
userToCreate.setFirstName(null);
ThrowingCallable callable = () -> USER_SERVICE.createUser(userToCreate);
assertThatThrownBy(callable)
.isInstanceOf(InvalidArgumentException.class)
.hasMessage("First and last name of User must be set or empty.");
userToCreate.setFirstName("xy");
userToCreate.setLastName(null);
callable = () -> USER_SERVICE.createUser(userToCreate);
assertThatThrownBy(callable).isInstanceOf(InvalidArgumentException.class);
}
@WithAccessId(user = "admin")
@TestFactory
Stream<DynamicTest> should_ThrowInvalidArgumentException_When_TryingToCreateUserWithNotSetId()
throws Exception {
Iterator<String> iterator = Arrays.asList("", null).iterator();
ThrowingConsumer<String> test =
userId -> {
User userToCreate = createExampleUser("user-10-20");
userToCreate.setId(userId);
ThrowingCallable callable = () -> USER_SERVICE.createUser(userToCreate);
assertThatThrownBy(callable)
.isInstanceOf(InvalidArgumentException.class)
.hasMessage("UserId must not be empty when creating User.");
};
return DynamicTest.stream(iterator, c -> "for " + c, test);
}
@WithAccessId(user = "admin")
@Test
void should_ThrowUserAlreadyExistException_When_TryingToCreateUserWithExistingId() {
User userToCreate = createExampleUser("teamlead-1"); // existing userId
ThrowingCallable callable = () -> USER_SERVICE.createUser(userToCreate);
assertThatThrownBy(callable)
.isInstanceOf(UserAlreadyExistException.class)
.hasMessage("User with id 'teamlead-1' already exists.");
}
@WithAccessId(user = "user-1-2")
@Test
void should_ThrowNotAuthorizedException_When_TryingToCreateUserWithoutAdminRole() {
User userToCreate = createExampleUser("user-10-22");
ThrowingCallable callable = () -> USER_SERVICE.createUser(userToCreate);
assertThatThrownBy(callable)
.isInstanceOf(MismatchedRoleException.class)
.hasMessage(
"Not authorized. The current user 'user-1-2' is not member of role(s) "
+ "'[BUSINESS_ADMIN, ADMIN]'.");
}
@WithAccessId(user = "admin")
@Test
void should_UpdateUserInDatabase_When_IdExisting() throws Exception {
User userToUpdate = createExampleUser("teamlead-1"); // existing userId
USER_SERVICE.updateUser(userToUpdate);
User userInDatabase = USER_SERVICE.getUser("teamlead-1");
assertThat(userToUpdate)
.hasNoNullFieldsOrProperties()
.isNotSameAs(userInDatabase)
.isEqualTo(userInDatabase);
}
@WithAccessId(user = "admin")
@Test
void should_ThrowUserNotFoundException_When_TryingToUpdateUserWithNonExistingId() {
User userToUpdate = createExampleUser("NOT_EXISTING");
ThrowingCallable callable = () -> USER_SERVICE.updateUser(userToUpdate);
assertThatThrownBy(callable)
.isInstanceOf(UserNotFoundException.class)
.hasMessage("User with id 'NOT_EXISTING' was not found.");
}
@WithAccessId(user = "user-1-2")
@Test
void should_ThrowNotAuthorizedException_When_TryingToUpdateUserWithNoAdminRole() {
User userToUpdate = createExampleUser("teamlead-1"); // existing userId
ThrowingCallable callable = () -> USER_SERVICE.updateUser(userToUpdate);
assertThatThrownBy(callable)
.isInstanceOf(MismatchedRoleException.class)
.hasMessage(
"Not authorized. The current user 'user-1-2' is not member of role(s) "
+ "'[BUSINESS_ADMIN, ADMIN]'.");
}
@WithAccessId(user = "admin")
@Test
void should_DeleteUserFromDatabase_When_IdExisting() throws Exception {
String id = "teamlead-1";
USER_SERVICE.getUser(id); // User existing
USER_SERVICE.deleteUser(id);
ThrowingCallable callable = () -> USER_SERVICE.getUser(id); // User deleted
assertThatThrownBy(callable).isInstanceOf(UserNotFoundException.class);
}
@WithAccessId(user = "admin")
@Test
void should_ThrowUserNotFoundException_When_TryingToDeleteUserWithNonExistingId() {
ThrowingCallable callable = () -> USER_SERVICE.deleteUser("NOT_EXISTING");
assertThatThrownBy(callable)
.isInstanceOf(UserNotFoundException.class)
.hasMessage("User with id 'NOT_EXISTING' was not found.");
}
@WithAccessId(user = "user-1-2")
@Test
void should_ThrowNotAuthorizedException_When_TryingToDeleteUserWithNoAdminRole() {
ThrowingCallable callable = () -> USER_SERVICE.deleteUser("teamlead-1");
assertThatThrownBy(callable)
.isInstanceOf(MismatchedRoleException.class)
.hasMessage(
"Not authorized. The current user 'user-1-2' is not member of role(s) "
+ "'[BUSINESS_ADMIN, ADMIN]'.");
}
}