From f7d81a2fb89333080878ab7116044b1329d79781 Mon Sep 17 00:00:00 2001 From: KKlochko Date: Fri, 1 Dec 2023 18:46:21 +0200 Subject: [PATCH] Add the User model and its repository. --- .../db/repositories/UserRepository.java | 39 ++++++++++++ .../spring_rest_example/models/User.java | 19 ++++++ .../db/repositories/UserRepositorySpec.groovy | 59 +++++++++++++++++++ 3 files changed, 117 insertions(+) create mode 100644 src/main/java/space/kklochko/spring_rest_example/db/repositories/UserRepository.java create mode 100644 src/main/java/space/kklochko/spring_rest_example/models/User.java create mode 100644 src/test/groovy/space/kklochko/spring_rest_example/db/repositories/UserRepositorySpec.groovy diff --git a/src/main/java/space/kklochko/spring_rest_example/db/repositories/UserRepository.java b/src/main/java/space/kklochko/spring_rest_example/db/repositories/UserRepository.java new file mode 100644 index 0000000..9a63591 --- /dev/null +++ b/src/main/java/space/kklochko/spring_rest_example/db/repositories/UserRepository.java @@ -0,0 +1,39 @@ +package space.kklochko.spring_rest_example.db.repositories; + +import jakarta.persistence.EntityManager; +import jakarta.persistence.NoResultException; +import jakarta.persistence.TypedQuery; +import org.springframework.stereotype.Component; +import space.kklochko.spring_rest_example.db.repositories.blocks.TransactionalInsert; +import space.kklochko.spring_rest_example.db.repositories.blocks.TransactionalRemove; +import space.kklochko.spring_rest_example.db.repositories.blocks.TransactionalUpdate; +import space.kklochko.spring_rest_example.models.Token; +import space.kklochko.spring_rest_example.models.User; + +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; +import java.util.UUID; + +@Component +public class UserRepository { + public User read(String username) { + Optional user = readAll() + .stream() + .filter(u -> u.getUsername().equals(username)) + .findFirst(); + + return user.orElse(null); + } + + public List readAll() { + List users = new ArrayList<>(); + + // password same as username + users.add(new User("admin", "ADMIN", "8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918")); + users.add(new User("user", "USER", "04f8996da763b7a969b1028ee3007569eaf3a635486ddab211d512c85b9df8fb")); + + return users; + } +} + diff --git a/src/main/java/space/kklochko/spring_rest_example/models/User.java b/src/main/java/space/kklochko/spring_rest_example/models/User.java new file mode 100644 index 0000000..1c85c4a --- /dev/null +++ b/src/main/java/space/kklochko/spring_rest_example/models/User.java @@ -0,0 +1,19 @@ +package space.kklochko.spring_rest_example.models; + +import lombok.AllArgsConstructor; +import lombok.Data; + +@AllArgsConstructor +@Data +public class User { + private String username; + private String role; + private String password; + + public User() { + setUsername(""); + setRole(""); + setPassword(""); + } +} + diff --git a/src/test/groovy/space/kklochko/spring_rest_example/db/repositories/UserRepositorySpec.groovy b/src/test/groovy/space/kklochko/spring_rest_example/db/repositories/UserRepositorySpec.groovy new file mode 100644 index 0000000..dee769c --- /dev/null +++ b/src/test/groovy/space/kklochko/spring_rest_example/db/repositories/UserRepositorySpec.groovy @@ -0,0 +1,59 @@ +package space.kklochko.spring_rest_example.db.repositories + +import groovy.sql.Sql +import jakarta.persistence.EntityManager +import space.kklochko.spring_rest_example.config.factories.LoadDataBaseConfigFromEnvFile +import space.kklochko.spring_rest_example.config.models.DataBaseConfig +import space.kklochko.spring_rest_example.db.factories.DataBaseConnection +import space.kklochko.spring_rest_example.db.factories.EntityManagerConnection +import space.kklochko.spring_rest_example.models.Token +import space.kklochko.spring_rest_example.models.User +import spock.lang.Shared +import spock.lang.Specification +import spock.lang.Stepwise +import spock.lang.Subject + +@Stepwise +class UserRepositorySpec extends Specification { + def "Read one user"() { + given: "I have a repo" + @Subject + UserRepository repo = new UserRepository() + + when: "reading the entry" + def result = repo.read(username) + + then: "checking that the reading was successful" + result + + and: "the user has a role" + with(result) { + getRole() == expectedRole + getPassword() == expectedPassword + } + + where: "the expected data" + username || expectedRole | expectedPassword + "admin" || "ADMIN" | "8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918" + "user" || "USER" | "04f8996da763b7a969b1028ee3007569eaf3a635486ddab211d512c85b9df8fb" + } + + def "Read one user and check if exists"() { + given: "I have a repo" + @Subject + UserRepository repo = new UserRepository() + + when: "reading the entry" + def result = repo.read(username) + + then: "checking that the reading was successful" + isNull == (result == null) + + where: "the expected data" + username || isNull + "admin" || false + "user" || false + "user2" || true + } +} +