From 3943688e35de318df1f2d8e4dbf2c30457fb1a31 Mon Sep 17 00:00:00 2001 From: Gabriel Copat <copatg@cardiff.ac.uk> Date: Wed, 13 Dec 2023 14:10:50 +0000 Subject: [PATCH] Added tests --- src/main/java/Team5/SmartTowns/data/Main.java | 16 ---- .../Team5/SmartTowns/DatasourceConfig.java | 21 +++++ .../Team5/SmartTowns/users/UserTests.java | 87 +++++++++++++++++++ src/test/resources/application.properties | 7 ++ src/test/resources/data.sql | 8 ++ src/test/resources/schema.sql | 19 ++++ 6 files changed, 142 insertions(+), 16 deletions(-) delete mode 100644 src/main/java/Team5/SmartTowns/data/Main.java create mode 100644 src/test/java/Team5/SmartTowns/DatasourceConfig.java create mode 100644 src/test/java/Team5/SmartTowns/users/UserTests.java create mode 100644 src/test/resources/application.properties create mode 100644 src/test/resources/data.sql create mode 100644 src/test/resources/schema.sql diff --git a/src/main/java/Team5/SmartTowns/data/Main.java b/src/main/java/Team5/SmartTowns/data/Main.java deleted file mode 100644 index 8f2a890b..00000000 --- a/src/main/java/Team5/SmartTowns/data/Main.java +++ /dev/null @@ -1,16 +0,0 @@ -//package Team5.SmartTowns.Data; -// -//import org.springframework.beans.factory.annotation.Autowired; -// -//import java.util.List; -// -//public class Main { -// @Autowired -// private locationRepository locationRepository; -// List<Location> approvedNumber= locationRepository.approvedLocations(); -// public static void main(String[] args) { -// for (Location loc: approvedNumber){} -// -// -// } -//} diff --git a/src/test/java/Team5/SmartTowns/DatasourceConfig.java b/src/test/java/Team5/SmartTowns/DatasourceConfig.java new file mode 100644 index 00000000..bbda85b0 --- /dev/null +++ b/src/test/java/Team5/SmartTowns/DatasourceConfig.java @@ -0,0 +1,21 @@ +package Team5.SmartTowns; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.jdbc.datasource.DriverManagerDataSource; + +import javax.sql.DataSource; + +@Configuration +public class DatasourceConfig { + @Bean + public DataSource dataSource() { + DriverManagerDataSource dataSource = new DriverManagerDataSource(); + dataSource.setUrl("jdbc:mariadb://localhost:3306/test_towns"); + dataSource.setUsername("root"); + dataSource.setPassword("comsc"); + + return dataSource; + } +} + diff --git a/src/test/java/Team5/SmartTowns/users/UserTests.java b/src/test/java/Team5/SmartTowns/users/UserTests.java new file mode 100644 index 00000000..66f512eb --- /dev/null +++ b/src/test/java/Team5/SmartTowns/users/UserTests.java @@ -0,0 +1,87 @@ +package Team5.SmartTowns.users; + +import org.junit.jupiter.api.*; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.jdbc.core.JdbcTemplate; + +import javax.sql.DataSource; +import java.util.Arrays; +import java.util.List; + +import static org.junit.jupiter.api.Assertions.*; + +@TestInstance(TestInstance.Lifecycle.PER_CLASS) +@SpringBootTest +class UserTests { + + @Autowired + UserRepository userRepository; + + @Autowired + JdbcTemplate jdbcTemplate; + + @BeforeEach + public void resetUserTable(){ + /*Deletes table as each test creates the table it needs for its own testing*/ + jdbcTemplate.update("DELETE FROM users"); + } + + @Test + @DisplayName("Add User to Database") + void testAddUser() { + String testEmail = "TestEmail"; + String testPassword = "Password"; + String testUsername = "TestUsername"; + + userRepository.addUser(testUsername, testEmail, testPassword); + + String email = jdbcTemplate.queryForObject("SELECT email FROM users WHERE username=?", String.class, testUsername); + String password = jdbcTemplate.queryForObject("SELECT password FROM users WHERE username=?", String.class, testUsername); + + assertEquals(testPassword, password); + assertEquals(testEmail, email); + + } + + @Test + @DisplayName("Get all from Users") + void testGetAllUsers() { + jdbcTemplate.update("INSERT INTO users (username, password) VALUE ('TestUser1', 'admin')"); + jdbcTemplate.update("INSERT INTO users (username, password) VALUE ('TestUser2', 'admin')"); + jdbcTemplate.update("INSERT INTO users (username, password) VALUE ('TestUser3', 'admin')"); + + List<String> queryList = jdbcTemplate.queryForList("SELECT username FROM users", String.class); + List<User> users = userRepository.getAllUsers(); + + assertEquals(queryList.size(), users.size()); + } + + + @Test + @DisplayName("Find if user exists") + void doesUserExist() { + jdbcTemplate.update("INSERT INTO users (username, email, password) VALUE ('UserExists', 'email@test.com', 'test')" ); + assertTrue( userRepository.doesUserExist("email@test.com") ); + } + + @Test + @DisplayName("Find user by email") + void findUserByEmail() { + String email = "email@test.com"; + jdbcTemplate.update("INSERT INTO users (username, email, password) VALUE ('UserExists', ?, 'test')", + email); + User user = userRepository.findUserByEmail(email); + assertEquals(email, user.getEmail()); + } + + @Test + @DisplayName("Find user by name") + void findUserByName() { + String name = "TestUser"; + jdbcTemplate.update("INSERT INTO users (username, password) VALUE (?, 'test')", + name); + User user = userRepository.findUserByName(name); + assertEquals(name, user.getName()); + } +} \ No newline at end of file diff --git a/src/test/resources/application.properties b/src/test/resources/application.properties new file mode 100644 index 00000000..21175ee7 --- /dev/null +++ b/src/test/resources/application.properties @@ -0,0 +1,7 @@ +spring.datasource.url=jdbc:mariadb://localhost:3306/ +spring.datasource.username=root +spring.datasource.password=comsc + +spring.sql.init.mode=always +spring.sql.init.schema-locations=classpath:schema.sql +spring.sql.init.data-locations=classpath:data.sql diff --git a/src/test/resources/data.sql b/src/test/resources/data.sql new file mode 100644 index 00000000..8af6be60 --- /dev/null +++ b/src/test/resources/data.sql @@ -0,0 +1,8 @@ +USE test_towns; +INSERT INTO users (username, password) VALUE ('Admin', 'admin'); +INSERT INTO users (username, password) VALUE ('Hannah', 'root'); +INSERT INTO users (username, password) VALUE ('Nigel', 'root'); +INSERT INTO users (username, password) VALUE ('Oscar', 'root'); + +INSERT INTO authorities (username, authority) VALUE ('Admin', 'ADMIN'); +INSERT INTO authorities (username, authority) VALUE ('Hannah', 'USER'); diff --git a/src/test/resources/schema.sql b/src/test/resources/schema.sql new file mode 100644 index 00000000..1ec2d45a --- /dev/null +++ b/src/test/resources/schema.sql @@ -0,0 +1,19 @@ +/* DELETES AND RECREATES DATABASE EVERY TIME THE SYSTEM IS BOOTED*/ +DROP DATABASE IF EXISTS test_towns; +CREATE DATABASE IF NOT EXISTS test_towns; +USE test_towns; +/****************************************************************/ + +CREATE TABLE IF NOT EXISTS users ( + username varchar(30) primary key NOT NULL, + id bigint auto_increment unique, /*DEPRECATED COLUMN, LEFT IN WHILE SOME OTHER FUNCTIONS STILL USE IT*/ + email varchar(128), + password varchar(30) NOT NULL, + enabled boolean default true +); + +CREATE TABLE IF NOT EXISTS authorities ( + id bigint primary key auto_increment NOT NULL, + username varchar(30) NOT NULL , + authority varchar(45) NOT NULL +); \ No newline at end of file -- GitLab