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 8f2a890b66299d6c3662b6bd7e68c6d897792847..0000000000000000000000000000000000000000
--- 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 0000000000000000000000000000000000000000..bbda85b0189f6ace93e15a9ce98cf727942b4478
--- /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 0000000000000000000000000000000000000000..66f512ebe63809bf0020094f19cbd9e5bdcade05
--- /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 0000000000000000000000000000000000000000..21175ee7cbfde438ed0062b7d07937e2c9e69e58
--- /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 0000000000000000000000000000000000000000..8af6be6041ae470649fceb3db5cdb6fd9c1d8aee
--- /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 0000000000000000000000000000000000000000..1ec2d45a123ad41dc65c15cd598e9ff558426de5
--- /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