Skip to content

Commit

Permalink
#1012: additional Tests for UserPersistenceService
Browse files Browse the repository at this point in the history
  • Loading branch information
clean-coder committed Oct 8, 2024
1 parent 56b0017 commit 76f6399
Showing 1 changed file with 182 additions and 12 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -3,20 +3,23 @@
import ch.puzzle.okr.models.User;
import ch.puzzle.okr.multitenancy.TenantContext;
import ch.puzzle.okr.test.SpringIntegrationTest;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.*;
import org.springframework.beans.factory.annotation.Autowired;

import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;

import static org.junit.jupiter.api.Assertions.*;

@SpringIntegrationTest
class UserPersistenceServiceIT {

private static final long ID_ALICE = 11L;
private static final String EMAIL_ALICE = "[email protected]";
private static final String EMAIL_TEST_USER = "[email protected]";

User createdUser;
private User createdUser;

@Autowired
private UserPersistenceService userPersistenceService;
Expand Down Expand Up @@ -47,20 +50,187 @@ void getOrCreateUserShouldReturnSingleUserWhenUserFound() {
assertEquals("[email protected]", returnedUser.getEmail());
}

// uses test data from V100_0_0__TestData.sql
@DisplayName("getOrCreateUser() should return saved user when user found")
@Test
void getOrCreateUserShouldReturnSavedUserWhenUserFound() {
// arrange
var initialNumberOfUsers = userPersistenceService.findAll().size();
var existingUser = userPersistenceService.findById(ID_ALICE);

// act
var returnedUser = userPersistenceService.getOrCreateUser(existingUser);

// assert
assertEquals(existingUser, returnedUser);
assertNoUserCreated(initialNumberOfUsers);
}

private void assertNoUserCreated(int initialNumberOfUsers) {
var finalNumberOfUsers = userPersistenceService.findAll().size();
assertEquals(initialNumberOfUsers, finalNumberOfUsers);
}

@DisplayName("getOrCreateUser() should save user when user not found")
@Test
void getOrCreateUserShouldReturnSavedUserWhenUserNotFound() {
void getOrCreateUserShouldSaveUserWhenUserNotFound() {
// arrange
var initialNumberOfUsers = userPersistenceService.findAll().size();
User newUser = User.Builder.builder() //
.withId(null) //
.withFirstname("firstname") //
.withLastname("lastname") //
.withEmail("[email protected]") //
.withEmail(EMAIL_TEST_USER) //
.build();

// act
createdUser = userPersistenceService.getOrCreateUser(newUser);

assertNotNull(createdUser.getId());
assertEquals("firstname", createdUser.getFirstname());
assertEquals("lastname", createdUser.getLastname());
assertEquals("[email protected]", createdUser.getEmail());
// assert§
assertEquals(newUser, createdUser);
assertNewUserCreated(initialNumberOfUsers);
}

private void assertNewUserCreated(int initialNumberOfUsers) {
var finalNumberOfUsers = userPersistenceService.findAll().size();
assertEquals(initialNumberOfUsers + 1, finalNumberOfUsers);
}

// uses test data from V100_0_0__TestData.sql
@DisplayName("findByEmail() should return non empty optional with the user when user is found")
@Test
void findByEmailShouldReturnNonEmptyOptionalWithTheUserWhenUserIsFound() {
// arrange
User expected = User.Builder.builder() //
.withId(ID_ALICE) //
.withVersion(1) //
.withFirstname("Alice") //
.withLastname("Wunderland") //
.withEmail(EMAIL_ALICE) //
.withOkrChampion(false) //
.build();

// act
Optional<User> foundUser = userPersistenceService.findByEmail(EMAIL_ALICE);

// assert
assertTrue(foundUser.isPresent());
assertEquals(expected, foundUser.get());
}

@DisplayName("findByEmail() should return empty optional when user not found")
@Test
void findByEmailShouldReturnEmptyOptionalWhenUserNotFound() {
// act
Optional<User> foundUser = userPersistenceService.findByEmail("[email protected]");

// assert
assertTrue(foundUser.isEmpty());
}

// uses test data from V100_0_0__TestData.sql
@DisplayName("findAllOkrChampions() should return okr champions")
@Test
void findAllOkrChampionsShouldReturnOkrChampions() {
// arrange
User expected = User.Builder.builder() //
.withId(61L) //
.withVersion(1) //
.withFirstname("Jaya") //
.withLastname("Norris") //
.withEmail("[email protected]") //
.withOkrChampion(true) //
.build();

// act
List<User> allOkrChampions = userPersistenceService.findAllOkrChampions();

// assert
assertEquals(1, allOkrChampions.size());
assertEquals(expected, allOkrChampions.get(0));
}

@DisplayName("save() should save a single user")
@Test
void saveShouldSaveSingleUser() {
// pre-condition
assertTrue(userPersistenceService.findByEmail(EMAIL_TEST_USER).isEmpty());

// arrange
var newUser = User.Builder.builder() //
.withId(null) //
.withFirstname("firstname") //
.withLastname("lastname") //
.withEmail(EMAIL_TEST_USER) //
.build();

// act
createdUser = userPersistenceService.save(newUser);

// assert
assertNotNull(createdUser);
assertEquals(newUser, createdUser);

// post-condition
assertTrue(userPersistenceService.findByEmail(EMAIL_TEST_USER).isPresent());
}

@DisplayName("save() should save single user with user team list")
@Test
void saveShouldSaveSingleUserWithUserTeamList() {
// pre-condition
assertTrue(userPersistenceService.findByEmail(EMAIL_TEST_USER).isEmpty());

// arrange
var newUser = User.Builder.builder() //
.withId(null) //
.withFirstname("firstname") //
.withLastname("lastname") //
.withEmail(EMAIL_TEST_USER) //
.withUserTeamList(new ArrayList<>()).build();

// act
createdUser = userPersistenceService.save(newUser);

// assert
assertNotNull(createdUser);
assertEquals(newUser, createdUser);

// post-condition
assertTrue(userPersistenceService.findByEmail(EMAIL_TEST_USER).isPresent());
}

@DisplayName("saveAll() should save list of users")
@Test
void saveAllShouldSaveListOfUsers() {
// arrange
var user1 = User.Builder.builder() //
.withId(null) //
.withFirstname("user1_firstname") //
.withLastname("user1_lastname") //
.withEmail("[email protected]") //
.build();

var user2 = User.Builder.builder() //
.withId(null) //
.withFirstname("user2_firstname") //
.withLastname("user2_lastname") //
.withEmail("[email protected]") //
.build();

// act
List<User> createdUsers = iterableToList( //
userPersistenceService.saveAll(List.of(user1, user2)));

// assert
assertEquals(2, createdUsers.size());
assertEquals(user1, createdUsers.get(0));
assertEquals(user2, createdUsers.get(1));
}

private List<User> iterableToList(Iterable<User> iterable) {
List<User> list = new ArrayList<>();
iterable.forEach(list::add);
return list;
}
}

0 comments on commit 76f6399

Please sign in to comment.