diff --git a/.idea/libraries/gson_2_9_0.xml b/.idea/libraries/gson_2_9_0.xml new file mode 100644 index 0000000..23433d9 --- /dev/null +++ b/.idea/libraries/gson_2_9_0.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/SaveListTask.csv b/SaveListTask.csv index e67a40a..74cbb17 100644 --- a/SaveListTask.csv +++ b/SaveListTask.csv @@ -1,4 +1,2 @@ id,type,name,discribtion,status,startTime,durations,endTime,epic -1,TASK,nameTask1,discriprionTask1,NEW, -2,TASK,nameTask2,discriprionTask2,NEW, -3,TASK,nameTaskTime1,discriptionTaskTime1,NEW,2025-10-15T18:45,50,2025-10-15T19:35, +1,TASK,nameTaskTime1,discriptionTaskTime1,NEW,2025-10-15T18:45,50,2025-10-15T19:35, diff --git a/TestSaveListTask.csv b/TestSaveListTask.csv new file mode 100644 index 0000000..bc95e05 --- /dev/null +++ b/TestSaveListTask.csv @@ -0,0 +1,3 @@ +id,type,name,discribtion,status,startTime,durations,endTime,epic +1,TASK,nameTask1,discriprionTask1,NEW +2,TASK,nameTask2,discriprionTask2,NEW \ No newline at end of file diff --git a/java-kanban.iml b/java-kanban.iml index 20864cd..2a6abdd 100644 --- a/java-kanban.iml +++ b/java-kanban.iml @@ -124,5 +124,6 @@ + \ No newline at end of file diff --git a/src/Main.java b/src/Main.java deleted file mode 100644 index bc1109b..0000000 --- a/src/Main.java +++ /dev/null @@ -1,207 +0,0 @@ -// public static void main(String[] args) { -// InMemoryTaskManager taskManager = new InMemoryTaskManager(); -// HistoryManager historyManager = Managers.getDefaultHistory(); -// //1 Epic____________________________________ -// Epic epic1 = new Epic("Переезд", -// "Переехать в новый город"); -// taskManager.addEpic(epic1); -// //1 Subtask_________________________________ -// SubTask subTask1ForEpic1 = new SubTask("Выбрать город", -// "Сравнить города по климату", -// Status.NEW, -// epic1.getIdTask()); -// taskManager.addSubTask(subTask1ForEpic1); -// //2 SubTask__________________________________ -// SubTask subTask2ForEpic1 = new SubTask("Выбросить всё лишнее", -// "Собрать мусор и ненужные вещи по квартире", -// Status.DONE, -// epic1.getIdTask()); -// taskManager.addSubTask(subTask2ForEpic1); -// -// //2 Epic_____________________________________ -// Epic epic2 = new Epic("Генеральная уборка", -// "Привести квартиру в полный порядок"); -// taskManager.addEpic(epic2); -// //3 SubTask___________________________________ -// SubTask subTask1ForEpic2 = new SubTask("Раздать ненужные вещи", -// "Собрать вещи и отнести в пункт приёма", -// Status.NEW, -// epic2.getIdTask()); -// taskManager.addSubTask(subTask1ForEpic2); -// //1 Task______________________________________ -// Task task1 = new Task("Поздравить жену с 8 марта", -// "Купить цветы", -// Status.NEW); -// taskManager.addTask(task1); -// //2 Task_______________________________________ -// Task task2 = new Task("Сходить в магазин", -// "Купить продукты и не забыть пиво! =)", -// Status.NEW); -// taskManager.addTask(task2); -// System.out.println("\nВывод всех задач"); -// System.out.println(taskManager.getAllTask()); -// System.out.println("\nВывод всех Эпиков");// Вывод всех задач задачи -// System.out.println(taskManager.getAllEpics()); -// System.out.println("\nВывод всех подзадач\n");// Вывод всех эпиков эпики -// System.out.println(taskManager.getAllSubTask()); //Вывод всех подзадач -// System.out.println("_______________________________________________"); -// //Новая задача для обновления -// Task newStatusTask = new Task(7, "Сходить в магазин", -// "Купить продукты и не забыть пиво! =)", -// Status.DONE); -// -// -// //Обновление задачи с существующим индексом -// taskManager.updateTask(newStatusTask); -// System.out.println("\nОбновленные Задачи"); -// System.out.println(taskManager.getAllTask()); -// System.out.println("________________________________________________"); -// -// -// // Новая подзадача для обновления -// SubTask newStatusSubTask = new SubTask(2, "Выбрать город", -// "Сравнить города по климату", -// Status.IN_PROGRESS, -// epic1.getIdTask()); -// -// //Обновление подлзадачи с существующим индексом -// taskManager.updateSubTask(newStatusSubTask); -// -// System.out.println("\nОбновленные подзадачи и Епики"); -// System.out.println(taskManager.getAllSubTask()); // Вывод -// System.out.println(taskManager.getAllEpics()); // Вывод -// System.out.println("________________________________________________"); -// -// -// //Удаление задач -// System.out.println("\nПодзадачи и Эпики до удаления"); -// System.out.println("_________________________________________________"); -// System.out.println(taskManager.getAllSubTask()); -// System.out.println(taskManager.getAllEpics()); -// -// taskManager.removeSubTaskForId(2); -// -// System.out.println("\nПосле удаления подзадачи"); -// System.out.println("_________________________________________________"); -// System.out.println(taskManager.getAllSubTask()); -// System.out.println(taskManager.getAllEpics()); -// -// //taskManager.removeEpicForId(1); -// -// System.out.println("\nПосле удаления Эпика"); -// System.out.println("__________________________________________________"); -// -// System.out.println(taskManager.getAllSubTask()); -// System.out.println(taskManager.getAllEpics()); -// -// System.out.println("\nВывод Сабтасок по индексу Эпика"); -// System.out.println("___________________________________________________"); -// -// System.out.println(taskManager.getAllSubTasksForEpic(4)); -// -// System.out.println("\n Вывод Задачи по индексу"); -// System.out.println("___________________________________________________"); -// -// System.out.println(taskManager.getTaskForId(6)); -// -// System.out.println("\n Обновление Эпика по айди"); -// System.out.println("____________________________________________________"); -// Epic newEpic = new Epic(4, "Забить на всё.", "Немного отдохнуть!!!"); -// -// taskManager.updateEpic(newEpic); -// -// System.out.println(taskManager.getEpicForId(4)); -// System.out.println(); -// -// System.out.println("\nУдаление эпика и вывод Эпиков и сабтасок"); -// System.out.println("____________________________________________________"); -// -// // taskManager.removeAllEpics(); -// -// // System.out.println(taskManager.getAllEpics()); -// // System.out.println(taskManager.getAllSubTask()); -// -// System.out.println(historyManager.getTasks()); -// -// taskManager.getSubTaskForId(3); -// -// // System.out.println(taskManager.getHistory()); -// historyManager.remove(4); -// System.out.println(historyManager.getTasks()); - - - -//1 Task______________________________________ -// Task task1 = new Task("Поздравить жену с 8 марта", -// "Купить цветы", -// Status.NEW); -// taskManager.addTask(task1); -// //2 Task_______________________________________ -// Task task2 = new Task("Сходить в магазин", -// "Купить продукты и не забыть пиво! =)", -// Status.NEW); -// taskManager.addTask(task2); -// //3 Task_______________________________________ -// Task task3 = new Task("Новая 3 задача", -// "Купить пиво! =)", -// Status.NEW); -// taskManager.addTask(task3); -// //4 Task_______________________________________ -// Task task4 = new Task("Новая 4 задача", -// "Новое описание 4!", -// Status.NEW); -// taskManager.addTask(task4); -// taskManager.getTaskForId(4); -// taskManager.getTaskForId(4); -// -// taskManager.getTaskForId(1); -// -// taskManager.getTaskForId(4); -// taskManager.getTaskForId(4); -// taskManager.getTaskForId(3); -// taskManager.getTaskForId(1); -// taskManager.getTaskForId(1); -// -// taskManager.getTaskForId(1); -// -// -// System.out.println(taskManager.getHisory()); -// } -//} -//public class Main { -// public static void main(String[] args) { -// InMemoryTaskManager taskManager = new InMemoryTaskManager(); -// LocalDateTime startTime = LocalDateTime.of(2026,10,22,18,45); -// LocalDateTime startTime1 = LocalDateTime.of(2025,11,15,20,45); -// LocalDateTime startTime2 = LocalDateTime.of(2025,11,15,18,50); -// Task task = new Task(1, -// TypeTask.TASK, -// "nameTask1", -// "opicanie1", -// Status.NEW, -// startTime, -// 50, -// null); -// Task task1 = new Task(1, -// TypeTask.TASK, -// "nameTask2", -// "opicanie2", -// Status.NEW, -// startTime1, -// 50, -// null); -// Task task2 = new Task(1, -// TypeTask.TASK, -// "nameTask3", -// "opicanie3", -// Status.NEW, -// startTime2, -// 50, -// null); -// taskManager.addTask(task); -// taskManager.addTask(task1); -// taskManager.addTask(task2); -// System.out.println(taskManager.getPrioritizedTasks()); -// System.out.println(taskManager.getAllTask()); -// } -//} \ No newline at end of file diff --git a/src/manager/ManagerSaveException.java b/src/exeptions/ManagerSaveException.java similarity index 57% rename from src/manager/ManagerSaveException.java rename to src/exeptions/ManagerSaveException.java index 9fdcb2c..f5bd8bb 100644 --- a/src/manager/ManagerSaveException.java +++ b/src/exeptions/ManagerSaveException.java @@ -1,8 +1,8 @@ -package manager; +package exeptions; public class ManagerSaveException extends RuntimeException { - ManagerSaveException(String messege) { + public ManagerSaveException(String messege) { super(messege); } } diff --git a/src/exeptions/NotFoundExeption.java b/src/exeptions/NotFoundExeption.java new file mode 100644 index 0000000..877cbef --- /dev/null +++ b/src/exeptions/NotFoundExeption.java @@ -0,0 +1,7 @@ +package exeptions; + +public class NotFoundExeption extends Exception { + public NotFoundExeption(String massage) { + super(massage); + } +} diff --git a/src/exeptions/TimeConflictExeption.java b/src/exeptions/TimeConflictExeption.java new file mode 100644 index 0000000..d21a8d5 --- /dev/null +++ b/src/exeptions/TimeConflictExeption.java @@ -0,0 +1,7 @@ +package exeptions; + +public class TimeConflictExeption extends RuntimeException { + public TimeConflictExeption(String message) { + super(message); + } +} diff --git a/src/http/HttpTaskServer.java b/src/http/HttpTaskServer.java new file mode 100644 index 0000000..650162e --- /dev/null +++ b/src/http/HttpTaskServer.java @@ -0,0 +1,68 @@ +package http; + +import com.google.gson.*; +import com.sun.net.httpserver.HttpServer; +import exeptions.NotFoundExeption; +import http.handler.*; +import http.handler.adapter.DurationAdapter; +import http.handler.adapter.LocalDateTimeAdapter; +import manager.Managers; +import manager.TaskManager; +import model.Status; +import model.Task; +import model.TypeTask; + + +import java.io.IOException; +import java.net.InetSocketAddress; +import java.time.LocalDateTime; + +public class HttpTaskServer { + private static final int PORT = 8080; + private HttpServer server; + protected TaskManager taskManager; + protected Gson gson; + + public HttpTaskServer(TaskManager taskManager) throws IOException { + this.taskManager = taskManager; + this.gson = new GsonBuilder() + .registerTypeAdapter(LocalDateTime.class, new LocalDateTimeAdapter()) + .registerTypeAdapter(long.class, new DurationAdapter()) + .create(); + + this.server = HttpServer.create(new InetSocketAddress(PORT), 0); + server.createContext("/tasks", new TaskHandler(taskManager, gson)); + server.createContext("/subtasks", new SubtaskHandler(taskManager, gson)); + server.createContext("/epics", new EpicsHandler(taskManager, gson)); + server.createContext("/history", new HistoryHandler(taskManager, gson)); + server.createContext("/priorityzed", new PriorityHandler(taskManager, gson)); + + } + + public Gson getGson() { + return this.gson; + } + + + public void start() { + server.start(); + System.out.println("Сервер запущен на порте " + PORT); + + + } + + public void stop() { + server.stop(1); + System.out.println("Сервер остановлен."); + } + + public static void main(String[] args) throws IOException, NotFoundExeption { + + TaskManager manager = Managers.getDefault(); + new HttpTaskServer(manager).start(); + Task task = new Task(1, TypeTask.TASK,"name","dis", Status.NEW); + manager.addTask(task); + } + +} + diff --git a/src/http/handler/BaseHttpHandler.java b/src/http/handler/BaseHttpHandler.java new file mode 100644 index 0000000..b69b27b --- /dev/null +++ b/src/http/handler/BaseHttpHandler.java @@ -0,0 +1,63 @@ +package http.handler; + +import com.google.gson.*; +import com.sun.net.httpserver.HttpExchange; +import com.sun.net.httpserver.HttpHandler; +import manager.TaskManager; + +import java.io.*; +import java.nio.charset.StandardCharsets; +import java.util.Optional; + +public abstract class BaseHttpHandler implements HttpHandler { + protected TaskManager taskManager; + protected Gson gson; + + + public BaseHttpHandler(TaskManager taskManager, Gson gson) { + this.taskManager = taskManager; + this.gson = gson; + } + + public void sendText(HttpExchange exchange, String json, int statusCode) throws IOException { + byte[] responce = json.getBytes(StandardCharsets.UTF_8); + exchange.getResponseHeaders().add("Content-Type", "application/json"); + exchange.sendResponseHeaders(statusCode, responce.length); + try (OutputStream os = exchange.getResponseBody()) { + os.write(responce); + } + } + + public void sendNotFound(HttpExchange exchange, String text) throws IOException { + byte[] responce = text.getBytes(StandardCharsets.UTF_8); + exchange.getResponseHeaders().add("Content-Type", "application/json"); + exchange.sendResponseHeaders(404, responce.length); + try (OutputStream os = exchange.getResponseBody()) { + os.write(responce); + } + } + + public void sendHashInteraction(HttpExchange exchange, String text) throws IOException { + byte[] responce = text.getBytes(StandardCharsets.UTF_8); + exchange.getResponseHeaders().add("Content-Type", "application/json"); + exchange.sendResponseHeaders(406, responce.length); + try (OutputStream os = exchange.getResponseBody()) { + os.write(responce); + } + } + + public Optional parseId(String path) { + try { + String[] parts = path.split("/"); + return Optional.of(Integer.parseInt(parts[2])); + } catch (Exception e) { + return Optional.empty(); + } + } + + public String requestMethod(HttpExchange exchange) { + return exchange.getRequestMethod(); + } + + +} diff --git a/src/http/handler/EpicsHandler.java b/src/http/handler/EpicsHandler.java new file mode 100644 index 0000000..90ab945 --- /dev/null +++ b/src/http/handler/EpicsHandler.java @@ -0,0 +1,82 @@ +package http.handler; + +import com.google.gson.Gson; +import com.sun.net.httpserver.HttpExchange; +import exeptions.NotFoundExeption; +import exeptions.TimeConflictExeption; +import manager.TaskManager; +import model.Epic; +import model.SubTask; + +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.util.List; +import java.util.Optional; + +public class EpicsHandler extends BaseHttpHandler { + public EpicsHandler(TaskManager managers, Gson gson) { + super(managers, gson); + } + + @Override + public void handle(HttpExchange exchange) throws IOException { + try { + switch (requestMethod(exchange)) { + case "GET": + handleGet(exchange); + break; + case "POST": + handlePost(exchange); + break; + case "DELETE": + handleDelete(exchange); + break; + default: + sendText(exchange, "Метод не поддерживается", 500); + } + } catch (NotFoundExeption e) { + sendNotFound(exchange, e.getMessage()); + } catch (TimeConflictExeption e) { + sendHashInteraction(exchange, e.getMessage()); + } + } + + private void handleGet(HttpExchange exchange) throws IOException, NotFoundExeption { + Optional epicID = parseId(exchange.getRequestURI().getPath()); + String[] subtaskUrl = exchange.getRequestURI().getPath().split("/"); + boolean subtaskRequest = subtaskUrl.length >= 4 && "subtask".equals(subtaskUrl[3]); + if (epicID.isEmpty()) { + sendText(exchange, gson.toJson(taskManager.getAllEpics()), 200); + } else if (subtaskRequest) { + List subTasks = taskManager.getAllSubTasksForEpic(epicID.get()); + sendText(exchange, gson.toJson(subTasks), 200); + } else { + Epic epic = taskManager.getEpicForId(epicID.get()); + sendText(exchange, gson.toJson(epic), 200); + } + } + + private void handlePost(HttpExchange exchange) throws IOException { + Optional taskID = parseId(exchange.getRequestURI().getPath()); + String body = new String(exchange.getRequestBody().readAllBytes(), StandardCharsets.UTF_8); + Epic epic = gson.fromJson(body, Epic.class); + if (taskID.isPresent()) { + taskManager.updateEpic(epic); + sendText(exchange, "Эпик обновлен", 201); + } else { + taskManager.addEpic(epic); + sendText(exchange, "Эпик добавлен", 201); + } + } + + private void handleDelete(HttpExchange exchange) throws IOException, NotFoundExeption { + Optional taskID = parseId(exchange.getRequestURI().getPath()); + if (taskID.isEmpty()) { + sendText(exchange, "Нужно указать ID задачи", 400); + } else { + taskManager.removeEpicForId(taskID.get()); + sendText(exchange, "Задача удалена", 200); + + } + } +} diff --git a/src/http/handler/HistoryHandler.java b/src/http/handler/HistoryHandler.java new file mode 100644 index 0000000..ce0a24d --- /dev/null +++ b/src/http/handler/HistoryHandler.java @@ -0,0 +1,24 @@ +package http.handler; + +import com.google.gson.Gson; +import com.sun.net.httpserver.HttpExchange; +import manager.TaskManager; + +import java.io.IOException; + +public class HistoryHandler extends BaseHttpHandler { + + + public HistoryHandler(TaskManager managers, Gson gson) { + super(managers, gson); + } + + @Override + public void handle(HttpExchange exchange) throws IOException { + if (!requestMethod(exchange).equals("GET")) { + sendText(exchange, "Данный метод не поддерживается!", 400); + } else { + sendText(exchange, gson.toJson(taskManager.getHistory()), 200); + } + } +} diff --git a/src/http/handler/PriorityHandler.java b/src/http/handler/PriorityHandler.java new file mode 100644 index 0000000..00dd873 --- /dev/null +++ b/src/http/handler/PriorityHandler.java @@ -0,0 +1,23 @@ +package http.handler; + +import com.google.gson.Gson; +import com.sun.net.httpserver.HttpExchange; +import manager.TaskManager; + +import java.io.IOException; + +public class PriorityHandler extends BaseHttpHandler { + + public PriorityHandler(TaskManager taskManager, Gson gson) { + super(taskManager, gson); + } + + @Override + public void handle(HttpExchange exchange) throws IOException { + try { + sendText(exchange, gson.toJson(taskManager.getPrioritizedTasks()), 200); + } catch (NullPointerException e) { + sendText(exchange, "Список пуст!", 400); + } + } +} diff --git a/src/http/handler/SubtaskHandler.java b/src/http/handler/SubtaskHandler.java new file mode 100644 index 0000000..4107446 --- /dev/null +++ b/src/http/handler/SubtaskHandler.java @@ -0,0 +1,76 @@ +package http.handler; + +import com.google.gson.Gson; +import com.sun.net.httpserver.HttpExchange; +import exeptions.NotFoundExeption; +import exeptions.TimeConflictExeption; +import manager.TaskManager; +import model.SubTask; + +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.util.Optional; + +public class SubtaskHandler extends BaseHttpHandler { + public SubtaskHandler(TaskManager taskManager, Gson gson) { + super(taskManager, gson); + } + + @Override + public void handle(HttpExchange exchange) throws IOException { + try { + switch (requestMethod(exchange)) { + case "GET": + handlGet(exchange); + break; + case "POST": + handlePost(exchange); + break; + case "DELETE": + handleDelete(exchange); + break; + default: + sendText(exchange, "Метод не поддерживается", 500); + } + } catch (NotFoundExeption e) { + sendNotFound(exchange, e.getMessage()); + } catch (TimeConflictExeption e) { + sendHashInteraction(exchange, e.getMessage()); + } + } + + private void handlGet(HttpExchange exchange) throws IOException, NotFoundExeption { + Optional taskID = parseId(exchange.getRequestURI().getPath()); + if (taskID.isPresent()) { + sendText(exchange, gson.toJson(taskManager.getSubTaskForId(taskID.get())), 200); + } else { + sendText(exchange, gson.toJson(taskManager.getAllSubTask()), 200); + } + } + + private void handlePost(HttpExchange exchange) throws IOException, TimeConflictExeption, NotFoundExeption { + Optional taskID = parseId(exchange.getRequestURI().getPath()); + String body = new String(exchange.getRequestBody().readAllBytes(), StandardCharsets.UTF_8); + SubTask subTask = gson.fromJson(body, SubTask.class); + if (taskID.isPresent()) { + taskManager.updateSubTask(subTask); + sendText(exchange, "Задача обновлена", 201); + } else { + taskManager.addSubTask(subTask); + sendText(exchange, "Задача добавлена", 201); + } + } + + private void handleDelete(HttpExchange exchange) throws IOException { + Optional taskID = parseId(exchange.getRequestURI().getPath()); + if (taskID.isEmpty()) { + sendText(exchange, "Нужно указать ID задачи", 400); + } else { + try { + taskManager.removeSubTaskForId(taskID.get()); + } catch (Exception ignored) { + } + } + sendText(exchange, "Задача удалена", 200); + } +} diff --git a/src/http/handler/TaskHandler.java b/src/http/handler/TaskHandler.java new file mode 100644 index 0000000..8115eaa --- /dev/null +++ b/src/http/handler/TaskHandler.java @@ -0,0 +1,77 @@ +package http.handler; + +import com.google.gson.Gson; +import com.sun.net.httpserver.HttpExchange; +import exeptions.NotFoundExeption; +import exeptions.TimeConflictExeption; +import manager.TaskManager; +import model.Task; + +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.util.Optional; + +public class TaskHandler extends BaseHttpHandler { + public TaskHandler(TaskManager manager, Gson gson) { + super(manager, gson); + } + + + @Override + public void handle(HttpExchange exchange) throws IOException { + try { + switch (requestMethod(exchange)) { + case "GET": + handleGet(exchange); + break; + case "POST": + handlePost(exchange); + break; + case "DELETE": + handleDelete(exchange); + break; + default: + sendText(exchange, "Метод не поддерживается", 500); + } + } catch (NotFoundExeption e) { + sendNotFound(exchange, e.getMessage()); + } catch (TimeConflictExeption e) { + sendHashInteraction(exchange, e.getMessage()); + } + } + + private void handleGet(HttpExchange exchange) throws IOException, NotFoundExeption { + Optional taskID = parseId(exchange.getRequestURI().getPath()); + if (taskID.isPresent()) { + sendText(exchange, gson.toJson(taskManager.getTaskForId(taskID.get())), 200); + } else { + sendText(exchange, gson.toJson(taskManager.getAllTask()), 200); + } + } + + private void handlePost(HttpExchange exchange) throws IOException, TimeConflictExeption { + Optional taskID = parseId(exchange.getRequestURI().getPath()); + String body = new String(exchange.getRequestBody().readAllBytes(), StandardCharsets.UTF_8); + Task task = gson.fromJson(body, Task.class); + if (taskID.isPresent()) { + taskManager.updateTask(task); + sendText(exchange, "Задача обновлена", 201); + } else { + taskManager.addTask(task); + sendText(exchange, "Задача добавлена", 201); + } + } + + private void handleDelete(HttpExchange exchange) throws IOException { + Optional taskID = parseId(exchange.getRequestURI().getPath()); + if (taskID.isEmpty()) { + sendText(exchange, "Нужно указать ID задачи", 400); + } else { + try { + taskManager.removeTaskForId(taskID.get()); + } catch (Exception ignored) { + } + } + sendText(exchange, "Задача удалена", 200); + } +} diff --git a/src/http/handler/adapter/DurationAdapter.java b/src/http/handler/adapter/DurationAdapter.java new file mode 100644 index 0000000..dfd1376 --- /dev/null +++ b/src/http/handler/adapter/DurationAdapter.java @@ -0,0 +1,33 @@ +package http.handler.adapter; + +import com.google.gson.TypeAdapter; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonToken; +import com.google.gson.stream.JsonWriter; + +import java.io.IOException; + +public class DurationAdapter extends TypeAdapter { + + @Override + public void write(JsonWriter out, Long duration) throws IOException { + //if (duration == null || duration == 0) { + //out.nullValue(); + //} + if (duration == null) { + out.nullValue(); + } else { + out.value(duration); + } + } + + @Override + public Long read(JsonReader in) throws IOException { + if (in.peek() == JsonToken.NULL) { + in.nextNull(); + return 0L; + } + return in.nextLong(); + } +} + diff --git a/src/http/handler/adapter/LocalDateTimeAdapter.java b/src/http/handler/adapter/LocalDateTimeAdapter.java new file mode 100644 index 0000000..193957b --- /dev/null +++ b/src/http/handler/adapter/LocalDateTimeAdapter.java @@ -0,0 +1,30 @@ +package http.handler.adapter; + +import com.google.gson.TypeAdapter; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonWriter; + +import java.io.IOException; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +public class LocalDateTimeAdapter extends TypeAdapter { + private static final DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm"); + + @Override + public void write(final JsonWriter jsonWriter, final LocalDateTime localDateTime) throws IOException { + if (localDateTime == null) { + jsonWriter.nullValue(); + } else { + jsonWriter.value(dtf.format(localDateTime)); + } + } + + @Override + public LocalDateTime read(final JsonReader jsonReader) throws IOException { + if (jsonReader == null) { + return null; + } + return LocalDateTime.parse(jsonReader.nextString(), dtf); + } +} diff --git a/src/manager/Converter.java b/src/manager/Converter.java index 489d9c0..4ea4b02 100644 --- a/src/manager/Converter.java +++ b/src/manager/Converter.java @@ -84,48 +84,41 @@ protected static String fromTaskToString(Task task) { if (task.getStartTime().isPresent() && task.getEndTime().isPresent()) { if (task.getTypeTask() == SUBTASK) { SubTask subTask = (SubTask) task; - String taskLine = - subTask.getIdTask() + "," - + subTask.getTypeTask() + "," - + subTask.getTitleTask() + "," - + subTask.getDescriptionTask() + "," - + subTask.getStatusTask() + "," - + subTask.getEpicId() + "," - + subTask.getStartTime().map(LocalDateTime::toString).orElse(null) + "," - + subTask.getDuration().toMinutes() + "," - + subTask.getEndTime().map(LocalDateTime::toString).orElse(null) + ",\n"; - return taskLine; + + return subTask.getId() + "," + + subTask.getTypeTask() + "," + + subTask.getName() + "," + + subTask.getDescription() + "," + + subTask.getStatus() + "," + + subTask.getEpicId() + "," + + subTask.getStartTime().map(LocalDateTime::toString).orElse(null) + "," + + subTask.getDuration().toMinutes() + "," + + subTask.getEndTime().map(LocalDateTime::toString).orElse(null) + ",\n"; } else { - String taskLine = - task.getIdTask() + "," - + task.getTypeTask() + "," - + task.getTitleTask() + "," - + task.getDescriptionTask() + "," - + task.getStatusTask() + "," - + task.getStartTime().map(LocalDateTime::toString).orElse(null) + "," - + task.getDuration().toMinutes() + "," - + task.getEndTime().map(LocalDateTime::toString).orElse(null) + ",\n"; - return taskLine; + return task.getId() + "," + + task.getTypeTask() + "," + + task.getName() + "," + + task.getDescription() + "," + + task.getStatus() + "," + + task.getStartTime().map(LocalDateTime::toString).orElse(null) + "," + + task.getDuration().toMinutes() + "," + + task.getEndTime().map(LocalDateTime::toString).orElse(null) + ",\n"; } } else if (task.getTypeTask() == SUBTASK) { SubTask subTask = (SubTask) task; - String taskLine = - subTask.getIdTask() + "," - + subTask.getTypeTask() + "," - + subTask.getTitleTask() + "," - + subTask.getDescriptionTask() + "," - + subTask.getStatusTask() + "," - + subTask.getEpicId() + ",\n"; - return taskLine; + return subTask.getId() + "," + + subTask.getTypeTask() + "," + + subTask.getName() + "," + + subTask.getDescription() + "," + + subTask.getStatus() + "," + + subTask.getEpicId() + ",\n"; } else { - String taskLine = - task.getIdTask() + "," - + task.getTypeTask() + "," - + task.getTitleTask() + "," - + task.getDescriptionTask() + "," - + task.getStatusTask() + ",\n"; - return taskLine; + return task.getId() + "," + + task.getTypeTask() + "," + + task.getName() + "," + + task.getDescription() + "," + + task.getStatus() + ",\n"; } } } diff --git a/src/manager/FileBackedTaskManager.java b/src/manager/FileBackedTaskManager.java index 72259ed..35848cd 100644 --- a/src/manager/FileBackedTaskManager.java +++ b/src/manager/FileBackedTaskManager.java @@ -1,5 +1,7 @@ package manager; +import exeptions.ManagerSaveException; +import exeptions.NotFoundExeption; import model.*; import java.io.*; @@ -25,15 +27,15 @@ public static FileBackedTaskManager loadFromFile(File file) throws ManagerSaveEx try { Task task = fromString(line); - if (task.getIdTask() > fileBackedTaskManager.idNumber) { - fileBackedTaskManager.idNumber = task.getIdTask() + 1; + if (task.getId() > fileBackedTaskManager.idNumber) { + fileBackedTaskManager.idNumber = task.getId() + 1; } if (task.getTypeTask() == TASK) { - fileBackedTaskManager.tasks.put(task.getIdTask(), task); + fileBackedTaskManager.tasks.put(task.getId(), task); } else if (task.getTypeTask() == EPIC) { - fileBackedTaskManager.epics.put(task.getIdTask(), (Epic) task); + fileBackedTaskManager.epics.put(task.getId(), (Epic) task); } else if (task.getTypeTask() == SUBTASK) { - fileBackedTaskManager.subTasks.put(task.getIdTask(), (SubTask) task); + fileBackedTaskManager.subTasks.put(task.getId(), (SubTask) task); } } catch (ManagerSaveException e) { System.out.println("Ошибка обработки строки: " + line); @@ -77,7 +79,7 @@ public void addEpic(Epic epic) { } @Override - public void addSubTask(SubTask subTask) { + public void addSubTask(SubTask subTask) throws NotFoundExeption { super.addSubTask(subTask); save(); } @@ -95,7 +97,7 @@ public void removeAllEpics() { } @Override - public void removeAllSubTasks() { + public void removeAllSubTasks() throws NotFoundExeption { super.removeAllSubTasks(); save(); } @@ -113,7 +115,7 @@ public void updateEpic(Epic epic) { } @Override - public void updateSubTask(SubTask subTask) { + public void updateSubTask(SubTask subTask) throws NotFoundExeption { super.updateSubTask(subTask); save(); } @@ -125,13 +127,13 @@ public void removeTaskForId(int id) { } @Override - public void removeEpicForId(int id) { + public void removeEpicForId(int id) throws NotFoundExeption { super.removeEpicForId(id); save(); } @Override - public void removeSubTaskForId(int id) { + public void removeSubTaskForId(int id) throws NotFoundExeption, IOException { super.removeSubTaskForId(id); save(); } diff --git a/src/manager/HistoryManager.java b/src/manager/HistoryManager.java index e0163fa..3369792 100644 --- a/src/manager/HistoryManager.java +++ b/src/manager/HistoryManager.java @@ -1,11 +1,12 @@ package manager; +import exeptions.TimeConflictExeption; import model.Task; import java.util.List; public interface HistoryManager { - void add(Task task); + void add(Task task) throws TimeConflictExeption; void remove(int id); diff --git a/src/manager/InMemoryHistoryManager.java b/src/manager/InMemoryHistoryManager.java index 0823943..9be15fb 100644 --- a/src/manager/InMemoryHistoryManager.java +++ b/src/manager/InMemoryHistoryManager.java @@ -23,13 +23,13 @@ public void linkLast(Task task) { last.setNext(null); } - historyTask.put(task.getIdTask(), last); + historyTask.put(task.getId(), last); } public void removeNode(Node node) { Task task = node.getTask(); - Node removeNode = historyTask.get(task.getIdTask()); + Node removeNode = historyTask.get(task.getId()); if (removeNode.getNext() != null && removeNode.getPrev() != null) { Node nextNode = removeNode.getNext(); Node prevNode = removeNode.getPrev(); @@ -47,13 +47,13 @@ public void removeNode(Node node) { last = null; first = null; } - historyTask.remove(task.getIdTask()); + historyTask.remove(task.getId()); } @Override public void add(Task task) { - if (historyTask.containsKey(task.getIdTask())) { - removeNode(historyTask.get(task.getIdTask())); + if (historyTask.containsKey(task.getId())) { + removeNode(historyTask.get(task.getId())); } linkLast(task); } diff --git a/src/manager/InMemoryTaskManager.java b/src/manager/InMemoryTaskManager.java index ff00d87..e91da7f 100644 --- a/src/manager/InMemoryTaskManager.java +++ b/src/manager/InMemoryTaskManager.java @@ -1,10 +1,13 @@ package manager; +import exeptions.NotFoundExeption; +import exeptions.TimeConflictExeption; import model.Epic; import model.Status; import model.SubTask; import model.Task; +import java.io.IOException; import java.time.Duration; import java.time.LocalDateTime; import java.util.*; @@ -27,8 +30,8 @@ private int generateId() { return idNumber++; } - - public ArrayList getPrioritizedTasks() { + @Override + public List getPrioritizedTasks() { return new ArrayList<>(priority); } @@ -45,7 +48,7 @@ public boolean overlapsTime(Task task1, Task task2) { //Обновление времени Эпика //_________________________________________________ - private void updateTimeEpic(Epic epic) { + private void updateTimeEpic(Epic epic) throws NotFoundExeption { if (epic.getIdSubTasks().isEmpty()) { epic.setStartTime(LocalDateTime.now()); epic.setEndTime(LocalDateTime.now()); @@ -53,7 +56,7 @@ private void updateTimeEpic(Epic epic) { return; } - List subTasks = getAllSubTasksForEpic(epic.getIdTask()); + List subTasks = getAllSubTasksForEpic(epic.getId()); LocalDateTime minStartTime = null; LocalDateTime maxEndTime = null; long totalDuration = 0; @@ -87,29 +90,29 @@ private void updateTimeEpic(Epic epic) { // Обновление статуса model.Epic`a //____________________________________________________ - private void updateStatusEpic(Epic epic) { + private void updateStatusEpic(Epic epic) throws NotFoundExeption { int countStatusNew = 0; int countStatusDone = 0; if (epic.getIdSubTasks().isEmpty()) { - epic.setStatusTask(Status.NEW); + epic.setStatus(Status.NEW); return; } - for (SubTask subTask : getAllSubTasksForEpic(epic.getIdTask())) { - if (subTask.getStatusTask() == Status.IN_PROGRESS) { - epic.setStatusTask(Status.IN_PROGRESS); + for (SubTask subTask : getAllSubTasksForEpic(epic.getId())) { + if (subTask.getStatus() == Status.IN_PROGRESS) { + epic.setStatus(Status.IN_PROGRESS); return; - } else if (subTask.getStatusTask() == Status.NEW) { + } else if (subTask.getStatus() == Status.NEW) { countStatusNew++; - } else if (subTask.getStatusTask() == Status.DONE) { + } else if (subTask.getStatus() == Status.DONE) { countStatusDone++; } } if (countStatusDone == 0 && countStatusNew > 0) { - epic.setStatusTask(Status.NEW); + epic.setStatus(Status.NEW); } else if (countStatusDone > 0 && countStatusNew == 0) { - epic.setStatusTask(Status.DONE); + epic.setStatus(Status.DONE); } else { - epic.setStatusTask(Status.IN_PROGRESS); + epic.setStatus(Status.IN_PROGRESS); } } @@ -119,38 +122,38 @@ private void updateStatusEpic(Epic epic) { public void addTask(Task task) { if (task.getStartTime().isPresent()) { if (overlap(task)) { - return; + throw new TimeConflictExeption("Задача пересекается по времени!"); } else { priority.add(task); } } - task.setIdTask(generateId()); - tasks.put(task.getIdTask(), task); + task.setId(generateId()); + tasks.put(task.getId(), task); } @Override public void addEpic(Epic epic) { - epic.setIdTask(generateId()); - epics.put(epic.getIdTask(), epic); - epic.setStatusTask(Status.NEW); + epic.setId(generateId()); + epics.put(epic.getId(), epic); + epic.setStatus(Status.NEW); } @Override - public void addSubTask(SubTask subTask) { + public void addSubTask(SubTask subTask) throws NotFoundExeption { Epic epic = epics.get(subTask.getEpicId()); if (epic == null) { return; } else { if (subTask.getStartTime().isPresent()) { if (overlap(subTask)) { - return; + throw new TimeConflictExeption("Подзадача пересекается по времени"); } else { priority.add(subTask); } } - subTask.setIdTask(generateId()); - subTasks.put(subTask.getIdTask(), subTask); - epic.addIdSubTasks(subTask.getIdTask()); + subTask.setId(generateId()); + subTasks.put(subTask.getId(), subTask); + epic.addIdSubTasks(subTask.getId()); updateStatusEpic(epic); updateTimeEpic(epic); } @@ -202,7 +205,7 @@ public void removeAllEpics() { } @Override - public void removeAllSubTasks() { + public void removeAllSubTasks() throws NotFoundExeption { subTasks.keySet() .forEach(taskId -> { historyManager.remove(taskId); @@ -212,66 +215,72 @@ public void removeAllSubTasks() { epics.values() .forEach(epic -> { epic.removeSubTask(); - epic.setStatusTask(Status.NEW); - updateTimeEpic(epic); + epic.setStatus(Status.NEW); + try { + updateTimeEpic(epic); + } catch (NotFoundExeption e) { + throw new RuntimeException(e); + } }); } //Получение по идентификатору //_____________________________________________ @Override - public Task getTaskForId(int id) { - if (tasks.get(id) != null) { - historyManager.add(tasks.get(id)); - return tasks.get(id); + public Task getTaskForId(int id) throws NotFoundExeption { + if (tasks.get(id) == null) { + throw new NotFoundExeption("Задачи с ID (" + id + ") нет!"); } - return null; + historyManager.add(tasks.get(id)); + return tasks.get(id); } @Override - public Epic getEpicForId(int id) { - if (epics.get(id) != null) { - historyManager.add(epics.get(id)); - return epics.get(id); + public Epic getEpicForId(int id) throws NotFoundExeption { + if (epics.get(id) == null) { + throw new NotFoundExeption("Эпика с таким ID нет"); } - return null; + historyManager.add(epics.get(id)); + return epics.get(id); } + @Override - public SubTask getSubTaskForId(int id) { - if (subTasks.get(id) != null) { - historyManager.add(subTasks.get(id)); - return subTasks.get(id); + public SubTask getSubTaskForId(int id) throws NotFoundExeption { + if (subTasks.get(id) == null) { + throw new NotFoundExeption("Подзадачи с таким ID нет"); } - return null; + historyManager.add(subTasks.get(id)); + return subTasks.get(id); } + //Обновление задачи //__________________________________________________ @Override - public void updateTask(Task task) { - if (tasks.containsKey(task.getIdTask())) { - tasks.put(task.getIdTask(), task); + public void updateTask(Task task) throws TimeConflictExeption { + if (!tasks.containsKey(task.getId())) { + throw new TimeConflictExeption("Задачи пересекаются по времени"); } else { - System.out.println("Такой задачи нет"); + tasks.put(task.getId(), task); } } @Override public void updateEpic(Epic epic) { - if (epics.containsKey(epic.getIdTask())) { - Epic epic1 = epics.get(epic.getIdTask()); - epic1.setDescriptionTask(epic.getDescriptionTask()); - epic1.setTitleTask(epic.getTitleTask()); + if (epics.containsKey(epic.getId())) { + Epic epic1 = epics.get(epic.getId()); + epic1.setDescription(epic.getDescription()); + epic1.setName(epic.getName()); } else { System.out.println("Такой задачи нет"); } } @Override - public void updateSubTask(SubTask subTask) { - if (subTasks.containsKey(subTask.getIdTask())) { - subTasks.put(subTask.getIdTask(), subTask); + public void updateSubTask(SubTask subTask) throws NotFoundExeption { + if (subTasks.containsKey(subTask.getId())) { + subTasks.put(subTask.getId(), subTask); updateStatusEpic(epics.get(subTask.getEpicId())); updateTimeEpic(epics.get(subTask.getEpicId())); } else { @@ -290,37 +299,52 @@ public void removeTaskForId(int id) { } @Override - public void removeEpicForId(int id) { + public void removeEpicForId(int id) throws NotFoundExeption { + if (!epics.containsKey(id)) { + throw new NotFoundExeption("Эпика с таким айди нет"); + } + Epic epic = epics.get(id); - epic.getIdSubTasks() - .forEach(subTasksId -> { - subTasks.remove(subTasksId); - historyManager.remove(subTasksId); - priority.remove(subTasks.get(subTasksId)); - }); - epic.removeSubTask(); + List subTaskIds = epic.getIdSubTasks(); + + if (subTaskIds != null && !subTaskIds.isEmpty()) { + for (Integer subTaskId : subTaskIds) { + SubTask subTask = subTasks.get(subTaskId); + if (subTask != null) { + subTasks.remove(subTaskId); + historyManager.remove(subTaskId); + if (subTask.getStartTime() != null) { + priority.remove(subTask); + } + } + } + } epics.remove(id); historyManager.remove(id); priority.remove(epic); - } @Override - public void removeSubTaskForId(int id) { + public void removeSubTaskForId(int id) throws IOException, NotFoundExeption { SubTask subTask = subTasks.get(id); Epic epic = epics.get(subTask.getEpicId()); epic.removeIdSubTasks(id); subTasks.remove(id); historyManager.remove(id); - priority.remove(subTask); updateStatusEpic(epic); - updateTimeEpic(epic); + if (subTask.getStartTime().isPresent()) { + priority.remove(subTask); + updateTimeEpic(epic); + } } //Получение списка всех подзадач model.Epic`a //___________________________________________________ @Override - public ArrayList getAllSubTasksForEpic(int idEpic) { + public ArrayList getAllSubTasksForEpic(int idEpic) throws NotFoundExeption { + if (!epics.containsKey(idEpic)) { + throw new NotFoundExeption("Эпика с таким ID нет."); + } return epics.get(idEpic) .getIdSubTasks() .stream() @@ -330,7 +354,8 @@ public ArrayList getAllSubTasksForEpic(int idEpic) { // Отображение просмотренных задач //__________________________________________________ - public List getHisory() { + @Override + public List getHistory() { return historyManager.getTasks(); } diff --git a/src/manager/Managers.java b/src/manager/Managers.java index 8bc5d1d..734f4ff 100644 --- a/src/manager/Managers.java +++ b/src/manager/Managers.java @@ -3,8 +3,10 @@ import java.io.File; public class Managers { + private static final String FILE = "SaveListTask.csv"; + public static TaskManager getDefault() { - return new FileBackedTaskManager(new File("SaveListTask.csv")); + return new FileBackedTaskManager(new File(FILE)); } public static HistoryManager getDefaultHistory() { diff --git a/src/manager/TaskManager.java b/src/manager/TaskManager.java index 88305fa..b0c9985 100644 --- a/src/manager/TaskManager.java +++ b/src/manager/TaskManager.java @@ -1,10 +1,14 @@ package manager; +import exeptions.NotFoundExeption; +import exeptions.TimeConflictExeption; import model.Epic; import model.SubTask; import model.Task; +import java.io.IOException; import java.util.ArrayList; +import java.util.List; public interface TaskManager { @@ -14,7 +18,7 @@ public interface TaskManager { void addEpic(Epic epic); - void addSubTask(SubTask subTask); + void addSubTask(SubTask subTask) throws NotFoundExeption; // Получение списка задач //___________________________________________ @@ -30,38 +34,40 @@ public interface TaskManager { void removeAllEpics(); - void removeAllSubTasks(); + void removeAllSubTasks() throws NotFoundExeption; //Получение по идентификатору //_____________________________________________ - Task getTaskForId(int id); + Task getTaskForId(int id) throws NotFoundExeption; - Epic getEpicForId(int id); + Epic getEpicForId(int id) throws NotFoundExeption; - SubTask getSubTaskForId(int id); + SubTask getSubTaskForId(int id) throws NotFoundExeption; //Обновление задачи //__________________________________________________ - void updateTask(Task task); + void updateTask(Task task) throws TimeConflictExeption; - void updateEpic(Epic epic); + void updateEpic(Epic epic) throws TimeConflictExeption; - void updateSubTask(SubTask subTask); + void updateSubTask(SubTask subTask) throws TimeConflictExeption, NotFoundExeption; //Удаление задачи по ID //____________________________________________________ - void removeTaskForId(int id); + void removeTaskForId(int id) throws IOException; - void removeEpicForId(int id); + void removeEpicForId(int id) throws NotFoundExeption; - void removeSubTaskForId(int id); + void removeSubTaskForId(int id) throws IOException, NotFoundExeption; //Получение списка всех подзадач model.Epic`a //___________________________________________________ - ArrayList getAllSubTasksForEpic(int idEpic); + ArrayList getAllSubTasksForEpic(int idEpic) throws NotFoundExeption; + + // Отображение просмотренных задач + //__________________________________________________ + List getHistory(); - //Отображение последних 10 просмотренных задач - //___________________________________________________ - // List getHistory(); + List getPrioritizedTasks(); } diff --git a/src/model/Epic.java b/src/model/Epic.java index 3c80156..95a3b5b 100644 --- a/src/model/Epic.java +++ b/src/model/Epic.java @@ -7,28 +7,42 @@ public class Epic extends Task { private ArrayList idSubTasks; LocalDateTime endTime; - public Epic(String titleTask, String descriptionTask) { - super(titleTask, descriptionTask); + public Epic(String name, String description) { + super(name, description); this.idSubTasks = new ArrayList<>(); } - public Epic(int idTask, String titleTask, String descriptionTask) { - super(idTask, titleTask, descriptionTask); + public Epic(int id, String name, String description) { + super(id, name, description); this.idSubTasks = new ArrayList<>(); } - public Epic(int idTask, TypeTask type, String titleTask, String descriptionTask, Status status, ArrayList idSubTasks) { - super(idTask, type, titleTask, descriptionTask, status); + public Epic(int id, TypeTask typeTask, String name, String description, Status status, ArrayList idSubTasks) { + super(id, typeTask, name, description, status); this.idSubTasks = idSubTasks; } - public Epic(int idTask, TypeTask type, String titleTask, String descriptionTask, Status statusTask, LocalDateTime startTime, long duration, LocalDateTime endTime, ArrayList idSubTasks) { - super(idTask, type, titleTask, descriptionTask, statusTask); + public Epic(int id, TypeTask typeTask, String name, String description, Status status, LocalDateTime startTime, long duration, LocalDateTime endTime, ArrayList idSubTasks) { + super(id, typeTask, name, description, status, startTime, duration, endTime); this.idSubTasks = idSubTasks; endTime = getEndTimeEpic(); } + public Epic(int id, TypeTask typeTask, String name, String description, Status status, LocalDateTime startTime, long duration, LocalDateTime endTime) { + super(id, typeTask, name, description, status, startTime, duration, endTime); + this.idSubTasks = idSubTasks; + endTime = getEndTimeEpic(); + } + + + public Epic() { + } + + public Epic(int id, TypeTask typeTask, String name, String description, Status status) { + super(id, typeTask, name, description, status); + } + public ArrayList getIdSubTasks() { return idSubTasks; } @@ -66,10 +80,10 @@ public TypeTask getTypeTask() { @Override public String toString() { return "\n model.Epic{" + - "Номер задачи = " + getIdTask() + - ", Название задачи = '" + getTitleTask() + '\'' + - ", Описание задачи = '" + getDescriptionTask() + '\'' + - ", Статус выполнения = " + getStatusTask() + + "Номер задачи = " + getId() + + ", Название задачи = '" + getName() + '\'' + + ", Описание задачи = '" + getDescription() + '\'' + + ", Статус выполнения = " + getStatus() + ", idSubTasks = " + idSubTasks + '}'; } diff --git a/src/model/SubTask.java b/src/model/SubTask.java index e95a592..086f46f 100644 --- a/src/model/SubTask.java +++ b/src/model/SubTask.java @@ -5,23 +5,23 @@ public class SubTask extends Task { private Integer epicId; - public SubTask(String titleTask, String descriptionTask, Status statusTask, Integer epicId) { - super(titleTask, descriptionTask, statusTask); + public SubTask(String name, String description, Status status, Integer epicId) { + super(name, description, status); this.epicId = epicId; } - public SubTask(int idTask, String titleTask, String descriptionTask, Status statusTask, Integer epicId) { - super(idTask, titleTask, descriptionTask, statusTask); + public SubTask(int id, String name, String description, Status status, Integer epicId) { + super(id, name, description, status); this.epicId = epicId; } - public SubTask(int idTask, TypeTask type, String titleTask, String discription, Status status, int epicId) { - super(idTask, type, titleTask, discription, status); + public SubTask(int id, TypeTask typeTask, String name, String discription, Status status, int epicId) { + super(id, typeTask, name, discription, status); this.epicId = epicId; } - public SubTask(int idTask, TypeTask type, String titleTask, String descriptionTask, Status statusTask, LocalDateTime startTime, long duration, LocalDateTime endTime, Integer epicId) { - super(idTask, type, titleTask, descriptionTask, statusTask); + public SubTask(int id, TypeTask typeTask, String name, String description, Status status, LocalDateTime startTime, long duration, LocalDateTime endTime, Integer epicId) { + super(id, typeTask, name, description, status, startTime, duration, endTime); this.epicId = epicId; } @@ -41,10 +41,10 @@ public TypeTask getTypeTask() { @Override public String toString() { return "\n model.SubTask{" + - "Номер подзадачи = " + getIdTask() + - ", Название задачи = '" + getTitleTask() + '\'' + - ", Описание задачи = '" + getDescriptionTask() + '\'' + - ", Статус выполнения = " + getStatusTask() + + "Номер подзадачи = " + getId() + + ", Название задачи = '" + getName() + '\'' + + ", Описание задачи = '" + getDescription() + '\'' + + ", Статус выполнения = " + getStatus() + ", Номер основной задачи = " + getEpicId() + '}'; } diff --git a/src/model/Task.java b/src/model/Task.java index 2fd0da4..3de2558 100644 --- a/src/model/Task.java +++ b/src/model/Task.java @@ -1,59 +1,62 @@ package model; + import java.time.Duration; import java.time.LocalDateTime; import java.util.Objects; import java.util.Optional; public class Task { - private int idTask; - private String titleTask; - private String descriptionTask; - private Status statusTask; - private long duration; + private int id; + private String name; + private TypeTask typeTask; + private String description; + private Status status; private LocalDateTime startTime; + private long duration; - - public Task(String titleTask, String descriptionTask) { - this.titleTask = titleTask; - this.descriptionTask = descriptionTask; + public Task(String name, String description) { + this.name = name; + this.description = description; } - public Task(String titleTask, String descriptionTask, Status statusTask) { - this.titleTask = titleTask; - this.descriptionTask = descriptionTask; - this.statusTask = statusTask; + public Task(String name, String description, Status status) { + this.name = name; + this.description = description; + this.status = status; } - public Task(int idTask, String titleTask, String descriptionTask) { - this.idTask = idTask; - this.titleTask = titleTask; - this.descriptionTask = descriptionTask; + public Task(int id, String name, String description) { + this.id = id; + this.name = name; + this.description = description; } - public Task(int idTask, String titleTask, String descriptionTask, Status statusTask) { - this.idTask = idTask; - this.titleTask = titleTask; - this.descriptionTask = descriptionTask; - this.statusTask = statusTask; + public Task(int id, String name, String description, Status status) { + this.id = id; + this.name = name; + this.description = description; + this.status = status; } - public Task(int idTask, TypeTask type, String titleTask, String descriptionTask, Status status) { - this.idTask = idTask; - this.titleTask = titleTask; - this.descriptionTask = descriptionTask; - this.statusTask = status; + public Task(int id, TypeTask typeTask, String name, String description, Status status) { + this.id = id; + this.name = name; + this.typeTask = getTypeTask(); + this.description = description; + this.status = status; } public Task() { } - public Task(int idTask, TypeTask type, String titleTask, String descriptionTask, Status statusTask, LocalDateTime startTime, long duration, LocalDateTime endTime) { - this.idTask = idTask; - this.titleTask = titleTask; - this.descriptionTask = descriptionTask; - this.statusTask = statusTask; + public Task(int id, TypeTask typeTask, String name, String description, Status status, LocalDateTime startTime, long duration, LocalDateTime endTime) { + this.id = id; + this.name = name; + this.typeTask = getTypeTask(); + this.description = description; + this.status = status; this.duration = duration; this.startTime = startTime; } @@ -72,36 +75,36 @@ public Optional getEndTime() { } - public int getIdTask() { - return idTask; + public int getId() { + return id; } - public void setIdTask(int idTask) { - this.idTask = idTask; + public void setId(int id) { + this.id = id; } - public void setTitleTask(String titleTask) { - this.titleTask = titleTask; + public void setName(String name) { + this.name = name; } - public String getTitleTask() { - return titleTask; + public String getName() { + return name; } - public String getDescriptionTask() { - return descriptionTask; + public String getDescription() { + return description; } - public void setDescriptionTask(String descriptionTask) { - this.descriptionTask = descriptionTask; + public void setDescription(String description) { + this.description = description; } - public Status getStatusTask() { - return statusTask; + public Status getStatus() { + return status; } - public void setStatusTask(Status statusTask) { - this.statusTask = statusTask; + public void setStatus(Status status) { + this.status = status; } public Optional getStartTime() { @@ -129,35 +132,34 @@ public void setDuration(long duration) { public boolean equals(Object o) { if (o == null || getClass() != o.getClass()) return false; Task task = (Task) o; - return idTask == task.idTask; + return id == task.id; } @Override public int hashCode() { - return Objects.hashCode(idTask); + return Objects.hashCode(id); } @Override public String toString() { if (getStartTime().isPresent() && getEndTime().isPresent()) { return "\n model.Task{" + - "Номер задачи = " + idTask + - ", Название задачи = '" + titleTask + '\'' + - ", Описание задачи = '" + descriptionTask + '\'' + - ", Статус выполнения = " + statusTask + + "Номер задачи = " + id + + ", Название задачи = '" + name + '\'' + + ", Описание задачи = '" + description + '\'' + + ", Статус выполнения = " + status + ", Время начала задания = " + getStartTime().get() + ", Время выполнения задания = " + getDuration().toMinutes() + " минут" + ", Время окончания задания = " + getEndTime().get() + '}'; } else { return "\n model.Task{" + - "Номер задачи = " + idTask + - ", Название задачи = '" + titleTask + '\'' + - ", Описание задачи = '" + descriptionTask + '\'' + - ", Статус выполнения = " + statusTask + + "Номер задачи = " + id + + ", Название задачи = '" + name + '\'' + + ", Описание задачи = '" + description + '\'' + + ", Статус выполнения = " + status + '}'; } } - } \ No newline at end of file diff --git a/test/http/handler/EpicsHandlerTest.java b/test/http/handler/EpicsHandlerTest.java new file mode 100644 index 0000000..ae14432 --- /dev/null +++ b/test/http/handler/EpicsHandlerTest.java @@ -0,0 +1,146 @@ +package http.handler; + +import com.google.gson.Gson; +import exeptions.NotFoundExeption; +import http.HttpTaskServer; +import manager.InMemoryTaskManager; +import manager.TaskManager; +import model.Epic; +import model.Status; +import model.TypeTask; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import java.io.IOException; +import java.net.URI; +import java.net.http.HttpClient; +import java.net.http.HttpRequest; +import java.net.http.HttpResponse; +import java.time.LocalDateTime; +import java.util.List; + +import static org.junit.jupiter.api.Assertions.*; + +class EpicsHandlerTest { + TaskManager manager = new InMemoryTaskManager(); + HttpTaskServer taskServer = new HttpTaskServer(manager); + Gson gson = taskServer.getGson(); + + public EpicsHandlerTest() throws IOException { + } + + @BeforeEach + public void setUp() throws NotFoundExeption, IOException { + manager.removeAllTasks(); + manager.removeAllEpics(); + manager.removeAllSubTasks(); + taskServer.start(); + } + + @AfterEach + public void shutDown() { + taskServer.stop(); + } + + @Test + public void testAddEpic() throws IOException, InterruptedException, NotFoundExeption { + Epic epic = new Epic(1, + TypeTask.EPIC, + "nameTest1", + "disTest1", + Status.NEW, + LocalDateTime.now(), + 0, + LocalDateTime.now()); + String strEpic = gson.toJson(epic); + + HttpClient client = HttpClient.newHttpClient(); + URI url = URI.create("http://localhost:8080/epics/"); + HttpRequest request = HttpRequest.newBuilder() + .uri(url) + .POST(HttpRequest.BodyPublishers.ofString(strEpic)) + .header("Content-Type", "application/json") + .build(); + HttpResponse response = client.send(request, HttpResponse.BodyHandlers.ofString()); + + List epicList = manager.getAllEpics(); + + assertEquals(1, epicList.size(), "Количество Эпиков не совпадает"); + assertEquals(epic, manager.getEpicForId(1), "Эпик добавился, неправельный!"); + assertEquals(201, response.statusCode(), "Ошибка статуса!"); + } + + @Test + public void testGetEpic() throws IOException, InterruptedException { + Epic epic1 = new Epic(1, + TypeTask.EPIC, + "nameTest1", + "disTest1", + Status.NEW, + LocalDateTime.now(), + 0, + LocalDateTime.now()); + Epic epic2 = new Epic(2, + TypeTask.EPIC, + "nameTest2", + "disTest2", + Status.NEW, + LocalDateTime.now().plusDays(1), + 0, + LocalDateTime.now()); + manager.addEpic(epic1); + manager.addEpic(epic2); + + HttpClient client = HttpClient.newHttpClient(); + URI url = URI.create("http://localhost:8080/epics/2"); + HttpRequest request = HttpRequest.newBuilder() + .uri(url) + .GET() + .build(); + HttpResponse response = client.send(request, HttpResponse.BodyHandlers.ofString()); + + String strEpic = gson.toJson(epic2); + String strEpicJson = gson.toJson(response.body()); + assertEquals(strEpic, gson.fromJson(strEpicJson, String.class), "Эпики не совпадают"); + assertEquals(200, response.statusCode(), "Неправильный статус при получении Эпика"); + } + + @Test + public void testDeleteEpic() throws IOException, InterruptedException { + Epic epic1 = new Epic(1, + TypeTask.EPIC, + "nameTest1", + "disTest1", + Status.NEW, + LocalDateTime.now(), + 0, + LocalDateTime.now()); + Epic epic2 = new Epic(2, + TypeTask.EPIC, + "nameTest2", + "disTest2", + Status.NEW, + LocalDateTime.now().plusDays(1), + 0, + LocalDateTime.now()); + manager.addEpic(epic1); + manager.addEpic(epic2); + + HttpClient client = HttpClient.newHttpClient(); + URI url = URI.create("http://localhost:8080/epics/1"); + HttpRequest request = HttpRequest.newBuilder() + .uri(url) + .DELETE() + .build(); + //Количество Эпиков до удаления + List epicList = manager.getAllEpics(); + assertEquals(2, epicList.size(), "До удаления неправильное количество Эпиков"); + + HttpResponse response = client.send(request, HttpResponse.BodyHandlers.ofString()); + + List epicListAftherDel = manager.getAllEpics(); + assertEquals(1, epicListAftherDel.size(), "количество Эпиков после удаления неправильное"); + assertEquals(200, response.statusCode()); + } +} \ No newline at end of file diff --git a/test/http/handler/HistoryHandlerTest.java b/test/http/handler/HistoryHandlerTest.java new file mode 100644 index 0000000..bb3f53c --- /dev/null +++ b/test/http/handler/HistoryHandlerTest.java @@ -0,0 +1,93 @@ +package http.handler; + +import com.google.gson.Gson; +import exeptions.NotFoundExeption; +import http.HttpTaskServer; +import manager.InMemoryTaskManager; +import manager.TaskManager; +import model.*; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import java.io.IOException; +import java.net.URI; +import java.net.http.HttpClient; +import java.net.http.HttpRequest; +import java.net.http.HttpResponse; +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.List; + +import static org.junit.jupiter.api.Assertions.*; + +class HistoryHandlerTest { + TaskManager manager = new InMemoryTaskManager(); + HttpTaskServer taskServer = new HttpTaskServer(manager); + Gson gson = taskServer.getGson(); + + public HistoryHandlerTest() throws IOException { + } + + @BeforeEach + public void setUp() throws NotFoundExeption, IOException { + manager.removeAllTasks(); + manager.removeAllEpics(); + manager.removeAllSubTasks(); + taskServer.start(); + } + + @AfterEach + public void shutDown() { + taskServer.stop(); + } + + @Test + public void testGetHistoty() throws NotFoundExeption, IOException, InterruptedException { + Epic epic = new Epic(1, + TypeTask.EPIC, + "nameHistory", + "disHistory", + Status.NEW, + LocalDateTime.now(), + 100, LocalDateTime.now(), + new ArrayList<>()); + SubTask subTask1 = new SubTask(2, + TypeTask.SUBTASK, + "test1", + "disTest1", + Status.NEW, + LocalDateTime.now().plusMonths(1), + 150, + LocalDateTime.now(), + 1); + Task task = new Task(3, + TypeTask.TASK, + "test2", + "disTest3", + Status.NEW, + LocalDateTime.now().plusHours(3), + 150, + LocalDateTime.now()); + manager.addEpic(epic); + manager.addSubTask(subTask1); + manager.addTask(task); + manager.getEpicForId(1); + manager.getSubTaskForId(2); + manager.getTaskForId(3); + + HttpClient client = HttpClient.newHttpClient(); + URI url = URI.create("http://localhost:8080/history/"); + HttpRequest request = HttpRequest.newBuilder() + .uri(url) + .GET() + .build(); + + HttpResponse response = client.send(request, HttpResponse.BodyHandlers.ofString()); + String str = response.body().toString(); + List str1 = manager.getHistory(); + String str2 = gson.toJson(str1); + assertEquals(200, response.statusCode()); + assertEquals(str, str2, "Списки истории просмотренных задач отличаются!"); + } +} \ No newline at end of file diff --git a/test/http/handler/PriorityHandlerTest.java b/test/http/handler/PriorityHandlerTest.java new file mode 100644 index 0000000..88fc47c --- /dev/null +++ b/test/http/handler/PriorityHandlerTest.java @@ -0,0 +1,91 @@ +package http.handler; + +import com.google.gson.Gson; +import exeptions.NotFoundExeption; +import http.HttpTaskServer; +import manager.InMemoryTaskManager; +import manager.TaskManager; +import model.*; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import java.io.IOException; +import java.net.URI; +import java.net.http.HttpClient; +import java.net.http.HttpRequest; +import java.net.http.HttpResponse; +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.List; + +import static org.junit.jupiter.api.Assertions.*; + +class PriorityHandlerTest { + TaskManager manager = new InMemoryTaskManager(); + HttpTaskServer taskServer = new HttpTaskServer(manager); + Gson gson = taskServer.getGson(); + + public PriorityHandlerTest() throws IOException { + } + + @BeforeEach + public void setUp() throws NotFoundExeption, IOException { + manager.removeAllTasks(); + manager.removeAllEpics(); + manager.removeAllSubTasks(); + taskServer.start(); + } + + @AfterEach + public void shutDown() { + taskServer.stop(); + } + + @Test + public void testGetHistoty() throws NotFoundExeption, IOException, InterruptedException { + Epic epic = new Epic(1, + TypeTask.EPIC, + "nameHistory", + "disHistory", + Status.NEW, + LocalDateTime.now(), + 100, LocalDateTime.now(), + new ArrayList<>()); + SubTask subTask1 = new SubTask(2, + TypeTask.SUBTASK, + "test1", + "disTest1", + Status.NEW, + LocalDateTime.now().plusMonths(1), + 150, + LocalDateTime.now(), + 1); + Task task = new Task(3, + TypeTask.TASK, + "test2", + "disTest3", + Status.NEW, + LocalDateTime.now().plusHours(3), + 150, + LocalDateTime.now()); + manager.addEpic(epic); + manager.addSubTask(subTask1); + manager.addTask(task); + + + HttpClient client = HttpClient.newHttpClient(); + URI url = URI.create("http://localhost:8080/priorityzed/"); + HttpRequest request = HttpRequest.newBuilder() + .uri(url) + .GET() + .build(); + + HttpResponse response = client.send(request, HttpResponse.BodyHandlers.ofString()); + String str = response.body().toString(); + List str1 = manager.getPrioritizedTasks(); + String str2 = gson.toJson(str1); + assertEquals(200, response.statusCode()); + assertEquals(str, str2, "Списки истории приоритетых задач отличаются!"); + } +} \ No newline at end of file diff --git a/test/http/handler/SubtaskHandlerTest.java b/test/http/handler/SubtaskHandlerTest.java new file mode 100644 index 0000000..e56fd41 --- /dev/null +++ b/test/http/handler/SubtaskHandlerTest.java @@ -0,0 +1,222 @@ +package http.handler; + +import com.google.gson.Gson; +import exeptions.NotFoundExeption; +import http.HttpTaskServer; +import manager.InMemoryTaskManager; +import manager.TaskManager; +import model.*; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import java.io.IOException; +import java.net.URI; +import java.net.http.HttpClient; +import java.net.http.HttpRequest; +import java.net.http.HttpResponse; +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.List; + +import static org.junit.jupiter.api.Assertions.*; + +class SubtaskHandlerTest { + TaskManager manager = new InMemoryTaskManager(); + HttpTaskServer taskServer = new HttpTaskServer(manager); + Gson gson = taskServer.getGson(); + + public SubtaskHandlerTest() throws IOException { + } + + @BeforeEach + public void setUp() throws NotFoundExeption, IOException { + manager.removeAllTasks(); + manager.removeAllEpics(); + manager.removeAllSubTasks(); + taskServer.start(); + } + + @AfterEach + public void shutDown() { + taskServer.stop(); + } + + @Test + public void testAddSubtask() throws IOException, InterruptedException { + Epic epic = new Epic(1, + TypeTask.EPIC, + "nameEpic", + "disEpic", + Status.NEW, + LocalDateTime.now(), + 100, LocalDateTime.now(), + new ArrayList<>()); + SubTask subTask = new SubTask(2, + TypeTask.SUBTASK, + "test1", + "disTest1", + Status.NEW, + LocalDateTime.now(), + 150, + LocalDateTime.now(), + 1); + manager.addEpic(epic); + + String subTaskToJson = gson.toJson(subTask); + HttpClient client = HttpClient.newHttpClient(); + URI url = URI.create("http://localhost:8080/subtasks/"); + HttpRequest request = HttpRequest.newBuilder() + .uri(url) + .header("Content-Type", "application/json") + .POST(HttpRequest.BodyPublishers.ofString(subTaskToJson)) + .build(); + + HttpResponse response = client.send(request, HttpResponse.BodyHandlers.ofString()); + + assertEquals(201, response.statusCode()); + + List subtaskList = manager.getAllSubTask(); + + assertNotNull(subtaskList, "Подзадача не добавлена в лист."); + assertEquals(1, subtaskList.size(), "Некоректное количество подзадач"); + assertEquals("test1", subtaskList.get(0).getName()); + } + + @Test + public void testGetSubtask() throws IOException, InterruptedException, NotFoundExeption { + Epic epic = new Epic(1, + TypeTask.EPIC, + "nameEpic", + "disEpic", + Status.NEW, + LocalDateTime.now(), + 100, LocalDateTime.now(), + new ArrayList<>()); + SubTask subTask1 = new SubTask(2, + TypeTask.SUBTASK, + "test1", + "disTest1", + Status.NEW, + LocalDateTime.now(), + 150, + LocalDateTime.now(), + 1); + SubTask subTask2 = new SubTask(3, + TypeTask.SUBTASK, + "test2", + "disTest2", + Status.NEW, + LocalDateTime.now().plusMonths(2), + 180, + LocalDateTime.now(), + 1); + manager.addEpic(epic); + manager.addSubTask(subTask1); + manager.addSubTask(subTask2); + + HttpClient client = HttpClient.newHttpClient(); + URI url = URI.create("http://localhost:8080/subtasks/2"); + HttpRequest request = HttpRequest.newBuilder() + .uri(url) + .GET() + .build(); + HttpResponse response = client.send(request, HttpResponse.BodyHandlers.ofString()); + + String strSubtask = gson.toJson(response.body()); + String stsSub = gson.fromJson(strSubtask, String.class); + SubTask subTask = gson.fromJson(stsSub, SubTask.class); + assertEquals(subTask, subTask1, "Подзадачи не равны!"); + assertEquals(200, response.statusCode(), "Ошибка статуса"); + } + + @Test + public void testGetAllSubtask() throws IOException, InterruptedException, NotFoundExeption { + Epic epic = new Epic(1, + TypeTask.EPIC, + "nameEpic", + "disEpic", + Status.NEW, + LocalDateTime.now(), + 100, LocalDateTime.now(), + new ArrayList<>()); + SubTask subTask1 = new SubTask(2, + TypeTask.SUBTASK, + "test1", + "disTest1", + Status.NEW, + LocalDateTime.now(), + 150, + LocalDateTime.now(), + 1); + SubTask subTask2 = new SubTask(3, + TypeTask.SUBTASK, + "test2", + "disTest2", + Status.NEW, + LocalDateTime.now().plusMonths(2), + 180, + LocalDateTime.now(), + 1); + manager.addEpic(epic); + manager.addSubTask(subTask1); + manager.addSubTask(subTask2); + + HttpClient client = HttpClient.newHttpClient(); + URI url = URI.create("http://localhost:8080/subtasks/"); + HttpRequest request = HttpRequest.newBuilder() + .uri(url) + .header("Content-Type", "application/json") + .GET() + .build(); + HttpResponse response = client.send(request, HttpResponse.BodyHandlers.ofString()); + + String allSubtask = gson.toJson(response.body()); + String allSubtaskInmanager = gson.toJson(manager.getAllSubTask()); + assertEquals(200, response.statusCode(), "Ошибка статуса"); + assertEquals(allSubtask, gson.toJson(allSubtaskInmanager, String.class), "Списки подзадач не равны!"); + } + + @Test + public void testDeleteSubtask() throws IOException, InterruptedException, NotFoundExeption { + Epic epic = new Epic(1, + TypeTask.EPIC, + "nameEpic", + "disEpic", + Status.NEW, + LocalDateTime.now(), + 100, LocalDateTime.now(), + new ArrayList<>()); + SubTask subTask1 = new SubTask(2, + TypeTask.SUBTASK, + "test1", + "disTest1", + Status.NEW, + LocalDateTime.now(), + 150, + LocalDateTime.now(), + 1); + SubTask subTask2 = new SubTask(3, + TypeTask.SUBTASK, + "test2", + "disTest2", + Status.NEW, + LocalDateTime.now().plusMonths(2), + 180, + LocalDateTime.now(), + 1); + manager.addEpic(epic); + manager.addSubTask(subTask1); + manager.addSubTask(subTask2); + HttpClient client = HttpClient.newHttpClient(); + URI url = URI.create("http://localhost:8080/subtasks/3"); + HttpRequest request = HttpRequest.newBuilder() + .uri(url) + .DELETE() + .build(); + + HttpResponse response = client.send(request, HttpResponse.BodyHandlers.ofString()); + assertEquals(200, response.statusCode()); + assertEquals(1, manager.getAllSubTask().size(), "Количество Подазадач после удаления неправильное!"); + } +} \ No newline at end of file diff --git a/test/http/handler/TaskHandlerTest.java b/test/http/handler/TaskHandlerTest.java new file mode 100644 index 0000000..21a10bc --- /dev/null +++ b/test/http/handler/TaskHandlerTest.java @@ -0,0 +1,184 @@ +package http.handler; + +import com.google.gson.Gson; +import exeptions.NotFoundExeption; +import http.HttpTaskServer; +import manager.InMemoryTaskManager; +import manager.TaskManager; +import model.Status; +import model.Task; +import model.TypeTask; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import java.io.IOException; +import java.net.URI; +import java.net.http.HttpClient; +import java.net.http.HttpRequest; +import java.net.http.HttpResponse; +import java.time.LocalDateTime; +import java.util.List; + +import static org.junit.jupiter.api.Assertions.*; + +class TaskHandlerTest { + TaskManager manager = new InMemoryTaskManager(); + HttpTaskServer taskServer = new HttpTaskServer(manager); + Gson gson = taskServer.getGson(); + + public TaskHandlerTest() throws IOException { + } + + @BeforeEach + public void setUp() throws NotFoundExeption, IOException { + manager.removeAllTasks(); + manager.removeAllEpics(); + manager.removeAllSubTasks(); + taskServer.start(); + } + + @AfterEach + public void shutDown() { + taskServer.stop(); + } + + @Test + public void testAddTask() throws IOException, InterruptedException { + Task task = new Task(1, + TypeTask.TASK, + "test1", + "disTest1", + Status.NEW, + LocalDateTime.now(), + 150, + LocalDateTime.now()); + + String taskToJson = gson.toJson(task); + HttpClient client = HttpClient.newHttpClient(); + URI url = URI.create("http://localhost:8080/tasks"); + HttpRequest request = HttpRequest.newBuilder() + .uri(url) + .POST(HttpRequest.BodyPublishers.ofString(taskToJson)) + .build(); + + HttpResponse response = client.send(request, HttpResponse.BodyHandlers.ofString()); + + assertEquals(201, response.statusCode()); + + List taskList = manager.getAllTask(); + + assertNotNull(taskList, "Задача не добавлена в лист."); + assertEquals(1, taskList.size(), "Некоректное количество задач"); + assertEquals("test1", taskList.get(0).getName()); + } + + @Test + public void testGetTask() throws IOException, InterruptedException { + Task task = new Task(1, + TypeTask.TASK, + "test1", + "disTest1", + Status.NEW, + LocalDateTime.now(), + 150, + LocalDateTime.now()); + + String taskJson = gson.toJson(task); + manager.addTask(task); + + HttpClient client = HttpClient.newHttpClient(); + URI url = URI.create("http://localhost:8080/tasks/1"); + HttpRequest request = HttpRequest.newBuilder() + .uri(url) + .GET() + .build(); + + HttpResponse response = client.send(request, HttpResponse.BodyHandlers.ofString()); + + String newTaskJson = gson.toJson(response.body()); + + assertEquals(200, response.statusCode()); + + assertEquals(taskJson, gson.fromJson(newTaskJson, String.class), "Задачи не равны"); + } + + @Test + public void testGetAllTasks() throws IOException, InterruptedException { + Task task1 = new Task(1, + TypeTask.TASK, + "test1", + "disTest1", + Status.NEW, + LocalDateTime.now(), + 150, + LocalDateTime.now()); + Task task2 = new Task(1, + TypeTask.TASK, + "test2", + "disTest2", + Status.NEW, + LocalDateTime.now().plusDays(1), + 100, + LocalDateTime.now()); + manager.addTask(task1); + manager.addTask(task2); + + HttpClient client = HttpClient.newHttpClient(); + URI url = URI.create("http://localhost:8080/tasks/"); + HttpRequest request = HttpRequest.newBuilder() + .uri(url) + .GET() + .build(); + HttpResponse response = client.send(request, HttpResponse.BodyHandlers.ofString()); + + List listTask = manager.getAllTask(); + String stringListTask1 = gson.toJson(listTask); + String stringListTask2 = gson.toJson(response.body()); + + + assertEquals(stringListTask1, gson.fromJson(stringListTask2, String.class), "Списки отличатся! При получении всех задач"); + assertEquals(2, listTask.size(), "Количество задач разное! При получении всех задач."); + } + + @Test + public void testDeleteTask() throws IOException, InterruptedException, NotFoundExeption { + Task task1 = new Task(1, + TypeTask.TASK, + "test1", + "disTest1", + Status.NEW, + LocalDateTime.now(), + 150, + LocalDateTime.now()); + Task task2 = new Task(1, + TypeTask.TASK, + "test2", + "disTest2", + Status.NEW, + LocalDateTime.now().plusDays(1), + 100, + LocalDateTime.now()); + manager.addTask(task1); + manager.addTask(task2); + + HttpClient client = HttpClient.newHttpClient(); + URI url = URI.create("http://localhost:8080/tasks/1"); + HttpRequest request = HttpRequest.newBuilder() + .uri(url) + .DELETE() + .build(); + + // Проверка количества задач до запроса. + List listTask = manager.getAllTask(); + assertEquals(2, listTask.size(), "Количество задач отличатся!В тесте Удаления"); + + HttpResponse response = client.send(request, HttpResponse.BodyHandlers.ofString()); + + List listTaskAfther = manager.getAllTask(); + Task newTask = manager.getTaskForId(2); + assertEquals(1, listTaskAfther.size(), "Количество задач полсе удаление не совпадает!"); + assertEquals(task2, newTask, "Задачи не совпадают после удаления!(не так удиалилась!)"); + } + +} \ No newline at end of file diff --git a/test/manager/FileBackedTaskManagerTest.java b/test/manager/FileBackedTaskManagerTest.java index f1de2a9..ee1dea3 100644 --- a/test/manager/FileBackedTaskManagerTest.java +++ b/test/manager/FileBackedTaskManagerTest.java @@ -1,13 +1,13 @@ package manager; +import exeptions.ManagerSaveException; +import exeptions.NotFoundExeption; import model.Status; import model.Task; import model.TypeTask; import org.junit.Test; -import org.junit.jupiter.api.Assertions; import java.io.File; -import java.io.FileNotFoundException; import java.io.IOException; import java.time.LocalDateTime; import java.util.ArrayList; @@ -49,7 +49,7 @@ public void loadEmptyFile() { } @Test - public void save2NewTaskInList() throws ManagerSaveException { + public void save2NewTaskInList() throws ManagerSaveException, NotFoundExeption { Task task1 = new Task(1, "NameTask1", "DiscriprioinTask1", Status.NEW); Task task2 = new Task(2, "NameTask2", "DiscriprioinTask2", Status.NEW); @@ -65,7 +65,7 @@ public void save2NewTaskInList() throws ManagerSaveException { @Test public void load2TaskInFile() throws ManagerSaveException { - File path = new File("SaveListTask.csv"); + File path = new File("TestSaveListTask.csv"); FileBackedTaskManager fileBackedTaskManager1 = FileBackedTaskManager.loadFromFile(path); Task task1 = fileBackedTaskManager1.tasks.get(1); @@ -85,7 +85,6 @@ public void saveTaskWithTimeIndication() throws ManagerSaveException { Task task = new Task(1, TypeTask.TASK, "nameTaskTime1", "discriptionTaskTime1", Status.NEW, startTime, 50, null); fileBackedTaskManager1.addTask(task); - System.out.println(fileBackedTaskManager1.getAllTask()); } } \ No newline at end of file diff --git a/test/manager/InMemoryTaskManagerTest.java b/test/manager/InMemoryTaskManagerTest.java index ff60531..fc4c6e7 100644 --- a/test/manager/InMemoryTaskManagerTest.java +++ b/test/manager/InMemoryTaskManagerTest.java @@ -1,5 +1,7 @@ package manager; +import exeptions.NotFoundExeption; +import exeptions.TimeConflictExeption; import model.*; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; @@ -10,6 +12,7 @@ import java.util.List; import static model.Status.*; +import static org.junit.Assert.assertThrows; class InMemoryTaskManagerTest { static InMemoryTaskManager taskManager = new InMemoryTaskManager(); @@ -20,7 +23,7 @@ public void beforeEach() { } @Test - public void addNewTask() { + public void addNewTask() throws NotFoundExeption { Epic epic = new Epic(1, "Test addNewEpic", "Test addNewEpic description"); Task task = new Task(2, "Test addNewTask", "Test addNewTask description", NEW); SubTask subTask = new SubTask(3, "Test subTaskName", "Test SubTask description", Status.DONE, 1); @@ -37,21 +40,21 @@ public void addNewTask() { Assertions.assertNotNull(savedTask, "Задача не найдена."); Assertions.assertNotNull(savedTaskSubTask, "Подзадача не найдена."); - Assertions.assertEquals(savedEpic.getTitleTask(), "Test addNewEpic", "Название Epic не совпадает."); - Assertions.assertEquals(savedTask.getTitleTask(), "Test addNewTask", "Название задачи не совпадает."); - Assertions.assertEquals(savedTaskSubTask.getTitleTask(), "Test subTaskName", "Название подзадачи не совпадает."); + Assertions.assertEquals(savedEpic.getName(), "Test addNewEpic", "Название Epic не совпадает."); + Assertions.assertEquals(savedTask.getName(), "Test addNewTask", "Название задачи не совпадает."); + Assertions.assertEquals(savedTaskSubTask.getName(), "Test subTaskName", "Название подзадачи не совпадает."); - Assertions.assertEquals(savedEpic.getDescriptionTask(), "Test addNewEpic description", "Описание Epic не совпадает."); - Assertions.assertEquals(savedTask.getDescriptionTask(), "Test addNewTask description", "Описание задачи не совпадает."); - Assertions.assertEquals(savedTaskSubTask.getDescriptionTask(), "Test SubTask description", "Описание подзадачи не совпадает."); + Assertions.assertEquals(savedEpic.getDescription(), "Test addNewEpic description", "Описание Epic не совпадает."); + Assertions.assertEquals(savedTask.getDescription(), "Test addNewTask description", "Описание задачи не совпадает."); + Assertions.assertEquals(savedTaskSubTask.getDescription(), "Test SubTask description", "Описание подзадачи не совпадает."); - Assertions.assertEquals(savedEpic.getIdTask(), 1, "id Epic не совпадает"); - Assertions.assertEquals(savedTask.getIdTask(), 2, "id Task не совпадает"); - Assertions.assertEquals(savedTaskSubTask.getIdTask(), 3, "id SubTask не совпадает"); + Assertions.assertEquals(savedEpic.getId(), 1, "id Epic не совпадает"); + Assertions.assertEquals(savedTask.getId(), 2, "id Task не совпадает"); + Assertions.assertEquals(savedTaskSubTask.getId(), 3, "id SubTask не совпадает"); - Assertions.assertEquals(savedEpic.getStatusTask(), DONE, "Статус Epic не совпадает"); - Assertions.assertEquals(savedTask.getStatusTask(), NEW, "Статус Task не совпадает"); - Assertions.assertEquals(savedTaskSubTask.getStatusTask(), DONE, "Статус SubTask не совпадает"); + Assertions.assertEquals(savedEpic.getStatus(), DONE, "Статус Epic не совпадает"); + Assertions.assertEquals(savedTask.getStatus(), NEW, "Статус Task не совпадает"); + Assertions.assertEquals(savedTaskSubTask.getStatus(), DONE, "Статус SubTask не совпадает"); } @@ -68,7 +71,7 @@ void listTaskTest() { } @Test - public void getSubTaskForEpic() { + public void getSubTaskForEpic() throws NotFoundExeption { Epic epic = new Epic("Test addEpic", "Test addEpic descriprion"); SubTask subTask = new SubTask("Test addSubTask", "Test addSubTask description", Status.NEW, 1); taskManager.addEpic(epic); @@ -80,24 +83,28 @@ public void getSubTaskForEpic() { } @Test - public void addSubTaskEpicNonExistentId() { + public void addSubTaskEpicNonExistentId() throws NotFoundExeption { Epic epic = new Epic(1, "Test addNewEpic", "Test addNewEpic description"); SubTask subTask = new SubTask(2, "Test subTaskName", "Test SubTask description", Status.DONE, 2); taskManager.addEpic(epic); taskManager.addSubTask(subTask); - Assertions.assertNull(taskManager.getSubTaskForId(2)); + NotFoundExeption exception = assertThrows( + NotFoundExeption.class, + () -> taskManager.getSubTaskForId(2) + ); + Assertions.assertEquals(exception.getMessage(), "Подзадачи с таким ID нет"); } @Test - public void addTaskPreIdFrom99To1() { - Task task = new Task(99, "TestIdTask", "Test Id Task from 99 to 1", NEW); + public void addTaskPreIdFrom99To1() throws NotFoundExeption { + Task task = new Task(99, "Testid", "Test Id Task from 99 to 1", NEW); taskManager.addTask(task); Assertions.assertEquals(taskManager.getTaskForId(1), task, "id Task не совпадает в тесте PreId"); } @Test - public void newStatusEpic() { + public void newStatusEpic() throws NotFoundExeption { Epic epic = new Epic(1, "Test addNewEpic", "Test addNewEpic description"); SubTask subTask = new SubTask(2, "Test subTaskName", "Test SubTask description", NEW, 1); taskManager.addEpic(epic); @@ -105,16 +112,16 @@ public void newStatusEpic() { Epic newEpic = taskManager.getEpicForId(1); SubTask newSubTask = taskManager.getSubTaskForId(2); - Assertions.assertEquals(newEpic.getStatusTask(), NEW); + Assertions.assertEquals(newEpic.getStatus(), NEW); - newSubTask.setStatusTask(DONE); + newSubTask.setStatus(DONE); taskManager.addSubTask(newSubTask); - Assertions.assertEquals(newEpic.getStatusTask(), DONE); + Assertions.assertEquals(newEpic.getStatus(), DONE); } @Test - public void removeEpic() { + public void removeEpic() throws NotFoundExeption { Epic epic = new Epic(1, "Test addNewEpic", "Test addNewEpic description"); SubTask subTask = new SubTask(2, "Test subTaskName", "Test SubTask description", NEW, 1); SubTask subTask1 = new SubTask(3, "Test subTaskName", "Test SubTask description", NEW, 1); @@ -125,14 +132,20 @@ public void removeEpic() { Assertions.assertNotNull(taskManager.getSubTaskForId(2)); taskManager.removeEpicForId(1); - - Assertions.assertNull(taskManager.getEpicForId(1)); - Assertions.assertNull(taskManager.getSubTaskForId(2)); - Assertions.assertNull(taskManager.getSubTaskForId(3)); + NotFoundExeption exeptionEpic = assertThrows( + NotFoundExeption.class, () -> + taskManager.getEpicForId(1) + ); + NotFoundExeption exeptionSubtask = assertThrows( + NotFoundExeption.class, () -> + taskManager.getSubTaskForId(2) + ); + Assertions.assertEquals(exeptionEpic.getMessage(), "Эпика с таким ID нет"); + Assertions.assertEquals(exeptionSubtask.getMessage(), "Подзадачи с таким ID нет"); } @Test - public void statusEpicNew() { + public void statusEpicNew() throws NotFoundExeption { Epic epic = new Epic(1, "nameEpic", "discriptionEpic"); SubTask subTask1 = new SubTask(2, "nameSubtask1", "discriptionSubtask1", NEW, 1); SubTask subTask2 = new SubTask(2, "nameSubtask2", "discriptionSubtask2", NEW, 1); @@ -142,11 +155,11 @@ public void statusEpicNew() { taskManager.addSubTask(subTask2); taskManager.addSubTask(subTask3); - Assertions.assertEquals(taskManager.getEpicForId(1).getStatusTask(), NEW, "У эпика не задаётся Статус NEW"); + Assertions.assertEquals(taskManager.getEpicForId(1).getStatus(), NEW, "У эпика не задаётся Статус NEW"); } @Test - public void statusEpicDone() { + public void statusEpicDone() throws NotFoundExeption { Epic epic = new Epic(1, "nameEpic", "discriptionEpic"); SubTask subTask1 = new SubTask(2, "nameSubtask1", "discriptionSubtask1", DONE, 1); SubTask subTask2 = new SubTask(2, "nameSubtask2", "discriptionSubtask2", DONE, 1); @@ -156,11 +169,11 @@ public void statusEpicDone() { taskManager.addSubTask(subTask2); taskManager.addSubTask(subTask3); - Assertions.assertEquals(taskManager.getEpicForId(1).getStatusTask(), DONE, "У эпика не задаётся Статус DONE"); + Assertions.assertEquals(taskManager.getEpicForId(1).getStatus(), DONE, "У эпика не задаётся Статус DONE"); } @Test - public void statusEpicNewAndDone() { + public void statusEpicNewAndDone() throws NotFoundExeption { Epic epic = new Epic(1, "nameEpic", "discriptionEpic"); SubTask subTask1 = new SubTask(2, "nameSubtask1", "discriptionSubtask1", DONE, 1); SubTask subTask2 = new SubTask(2, "nameSubtask2", "discriptionSubtask2", NEW, 1); @@ -170,11 +183,11 @@ public void statusEpicNewAndDone() { taskManager.addSubTask(subTask2); taskManager.addSubTask(subTask3); - Assertions.assertEquals(taskManager.getEpicForId(1).getStatusTask(), IN_PROGRESS, "У эпика не задаётся Статус"); + Assertions.assertEquals(taskManager.getEpicForId(1).getStatus(), IN_PROGRESS, "У эпика не задаётся Статус"); } @Test - public void statusEpicInProgress() { + public void statusEpicInProgress() throws NotFoundExeption { Epic epic = new Epic(1, "nameEpic", "discriptionEpic"); SubTask subTask1 = new SubTask(2, "nameSubtask1", "discriptionSubtask1", IN_PROGRESS, 1); SubTask subTask2 = new SubTask(2, "nameSubtask2", "discriptionSubtask2", IN_PROGRESS, 1); @@ -184,7 +197,7 @@ public void statusEpicInProgress() { taskManager.addSubTask(subTask2); taskManager.addSubTask(subTask3); - Assertions.assertEquals(taskManager.getEpicForId(1).getStatusTask(), IN_PROGRESS, "У эпика не задаётся Статус"); + Assertions.assertEquals(taskManager.getEpicForId(1).getStatus(), IN_PROGRESS, "У эпика не задаётся Статус"); } @Test @@ -196,7 +209,11 @@ public void intersectionTimeTask() { Task task2 = new Task(1, TypeTask.TASK, "nameTask2", "discriptionTask2", NEW, startTime2, 100, null); taskManager.addTask(task1); - taskManager.addTask(task2); + TimeConflictExeption exeption = assertThrows( + TimeConflictExeption.class, () -> + taskManager.addTask(task2) + ); + List newListTask = new ArrayList<>(); newListTask.add(task1); Assertions.assertEquals(1, taskManager.getPrioritizedTasks().size(), "Неверное количесто задач"); @@ -224,27 +241,38 @@ public void validTestTimeTaskAndSort() { } @Test - public void endNewTaskIsTimeIntervalOfOldTask() { + public void endNewTaskIsTimeIntervalOfOldTask() throws NotFoundExeption { LocalDateTime startTime1 = LocalDateTime.of(2025, 05, 15, 20, 00); LocalDateTime startTime2 = LocalDateTime.of(2025, 05, 15, 19, 00); Task task1 = new Task(1, TypeTask.TASK, "nameTask1", "discriptionTask1", NEW, startTime1, 100, null); Task task2 = new Task(1, TypeTask.TASK, "nameTask2", "discriptionTask2", NEW, startTime2, 90, null); + taskManager.addTask(task1); - taskManager.addTask(task2); - Assertions.assertNull(taskManager.getTaskForId(2), "Добавилась задача, которая не должна добавиться"); + TimeConflictExeption exeption = assertThrows( + TimeConflictExeption.class, () -> + taskManager.addTask(task2) + ); + NotFoundExeption exeption1 = assertThrows( + NotFoundExeption.class, () -> + taskManager.getTaskForId(2) + ); + Assertions.assertEquals(exeption1.getMessage(), "Задачи с ID (2) нет!"); Assertions.assertEquals(task1, taskManager.getTaskForId(1), "Задача перезаписана! Неверно!"); Assertions.assertEquals(1, taskManager.getPrioritizedTasks().size(), "Неверное количество задач когда " + "окончание новой находиться на отрезке старой"); } @Test - public void startNewTaskInTimeIntervalOfOldTask() { + public void startNewTaskInTimeIntervalOfOldTask() throws NotFoundExeption { LocalDateTime startTime1 = LocalDateTime.of(2025, 10, 15, 20, 00); LocalDateTime startTime2 = LocalDateTime.of(2025, 10, 15, 21, 00); Task task1 = new Task(1, TypeTask.TASK, "nameTask1", "discriptionTask1", NEW, startTime1, 100, null); Task task2 = new Task(1, TypeTask.TASK, "nameTask2", "discriptionTask2", NEW, startTime2, 100, null); taskManager.addTask(task1); - taskManager.addTask(task2); + TimeConflictExeption exeption = assertThrows( + TimeConflictExeption.class, () -> + taskManager.addTask(task2) + ); Assertions.assertEquals(task1, taskManager.getTaskForId(1), "Задача перезаписано не верно!"); Assertions.assertEquals(1, taskManager.getAllTask().size()); Assertions.assertEquals(1, taskManager.getPrioritizedTasks().size(), "Неверное количество задач!" + @@ -252,26 +280,32 @@ public void startNewTaskInTimeIntervalOfOldTask() { } @Test - public void newTaskIntirelyInTimeOldTask() { + public void newTaskIntirelyInTimeOldTask() throws NotFoundExeption { LocalDateTime startTime1 = LocalDateTime.of(2025, 10, 15, 20, 00); LocalDateTime startTime2 = LocalDateTime.of(2025, 10, 16, 10, 00); Task task1 = new Task(1, TypeTask.TASK, "nameTask1", "discriptionTask1", NEW, startTime1, 2000, null); Task task2 = new Task(1, TypeTask.TASK, "nameTask2", "discriptionTask2", NEW, startTime2, 100, null); taskManager.addTask(task1); - taskManager.addTask(task2); + TimeConflictExeption exeption = assertThrows( + TimeConflictExeption.class, () -> + taskManager.addTask(task2) + ); Assertions.assertEquals(task1, taskManager.getTaskForId(1), "Задача перезаписано не верно!"); Assertions.assertEquals(1, taskManager.getAllTask().size(), "Неверное количество задач. Когда новая" + "полностью находиться во времени старой"); } @Test - public void oldTaskIntirelyInTimeNewTask() { + public void oldTaskIntirelyInTimeNewTask() throws NotFoundExeption { LocalDateTime startTime1 = LocalDateTime.of(2025, 10, 15, 10, 00); LocalDateTime startTime2 = LocalDateTime.of(2025, 10, 14, 10, 00); Task task1 = new Task(1, TypeTask.TASK, "nameTask1", "discriptionTask1", NEW, startTime1, 100, null); Task task2 = new Task(1, TypeTask.TASK, "nameTask2", "discriptionTask2", NEW, startTime2, 2000, null); taskManager.addTask(task1); - taskManager.addTask(task2); + TimeConflictExeption exeption = assertThrows( + TimeConflictExeption.class, () -> + taskManager.addTask(task2) + ); Assertions.assertEquals(task1, taskManager.getTaskForId(1), "Задача перезаписано не верно!"); Assertions.assertEquals(1, taskManager.getAllTask().size(), "Неверное количество задач. Когда старая " + "полностью находиться во времени новой"); diff --git a/test/manager/TaskManagerTest.java b/test/manager/TaskManagerTest.java index 7ddaeeb..f4f2ecf 100644 --- a/test/manager/TaskManagerTest.java +++ b/test/manager/TaskManagerTest.java @@ -1,5 +1,6 @@ package manager; +import exeptions.NotFoundExeption; import model.Epic; import model.Status; import model.SubTask; @@ -8,10 +9,12 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import java.io.IOException; import java.util.ArrayList; import static model.Status.DONE; import static model.Status.NEW; +import static org.junit.Assert.assertThrows; class TaskManagerTest { @@ -23,7 +26,7 @@ public void beforeEach() { } @Test - public void addNewTask() { + public void addNewTask() throws NotFoundExeption { Epic epic = new Epic( 1, "Test addNewEpic", @@ -52,25 +55,25 @@ public void addNewTask() { Assertions.assertNotNull(savedTask, "Задача не найдена."); Assertions.assertNotNull(savedTaskSubTask, "Подзадача не найдена."); - Assertions.assertEquals(savedEpic.getTitleTask(), "Test addNewEpic", "Название Epic не совпадает."); - Assertions.assertEquals(savedTask.getTitleTask(), "Test addNewTask", "Название задачи не совпадает."); - Assertions.assertEquals(savedTaskSubTask.getTitleTask(), "Test subTaskName", + Assertions.assertEquals(savedEpic.getName(), "Test addNewEpic", "Название Epic не совпадает."); + Assertions.assertEquals(savedTask.getName(), "Test addNewTask", "Название задачи не совпадает."); + Assertions.assertEquals(savedTaskSubTask.getName(), "Test subTaskName", "Название подзадачи не совпадает."); - Assertions.assertEquals(savedEpic.getDescriptionTask(), "Test addNewEpic description", + Assertions.assertEquals(savedEpic.getDescription(), "Test addNewEpic description", "Описание Epic не совпадает."); - Assertions.assertEquals(savedTask.getDescriptionTask(), "Test addNewTask description", + Assertions.assertEquals(savedTask.getDescription(), "Test addNewTask description", "Описание задачи не совпадает."); - Assertions.assertEquals(savedTaskSubTask.getDescriptionTask(), "Test SubTask description", + Assertions.assertEquals(savedTaskSubTask.getDescription(), "Test SubTask description", "Описание подзадачи не совпадает."); - Assertions.assertEquals(savedEpic.getIdTask(), 1, "id Epic не совпадает"); - Assertions.assertEquals(savedTask.getIdTask(), 2, "id Task не совпадает"); - Assertions.assertEquals(savedTaskSubTask.getIdTask(), 3, "id SubTask не совпадает"); + Assertions.assertEquals(savedEpic.getId(), 1, "id Epic не совпадает"); + Assertions.assertEquals(savedTask.getId(), 2, "id Task не совпадает"); + Assertions.assertEquals(savedTaskSubTask.getId(), 3, "id SubTask не совпадает"); - Assertions.assertEquals(savedEpic.getStatusTask(), DONE, "Статус Epic не совпадает"); - Assertions.assertEquals(savedTask.getStatusTask(), NEW, "Статус Task не совпадает"); - Assertions.assertEquals(savedTaskSubTask.getStatusTask(), DONE, "Статус SubTask не совпадает"); + Assertions.assertEquals(savedEpic.getStatus(), DONE, "Статус Epic не совпадает"); + Assertions.assertEquals(savedTask.getStatus(), NEW, "Статус Task не совпадает"); + Assertions.assertEquals(savedTaskSubTask.getStatus(), DONE, "Статус SubTask не совпадает"); } @@ -105,7 +108,7 @@ void getAllEpics() { } @Test - void getAllSubTaskandGetAllSubtaskForEpicId() { + void getAllSubTaskandGetAllSubtaskForEpicId() throws NotFoundExeption { Epic epic1 = new Epic(1, "nameEpic1", "discriptEpic1"); SubTask subTask1 = new SubTask(1, "nameSubtask1", "discriptSubtaks1", NEW, 1); SubTask subTask2 = new SubTask(1, "nameSubTask2", "discriptSubtask2", NEW, 1); @@ -152,7 +155,7 @@ void removeAllEpics() { } @Test - void removeAllSubTasks() { + void removeAllSubTasks() throws NotFoundExeption { Epic epic1 = new Epic(1, "nameEpic1", "discriptEpic1"); SubTask subTask1 = new SubTask(1, "nameSubtask1", "discriptSubtaks1", NEW, 1); SubTask subTask2 = new SubTask(1, "nameSubTask2", "discriptSubtask2", NEW, 1); @@ -168,7 +171,7 @@ void removeAllSubTasks() { } @Test - void getTaskForId() { + void getTaskForId() throws NotFoundExeption { Task task1 = new Task(1, "nameTask1", "discriptTask1", NEW); Task task2 = new Task(1, "nameTask2", "discriptTask2", NEW); Task task3 = new Task(1, "nameTask3", "discriptTask3", NEW); @@ -181,7 +184,7 @@ void getTaskForId() { } @Test - void getEpicForId() { + void getEpicForId() throws NotFoundExeption { Epic epic1 = new Epic(1, "nameEpic1", "discriptEpic1"); Epic epic2 = new Epic(1, "nameEpic2", "discriptEpic2"); Epic epic3 = new Epic(1, "nameEpic3", "discriptEpic3"); @@ -194,7 +197,7 @@ void getEpicForId() { } @Test - void getSubTaskForId() { + void getSubTaskForId() throws NotFoundExeption { Epic epic1 = new Epic(1, "nameEpic1", "discriptEpic1"); SubTask subTask1 = new SubTask(1, "nameSubtask1", "discriptSubtaks1", NEW, 1); SubTask subTask2 = new SubTask(1, "nameSubTask2", "discriptSubtask2", NEW, 1); @@ -209,7 +212,7 @@ void getSubTaskForId() { } @Test - void updateTask() { + void updateTask() throws NotFoundExeption { Task task1 = new Task(1, "nameTask1", "discriptTask1", NEW); Task updateTask = new Task(1, "newNameTask1", "NewDiscriptTask1", NEW); taskManager.addTask(task1); @@ -218,7 +221,7 @@ void updateTask() { } @Test - void updateEpic() { + void updateEpic() throws NotFoundExeption { Epic epic1 = new Epic(1, "nameEpic1", "discriptEpic1"); Epic updateEpic = new Epic(1, "NewNameEpic1", "NewDiscriptEpic1"); taskManager.addEpic(epic1); @@ -228,7 +231,7 @@ void updateEpic() { } @Test - void updateSubTaskAndUpdateStatusEpic() { + void updateSubTaskAndUpdateStatusEpic() throws NotFoundExeption { Epic epic1 = new Epic(1, "nameEpic1", "discriptEpic1"); SubTask subTask1 = new SubTask(2, "nameSubtask1", "discriptSubtaks1", NEW, 1); SubTask updateSubTask = new SubTask(2, "NewNameSubtask1", "NewDiscriptSubtaks1", DONE, 1); @@ -236,12 +239,12 @@ void updateSubTaskAndUpdateStatusEpic() { taskManager.addSubTask(subTask1); taskManager.updateSubTask(updateSubTask); Assertions.assertEquals(updateSubTask, taskManager.getSubTaskForId(2), "Подзадача не обновилась"); - Assertions.assertEquals(epic1.getStatusTask(), DONE, "Статус Эпика не обновился при обновлении Подзадачи"); + Assertions.assertEquals(epic1.getStatus(), DONE, "Статус Эпика не обновился при обновлении Подзадачи"); } @Test - void removeTaskForId() { + void removeTaskForId() throws NotFoundExeption { Task task1 = new Task(1, "nameTask1", "discriptTask1", NEW); Task task2 = new Task(1, "nameTask2", "discriptTask2", NEW); Task task3 = new Task(1, "nameTask3", "discriptTask3", NEW); @@ -252,12 +255,16 @@ void removeTaskForId() { ArrayList taskList = new ArrayList<>(); taskList.add(task1); taskList.add(task3); - Assertions.assertNull(taskManager.getTaskForId(2), "Задача не удалилась"); + NotFoundExeption exception = assertThrows( + NotFoundExeption.class, + () -> taskManager.getTaskForId(2) + ); + Assertions.assertEquals(exception.getMessage(), "Задачи с ID (2) нет!"); Assertions.assertEquals(taskList, taskManager.getAllTask(), "Списки не совпадают после удаления 1 задачи"); } @Test - void removeEpicForId() { + void removeEpicForId() throws NotFoundExeption { Epic epic1 = new Epic(1, "nameEpic1", "discriptEpic1"); Epic epic2 = new Epic(1, "nameEpic2", "discriptEpic2"); Epic epic3 = new Epic(1, "nameEpic3", "discriptEpic3"); @@ -268,12 +275,16 @@ void removeEpicForId() { ArrayList epicList = new ArrayList<>(); epicList.add(epic1); epicList.add(epic2); - Assertions.assertNull(taskManager.getEpicForId(3), "Эпик не удалился"); + NotFoundExeption exception = assertThrows( + NotFoundExeption.class, + () -> taskManager.getEpicForId(3) + ); + Assertions.assertEquals(exception.getMessage(), "Эпика с таким ID нет"); Assertions.assertEquals(epicList, taskManager.getAllEpics(), "Список Эпиков не совпадает после удаления 1 Эпика"); } @Test - void removeSubTaskForId() { + void removeSubTaskForId() throws NotFoundExeption, IOException { Epic epic1 = new Epic(1, "nameEpic1", "discriptEpic1"); SubTask subTask1 = new SubTask(2, "nameSubtask1", "discriptSubtaks1", NEW, 1); SubTask subTask2 = new SubTask(3, "nameSubTask2", "discriptSubtask2", NEW, 1); @@ -286,13 +297,17 @@ void removeSubTaskForId() { ArrayList subtaskList = new ArrayList<>(); subtaskList.add(subTask2); subtaskList.add(subTask3); - Assertions.assertNull(taskManager.getSubTaskForId(2), "Подзадача осталась после удаления"); + NotFoundExeption exception = assertThrows( + NotFoundExeption.class, + () -> taskManager.getSubTaskForId(2) + ); + Assertions.assertEquals(exception.getMessage(), "Подзадачи с таким ID нет"); Assertions.assertEquals(subtaskList, taskManager.getAllSubTasksForEpic(1), "Подзадача " + "не удалилась и осталась в эпике"); } @Test - void getAllSubTasksForEpic() { + void getAllSubTasksForEpic() throws NotFoundExeption { Epic epic1 = new Epic(1, "nameEpic1", "discriptEpic1"); SubTask subTask1 = new SubTask(2, "nameSubtask1", "discriptSubtaks1", NEW, 1); SubTask subTask2 = new SubTask(3, "nameSubTask2", "discriptSubtask2", NEW, 1); diff --git a/test/model/TaskTest.java b/test/model/TaskTest.java index aeff335..d3a2255 100644 --- a/test/model/TaskTest.java +++ b/test/model/TaskTest.java @@ -30,5 +30,4 @@ void equalsTask() { Assertions.assertEquals(task, task1, "Задачи не совпадают."); } - } \ No newline at end of file diff --git a/test/test.iml b/test/test.iml new file mode 100644 index 0000000..dbc8f60 --- /dev/null +++ b/test/test.iml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file