Skip to content
Snippets Groups Projects
Commit bf634d81 authored by OZGCloud's avatar OZGCloud
Browse files

OZG-3276 OZG-3319 cleanup; add Tests; refactor ITCase

parent c543bae1
No related branches found
No related tags found
No related merge requests found
......@@ -39,6 +39,7 @@ import io.quarkus.mongodb.panache.PanacheMongoRepository;
@ApplicationScoped
@KopLogging
class UserRepository implements PanacheMongoRepository<User> {
private static final String LIKE_OR = " like ?1 or ";
private static final String SEARCH_QUERY = LASTNAME_FIELD + LIKE_OR +
FIRSTNAME_FIELD + LIKE_OR +
......
......@@ -23,7 +23,6 @@
*/
package de.itvsh.kop.user;
import static de.itvsh.kop.user.UserTestFactory.*;
import static org.assertj.core.api.Assertions.*;
import java.util.List;
......@@ -48,33 +47,31 @@ class UserProfileResourceAssemblerTest {
@Nested
class TestToUserProfileResource {
private static final User USER = createWithId();
@Test
void shouldAddSelfLink() {
var res = assembler.toUserProfileResource(USER, USER_MANAGER_URL);
var res = assembler.toUserProfileResource(UserTestFactory.create(), USER_MANAGER_URL);
assertThat(res.getLinks().get(UserProfileResourceAssembler.REL_SELF))
.isNotNull()
.hasFieldOrPropertyWithValue("href",
USER_MANAGER_URL + UserProfileResource.USER_PROFILE_RESOURCE_PATH_TEMPLATE.replace("{id}", ID.toHexString()));
USER_MANAGER_URL + UserProfileResource.USER_PROFILE_RESOURCE_PATH_TEMPLATE.replace("{id}", UserTestFactory.ID_STR));
}
@Test
void shouldAddSettingsLink() {
var res = assembler.toUserProfileResource(USER, USER_MANAGER_URL);
var res = assembler.toUserProfileResource(UserTestFactory.create(), USER_MANAGER_URL);
assertThat(res.getLinks().get(UserProfileResourceAssembler.REL_SETTINGS))
.isNotNull()
.hasFieldOrPropertyWithValue("href",
USER_MANAGER_URL + UserSettingsResource.SETTINGS_LINK_PATTERN.replace("{id}", ID.toHexString()));
USER_MANAGER_URL + UserSettingsResource.SETTINGS_LINK_PATTERN.replace("{id}", UserTestFactory.ID_STR));
}
}
@DisplayName("To Userprofile Resource List")
@Nested
class TestToUserProfileResourceList {
private static final List<User> USERS = List.of(createWithId(), createWithId());
private static final List<User> USERS = List.of(UserTestFactory.create(), UserTestFactory.create());
@Test
void shouldAddSelfLink() {
......
......@@ -26,8 +26,8 @@ package de.itvsh.kop.user;
import static de.itvsh.kop.user.UserTestFactory.*;
import static io.restassured.RestAssured.*;
import static org.hamcrest.CoreMatchers.*;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.*;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.when;
import java.util.stream.Stream;
......@@ -55,15 +55,18 @@ class UserProfileResourceITCase {
@InjectMock
UserService userService;
private String settingsUrlWithUserId = HTTP_LOCALHOST + UserSettingsResource.SETTINGS_LINK_PATTERN.replace("{id}", ID.toHexString());
private String urlWithUserId = HTTP_LOCALHOST + UserProfileResource.USER_PROFILE_RESOURCE_PATH_TEMPLATE.replace("{id}", ID.toHexString());
private String settingsUrlWithUserId = HTTP_LOCALHOST
+ UserSettingsResource.SETTINGS_LINK_PATTERN.replace("{id}", UserTestFactory.ID_STR);
private String urlWithUserId = HTTP_LOCALHOST
+ UserProfileResource.USER_PROFILE_RESOURCE_PATH_TEMPLATE.replace("{id}", UserTestFactory.ID_STR);
@DisplayName("Test get user by id")
@Nested
class TestGetUser {
@BeforeEach
void init() {
when(userService.getById(any())).thenReturn(createWithId());
when(userService.getById(any())).thenReturn(UserTestFactory.create());
}
@Test
......@@ -71,7 +74,7 @@ class UserProfileResourceITCase {
given()
.when()
.accept(RestMediaType.APPLICATION_HAL_JSON)
.get(UserProfileResource.USERS_PATH + "/{id}", ID.toHexString())
.get(UserProfileResource.USERS_PATH + "/{id}", UserTestFactory.ID_STR)
.then().statusCode(200)
.body("_links.self.href", equalTo(urlWithUserId));
}
......@@ -81,7 +84,7 @@ class UserProfileResourceITCase {
given()
.when()
.accept(RestMediaType.APPLICATION_HAL_JSON)
.get(UserProfileResource.USERS_PATH + "/{id}", ID.toHexString())
.get(UserProfileResource.USERS_PATH + "/{id}", UserTestFactory.ID_STR)
.then().statusCode(200)
.body("_links.settings.href", equalTo(settingsUrlWithUserId));
}
......@@ -111,7 +114,7 @@ class UserProfileResourceITCase {
@BeforeEach
void init() {
when(userService.findUsers(any(), anyInt())).thenReturn(Stream.of(createWithId()));
when(userService.findUsers(any(), anyInt())).thenReturn(Stream.of(UserTestFactory.create()));
}
@Test
......@@ -180,8 +183,8 @@ class UserProfileResourceITCase {
@Test
void shouldGetDeletedAndNotDeletedUsers() {
User user1 = UserTestFactory.createBuilder().deleted(false).build();
User user2 = UserTestFactory.createBuilder().deleted(true).build();
var user1 = UserTestFactory.createBuilder().deleted(false).build();
var user2 = UserTestFactory.createBuilder().deleted(true).build();
when(userService.findUsers(anyString(), anyInt())).thenReturn(Stream.of(user1, user2));
given()
......@@ -202,7 +205,7 @@ class UserProfileResourceITCase {
@BeforeEach
void init() {
when(userService.findUsers(any(), anyInt())).thenReturn(Stream.of(createWithId()));
when(userService.findUsers(any(), anyInt())).thenReturn(Stream.of(UserTestFactory.create()));
}
@Test
......
......@@ -28,9 +28,11 @@ import static org.assertj.core.api.Assertions.*;
import java.time.Instant;
import java.util.List;
import java.util.stream.Stream;
import javax.inject.Inject;
import org.bson.types.ObjectId;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Nested;
......@@ -49,25 +51,11 @@ class UserRepositoryITCase {
@Inject
UserRepository repository;
private User user1;
private User user2;
@BeforeEach
void init() {
repository.deleteAll();
user1 = UserTestFactory.create();
repository.persist(user1);
user2 = UserTestFactory.createBuilder().externalId("unknown").build();
repository.persist(user2);
user2 = user2.toBuilder().externalId(null).build();
}
@DisplayName("Update unsynced users")
@Nested
class TestUpdateUnsyncedUser {
private long lastSyncTimestamp = Instant.now().toEpochMilli();
private static final long NOW = Instant.now().toEpochMilli();
@BeforeEach
void init() {
......@@ -76,18 +64,18 @@ class UserRepositoryITCase {
@Test
void shouldMarkUnsyncedUserAsDeleted() {
repository.persist(createUserWithLastSyncTimestamp(lastSyncTimestamp - 1000));
repository.persist(createUserWithLastSyncTimestamp(NOW - 1000));
repository.updateUnsyncedUsers(lastSyncTimestamp);
repository.updateUnsyncedUsers(NOW);
assertThat(getFirstUser().isDeleted()).isTrue();
}
@Test
void shouldNotMarkUserIfSynced() {
repository.persist(createUserWithLastSyncTimestamp(lastSyncTimestamp));
repository.persist(createUserWithLastSyncTimestamp(NOW));
repository.updateUnsyncedUsers(lastSyncTimestamp);
repository.updateUnsyncedUsers(NOW);
assertThat(getFirstUser().isDeleted()).isFalse();
}
......@@ -97,177 +85,241 @@ class UserRepositoryITCase {
}
private User getFirstUser() {
var allUser = repository.findAll();
return allUser.list().get(0);
return repository.findAll().list().get(0);
}
}
@DisplayName("Find Users")
@DisplayName("Find all active user")
@Nested
class TestFindUsers {
private static final int LIMIT_5 = 5;
class TestFindAllActiveUser {
@BeforeEach
void init() {
repository.deleteAll();
repository.persist(UserTestFactory.createBuilder().email(LoremIpsum.getInstance().getEmail()).externalId("additional-id").build());
user1 = UserTestFactory.create();
repository.persist(user1);
repository.persist(UserTestFactory.create());
}
@Test
void shouldFindByLastName() {
var res = repository.findUsers(UserTestFactory.LAST_NAME, false, LIMIT_5);
var user = findAllActiveUser(UserTestFactory.LAST_NAME);
assertThat(res).isNotEmpty().hasSize(2);
assertThat(user).isNotEmpty().hasSize(1);
}
@Test
void shouldFindCaseInsensitive() {
var user = findAllActiveUser(UserTestFactory.LAST_NAME.toLowerCase());
assertThat(user).isNotEmpty().hasSize(1);
}
@Test
void shouldFindByFirstName() {
var res = repository.findUsers(UserTestFactory.FIRST_NAME, false, LIMIT_5);
var user = findAllActiveUser(UserTestFactory.FIRST_NAME);
assertThat(res).isNotEmpty().hasSize(2);
assertThat(user).isNotEmpty().hasSize(1);
}
@Test
void shouldFindByUsername() {
var res = repository.findUsers(UserTestFactory.USER_NAME, false, LIMIT_5);
var user = findAllActiveUser(UserTestFactory.USER_NAME);
assertThat(res).isNotEmpty().hasSize(2);
assertThat(user).isNotEmpty().hasSize(1);
}
@Test
void shouldFindByUsernamePart() {
var res = repository.findUsers(UserTestFactory.USER_NAME.substring(0, 4), false, LIMIT_5);
var user = findAllActiveUser(UserTestFactory.USER_NAME.substring(0, 4));
assertThat(res).isNotEmpty().hasSize(2);
assertThat(user).isNotEmpty().hasSize(1);
}
@Test
void shouldFindByEmail() {
var res = repository.findUsers(UserTestFactory.EMAIL, false, LIMIT_5);
var user = findAllActiveUser(UserTestFactory.EMAIL);
assertThat(res).isNotEmpty().hasSize(1);
assertThat(user).isNotEmpty().hasSize(1);
}
@Test
void shouldNotFind() {
var res = repository.findUsers("xxx", false, 5);
assertThat(res).isEmpty();
void shouldReturnEmptyListIfNotMatch() {
var user = findAllActiveUser("xxx");
assertThat(user).isEmpty();
}
@Test
void shouldFindCaseInsensitive() {
var res = repository.findUsers(UserTestFactory.LAST_NAME.toLowerCase(), false, LIMIT_5);
assertThat(res).isNotEmpty().hasSize(2);
private Stream<User> findAllActiveUser(String query) {
return repository.findUsers(query, false, 5);
}
@Test
void shouldFindByExternalId() {
var res = repository.findByExternalId(user1.getExternalId());
void shouldFindNotDeletedUsers() {
User user1 = UserTestFactory.createBuilder().id(new ObjectId()).firstName("Max").deleted(true).build();
User user2 = UserTestFactory.createBuilder().id(new ObjectId()).firstName("Maximilian").deleted(true).build();
User user3 = UserTestFactory.createBuilder().id(new ObjectId()).firstName("Maximus").deleted(false).build();
repository.persist(user1);
repository.persist(user2);
repository.persist(user3);
var foundUsers = findAllActiveUser("Max").toList();
assertThat(res).isPresent();
assertThat(res.get().getExternalId()).isEqualTo(user1.getExternalId());
foundUsers.forEach(u -> assertThat(u.isDeleted()).isFalse());
}
@Test
void shouldFindById() {
var res = repository.findById(user1.getId());
void shouldUseLimit() {
repository.persist(UserTestFactory.createBuilder().id(new ObjectId()).build());
assertThat(res).isNotNull();
assertThat(res.getId()).isEqualTo(user1.getId());
var res = repository.findUsers(UserTestFactory.LAST_NAME.toLowerCase(), false, 2);
assertThat(res).isNotEmpty().hasSize(2);
}
}
@Test
void shouldFindByEmailOnly() {
var res = repository.findByEmail(user1.getEmail());
@DisplayName("Find all")
@Nested
class TestFindAll {
assertThat(res).isPresent();
assertThat(res.get().getExternalId()).isEqualTo(user1.getExternalId());
@BeforeEach
void init() {
repository.deleteAll();
repository.persist(UserTestFactory.createBuilder().id(new ObjectId()).email(LoremIpsum.getInstance().getEmail())
.externalId("additional-id").build());
repository.persist(UserTestFactory.create());
}
@Test
void shouldNotFindByEmptyEmail() {
var res = repository.findByEmail(null);
void shouldFindDeletedAndNotDeletedUsers() {
User user1 = UserTestFactory.createBuilder().id(new ObjectId()).firstName("Max").deleted(true).build();
User user2 = UserTestFactory.createBuilder().id(new ObjectId()).firstName("Maximilian").deleted(true).build();
User user3 = UserTestFactory.createBuilder().id(new ObjectId()).firstName("Maximus").deleted(false).build();
assertThat(res).isEmpty();
repository.persist(user1);
repository.persist(user2);
repository.persist(user3);
var foundUsers = repository.findUsers("Max", 10).toList();
assertThat(foundUsers).hasSizeGreaterThan(2);
List<User> startWithMax = foundUsers.stream().filter(u -> u.getFirstName().startsWith("Max")).toList();
assertThat(startWithMax).hasSize(3);
assertThat(startWithMax.stream().filter(User::isDeleted).count()).isEqualTo(2);
assertThat(startWithMax.stream().filter(not(User::isDeleted)).count()).isEqualTo(1);
}
}
@Test
void shouldFindDeletedUsers() {
User user1 = UserTestFactory.createBuilder().firstName("Max").deleted(true).build();
User user2 = UserTestFactory.createBuilder().firstName("Maximilian").deleted(true).build();
User user3 = UserTestFactory.createBuilder().firstName("Maximus").deleted(false).build();
@DisplayName("Find all inactive user")
@Nested
class TestFindAllInactiveUser {
@BeforeEach
void init() {
repository.deleteAll();
User user1 = UserTestFactory.createBuilder().id(new ObjectId()).firstName("Max").deleted(true).build();
User user2 = UserTestFactory.createBuilder().id(new ObjectId()).firstName("Maximilian").deleted(true).build();
User user3 = UserTestFactory.createBuilder().id(new ObjectId()).firstName("Maximus").deleted(false).build();
repository.persist(user1);
repository.persist(user2);
repository.persist(user3);
}
@Test
void shouldFindDeletedUsers() {
var foundUsers = repository.findUsers("Max", true, 10).toList();
assertThat(foundUsers).hasSize(2);
foundUsers.forEach(u -> assertThat(u.isDeleted()).isTrue());
}
}
@DisplayName("Find by externalId")
@Nested
class TestFindByExternalId {
@BeforeEach
void init() {
repository.deleteAll();
repository.persist(UserTestFactory.create());
}
@Test
void shouldFindNotDeletedUsers() {
User user1 = UserTestFactory.createBuilder().firstName("Max").deleted(true).build();
User user2 = UserTestFactory.createBuilder().firstName("Maximilian").deleted(true).build();
User user3 = UserTestFactory.createBuilder().firstName("Maximus").deleted(false).build();
void shouldFindByExternalId() {
var user = repository.findByExternalId(UserTestFactory.EXTERNAL_ID);
repository.persist(user1);
repository.persist(user2);
repository.persist(user3);
assertThat(user).isPresent();
assertThat(user.get()).usingRecursiveComparison().isEqualTo(UserTestFactory.create());
}
}
var foundUsers = repository.findUsers("Max", false, 10).toList();
@DisplayName("Find by id")
@Nested
class TestFindById {
foundUsers.forEach(u -> assertThat(u.isDeleted()).isFalse());
@BeforeEach
void init() {
repository.deleteAll();
repository.persist(UserTestFactory.create());
}
@Test
void shouldFindDeletedAndNotDeletedUsers() {
User user1 = UserTestFactory.createBuilder().firstName("Max").deleted(true).build();
User user2 = UserTestFactory.createBuilder().firstName("Maximilian").deleted(true).build();
User user3 = UserTestFactory.createBuilder().firstName("Maximus").deleted(false).build();
void shouldFindById() {
var user = repository.findById(UserTestFactory.ID_STR);
repository.persist(user1);
repository.persist(user2);
repository.persist(user3);
assertThat(user).isNotNull();
assertThat(user.get()).usingRecursiveComparison().isEqualTo(UserTestFactory.create());
}
}
var foundUsers = repository.findUsers("Max", 10).toList();
@DisplayName("Find by email")
@Nested
class TestFindByEmail {
assertThat(foundUsers).hasSizeGreaterThan(2);
List<User> startWithMax = foundUsers.stream().filter(u -> u.getFirstName().startsWith("Max")).toList();
assertThat(startWithMax.size()).isEqualTo(3);
assertThat(startWithMax.stream().filter(User::isDeleted).count()).isEqualTo(2);
assertThat(startWithMax.stream().filter(not(User::isDeleted)).count()).isEqualTo(1);
@BeforeEach
void init() {
repository.deleteAll();
repository.persist(UserTestFactory.create());
}
@Test
void shouldUseLimit() {
repository.persist(UserTestFactory.create());
void shouldFindByEmailOnly() {
var user = repository.findByEmail(UserTestFactory.EMAIL);
var res = repository.findUsers(UserTestFactory.LAST_NAME.toLowerCase(), false, 2);
assertThat(res).isNotEmpty().hasSize(2);
assertThat(user).isPresent();
assertThat(user.get()).usingRecursiveComparison().isEqualTo(UserTestFactory.create());
}
@Test
void shouldNotFindByEmptyEmail() {
var user = repository.findByEmail(null);
assertThat(user).isEmpty();
}
}
@DisplayName("Test refreshing user")
@Nested
class TestRefresh {
@BeforeEach
void init() {
repository.deleteAll();
repository.persist(UserTestFactory.create());
}
@Test
void shouldRefreshByExternalId() {
var user = repository.refresh(user1.toBuilder().id(null).build());
var user = repository.refresh(UserTestFactory.createBuilder().id(null).build());
assertThat(user).isNotNull().hasFieldOrPropertyWithValue("id", user1.getId());
assertThat(user).usingRecursiveComparison().ignoringFields("id").isEqualTo(UserTestFactory.create());
}
@Test
void shouldRefreshById() {
var user = repository.refresh(user1);
var user = repository.refresh(UserTestFactory.create());
assertThat(user).isNotNull().hasFieldOrPropertyWithValue("id", user1.getId());
assertThat(user).usingRecursiveComparison().ignoringFields("id").isEqualTo(UserTestFactory.create());
}
}
}
\ No newline at end of file
......@@ -121,7 +121,7 @@ class UserServiceTest {
@BeforeEach
void init() {
when(repository.refresh(any())).thenReturn(UserTestFactory.createWithId());
when(repository.refresh(any())).thenReturn(UserTestFactory.create());
}
@Test
......
......@@ -30,11 +30,13 @@ import org.bson.types.ObjectId;
import com.thedeanda.lorem.LoremIpsum;
import de.itvsh.kop.user.settings.UserSettings;
import de.itvsh.kop.user.settings.UserSettingsTestFactory;
public class UserTestFactory {
public static final ObjectId ID = new ObjectId();
public static final String ID_STR = ID.toHexString();
public static final String FIRST_NAME = LoremIpsum.getInstance().getFirstName();
public static final String LAST_NAME = LoremIpsum.getInstance().getLastName();
public static final String USER_NAME = LoremIpsum.getInstance().getName();
......@@ -43,20 +45,14 @@ public class UserTestFactory {
public static final String EXTERNAL_ID = UUID.randomUUID().toString();
public static final String ORGANISTATIONSEINHEITEN_ID = "0815";
public static final List<String> ROLES = List.of("ROLE_1", "POSTSTELLE");
public static final ObjectId ID = new ObjectId();
public static final UserSettings USER_SETTINGS = UserSettingsTestFactory.create();
public static User create() {
return createBuilder().build();
}
public static User createWithId() {
return createBuilder().id(ID).build();
}
public static User.UserBuilder createBuilder() {
return User.builder()
.id(new ObjectId())
.id(ID)
.firstName(FIRST_NAME)
.lastName(LAST_NAME)
.username(USER_NAME)
......@@ -65,6 +61,6 @@ public class UserTestFactory {
.externalId(EXTERNAL_ID)
.organisationsEinheitId(ORGANISTATIONSEINHEITEN_ID)
.roles(ROLES)
.userSettings(USER_SETTINGS);
.userSettings(UserSettingsTestFactory.create());
}
}
......@@ -55,7 +55,7 @@ class UserSettingsServiceITCase {
void fillDatabase() {
repository.deleteAll();
repository.persist(UserTestFactory.createWithId().toBuilder()
repository.persist(UserTestFactory.create().toBuilder()
.userSettings(UserSettingsTestFactory.create())
.build());
}
......
......@@ -64,7 +64,7 @@ class UserProfileMapperTest {
}
private GrpcUserProfile map() {
return mapper.mapTo(UserTestFactory.createWithId());
return mapper.mapTo(UserTestFactory.create());
}
@Test
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment