38 Commits

Author SHA1 Message Date
Riley Schneider
97990a3e76 Deleted unnecessary files. 2025-12-08 21:15:46 +01:00
4eb0f6c3bd Merge pull request 'database' (#3) from database into main
Reviewed-on: #3
2025-12-08 18:10:07 +01:00
Riley Schneider
0dd7fd4687 Provide mock-like DB manager for integration testing 2025-12-08 18:06:43 +01:00
Riley Schneider
e9b2ad0a57 Heavily refactored DatabaseManager.java and SimpleDatabaseManager.java. Fully refactored DatabaseGoodCasesTest.java and DatabaseBadCasesTest.java. 2025-12-08 17:50:21 +01:00
Riley Schneider
292d6c74c3 Implemented Update method 2025-12-03 23:17:31 +01:00
Riley Schneider
f2cc964d39 Added new tests that needs to be implemented. 2025-12-03 23:04:21 +01:00
Riley Schneider
995fba6fce Added a placeholder method to delete objects from the database. 2025-12-03 22:29:52 +01:00
Riley Schneider
daafd7d09e Fixed a typo in the query 2025-12-03 22:24:04 +01:00
Riley Schneider
41e711ab74 Added resultSet.next() 2025-12-03 22:22:30 +01:00
Riley Schneider
625e089a36 Prepared new tests 2025-12-03 22:10:24 +01:00
Riley Schneider
d9da291d45 Added first sql-queries into the SimpleDatabaseManager.java (Still failing / Red Errors) 2025-12-03 21:45:26 +01:00
Riley Schneider
b801ea7d21 Added NotImplementedException, edited some DatabaseGoodCasesTest tests. 2025-12-03 20:52:47 +01:00
Riley Schneider
8150fdbf13 Updated from origin/main 2025-12-03 20:42:23 +01:00
0db43fe51a Fixed Merge Conflicts, uploaded local main 2025-12-03 20:37:10 +01:00
90fbacadaa Merge pull request 'database' (#2) from database into main
Reviewed-on: #2
2025-12-03 20:16:49 +01:00
Riley Schneider
57144fa772 Updated MySQL Methods, Tests and Information accordingly. (High security risk btw) 2025-12-03 20:15:28 +01:00
c10de39091 Just a commit to push the build files so I can push 2025-12-03 19:36:50 +01:00
98bbddb31a Added Tests for removing, finishing and unfinishing tasks and so on for test coverage. 2025-12-03 19:32:59 +01:00
7640b1ef35 Added Tests for TaskState Changes. Actually added functionality to pass that test. 2025-12-03 19:20:24 +01:00
20daf315ca Added Task Adding, Removing, Editing and corrected some relatex tests. Coverage still not 100% 2025-12-03 19:08:16 +01:00
Riley Schneider
d3488f1f1c Update connect method in SimpleDatabaseManager.java 2025-12-03 18:26:13 +01:00
Riley Schneider
382aad70f7 Updated gitignore 2025-12-03 18:24:42 +01:00
Riley Schneider
dbebcad97d First runnable tests for Database / Commented out Good/BadCasesTests (not relevant to this branch) 2025-12-03 18:23:07 +01:00
4fa55c8607 Added Full Skeleton Methods for AssignmentManager and Task 2025-12-03 18:21:53 +01:00
Riley Schneider
ec0abd85b9 Merge remote-tracking branch 'origin/database' into database
# Conflicts:
#	.gradle/8.14/executionHistory/executionHistory.lock
#	.gradle/8.14/fileHashes/fileHashes.bin
#	.gradle/8.14/fileHashes/fileHashes.lock
#	.gradle/buildOutputCleanup/buildOutputCleanup.lock
#	.gradle/buildOutputCleanup/cache.properties
#	build/classes/java/main/hhn/temp/project/provider/DatabaseManager.class
#	build/tmp/compileJava/previous-compilation-data.bin
#	src/main/java/hhn/temp/project/provider/SimpleDatabaseManager.java
#	test/hhn/temp/project/BadCasesTest.java
#	test/hhn/temp/project/DatabaseBadCasesTest.java
#	test/hhn/temp/project/DatabaseGoodCasesTest.java
#	test/hhn/temp/project/GoodCasesTest.java
2025-12-03 18:20:36 +01:00
Riley Schneider
04f2087456 First runnable tests for Database / Commented out Good/BadCasesTests (not relevant to this branch) 2025-12-03 18:19:48 +01:00
fb0e05fd4d Added a basic test for the worker get methods 2025-12-03 18:06:09 +01:00
4bb1e13f21 Added basic worker so tests can create them 2025-12-03 17:59:30 +01:00
Riley Schneider
0c4f092312 Backup 2025-12-03 17:49:06 +01:00
8c4849fdf0 Just adding the report so I can rebase 2025-12-03 17:43:40 +01:00
a5378868ea Changed a small setting so test results are actually displayed 2025-12-03 17:39:42 +01:00
9641825200 Wrote the first BadCasesTests 2025-12-03 17:36:12 +01:00
Riley Schneider
bc0e30860c First database tests 2025-12-03 17:30:33 +01:00
d5a9825ec1 Wrote the first GoodCasesTests 2025-12-03 17:29:56 +01:00
26f7ecbee6 Merge pull request 'Skeleton' (#1) from Skeleton into main
Reviewed-on: #1
2025-12-03 16:44:45 +01:00
Riley Schneider
eed1390c65 Remove database folder 2025-12-03 16:42:41 +01:00
Riley Schneider
b732d8d4b5 Initial Commit 2025-12-03 16:38:10 +01:00
c5e26bf594 Rough Skeleton for Tests and Classes 2025-12-03 16:28:17 +01:00
34 changed files with 781 additions and 47 deletions

2
.gitignore vendored Normal file
View File

@@ -0,0 +1,2 @@
build/
.gradle/

View File

@@ -1,2 +0,0 @@
#Tue Dec 02 10:03:29 CET 2025
gradle.version=8.14

8
.idea/modules.xml generated Normal file
View File

@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/modules/Template.test.iml" filepath="$PROJECT_DIR$/.idea/modules/Template.test.iml" />
</modules>
</component>
</project>

8
.idea/modules/Template.test.iml generated Normal file
View File

@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<module version="4">
<component name="AdditionalModuleElements">
<content url="file://$MODULE_DIR$/../../src/test" dumb="true">
<sourceFolder url="file://$MODULE_DIR$/../../src/test/resources" type="java-test-resource" />
</content>
</component>
</module>

View File

@@ -14,6 +14,7 @@ dependencies {
testImplementation platform('org.junit:junit-bom:5.10.0') testImplementation platform('org.junit:junit-bom:5.10.0')
testImplementation 'org.junit.jupiter:junit-jupiter' testImplementation 'org.junit.jupiter:junit-jupiter'
testRuntimeOnly 'org.junit.platform:junit-platform-launcher' testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
implementation 'com.mysql:mysql-connector-j:9.5.0'
} }
jacoco { jacoco {
@@ -36,6 +37,11 @@ sourceSets {
test { test {
useJUnitPlatform() useJUnitPlatform()
testLogging {
events "passed", "skipped", "failed"
exceptionFormat "full"
showStandardStreams = true
}
finalizedBy jacocoTestReport finalizedBy jacocoTestReport
} }
jacocoTestReport { jacocoTestReport {

View File

@@ -0,0 +1,72 @@
package hhn.temp.project;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class AssignmentManager {
Map<Integer, Worker> workerMap;
Map<Integer, Task> taskMap;
int workerIdCounter;
int taskIdCounter;
public AssignmentManager() {
workerMap = new HashMap<>();
taskMap = new HashMap<>();
int workerIdCounter = 1000;
int taskIdCounter = 0;
}
public int createWorker(String name) {
Worker worker = new Worker(name, ++workerIdCounter);
workerMap.put(workerIdCounter, worker);
return workerIdCounter;
}
public int addTask(int workerId, String name, String description) {
if (!workerMap.containsKey(workerId) || name == null || description == null) {
throw new IllegalArgumentException("WorkerId must exist and name or description can't be null");
}
Task task = new Task(++taskIdCounter, workerId, name, description);
taskMap.put(taskIdCounter, task);
return taskIdCounter;
}
public Task getTask(int taskId) {
if (!taskMap.containsKey(taskId)) {
throw new IllegalArgumentException("Task Id does not exist");
}
return taskMap.get(taskId);
}
public Map<Integer, Task> getTaskMap() {
return taskMap;
}
public void editTask(int workerId, int taskId, String name, String description) {
if (!workerMap.containsKey(workerId) || !taskMap.containsKey(taskId)) {
throw new IllegalArgumentException("Task Id or Worker Id does not exist");
}
Task task = taskMap.get(taskId);
task.setName(name);
task.setDescription(description);
}
public void removeTask(int taskId) {
if (!taskMap.containsKey(taskId)) {
throw new IllegalArgumentException("Task Id does not exist");
}
taskMap.remove(taskId);
}
public void finishTask(int workerId, int taskId) {
if (!workerMap.containsKey(workerId) || !taskMap.containsKey(taskId)) {
throw new IllegalArgumentException("Task Id or Worker Id does not exist");
}
Task task = taskMap.get(taskId);
task.setTaskState(TaskState.FINISHED);
}
public void unfinishTask(int workerId, int taskId) {
if (!workerMap.containsKey(workerId) || !taskMap.containsKey(taskId)) {
throw new IllegalArgumentException("Task Id or Worker Id does not exist");
}
Task task = taskMap.get(taskId);
task.setTaskState(TaskState.IN_PROGRESS);
}
}

View File

@@ -1,17 +0,0 @@
package hhn.temp.project;
//TIP To <b>Run</b> code, press <shortcut actionId="Run"/> or
// click the <icon src="AllIcons.Actions.Execute"/> icon in the gutter.
public class Main {
public static void main(String[] args) {
//TIP Press <shortcut actionId="ShowIntentionActions"/> with your caret at the highlighted text
// to see how IntelliJ IDEA suggests fixing it.
System.out.printf("Hello and welcome!");
for (int i = 1; i <= 5; i++) {
//TIP Press <shortcut actionId="Debug"/> to start debugging your code. We have set one <icon src="AllIcons.Debugger.Db_set_breakpoint"/> breakpoint
// for you, but you can always add more by pressing <shortcut actionId="ToggleLineBreakpoint"/>.
System.out.println("i = " + i);
}
}
}

View File

@@ -0,0 +1,42 @@
package hhn.temp.project;
public class Task {
String name;
String description;
int taskId;
int workerId;
TaskState state;
public Task(int taskId, int workerId, String name, String description) {
this.name = name;
this.description = description;
this.taskId = taskId;
this.workerId = workerId;
this.state = TaskState.IN_PROGRESS;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public int getTaskId() {
return taskId;
}
public int getWorkerId() {
return workerId;
}
public void setTaskState(TaskState state) {
this.state = state;
}
public TaskState getTaskState() {
return state;
}
}

View File

@@ -0,0 +1,6 @@
package hhn.temp.project;
public enum TaskState {
IN_PROGRESS,
FINISHED;
}

View File

@@ -0,0 +1,17 @@
package hhn.temp.project;
public class Worker {
String name;
int workerId;
public Worker(String name, int workerId) {
this.name = name;
this.workerId = workerId;
}
public String getName() {
return name;
}
public int getId() {
return workerId;
}
}

View File

@@ -0,0 +1,29 @@
package hhn.temp.project.provider;
import java.io.IOException;
import java.nio.file.Path;
import java.sql.SQLException;
/**
* A database interface with basic database connectivity
* @author Riley Schneider
*/
public interface Database {
/**
* Creates a connection to the database
* @throws SQLException Thrown if database error occurs
*/
void connect() throws SQLException;
/**
* Closes a connection to the database
* @throws SQLException Thrown if database error occurs
*/
void close() throws SQLException;
/**
* Clears the entire tables in the database and reset primary key counter to each table
* @throws SQLException Thrown if database error occurs
*/
void clearDatabase() throws SQLException;
}

View File

@@ -0,0 +1,115 @@
package hhn.temp.project.provider;
import hhn.temp.project.Task;
import hhn.temp.project.Worker;
import java.sql.SQLException;
import java.util.Collection;
/**
* Simple Database Manager to handle simple command such as insertion, deletion, updating of Task and Worker objects.
* @author Riley Schneider
*/
public interface DatabaseManager extends Database {
/**
* Saves a Task object into the database
* @param task Task to be saved into the database
* @throws SQLException Thrown if database error occurs
*/
void saveTask(Task task) throws SQLException;
/**
* Saves a collection of Task objects into the database
* @param tasks Tasks to be saved into the database
* @throws SQLException Thrown if database error occurs
*/
void saveTasks(Collection<Task> tasks) throws SQLException;
/**
* Saves a Worker object into the database
* @param worker Worker to be saved into the database
* @throws SQLException Thrown if database error occurs
*/
void saveWorker(Worker worker) throws SQLException;
/**
* Saves a collection Worker objects into the database
* @param workers Workers to be saved into the database
* @throws SQLException Thrown if database error occurs
*/
void saveWorkers(Collection<Worker> workers) throws SQLException;
/**
* Updates a Task object that already exists in the database
* @param taskId The ID of the given task
* @param newTaskObject The new Task object that will overwrite the existent task on database
* @throws SQLException Thrown if database error occurs
*/
void updateTask(int taskId, Task newTaskObject) throws SQLException;
/**
* Updates a Worker object that already exists in the database
* @param workerId The ID of the given worker
* @param newWorkerObject The new Worker object that will overwrite the existent task on database
* @throws SQLException Thrown if database error occurs
*/
void updateWorker(int workerId, Worker newWorkerObject) throws SQLException;
/**
* Deletes a task from the database
* @param taskId The ID of the given task that needs to be deleted
* @throws SQLException Thrown if database error occurs
*/
void deleteTask(int taskId) throws SQLException;
/**
* Deletes a worker from the database
* @param workerId The ID of the given worker that needs to be deleted
* @throws SQLException Thrown if database error occurs
*/
void deleteWorker(int workerId) throws SQLException;
/**
* Gets a collection of all tasks available in the database
* @return A collection of tasks (empty if no task available)
* @throws SQLException Thrown if database error occurs
*/
Collection<Task> getTasks() throws SQLException;
/**
* Gets a collection of all workers available in the database
* @return A collection of workers (empty if no task available)
* @throws SQLException Thrown if database error occurs
*/
Collection<Worker> getWorkers() throws SQLException;
/**
* Gets a task given by its ID from the database
* @param taskId The task ID
* @return A task from the database (NULL if no task found)
* @throws SQLException Thrown if database error occurs
*/
Task getTaskByTaskId(int taskId) throws SQLException;
/**
* Gets a worker given by its ID from the database
* @param workerId The worker ID
* @return A worker from the database (NULL if no worker found)
* @throws SQLException Thrown if database error occurs
*/
Worker getWorkerByWorkerId(int workerId) throws SQLException;
/**
* Gets the total number of available tasks in the database.
* @return The total number of tasks (0 = zero entries; -1 = error)
* @throws SQLException Thrown if database error occurs
*/
int getTotalNumberOfTasks() throws SQLException;
/**
* Gets the total number of available workers in the database.
* @return The total number of workers (0 = zero entries; -1 = error)
* @throws SQLException Thrown if database error occurs
*/
int getTotalNumberOfWorkers() throws SQLException;
}

View File

@@ -0,0 +1,193 @@
package hhn.temp.project.provider;
import hhn.temp.project.Task;
import hhn.temp.project.Worker;
import java.sql.*;
import java.util.*;
public class SimpleDatabaseManager implements DatabaseManager {
private boolean connected = false;
private Map<Integer, Task> temporaryTaskList = new HashMap();
private Map<Integer, Worker> temporaryWorkerList = new HashMap<>();
@Override
public void saveTask(Task task) throws SQLException {
if (!connected) {
throw new SQLException("[CONNECTION FAILED] Instance is not connected to database.");
}
if (!temporaryTaskList.containsKey(task.getTaskId())) {
temporaryTaskList.put(task.getTaskId(), task);
} else {
throw new SQLException("[INSERTION FAILED] Task with the same Task ID already exists.");
}
}
@Override
public void saveTasks(Collection<Task> tasks) throws SQLException {
for (Task task : tasks) {
saveTask(task);
}
}
@Override
public void saveWorker(Worker worker) throws SQLException {
if (!connected) {
throw new SQLException("[CONNECTION FAILED] Instance is not connected to database.");
}
if (!temporaryWorkerList.containsKey(worker.getId())) {
temporaryWorkerList.put(worker.getId(), worker);
} else {
throw new SQLException("[INSERTION FAILED] Task with the same Task ID already exists.");
}
}
@Override
public void saveWorkers(Collection<Worker> workers) throws SQLException {
for (Worker worker : workers) {
saveWorker(worker);
}
}
@Override
public void updateTask(int taskId, Task newTaskObject) throws SQLException {
if (!connected) {
throw new SQLException("[CONNECTION FAILED] Instance is not connected to database.");
}
if (temporaryTaskList.containsKey(taskId) && newTaskObject.getTaskId() == taskId) {
temporaryTaskList.remove(taskId);
temporaryTaskList.put(taskId, newTaskObject);
return;
}
throw new SQLException("[UPDATE FAILED] Task ID not found OR Task ID does not equal New Task ID.");
}
@Override
public void updateWorker(int workerId, Worker newWorkerObject) throws SQLException {
if (!connected) {
throw new SQLException("[CONNECTION FAILED] Instance is not connected to database.");
}
if (temporaryWorkerList.containsKey(workerId) && newWorkerObject.getId() == workerId) {
temporaryWorkerList.remove(workerId);
temporaryWorkerList.put(workerId, newWorkerObject);
return;
}
throw new SQLException("[UPDATE FAILED] Worker ID not found OR Worker ID does not equal New Worker ID.");
}
@Override
public void deleteTask(int taskId) throws SQLException {
if (!connected) {
throw new SQLException("[CONNECTION FAILED] Instance is not connected to database.");
}
if (temporaryTaskList.containsKey(taskId)) {
temporaryTaskList.remove(taskId);
return;
}
throw new SQLException("[DELETION FAILED] Could not find Task ID. Nothing to delete.");
}
@Override
public void deleteWorker(int workerId) throws SQLException {
if (!connected) {
throw new SQLException("[CONNECTION FAILED] Instance is not connected to database.");
}
if (temporaryWorkerList.containsKey(workerId)) {
temporaryWorkerList.remove(workerId);
return;
}
throw new SQLException("[DELETION FAILED] Could not find Worker ID. Nothing to delete.");
}
@Override
public Collection<Task> getTasks() throws SQLException {
if (!connected) {
throw new SQLException("[CONNECTION FAILED] Instance is not connected to database.");
}
return temporaryTaskList.values();
}
@Override
public Collection<Worker> getWorkers() throws SQLException {
if (!connected) {
throw new SQLException("[CONNECTION FAILED] Instance is not connected to database.");
}
return temporaryWorkerList.values();
}
@Override
public Task getTaskByTaskId(int taskId) throws SQLException {
if (!connected) {
throw new SQLException("[CONNECTION FAILED] Instance is not connected to database.");
}
if (temporaryTaskList.containsKey(taskId)) {
return temporaryTaskList.get(taskId);
}
throw new SQLException("[SELECTION FAILED] Could not find Task ID. Nothing to get.");
}
@Override
public Worker getWorkerByWorkerId(int workerId) throws SQLException {
if (!connected) {
throw new SQLException("[CONNECTION FAILED] Instance is not connected to database.");
}
if (temporaryWorkerList.containsKey(workerId)) {
return temporaryWorkerList.get(workerId);
}
throw new SQLException("[SELECTION FAILED] Could not find Worker ID. Nothing to get.");
}
@Override
public int getTotalNumberOfTasks() throws SQLException {
if (!connected) {
throw new SQLException("[CONNECTION FAILED] Instance is not connected to database.");
}
return temporaryTaskList.size();
}
@Override
public int getTotalNumberOfWorkers() throws SQLException {
if (!connected) {
throw new SQLException("[CONNECTION FAILED] Instance is not connected to database.");
}
return temporaryWorkerList.size();
}
public void clearDatabase() throws SQLException {
if (!connected) {
throw new SQLException("[CONNECTION FAILED] Instance is not connected to database.");
}
temporaryTaskList.clear();
temporaryWorkerList.clear();
}
@Override
public void connect() throws SQLException {
connected = true;
}
@Override
public void close() throws SQLException {
connected = false;
}
}

View File

@@ -0,0 +1,8 @@
CREATE TABLE Task (
id INT AUTO_INCREMENT PRIMARY KEY,
taskid INT,
name VARCHAR(255) NOT NULL,
description TEXT,
workerid INT,
taskstate INT
);

View File

@@ -0,0 +1 @@
DELETE FROM Task WHERE taskid = ?

View File

@@ -0,0 +1 @@
INSERT INTO Task (taskid, name, description, workerid, taskstate) VALUES (?, ?, ?, ?, ?)

View File

@@ -0,0 +1 @@
SELECT * FROM Task WHERE workerid = ?

View File

@@ -0,0 +1 @@
UPDATE Task SET name = ?, description = ?, taskstate = ? WHERE taskid = ?

View File

@@ -0,0 +1,55 @@
package hhn.temp.project;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
public class BadCasesTest {
AssignmentManager manager;
@BeforeEach
public void setup() {
manager = new AssignmentManager();
}
@Test
@DisplayName("Assert that added tasks can't be Null")
public void assertNewTasksAreNotNull() {
int workerId = manager.createWorker("Alfred");
assertThrows(IllegalArgumentException.class, () -> manager.addTask(workerId, null, null));
}
@Test
@DisplayName("Assert List isn't empty after adding a task")
public void assertListNowEmptyAfterAdd() {
int workerId = manager.createWorker("Alfred");
int taskId = manager.addTask(workerId, "Run", "Jog 10 Miles");
assertFalse(manager.getTaskMap().isEmpty());
}
@Test
@DisplayName("Assert only existing tasks can be edited")
public void assertEditOnlyExistingTasks() {
int workerId = manager.createWorker("Alfred");
assertThrows(IllegalArgumentException.class, () -> manager.editTask(workerId, 99969, "I", "am Illegal"));
assertThrows(IllegalArgumentException.class, () -> manager.editTask(22200, 99969, "I", "am Illegal"));
}
@Test
@DisplayName("Assert Add Task is programmed defensively")
public void assertAddTaskOnlyAcceptsValidParameters() {
int workerId = manager.createWorker("Alfred");
assertThrows(IllegalArgumentException.class, () -> manager.addTask( 20203,"I", "am Illegal"));
assertThrows(IllegalArgumentException.class, () -> manager.addTask( workerId,null, null));
}
@Test
@DisplayName("Assert that Remove Task is programmed defensively")
public void assertRemoveTaskOnlyAcceptsValidParameters() {
assertThrows(IllegalArgumentException.class, () -> manager.removeTask(20320));
}
@Test
@DisplayName("Assert that un-/finishing a Task only works with valid parameters")
public void assertTaskStateChangesOnlyAcceptsValidParameters() {
assertThrows(IllegalArgumentException.class, () -> manager.finishTask(20405, 21034));
assertThrows(IllegalArgumentException.class, () -> manager.unfinishTask(20405, 21034));
}
}

View File

@@ -0,0 +1,46 @@
package hhn.temp.project;
import hhn.temp.project.provider.DatabaseManager;
import hhn.temp.project.provider.SimpleDatabaseManager;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import java.io.IOException;
import java.sql.SQLException;
import static org.junit.jupiter.api.Assertions.*;
public class DatabaseBadCasesTest {
private DatabaseManager databaseManager;
@BeforeEach
public void setup() throws SQLException {
databaseManager = new SimpleDatabaseManager();
databaseManager.connect();
databaseManager.clearDatabase();
}
@Test
@DisplayName("Inserting Tasks with the same ID")
public void insertTasksWithTheSameId() throws SQLException {
Task task = new Task(10, 10, "ABC", "XYZ");
Task taskFaker = new Task(10, 5, "ABC!", "XYZ!");
databaseManager.saveTask(task);
databaseManager.saveTask(taskFaker);
}
@Test
@DisplayName("Inserting Workers with the same ID")
public void insertWorkersWithTheSameId() throws SQLException {
Worker worker = new Worker("Worker-1", 1);
Worker workerFaker = new Worker("Worker-100", 1);
databaseManager.saveWorker(worker);
databaseManager.saveWorker(workerFaker);
}
}

View File

@@ -0,0 +1,86 @@
package hhn.temp.project;
import hhn.temp.project.provider.DatabaseManager;
import hhn.temp.project.provider.SimpleDatabaseManager;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
import java.io.IOException;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
public class DatabaseGoodCasesTest {
private DatabaseManager databaseManager;
@BeforeEach
public void setup() throws SQLException {
databaseManager = new SimpleDatabaseManager();
databaseManager.connect();
databaseManager.clearDatabase();
}
@Test
@DisplayName("Inserting test task into the database and receiving back the same test task")
public void insertTaskAndReceiveItBackTest() throws SQLException {
Task task = new Task(123, 10, "Hello World", "Doing Something, hell yeah!");
databaseManager.saveTask(task);
Task reTask = databaseManager.getTaskByTaskId(task.getTaskId());
assertNotNull(reTask);
assertEquals(task.getTaskId(), reTask.getTaskId());
assertEquals(task.getDescription(), reTask.getDescription());
assertEquals(task.getName(), reTask.getName());
assertEquals(task.getWorkerId(), reTask.getWorkerId());
assertEquals(1, databaseManager.getTotalNumberOfTasks());
}
@Test
@DisplayName("Inserting test worker into the database and receiving back the same test worker")
public void insertWorkerAndReceivedItBackTest() throws SQLException {
Worker worker = new Worker("Worker-01", 12345678);
databaseManager.saveWorker(worker);
Worker reWorker = databaseManager.getWorkerByWorkerId(worker.getId());
assertNotNull(reWorker);
assertEquals(worker.getId(), reWorker.getId());
assertEquals(worker.getName(), reWorker.getName());
}
@Test
@DisplayName("Clearing the database (Task and Worker) test")
public void clearDatabaseTest() throws SQLException, InterruptedException {
Task task1 = new Task(10, 5, "Hello", "World");
Task task2 = new Task(9, 4, "Hochschule", "Heilbronn");
Task task3 = new Task(8, 9, "Gangnam", "Style");
Collection<Task> tasks = List.of(task1, task2, task3);
Worker worker1 = new Worker("ABC", 2);
Worker worker2 = new Worker("XYZ", 9);
Collection<Worker> workers = List.of(worker1, worker2);
databaseManager.saveTasks(tasks);
databaseManager.saveWorkers(workers);
Thread.sleep(500);
assertEquals(tasks.size(), databaseManager.getTotalNumberOfTasks());
assertEquals(workers.size(), databaseManager.getTotalNumberOfWorkers());
databaseManager.clearDatabase();
assertEquals(0, databaseManager.getTotalNumberOfTasks());
assertEquals(0, databaseManager.getTotalNumberOfWorkers());
}
}

View File

@@ -0,0 +1,84 @@
package hhn.temp.project;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
public class GoodCasesTest {
AssignmentManager manager;
@BeforeEach
public void setup() {
manager = new AssignmentManager();
}
@Test
@DisplayName("Assert that a Worker can add a Task")
public void assertWorkerCanAddTask() {
int workerId = manager.createWorker("Alfred");
int taskId = manager.addTask(workerId, "Run", "Jog 10 Miles");
assertNotNull(manager.getTask(taskId));
assertEquals("Run", manager.getTask(taskId).getName());
}
@Test
@DisplayName("Assert that added Tasks are added to the List")
public void assertTasksShowInList() {
int sizeCount = manager.getTaskMap().size();
int workerId = manager.createWorker("Alfred");
int taskId = manager.addTask(workerId, "Run", "Jog 10 Miles");
assertEquals(sizeCount + 1, manager.getTaskMap().size());
}
@Test
@DisplayName("Assert existing Tasks can be edited")
public void assertExistingTasksCanBeEdited() {
int workerId = manager.createWorker("Alfred");
int taskId = manager.addTask(workerId, "Run", "Jog 10 Miles");
manager.editTask(workerId, taskId, "Walk", "Walk 3 Miles");
assertEquals("Walk", manager.getTask(taskId).getName());
assertEquals("Walk 3 Miles", manager.getTask(taskId).getDescription());
}
@Test
@DisplayName("Assert that Worker can remove Task")
public void assertWorkerCanRemoveOwnTask() {
int sizeCount = manager.getTaskMap().size();
int workerId = manager.createWorker("Alfred");
int taskId = manager.addTask(workerId, "Run", "Jog 10 Miles");
assertEquals(sizeCount + 1, manager.getTaskMap().size());
manager.removeTask(taskId);
assertEquals(sizeCount, manager.getTaskMap().size());
}
@Test
@DisplayName("Assert deleted Tasks no longer show up in the List")
public void assertDeletedTasksDisappear() {
int workerId = manager.createWorker("Alfred");
int taskId = manager.addTask(workerId, "Run", "Jog 10 Miles");
manager.removeTask(taskId);
assertThrows(IllegalArgumentException.class, () -> manager.getTask(taskId));
}
@Test
@DisplayName("Check Getters")
public void assertGettersWorkCorrectly() {
int workerId = manager.createWorker("Alfred");
int taskId = manager.addTask(workerId, "Run", "Jog 10 Miles");
assertEquals("Alfred", manager.workerMap.get(workerId).getName());
//This one may be somewhat nonsensical, but it ensures the getId works so one may iterate over the workerMap
assertEquals(manager.workerMap.get(workerId).getId(), workerId);
assertEquals(manager.getTask(taskId).getTaskId(), taskId);
assertEquals(manager.getTask(taskId).getWorkerId(), workerId);
}
@Test
@DisplayName("Assert that Task State is actually changed when submitted as finished")
public void assertTaskStateChanges() {
int workerId = manager.createWorker("Alfred");
int taskId = manager.addTask(workerId, "Run", "Jog 10 Miles");
manager.finishTask(workerId, taskId);
assertSame(TaskState.FINISHED, manager.getTask(taskId).getTaskState());
manager.unfinishTask(workerId, taskId);
assertSame(TaskState.IN_PROGRESS, manager.getTask(taskId).getTaskState());
}
}

View File

@@ -1,14 +0,0 @@
package java;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Assertions.*;
public class BadCasesTest {
@BeforeEach
public void setup() {
}
}

View File

@@ -1,14 +0,0 @@
package java;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Assertions.*;
public class GoodCasesTest {
@BeforeEach
public void setup() {
}
}