From 49b8bbee5ad49d8a48349be35b8a9b29cb29b718 Mon Sep 17 00:00:00 2001 From: KitaYaro-V Date: Fri, 16 Jan 2026 12:24:51 +0300 Subject: [PATCH 01/14] ADD FrontController + home.jsp --- pom.xml | 16 +++++----- .../javarush/matsarskaya/FrontController.java | 30 +++++++++++++++++++ src/main/webapp/WEB-INF/home.jsp | 10 +++++++ 3 files changed, 48 insertions(+), 8 deletions(-) create mode 100644 src/main/java/com/javarush/matsarskaya/FrontController.java create mode 100644 src/main/webapp/WEB-INF/home.jsp diff --git a/pom.xml b/pom.xml index 78ee59d..4a87748 100644 --- a/pom.xml +++ b/pom.xml @@ -4,10 +4,10 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - com.javarush.khmelov - project-ledzeppelin + com.javarush.matsarskaya + project-project-pantera 1.0-SNAPSHOT - ProjectLedzeppelin + ProjectPantera war @@ -17,11 +17,11 @@ 5.10.2 - - org.springframework.boot - spring-boot-starter-parent - 3.3.5 - + + + + + diff --git a/src/main/java/com/javarush/matsarskaya/FrontController.java b/src/main/java/com/javarush/matsarskaya/FrontController.java new file mode 100644 index 0000000..586764c --- /dev/null +++ b/src/main/java/com/javarush/matsarskaya/FrontController.java @@ -0,0 +1,30 @@ +package com.javarush.matsarskaya; + +import jakarta.servlet.ServletException; +import jakarta.servlet.annotation.WebServlet; +import jakarta.servlet.http.HttpServlet; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; + +import java.io.IOException; + +@WebServlet("/") +public class FrontController extends HttpServlet { + + @Override + protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { + // Прямое перенаправление на JSP страницу + req.getRequestDispatcher("/WEB-INF/home.jsp").forward(req, resp); + } + + @Override + protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { + super.doPost(req, resp); + } + + @Override + public void init() throws ServletException { + super.init(); + } +} + diff --git a/src/main/webapp/WEB-INF/home.jsp b/src/main/webapp/WEB-INF/home.jsp new file mode 100644 index 0000000..b804206 --- /dev/null +++ b/src/main/webapp/WEB-INF/home.jsp @@ -0,0 +1,10 @@ +<%@ page contentType="text/html;charset=UTF-8" language="java" %> + + + + + +

Добро пожаловать в игру "Путь всадника дракона"

+

Здесь начинается ваше приключение!

+ + From 889569ae4a3eb3311b03f684d3f354c2d94db346 Mon Sep 17 00:00:00 2001 From: KitaYaro-V Date: Fri, 16 Jan 2026 17:04:45 +0300 Subject: [PATCH 02/14] Ready start page without UI --- .../com/javarush/matsarskaya/FrontController.java | 11 ++++++++++- src/main/webapp/WEB-INF/home.jsp | 12 +++++++++--- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/javarush/matsarskaya/FrontController.java b/src/main/java/com/javarush/matsarskaya/FrontController.java index 586764c..454546d 100644 --- a/src/main/java/com/javarush/matsarskaya/FrontController.java +++ b/src/main/java/com/javarush/matsarskaya/FrontController.java @@ -15,11 +15,19 @@ public class FrontController extends HttpServlet { protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // Прямое перенаправление на JSP страницу req.getRequestDispatcher("/WEB-INF/home.jsp").forward(req, resp); + } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { - super.doPost(req, resp); + String choiceQuest =req.getParameter("quest"); + String message = ""; + + if (choiceQuest.equals("the way of the dragon rider")) { + message = "Вы выбрали квест путь всадника дракона"; + } + req.setAttribute("message", message); + req.getRequestDispatcher("/WEB-INF/home.jsp").forward(req, resp); } @Override @@ -28,3 +36,4 @@ public void init() throws ServletException { } } + diff --git a/src/main/webapp/WEB-INF/home.jsp b/src/main/webapp/WEB-INF/home.jsp index b804206..e6a395d 100644 --- a/src/main/webapp/WEB-INF/home.jsp +++ b/src/main/webapp/WEB-INF/home.jsp @@ -1,10 +1,16 @@ <%@ page contentType="text/html;charset=UTF-8" language="java" %> - + Добро пожаловать в мир квестов -

Добро пожаловать в игру "Путь всадника дракона"

-

Здесь начинается ваше приключение!

+

Здесь начинается ваше приключение!"

+ +
+

Выберите квест:

+ +
+ +

${message}

From bafe49c32c151e4683d169e5e7a52a47643a097d Mon Sep 17 00:00:00 2001 From: KitaYaro-V Date: Tue, 20 Jan 2026 15:56:06 +0300 Subject: [PATCH 03/14] The quest-dragon logic has been implemented. Without UI --- .../com/javarush/matsarskaya/cmd/Command.java | 15 ++ .../javarush/matsarskaya/cmd/HomePage.java | 8 + .../javarush/matsarskaya/cmd/QuestDragon.java | 71 +++++ .../controller/FrontController.java | 42 +++ .../matsarskaya/controller/HttpResolver.java | 22 ++ .../WEB-INF/{home.jsp => home-page.jsp} | 8 +- src/main/webapp/WEB-INF/quest-dragon.jsp | 254 ++++++++++++++++++ 7 files changed, 416 insertions(+), 4 deletions(-) create mode 100644 src/main/java/com/javarush/matsarskaya/cmd/Command.java create mode 100644 src/main/java/com/javarush/matsarskaya/cmd/HomePage.java create mode 100644 src/main/java/com/javarush/matsarskaya/cmd/QuestDragon.java create mode 100644 src/main/java/com/javarush/matsarskaya/controller/FrontController.java create mode 100644 src/main/java/com/javarush/matsarskaya/controller/HttpResolver.java rename src/main/webapp/WEB-INF/{home.jsp => home-page.jsp} (58%) create mode 100644 src/main/webapp/WEB-INF/quest-dragon.jsp diff --git a/src/main/java/com/javarush/matsarskaya/cmd/Command.java b/src/main/java/com/javarush/matsarskaya/cmd/Command.java new file mode 100644 index 0000000..39464a2 --- /dev/null +++ b/src/main/java/com/javarush/matsarskaya/cmd/Command.java @@ -0,0 +1,15 @@ +package com.javarush.matsarskaya.cmd; + +import jakarta.servlet.http.HttpServletRequest; + +public interface Command { + default String doGet(HttpServletRequest request) { + return getView(); + } + + default String doPost(HttpServletRequest request) { + return getView(); + } + + String getView(); +} diff --git a/src/main/java/com/javarush/matsarskaya/cmd/HomePage.java b/src/main/java/com/javarush/matsarskaya/cmd/HomePage.java new file mode 100644 index 0000000..7f13b8c --- /dev/null +++ b/src/main/java/com/javarush/matsarskaya/cmd/HomePage.java @@ -0,0 +1,8 @@ +package com.javarush.matsarskaya.cmd; + +public class HomePage implements Command{ + @Override + public String getView() { + return "/WEB-INF/home-page.jsp"; + } +} diff --git a/src/main/java/com/javarush/matsarskaya/cmd/QuestDragon.java b/src/main/java/com/javarush/matsarskaya/cmd/QuestDragon.java new file mode 100644 index 0000000..21654dd --- /dev/null +++ b/src/main/java/com/javarush/matsarskaya/cmd/QuestDragon.java @@ -0,0 +1,71 @@ +package com.javarush.matsarskaya.cmd; + +import jakarta.servlet.http.HttpServletRequest; + +public class QuestDragon implements Command{ + @Override + public String getView() { + return "/WEB-INF/quest-dragon.jsp"; + } + + @Override + public String doGet(HttpServletRequest request) { + // Для GET-запросов просто возвращаем представление + return getView(); + } + + @Override + public String doPost(HttpServletRequest request) { + // Обработка POST-запроса с логикой квеста + String stageParam = request.getParameter("stage"); + String choice = request.getParameter("choice"); + String playerNameInput = request.getParameter("playerNameInput"); + String quest = request.getParameter("quest"); + + // Получаем сессию + var session = request.getSession(); + + // Обработка перехода с главной страницы на квест + if(quest != null && quest.equals("the way of the dragon rider")) { + // Инициализируем сессию для нового квеста + session.setAttribute("stage", 0); + session.setAttribute("trust", 50); + return getView(); + } + else if (stageParam != null && Integer.parseInt(stageParam) == 0) { + session.setAttribute("stage", 1); + } + else if (stageParam != null && Integer.parseInt(stageParam) == 1 + && playerNameInput != null && !playerNameInput.isEmpty()) { + + session.setAttribute("playerName", playerNameInput); + session.setAttribute("stage", 2); + + } else if(stageParam != null && choice != null) { + // Обработка других этапов + int currentStage = Integer.parseInt(stageParam); + + // Обновляем доверие в зависимости от выбора + if(currentStage >= 2 && currentStage <= 9) { + Integer trust = (Integer) session.getAttribute("trust"); + if(trust == null) trust = 50; + + int trustChange = Integer.parseInt(choice); + trust += trustChange; + + // Ограничиваем доверие диапазоном 0-100 + trust = Math.max(0, Math.min(100, trust)); + + session.setAttribute("trust", trust); + } + + // Переходим к следующему этапу + session.setAttribute("stage", currentStage + 1); + } else { + // Если параметры некорректны, возвращаем на главную + return "/WEB-INF/home-page.jsp"; + } + // Возвращаем представление квеста + return getView(); + } +} diff --git a/src/main/java/com/javarush/matsarskaya/controller/FrontController.java b/src/main/java/com/javarush/matsarskaya/controller/FrontController.java new file mode 100644 index 0000000..f4079e7 --- /dev/null +++ b/src/main/java/com/javarush/matsarskaya/controller/FrontController.java @@ -0,0 +1,42 @@ +package com.javarush.matsarskaya.controller; + +import com.javarush.matsarskaya.cmd.Command; +import jakarta.servlet.ServletException; +import jakarta.servlet.annotation.WebServlet; +import jakarta.servlet.http.HttpServlet; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; + +import java.io.IOException; + +@WebServlet({"/","/home-page", "/quest-dragon"}) +public class FrontController extends HttpServlet { + + private final HttpResolver httpResolver = new HttpResolver(); + + @Override + protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { + // Получение пути запроса (например, "/home-page" или "/quest-dragon") + String pathInfo = req.getRequestURI().substring(req.getContextPath().length()); + + // Использование HttpResolver для получения соответствующей команды + Command command = httpResolver.resolve(pathInfo); + // Вызов метода doGet команды, который возвращает путь к JSP-странице + String viewPath = command.doGet(req); + + // Перенаправление запроса на соответствующую JSP-страницу + req.getRequestDispatcher(viewPath).forward(req, resp); + } + + @Override + protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { + String pathInfo = req.getRequestURI().substring(req.getContextPath().length()); + + Command command = httpResolver.resolve(pathInfo); + String viewPath = command.doPost(req); + + req.getRequestDispatcher(viewPath).forward(req, resp); + } +} + + diff --git a/src/main/java/com/javarush/matsarskaya/controller/HttpResolver.java b/src/main/java/com/javarush/matsarskaya/controller/HttpResolver.java new file mode 100644 index 0000000..dcf6939 --- /dev/null +++ b/src/main/java/com/javarush/matsarskaya/controller/HttpResolver.java @@ -0,0 +1,22 @@ +package com.javarush.matsarskaya.controller; + +import com.javarush.matsarskaya.cmd.Command; +import com.javarush.matsarskaya.cmd.HomePage; +import com.javarush.matsarskaya.cmd.QuestDragon; + +import java.util.HashMap; +import java.util.Map; + +public class HttpResolver { + private static final Map commandMap = new HashMap<>(); + + static { + commandMap.put("/", new HomePage()); + commandMap.put("/home-page", new HomePage()); + commandMap.put("/quest-dragon", new QuestDragon()); + } + + public Command resolve(String pathInfo) { + return commandMap.getOrDefault(pathInfo, new HomePage()); + } +} diff --git a/src/main/webapp/WEB-INF/home.jsp b/src/main/webapp/WEB-INF/home-page.jsp similarity index 58% rename from src/main/webapp/WEB-INF/home.jsp rename to src/main/webapp/WEB-INF/home-page.jsp index e6a395d..0f719e5 100644 --- a/src/main/webapp/WEB-INF/home.jsp +++ b/src/main/webapp/WEB-INF/home-page.jsp @@ -6,10 +6,10 @@

Здесь начинается ваше приключение!"

-
-

Выберите квест:

- -
+
+ + +

${message}

diff --git a/src/main/webapp/WEB-INF/quest-dragon.jsp b/src/main/webapp/WEB-INF/quest-dragon.jsp new file mode 100644 index 0000000..7c5f4e9 --- /dev/null +++ b/src/main/webapp/WEB-INF/quest-dragon.jsp @@ -0,0 +1,254 @@ +<%@ page contentType="text/html;charset=UTF-8" %> +<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> + + + + Путь всадника дракона + + + +

🐉 Путь всадника дракона

+ + + + + + +

Доверие дракона: ${trust}%

+
+ + + + +

❌ Поражение

+ + + +

Дракон резко отдёргивается и делает угрожающий шаг назад.
+ Наставник качает головой: доверие нельзя требовать — его нужно заслужить.

+
+ +

Дракон фыркает и отворачивается.
+ — Видишь, ${playerName}, — вздыхает наставник, — с таким подходом партнёров не заводят.

+
+ +

Наставник строго смотрит на тебя.
+ — Полёт без понимания — это падение с задержкой.

+
+ +

Дракон нервно переступает с лапы на лапу.
+ Он не чувствует в тебе надёжного всадника.

+
+ +

Дракон резко приземляется, не желая продолжать.
+ — Страх чувствуется сразу, — говорит наставник.

+
+
+ +
+ +
+
+ + +

❌ Поражение

+ + + +

Дракон начинает сильно нервничать и теряет уверенность.
+ Полёт приходится прервать раньше времени.

+
+ +

Дракон резко уходит вниз, избегая столкновения.
+ Он больше не чувствует поддержки.

+
+ +

Приземление выходит резким.
+ Дракон отстраняется, явно недовольный тем, как всё закончилось.

+
+
+ +
+ +
+
+ + + + + +

+ Ты всегда знал, что однажды этот день настанет.
+ После долгого пути ты оказываешься в долине всадников — месте, где люди и драконы становятся напарниками на всю жизнь.
+ Сегодня тебе предстоит пройти испытание, от которого зависит, примет ли тебя дракон… +

+ +
+ + +
+
+ + +

+ Перед тобой медленно открываются массивные ворота долины.
+ Старый наставник говорит:
+ — Ну что ж, смелости тебе не занимать. Назови своё имя, будущий всадник. +

+ +
+ + + +
+
+ + +

Наставник ведёт тебя в просторный вольер.
+ Перед тобой — четыре дракона, каждый оценивает тебя по-своему.

+ +
+ +
+
+
+ +
+
+ + +

Ты подходишь ближе. Дракон внимательно следит за тобой.

+ +
+ +
+
+
+ +
+
+ + +

Наставник кивает и протягивает тебе мешочек с угощением. + — Посмотрим, ${playerName}, умеешь ли ты договариваться не только словами, + — говорит он. Дракон принюхивается и слегка наклоняет голову. + Твои действия:

+ +
+ +
+
+
+ +
+
+ + +

Наставник начинает подробно рассказывать о правилах первого полёта. + Где-то на середине объяснений ты ловишь себя на мысли, + что информации стало слишком много, а дракон смотрит на тебя так, + будто тоже не всё понял. + Твои действия:

+ +
+ +
+
+
+ +
+
+ + +

Перед взлётом тебе предлагают экипировку. + Наставник хмурится и добавляет: — Это не обязательно, + ${playerName}… но падать без неё больнее. + Твои действия:

+ +
+ +
+
+
+ +
+
+ + +

Дракон напрягается, расправляет крылья и делает первый резкий рывок. + Земля начинает уходить из-под ног, и становится ясно — пути назад нет. + Твои действия:

+ +
+ +
+
+
+ +
+
+ + +

Вы уже высоко над землёй. Ветер шумит в ушах, а долина остаётся далеко внизу — красиво, + захватывающе и немного страшно. + Твои действия:

+ +
+ +
+
+
+ +
+
+ + +

Впереди неожиданно появляется стая крупных птиц. + Дракон напряжённо взмахивает крыльями, готовясь маневрировать, и ждёт твоей реакции. + Твои действия:

+ +
+ +
+
+
+ +
+
+ + +

Дракон плавно идёт на снижение. Земля быстро приближается, + и сейчас от твоих действий зависит, чем закончится этот полёт. + Твои действия:

+ +
+ +
+
+
+ +
+
+ + + + +

🏁 Успех

+

Дракон склоняет голову, принимая тебя как своего всадника. + Сегодня ты сделал первый шаг на пути, который изменит вашу жизнь.

+
+ +

❌ Провал

+

Дракон отступает, ясно давая понять — вы пока не готовы быть командой. + Возможно, в следующий раз ты сможешь подружиться с драконом, нужна практика.

+
+
+
+ +
+
+
+
+ + + From 090a8495297dfe87051ac053044aae737da2238c Mon Sep 17 00:00:00 2001 From: KitaYaro-V Date: Wed, 21 Jan 2026 12:27:02 +0300 Subject: [PATCH 04/14] New the quest-dragon logic has been implemented. --- .../controller/FrontController.java | 2 +- .../matsarskaya/controller/HttpResolver.java | 1 - src/main/webapp/WEB-INF/home-page.jsp | 7 ++++--- src/main/webapp/WEB-INF/quest-dragon.jsp | 6 ++++-- src/main/webapp/images/fourDragon.jpg | Bin 0 -> 425933 bytes 5 files changed, 9 insertions(+), 7 deletions(-) create mode 100644 src/main/webapp/images/fourDragon.jpg diff --git a/src/main/java/com/javarush/matsarskaya/controller/FrontController.java b/src/main/java/com/javarush/matsarskaya/controller/FrontController.java index f4079e7..ac8e002 100644 --- a/src/main/java/com/javarush/matsarskaya/controller/FrontController.java +++ b/src/main/java/com/javarush/matsarskaya/controller/FrontController.java @@ -9,7 +9,7 @@ import java.io.IOException; -@WebServlet({"/","/home-page", "/quest-dragon"}) +@WebServlet({"/home-page", "/quest-dragon"}) public class FrontController extends HttpServlet { private final HttpResolver httpResolver = new HttpResolver(); diff --git a/src/main/java/com/javarush/matsarskaya/controller/HttpResolver.java b/src/main/java/com/javarush/matsarskaya/controller/HttpResolver.java index dcf6939..ce48d5e 100644 --- a/src/main/java/com/javarush/matsarskaya/controller/HttpResolver.java +++ b/src/main/java/com/javarush/matsarskaya/controller/HttpResolver.java @@ -11,7 +11,6 @@ public class HttpResolver { private static final Map commandMap = new HashMap<>(); static { - commandMap.put("/", new HomePage()); commandMap.put("/home-page", new HomePage()); commandMap.put("/quest-dragon", new QuestDragon()); } diff --git a/src/main/webapp/WEB-INF/home-page.jsp b/src/main/webapp/WEB-INF/home-page.jsp index 0f719e5..6092c2b 100644 --- a/src/main/webapp/WEB-INF/home-page.jsp +++ b/src/main/webapp/WEB-INF/home-page.jsp @@ -1,14 +1,15 @@ <%@ page contentType="text/html;charset=UTF-8" language="java" %> - Добро пожаловать в мир квестов + Квесты -

Здесь начинается ваше приключение!"

+

Здесь начинается ваше приключение!"

+

Выберите квест чтобы продолжить

- +

${message}

diff --git a/src/main/webapp/WEB-INF/quest-dragon.jsp b/src/main/webapp/WEB-INF/quest-dragon.jsp index 7c5f4e9..a3e8ffd 100644 --- a/src/main/webapp/WEB-INF/quest-dragon.jsp +++ b/src/main/webapp/WEB-INF/quest-dragon.jsp @@ -107,12 +107,14 @@

Наставник ведёт тебя в просторный вольер.
Перед тобой — четыре дракона, каждый оценивает тебя по-своему.

+ +

-

- +
+
diff --git a/src/main/webapp/images/fourDragon.jpg b/src/main/webapp/images/fourDragon.jpg new file mode 100644 index 0000000000000000000000000000000000000000..22d2ebd9aef8b49360cde962db13907bf78f2564 GIT binary patch literal 425933 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%0ANX36wlE&0-K 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
  • -nNO&=`|hl*$5wi&N;{Hk=GWO~T>GR?cWNRx-Dz)+%$MdP zoOD7CNUijA+b7CKx!j85Qt=_Ap-my=vJTh>nP=!Lw~Nvmdu3;C%Esq=H>-?x9#Wcy zx6&LW?o*xf!5?xkp03QCZyf;{t8@+*wIqHAq< zCHCi3`a)KOI7ek{euliJbUnFzPQ?$oay-Y3!ieQjZC}E@zgpv2bmI9fs^a_(4X~!q zD#i^~c6S-5YsmFud^0FArF@QTN3C)*=~9n!@?XTBrP|3VnrR7I+G!l&C$({7KItUc z)o@8RksN+hw^VuFQ1k}^y6~n6Y~;?#H=`HMPD<6EddpG#8r+%b3R(_O>XLm8LyTY1 z9nF27W=mzH2WH4ZGq5V^Pmmo=Y^s^f>Im04ZSpu-v_8AlI8}>E%J3D^RMYlmvF16x zVm*a-aXmekmCm$`5ihrVH){D-!-E(HS zQkl)XLH^C&D%iR1Ts*#8Zpmnsq9J{4I1g?@y}|zgnyteQ>ioT$UOQZ-Xz<(O-{KSD zcJS7XVLwbeF&?S%60I>Y@8mXeFouY7x;U|Z8+Yh z;r^gv;~7ABtpm#RbsxgxXLO&_$eOtssTQLpF9geCcdX2VZ><1rk6HlRwE(@UKxgxy z5T7al@0t=B6ak!2fqQkKB4&VG`A`S)paasiO@wO7c?`C zx`MB4?_Zqyw4~!bdF1^|)THB&D97+m^@WN1UZ8#0WlaYNeTN%3z&nBsdH$Q9C0t~l znmoTs&4yMQjhyR-pYTT6(~ZlJCFO>gF_^`CDEQjunqLt0_ms5mU6= zP26Lt@&W^?<~~C^*Q9OAwwK`g4CN_PF5fyZac5URyj{}8xqQ*$wi-&mi1$C8TlDWt zoe=qXY|GOfHq1PCJN&*`*uM^1MeQrXdn`#zmgLE8Qyxhhg*ZyL`Vn8I{XK&5uwbOQ zXXig%^+@#|w{?+wN$G#5{{X3KwAKduSE#PNBg9HuGh-EMF*PpazFNrML+m`rY>baBwNCQkC!t_$MUZ+>WFvaFYbLa{4=}S>J$FQ z$W32-lRD)k=ba?2#U8ykHB+YH#x=)C>3WN*Sv-lkG6OlcR_dQ=KRQn^_wuhxRC^LW zb&)@Dwr|FDGMG!qI7#cD!h3^T_GpZDwjt_qxTzuV#X%uJiq~q|H&HIx7as#IDi>$1 z%0D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%0A16Z;rKbGR=9yGTI1W} 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 Date: Wed, 21 Jan 2026 20:35:45 +0300 Subject: [PATCH 05/14] Added user registration and login logic --- .../javarush/matsarskaya/cmd/HomePage.java | 11 ++++ .../javarush/matsarskaya/cmd/LoginPage.java | 34 +++++++++++ .../javarush/matsarskaya/cmd/LogoutPage.java | 24 ++++++++ .../matsarskaya/cmd/RegisterPage.java | 35 ++++++++++++ .../controller/FrontController.java | 28 ++++++--- .../matsarskaya/controller/HttpResolver.java | 17 +++--- .../matsarskaya/service/UserService.java | 54 ++++++++++++++++++ src/main/webapp/WEB-INF/home-page.jsp | 19 ++++++ src/main/webapp/WEB-INF/login-page.jsp | 25 ++++++++ src/main/webapp/WEB-INF/quest-dragon.jsp | 19 +++++- src/main/webapp/WEB-INF/register-page.jsp | 25 ++++++++ .../{fourDragon.jpg => fourDragonImg.jpg} | Bin 12 files changed, 272 insertions(+), 19 deletions(-) create mode 100644 src/main/java/com/javarush/matsarskaya/cmd/LoginPage.java create mode 100644 src/main/java/com/javarush/matsarskaya/cmd/LogoutPage.java create mode 100644 src/main/java/com/javarush/matsarskaya/cmd/RegisterPage.java create mode 100644 src/main/java/com/javarush/matsarskaya/service/UserService.java create mode 100644 src/main/webapp/WEB-INF/login-page.jsp create mode 100644 src/main/webapp/WEB-INF/register-page.jsp rename src/main/webapp/images/{fourDragon.jpg => fourDragonImg.jpg} (100%) diff --git a/src/main/java/com/javarush/matsarskaya/cmd/HomePage.java b/src/main/java/com/javarush/matsarskaya/cmd/HomePage.java index 7f13b8c..f6bb4e1 100644 --- a/src/main/java/com/javarush/matsarskaya/cmd/HomePage.java +++ b/src/main/java/com/javarush/matsarskaya/cmd/HomePage.java @@ -1,6 +1,17 @@ package com.javarush.matsarskaya.cmd; +import jakarta.servlet.http.HttpServletRequest; + public class HomePage implements Command{ + + @Override + public String doGet(HttpServletRequest request) { + return getView(); + } + @Override + public String doPost(HttpServletRequest request) { + return getView(); + } @Override public String getView() { return "/WEB-INF/home-page.jsp"; diff --git a/src/main/java/com/javarush/matsarskaya/cmd/LoginPage.java b/src/main/java/com/javarush/matsarskaya/cmd/LoginPage.java new file mode 100644 index 0000000..24ef7f7 --- /dev/null +++ b/src/main/java/com/javarush/matsarskaya/cmd/LoginPage.java @@ -0,0 +1,34 @@ +package com.javarush.matsarskaya.cmd; + +import com.javarush.matsarskaya.service.UserService; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpSession; + +public class LoginPage implements Command { + private final UserService userService = new UserService(); + + @Override + public String doGet(HttpServletRequest request) { + return "/WEB-INF/login-page.jsp"; + } + + @Override + public String doPost(HttpServletRequest request) { + String username = request.getParameter("username"); + String password = request.getParameter("password"); + + if (userService.loginUser(username, password)) { + HttpSession session = request.getSession(); + session.setAttribute("username", username); + return "/home-page"; + } else { + request.setAttribute("error", "Неверное имя пользователя или пароль"); + return "/WEB-INF/login-page.jsp"; + } + } + + @Override + public String getView() { + return "/WEB-INF/login-page.jsp"; + } +} diff --git a/src/main/java/com/javarush/matsarskaya/cmd/LogoutPage.java b/src/main/java/com/javarush/matsarskaya/cmd/LogoutPage.java new file mode 100644 index 0000000..7faf335 --- /dev/null +++ b/src/main/java/com/javarush/matsarskaya/cmd/LogoutPage.java @@ -0,0 +1,24 @@ +package com.javarush.matsarskaya.cmd; + +import com.javarush.matsarskaya.service.UserService; +import jakarta.servlet.http.HttpServletRequest; + +public class LogoutPage implements Command{ + private final UserService userService = new UserService(); + + @Override + public String doPost(HttpServletRequest request) { + userService.logout(request); + return "/home-page"; + } + + @Override + public String doGet(HttpServletRequest request) { + return doPost(request); + } + + @Override + public String getView() { + return "/home-page"; + } +} diff --git a/src/main/java/com/javarush/matsarskaya/cmd/RegisterPage.java b/src/main/java/com/javarush/matsarskaya/cmd/RegisterPage.java new file mode 100644 index 0000000..502d3c3 --- /dev/null +++ b/src/main/java/com/javarush/matsarskaya/cmd/RegisterPage.java @@ -0,0 +1,35 @@ +package com.javarush.matsarskaya.cmd; + +import com.javarush.matsarskaya.service.UserService; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpSession; + +public class RegisterPage implements Command{ + private final UserService userService = new UserService(); + + @Override + public String doGet(HttpServletRequest request) { + return "/WEB-INF/register-page.jsp"; + } + + @Override + public String doPost(HttpServletRequest request) { + String username = request.getParameter("username"); + String password = request.getParameter("password"); + + if (userService.registerUser(username, password)) { + // Автоматический вход после регистрации + HttpSession session = request.getSession(); + session.setAttribute("username", username); + return "/home-page"; + } else { + request.setAttribute("error", "Пользователь уже существует"); + return "/WEB-INF/register-page.jsp"; + } + } + + @Override + public String getView() { + return "/WEB-INF/register-page.jsp"; + } +} diff --git a/src/main/java/com/javarush/matsarskaya/controller/FrontController.java b/src/main/java/com/javarush/matsarskaya/controller/FrontController.java index ac8e002..c85df19 100644 --- a/src/main/java/com/javarush/matsarskaya/controller/FrontController.java +++ b/src/main/java/com/javarush/matsarskaya/controller/FrontController.java @@ -1,6 +1,7 @@ package com.javarush.matsarskaya.controller; import com.javarush.matsarskaya.cmd.Command; +import com.javarush.matsarskaya.service.UserService; import jakarta.servlet.ServletException; import jakarta.servlet.annotation.WebServlet; import jakarta.servlet.http.HttpServlet; @@ -9,32 +10,45 @@ import java.io.IOException; -@WebServlet({"/home-page", "/quest-dragon"}) +@WebServlet({"/home-page", "/quest-dragon", "/login-page", "/register-page", "/logout"}) public class FrontController extends HttpServlet { - private final HttpResolver httpResolver = new HttpResolver(); @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // Получение пути запроса (например, "/home-page" или "/quest-dragon") - String pathInfo = req.getRequestURI().substring(req.getContextPath().length()); - + String pathInfo = req.getServletPath(); + + // Проверяем, нужно ли проверять авторизацию + if (pathInfo.equals("/quest-dragon")) { + // Проверяем авторизацию для квеста + if (!UserService.isAuthenticated(req)) { + resp.sendRedirect(req.getContextPath() + "/home-page"); + return; + } + } // Использование HttpResolver для получения соответствующей команды Command command = httpResolver.resolve(pathInfo); // Вызов метода doGet команды, который возвращает путь к JSP-странице String viewPath = command.doGet(req); - // Перенаправление запроса на соответствующую JSP-страницу req.getRequestDispatcher(viewPath).forward(req, resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { - String pathInfo = req.getRequestURI().substring(req.getContextPath().length()); + String pathInfo = req.getServletPath(); + + // Проверяем, нужно ли проверять авторизацию + if (pathInfo.equals("/quest-dragon")) { + if (!UserService.isAuthenticated(req)) { + resp.sendRedirect(req.getContextPath() + "/home-page"); + return; + } + } Command command = httpResolver.resolve(pathInfo); String viewPath = command.doPost(req); - req.getRequestDispatcher(viewPath).forward(req, resp); } } diff --git a/src/main/java/com/javarush/matsarskaya/controller/HttpResolver.java b/src/main/java/com/javarush/matsarskaya/controller/HttpResolver.java index ce48d5e..34024b7 100644 --- a/src/main/java/com/javarush/matsarskaya/controller/HttpResolver.java +++ b/src/main/java/com/javarush/matsarskaya/controller/HttpResolver.java @@ -1,19 +1,18 @@ package com.javarush.matsarskaya.controller; -import com.javarush.matsarskaya.cmd.Command; -import com.javarush.matsarskaya.cmd.HomePage; -import com.javarush.matsarskaya.cmd.QuestDragon; +import com.javarush.matsarskaya.cmd.*; import java.util.HashMap; import java.util.Map; public class HttpResolver { - private static final Map commandMap = new HashMap<>(); - - static { - commandMap.put("/home-page", new HomePage()); - commandMap.put("/quest-dragon", new QuestDragon()); - } + private final Map commandMap = Map.of( + "/home-page", new HomePage(), + "/quest-dragon", new QuestDragon(), + "/login-page", new LoginPage(), + "/register-page", new RegisterPage(), + "/logout", new LogoutPage() + ); public Command resolve(String pathInfo) { return commandMap.getOrDefault(pathInfo, new HomePage()); diff --git a/src/main/java/com/javarush/matsarskaya/service/UserService.java b/src/main/java/com/javarush/matsarskaya/service/UserService.java new file mode 100644 index 0000000..d7ae1e5 --- /dev/null +++ b/src/main/java/com/javarush/matsarskaya/service/UserService.java @@ -0,0 +1,54 @@ +package com.javarush.matsarskaya.service; + +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpSession; + +import java.io.*; +import java.util.HashMap; +import java.util.Map; + +public class UserService { + private static final String USERS_FILE = "users.dat"; + private static final Map users = loadUsers(); + + private static Map loadUsers() { + try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream(USERS_FILE))) { + return (Map) ois.readObject(); + } catch (IOException | ClassNotFoundException e) { + return new HashMap<>(); + } + } + + private static void saveUsers() { + try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(USERS_FILE))) { + oos.writeObject(users); + } catch (IOException e) { + e.printStackTrace(); + } + } + + public boolean registerUser(String username, String password) { + if (users.containsKey(username)) { + return false; // Пользователь уже существует + } + users.put(username, password); + return true; + } + + public boolean loginUser(String username, String password) { + String storedPassword = users.get(username); + return storedPassword != null && storedPassword.equals(password); + } + + public static boolean isAuthenticated(HttpServletRequest request) { + HttpSession session = request.getSession(false); + return session != null && session.getAttribute("username") != null; + } + + public void logout(HttpServletRequest request) { + HttpSession session = request.getSession(false); + if (session != null) { + session.invalidate(); + } + } +} diff --git a/src/main/webapp/WEB-INF/home-page.jsp b/src/main/webapp/WEB-INF/home-page.jsp index 6092c2b..51d253e 100644 --- a/src/main/webapp/WEB-INF/home-page.jsp +++ b/src/main/webapp/WEB-INF/home-page.jsp @@ -1,9 +1,24 @@ <%@ page contentType="text/html;charset=UTF-8" language="java" %> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> Квесты + +

    +

    Здесь начинается ваше приключение!"

    Выберите квест чтобы продолжить

    @@ -12,6 +27,10 @@ + +

    Зарегистрируйтесь/войдите чтобы продолжить

    +
    +

    ${message}

    diff --git a/src/main/webapp/WEB-INF/login-page.jsp b/src/main/webapp/WEB-INF/login-page.jsp new file mode 100644 index 0000000..f23211f --- /dev/null +++ b/src/main/webapp/WEB-INF/login-page.jsp @@ -0,0 +1,25 @@ +<%@ page contentType="text/html;charset=UTF-8" language="java" %> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> + + + Вход + + +

    Вход

    + +

    ${error}

    +
    +
    +

    + + +

    +

    + + +

    + +
    +

    Назад

    + + diff --git a/src/main/webapp/WEB-INF/quest-dragon.jsp b/src/main/webapp/WEB-INF/quest-dragon.jsp index a3e8ffd..a6209dd 100644 --- a/src/main/webapp/WEB-INF/quest-dragon.jsp +++ b/src/main/webapp/WEB-INF/quest-dragon.jsp @@ -3,11 +3,24 @@ - Путь всадника дракона + Как приручить дракона -

    🐉 Путь всадника дракона

    +
    + + +
    + +
    +
    + + Войти | Зарегистрироваться + +
    +
    + +

    🐉 Как приручить дракона

    @@ -107,7 +120,7 @@

    Наставник ведёт тебя в просторный вольер.
    Перед тобой — четыре дракона, каждый оценивает тебя по-своему.

    - +
    diff --git a/src/main/webapp/WEB-INF/register-page.jsp b/src/main/webapp/WEB-INF/register-page.jsp new file mode 100644 index 0000000..33e2a15 --- /dev/null +++ b/src/main/webapp/WEB-INF/register-page.jsp @@ -0,0 +1,25 @@ +<%@ page contentType="text/html;charset=UTF-8" language="java" %> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> + + + Регистрация + + +

    Регистрация

    + +

    ${error}

    +
    + +

    + + +

    +

    + + +

    + +
    +

    Назад

    + + \ No newline at end of file diff --git a/src/main/webapp/images/fourDragon.jpg b/src/main/webapp/images/fourDragonImg.jpg similarity index 100% rename from src/main/webapp/images/fourDragon.jpg rename to src/main/webapp/images/fourDragonImg.jpg From 79a44de0cd6dd4f025ba7e1d38880a7b4c0a5bfa Mon Sep 17 00:00:00 2001 From: KitaYaro-V Date: Thu, 22 Jan 2026 13:02:27 +0300 Subject: [PATCH 06/14] Ready-made user storage logic --- .../javarush/matsarskaya/cmd/LoginPage.java | 16 +++- .../javarush/matsarskaya/cmd/LogoutPage.java | 12 ++- .../matsarskaya/cmd/RegisterPage.java | 14 +++- .../matsarskaya/controller/HttpResolver.java | 14 +++- .../com/javarush/matsarskaya/entity/User.java | 19 +++++ .../matsarskaya/entity/UserFileStorage.java | 73 +++++++++++++++++++ .../repository/FileUserRepository.java | 34 +++++++++ .../repository/UserRepository.java | 11 +++ .../matsarskaya/service/UserService.java | 42 ++++------- 9 files changed, 197 insertions(+), 38 deletions(-) create mode 100644 src/main/java/com/javarush/matsarskaya/entity/User.java create mode 100644 src/main/java/com/javarush/matsarskaya/entity/UserFileStorage.java create mode 100644 src/main/java/com/javarush/matsarskaya/repository/FileUserRepository.java create mode 100644 src/main/java/com/javarush/matsarskaya/repository/UserRepository.java diff --git a/src/main/java/com/javarush/matsarskaya/cmd/LoginPage.java b/src/main/java/com/javarush/matsarskaya/cmd/LoginPage.java index 24ef7f7..f515c67 100644 --- a/src/main/java/com/javarush/matsarskaya/cmd/LoginPage.java +++ b/src/main/java/com/javarush/matsarskaya/cmd/LoginPage.java @@ -1,15 +1,23 @@ package com.javarush.matsarskaya.cmd; +import com.javarush.matsarskaya.entity.UserFileStorage; +import com.javarush.matsarskaya.repository.FileUserRepository; +import com.javarush.matsarskaya.repository.UserRepository; import com.javarush.matsarskaya.service.UserService; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpSession; public class LoginPage implements Command { - private final UserService userService = new UserService(); + private final UserService userService; + + // Конструктор, принимающий UserService + public LoginPage(UserService userService) { + this.userService = userService; + } @Override public String doGet(HttpServletRequest request) { - return "/WEB-INF/login-page.jsp"; + return getView(); } @Override @@ -17,13 +25,13 @@ public String doPost(HttpServletRequest request) { String username = request.getParameter("username"); String password = request.getParameter("password"); - if (userService.loginUser(username, password)) { + if (userService.loginUser(username, password).isPresent()) { HttpSession session = request.getSession(); session.setAttribute("username", username); return "/home-page"; } else { request.setAttribute("error", "Неверное имя пользователя или пароль"); - return "/WEB-INF/login-page.jsp"; + return getView(); } } diff --git a/src/main/java/com/javarush/matsarskaya/cmd/LogoutPage.java b/src/main/java/com/javarush/matsarskaya/cmd/LogoutPage.java index 7faf335..e4f6293 100644 --- a/src/main/java/com/javarush/matsarskaya/cmd/LogoutPage.java +++ b/src/main/java/com/javarush/matsarskaya/cmd/LogoutPage.java @@ -1,15 +1,23 @@ package com.javarush.matsarskaya.cmd; +import com.javarush.matsarskaya.entity.UserFileStorage; +import com.javarush.matsarskaya.repository.FileUserRepository; +import com.javarush.matsarskaya.repository.UserRepository; import com.javarush.matsarskaya.service.UserService; import jakarta.servlet.http.HttpServletRequest; public class LogoutPage implements Command{ - private final UserService userService = new UserService(); + private final UserService userService; + + // Конструктор, принимающий UserService + public LogoutPage(UserService userService) { + this.userService = userService; + } @Override public String doPost(HttpServletRequest request) { userService.logout(request); - return "/home-page"; + return getView(); } @Override diff --git a/src/main/java/com/javarush/matsarskaya/cmd/RegisterPage.java b/src/main/java/com/javarush/matsarskaya/cmd/RegisterPage.java index 502d3c3..2a8ff74 100644 --- a/src/main/java/com/javarush/matsarskaya/cmd/RegisterPage.java +++ b/src/main/java/com/javarush/matsarskaya/cmd/RegisterPage.java @@ -1,15 +1,23 @@ package com.javarush.matsarskaya.cmd; +import com.javarush.matsarskaya.entity.UserFileStorage; +import com.javarush.matsarskaya.repository.FileUserRepository; +import com.javarush.matsarskaya.repository.UserRepository; import com.javarush.matsarskaya.service.UserService; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpSession; public class RegisterPage implements Command{ - private final UserService userService = new UserService(); + private final UserService userService; + + // Конструктор, принимающий UserService + public RegisterPage(UserService userService) { + this.userService = userService; + } @Override public String doGet(HttpServletRequest request) { - return "/WEB-INF/register-page.jsp"; + return getView(); } @Override @@ -24,7 +32,7 @@ public String doPost(HttpServletRequest request) { return "/home-page"; } else { request.setAttribute("error", "Пользователь уже существует"); - return "/WEB-INF/register-page.jsp"; + return getView(); } } diff --git a/src/main/java/com/javarush/matsarskaya/controller/HttpResolver.java b/src/main/java/com/javarush/matsarskaya/controller/HttpResolver.java index 34024b7..4e58080 100644 --- a/src/main/java/com/javarush/matsarskaya/controller/HttpResolver.java +++ b/src/main/java/com/javarush/matsarskaya/controller/HttpResolver.java @@ -1,17 +1,25 @@ package com.javarush.matsarskaya.controller; import com.javarush.matsarskaya.cmd.*; +import com.javarush.matsarskaya.entity.UserFileStorage; +import com.javarush.matsarskaya.repository.FileUserRepository; +import com.javarush.matsarskaya.repository.UserRepository; +import com.javarush.matsarskaya.service.UserService; import java.util.HashMap; import java.util.Map; public class HttpResolver { + private static final UserFileStorage storage = new UserFileStorage(); + private static final UserRepository repository = new FileUserRepository(storage); + private static final UserService userService = new UserService(repository); + private final Map commandMap = Map.of( "/home-page", new HomePage(), "/quest-dragon", new QuestDragon(), - "/login-page", new LoginPage(), - "/register-page", new RegisterPage(), - "/logout", new LogoutPage() + "/login-page", new LoginPage(userService), + "/register-page", new RegisterPage(userService), + "/logout", new LogoutPage(userService) ); public Command resolve(String pathInfo) { diff --git a/src/main/java/com/javarush/matsarskaya/entity/User.java b/src/main/java/com/javarush/matsarskaya/entity/User.java new file mode 100644 index 0000000..51cb711 --- /dev/null +++ b/src/main/java/com/javarush/matsarskaya/entity/User.java @@ -0,0 +1,19 @@ +package com.javarush.matsarskaya.entity; + +public class User { + private String username; + private String password; + + public User(String username, String password) { + this.username = username; + this.password = password; + } + + public String getUsername() { + return username; + } + + public String getPassword() { + return password; + } +} diff --git a/src/main/java/com/javarush/matsarskaya/entity/UserFileStorage.java b/src/main/java/com/javarush/matsarskaya/entity/UserFileStorage.java new file mode 100644 index 0000000..47ba4e5 --- /dev/null +++ b/src/main/java/com/javarush/matsarskaya/entity/UserFileStorage.java @@ -0,0 +1,73 @@ +package com.javarush.matsarskaya.entity; + +import java.io.*; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.util.HashMap; +import java.util.Map; + +public class UserFileStorage { + private static final String USERS_FILE_PATH = "users.txt"; + private final Map users = new HashMap<>(); + private boolean loaded = false; + + public UserFileStorage() { + loadUsersIfNeeded(); + } + + public void saveUser(String username, String password) { + loadUsersIfNeeded(); + users.put(username, password); + saveUsersToFile(); + } + + public String getPasswordByUsername(String username) { + loadUsersIfNeeded(); + return users.get(username); + } + + public boolean userExists(String username) { + loadUsersIfNeeded(); + return users.containsKey(username); + } + + public Map getAllUsers() { + loadUsersIfNeeded(); + return new HashMap<>(users); + } + + private void loadUsersIfNeeded() { + if (!loaded) { + loadUsersFromFile(); + loaded = true; + } + } + + private void saveUsersToFile() { + try (PrintWriter writer = new PrintWriter(new FileWriter(USERS_FILE_PATH))) { + for (Map.Entry entry : users.entrySet()) { + writer.println(entry.getKey() + ":" + entry.getValue()); + } + } catch (IOException e) { + System.err.println("Ошибка при записи в файл: " + e.getMessage()); + } + } + + private void loadUsersFromFile() { + if (!Files.exists(Paths.get(USERS_FILE_PATH))) { + return; + } + + try (BufferedReader reader = new BufferedReader(new FileReader(USERS_FILE_PATH))) { + String line; + while ((line = reader.readLine()) != null) { + String[] parts = line.split(":", 2); + if (parts.length == 2) { + users.put(parts[0], parts[1]); + } + } + } catch (IOException e) { + System.err.println("Ошибка при чтении из файла: " + e.getMessage()); + } + } +} diff --git a/src/main/java/com/javarush/matsarskaya/repository/FileUserRepository.java b/src/main/java/com/javarush/matsarskaya/repository/FileUserRepository.java new file mode 100644 index 0000000..3106082 --- /dev/null +++ b/src/main/java/com/javarush/matsarskaya/repository/FileUserRepository.java @@ -0,0 +1,34 @@ +package com.javarush.matsarskaya.repository; + +import com.javarush.matsarskaya.entity.User; +import com.javarush.matsarskaya.entity.UserFileStorage; + +import java.util.Optional; + +public class FileUserRepository implements UserRepository{ + private final UserFileStorage storage; + + public FileUserRepository(UserFileStorage storage) { + this.storage = storage; + } + + @Override + public boolean save(User user) { + storage.saveUser(user.getUsername(), user.getPassword()); + return true; + } + + @Override + public Optional findByUsername(String username) { + String password = storage.getPasswordByUsername(username); + if (password != null) { + return Optional.of(new User(username, password)); + } + return Optional.empty(); + } + + @Override + public boolean existsByUsername(String username) { + return storage.userExists(username); + } +} diff --git a/src/main/java/com/javarush/matsarskaya/repository/UserRepository.java b/src/main/java/com/javarush/matsarskaya/repository/UserRepository.java new file mode 100644 index 0000000..f239fb6 --- /dev/null +++ b/src/main/java/com/javarush/matsarskaya/repository/UserRepository.java @@ -0,0 +1,11 @@ +package com.javarush.matsarskaya.repository; + +import com.javarush.matsarskaya.entity.User; + +import java.util.Optional; + +public interface UserRepository { + boolean save(User user); + Optional findByUsername(String username); + boolean existsByUsername(String username); +} diff --git a/src/main/java/com/javarush/matsarskaya/service/UserService.java b/src/main/java/com/javarush/matsarskaya/service/UserService.java index d7ae1e5..b22ed34 100644 --- a/src/main/java/com/javarush/matsarskaya/service/UserService.java +++ b/src/main/java/com/javarush/matsarskaya/service/UserService.java @@ -1,43 +1,33 @@ package com.javarush.matsarskaya.service; +import com.javarush.matsarskaya.entity.User; +import com.javarush.matsarskaya.repository.UserRepository; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpSession; - -import java.io.*; -import java.util.HashMap; -import java.util.Map; +import java.util.Optional; public class UserService { - private static final String USERS_FILE = "users.dat"; - private static final Map users = loadUsers(); - - private static Map loadUsers() { - try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream(USERS_FILE))) { - return (Map) ois.readObject(); - } catch (IOException | ClassNotFoundException e) { - return new HashMap<>(); - } - } + private final UserRepository userRepository; - private static void saveUsers() { - try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(USERS_FILE))) { - oos.writeObject(users); - } catch (IOException e) { - e.printStackTrace(); - } + public UserService(UserRepository userRepository) { + this.userRepository = userRepository; } public boolean registerUser(String username, String password) { - if (users.containsKey(username)) { + if (userRepository.existsByUsername(username)) { return false; // Пользователь уже существует } - users.put(username, password); - return true; + + User newUser = new User(username, password); + return userRepository.save(newUser); } - public boolean loginUser(String username, String password) { - String storedPassword = users.get(username); - return storedPassword != null && storedPassword.equals(password); + public Optional loginUser(String username, String password) { + Optional user = userRepository.findByUsername(username); + if (user.isPresent() && user.get().getPassword().equals(password)) { + return user; + } + return Optional.empty(); } public static boolean isAuthenticated(HttpServletRequest request) { From 55280213353e248069a0daa237fd7a9fc11aff57 Mon Sep 17 00:00:00 2001 From: KitaYaro-V Date: Mon, 26 Jan 2026 15:29:29 +0300 Subject: [PATCH 07/14] Added statistics logic for each user --- .../javarush/matsarskaya/cmd/QuestDragon.java | 51 +++++++++++++- .../matsarskaya/cmd/StatisticPage.java | 26 +++++++ .../controller/FrontController.java | 2 +- .../matsarskaya/controller/HttpResolver.java | 10 ++- .../matsarskaya/entity/Statistic.java | 43 ++++++++++++ .../repository/FileStatisticRepository.java | 67 +++++++++++++++++++ .../repository/StatisticRepository.java | 10 +++ .../matsarskaya/service/StatisticService.java | 39 +++++++++++ src/main/webapp/WEB-INF/home-page.jsp | 3 + src/main/webapp/WEB-INF/quest-dragon.jsp | 3 + src/main/webapp/WEB-INF/statistic-page.jsp | 27 ++++++++ 11 files changed, 275 insertions(+), 6 deletions(-) create mode 100644 src/main/java/com/javarush/matsarskaya/cmd/StatisticPage.java create mode 100644 src/main/java/com/javarush/matsarskaya/entity/Statistic.java create mode 100644 src/main/java/com/javarush/matsarskaya/repository/FileStatisticRepository.java create mode 100644 src/main/java/com/javarush/matsarskaya/repository/StatisticRepository.java create mode 100644 src/main/java/com/javarush/matsarskaya/service/StatisticService.java create mode 100644 src/main/webapp/WEB-INF/statistic-page.jsp diff --git a/src/main/java/com/javarush/matsarskaya/cmd/QuestDragon.java b/src/main/java/com/javarush/matsarskaya/cmd/QuestDragon.java index 21654dd..eb2074f 100644 --- a/src/main/java/com/javarush/matsarskaya/cmd/QuestDragon.java +++ b/src/main/java/com/javarush/matsarskaya/cmd/QuestDragon.java @@ -1,8 +1,14 @@ package com.javarush.matsarskaya.cmd; +import com.javarush.matsarskaya.service.StatisticService; import jakarta.servlet.http.HttpServletRequest; public class QuestDragon implements Command{ + private final StatisticService statisticService; + + public QuestDragon(StatisticService statisticService) { + this.statisticService = statisticService; + } @Override public String getView() { return "/WEB-INF/quest-dragon.jsp"; @@ -22,6 +28,7 @@ public String doPost(HttpServletRequest request) { String playerNameInput = request.getParameter("playerNameInput"); String quest = request.getParameter("quest"); + // Получаем сессию var session = request.getSession(); @@ -30,6 +37,10 @@ public String doPost(HttpServletRequest request) { // Инициализируем сессию для нового квеста session.setAttribute("stage", 0); session.setAttribute("trust", 50); + session.setAttribute("questFinished", false); + + String username = (String) session.getAttribute("username"); + statisticService.registerAttempt(username); return getView(); } else if (stageParam != null && Integer.parseInt(stageParam) == 0) { @@ -45,6 +56,12 @@ else if (stageParam != null && Integer.parseInt(stageParam) == 1 // Обработка других этапов int currentStage = Integer.parseInt(stageParam); + String username = (String) session.getAttribute("username"); + Boolean finished = (Boolean) session.getAttribute("questFinished"); + if (finished == null) { + finished = false; + } + // Обновляем доверие в зависимости от выбора if(currentStage >= 2 && currentStage <= 9) { Integer trust = (Integer) session.getAttribute("trust"); @@ -52,15 +69,43 @@ else if (stageParam != null && Integer.parseInt(stageParam) == 1 int trustChange = Integer.parseInt(choice); trust += trustChange; - // Ограничиваем доверие диапазоном 0-100 trust = Math.max(0, Math.min(100, trust)); session.setAttribute("trust", trust); + + // Проверяем условия поражения в зависимости от этапа + boolean isLossCondition = false; + if (currentStage >= 3 && currentStage <= 6 && trust < 50) { // Поражение если доверие < 50% на этапах 4-7 + isLossCondition = true; + } else if (currentStage >= 7 && currentStage <= 10 && trust < 70) { // Поражение если доверие < 70% на этапах 8-11 + isLossCondition = true; + } + + if (!finished && isLossCondition) { + statisticService.registerLoss(username); + session.setAttribute("questFinished", true); + session.setAttribute("stage", 11); // конец квеста + return getView(); + } } // Переходим к следующему этапу - session.setAttribute("stage", currentStage + 1); + int nextStage = currentStage + 1; + session.setAttribute("stage", nextStage); + + Integer trust = (Integer) session.getAttribute("trust"); + + if (!finished && nextStage == 11) { + session.setAttribute("questFinished", true); + if (trust != null && trust >= 70) { + statisticService.registerWin(username); + } else { + // Регистрируем поражение, если игрок дошел до 11-го этапа, но уровень доверия < 70 + statisticService.registerLoss(username); + } + } + } else { // Если параметры некорректны, возвращаем на главную return "/WEB-INF/home-page.jsp"; @@ -68,4 +113,4 @@ else if (stageParam != null && Integer.parseInt(stageParam) == 1 // Возвращаем представление квеста return getView(); } -} +} \ No newline at end of file diff --git a/src/main/java/com/javarush/matsarskaya/cmd/StatisticPage.java b/src/main/java/com/javarush/matsarskaya/cmd/StatisticPage.java new file mode 100644 index 0000000..73221ae --- /dev/null +++ b/src/main/java/com/javarush/matsarskaya/cmd/StatisticPage.java @@ -0,0 +1,26 @@ +package com.javarush.matsarskaya.cmd; + +import com.javarush.matsarskaya.entity.Statistic; +import com.javarush.matsarskaya.service.StatisticService; +import jakarta.servlet.http.HttpServletRequest; + +public class StatisticPage implements Command{ + private final StatisticService statisticService; + + public StatisticPage(StatisticService statisticService) { + this.statisticService = statisticService; + } + + @Override + public String doGet(HttpServletRequest request) { + String username = (String) request.getSession().getAttribute("username"); + Statistic statistic = statisticService.getStatistic(username); + request.setAttribute("statistic", statistic); + return getView(); + } + + @Override + public String getView() { + return "/WEB-INF/statistic-page.jsp"; + } +} diff --git a/src/main/java/com/javarush/matsarskaya/controller/FrontController.java b/src/main/java/com/javarush/matsarskaya/controller/FrontController.java index c85df19..f5c6e95 100644 --- a/src/main/java/com/javarush/matsarskaya/controller/FrontController.java +++ b/src/main/java/com/javarush/matsarskaya/controller/FrontController.java @@ -10,7 +10,7 @@ import java.io.IOException; -@WebServlet({"/home-page", "/quest-dragon", "/login-page", "/register-page", "/logout"}) +@WebServlet({"/home-page", "/quest-dragon", "/login-page", "/register-page", "/logout", "/statistic-page"}) public class FrontController extends HttpServlet { private final HttpResolver httpResolver = new HttpResolver(); diff --git a/src/main/java/com/javarush/matsarskaya/controller/HttpResolver.java b/src/main/java/com/javarush/matsarskaya/controller/HttpResolver.java index 4e58080..ad582fd 100644 --- a/src/main/java/com/javarush/matsarskaya/controller/HttpResolver.java +++ b/src/main/java/com/javarush/matsarskaya/controller/HttpResolver.java @@ -2,8 +2,11 @@ import com.javarush.matsarskaya.cmd.*; import com.javarush.matsarskaya.entity.UserFileStorage; +import com.javarush.matsarskaya.repository.FileStatisticRepository; import com.javarush.matsarskaya.repository.FileUserRepository; +import com.javarush.matsarskaya.repository.StatisticRepository; import com.javarush.matsarskaya.repository.UserRepository; +import com.javarush.matsarskaya.service.StatisticService; import com.javarush.matsarskaya.service.UserService; import java.util.HashMap; @@ -13,13 +16,16 @@ public class HttpResolver { private static final UserFileStorage storage = new UserFileStorage(); private static final UserRepository repository = new FileUserRepository(storage); private static final UserService userService = new UserService(repository); + private static final StatisticRepository statisticRepository = new FileStatisticRepository(); + private static final StatisticService statisticService = new StatisticService(statisticRepository); private final Map commandMap = Map.of( "/home-page", new HomePage(), - "/quest-dragon", new QuestDragon(), + "/quest-dragon", new QuestDragon(statisticService), "/login-page", new LoginPage(userService), "/register-page", new RegisterPage(userService), - "/logout", new LogoutPage(userService) + "/logout", new LogoutPage(userService), + "/statistic-page", new StatisticPage(statisticService) ); public Command resolve(String pathInfo) { diff --git a/src/main/java/com/javarush/matsarskaya/entity/Statistic.java b/src/main/java/com/javarush/matsarskaya/entity/Statistic.java new file mode 100644 index 0000000..58cab4f --- /dev/null +++ b/src/main/java/com/javarush/matsarskaya/entity/Statistic.java @@ -0,0 +1,43 @@ +package com.javarush.matsarskaya.entity; + +public class Statistic { + private final String username; + private int attempts; + private int wins; + private int losses; + + public Statistic(String username, int attempts, int wins, int losses) { + this.username = username; + this.attempts = attempts; + this.wins = wins; + this.losses = losses; + } + + public String getUsername() { + return username; + } + + public int getAttempts() { + return attempts; + } + + public int getWins() { + return wins; + } + + public int getLosses() { + return losses; + } + + public void incrementAttempts() { + attempts++; + } + + public void incrementWins() { + wins++; + } + + public void incrementLosses() { + losses++; + } +} diff --git a/src/main/java/com/javarush/matsarskaya/repository/FileStatisticRepository.java b/src/main/java/com/javarush/matsarskaya/repository/FileStatisticRepository.java new file mode 100644 index 0000000..ca89038 --- /dev/null +++ b/src/main/java/com/javarush/matsarskaya/repository/FileStatisticRepository.java @@ -0,0 +1,67 @@ +package com.javarush.matsarskaya.repository; + +import com.javarush.matsarskaya.entity.Statistic; + +import java.io.*; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.util.HashMap; +import java.util.Map; +import java.util.Optional; + +public class FileStatisticRepository implements StatisticRepository { + private static final String FILE_PATH = "statistics.txt"; + private final Map statistics = new HashMap<>(); + private boolean loaded = false; + + private void loadIfNeeded() { + if (loaded) return; + loaded = true; + + if (!Files.exists(Paths.get(FILE_PATH))) { + return; + } + + try (BufferedReader reader = new BufferedReader(new FileReader(FILE_PATH))) { + String line; + while ((line = reader.readLine()) != null) { + String[] parts = line.split(":"); + if (parts.length == 4) { + String username = parts[0]; + int attempts = Integer.parseInt(parts[1]); + int wins = Integer.parseInt(parts[2]); + int losses = Integer.parseInt(parts[3]); + + statistics.put(username, new Statistic(username, attempts, wins, losses)); + } + } + } catch (IOException e) { + throw new RuntimeException("Ошибка чтения statistics.txt", e); + } + } + + @Override + public Optional findByUsername(String username) { + loadIfNeeded(); + return Optional.ofNullable(statistics.get(username)); + } + + @Override + public void save(Statistic statistic) { + loadIfNeeded(); + statistics.put(statistic.getUsername(), statistic); + + try (PrintWriter writer = new PrintWriter(new FileWriter(FILE_PATH))) { + for (Statistic s : statistics.values()) { + writer.println( + s.getUsername() + ":" + + s.getAttempts() + ":" + + s.getWins() + ":" + + s.getLosses() + ); + } + } catch (IOException e) { + throw new RuntimeException("Ошибка записи statistics.txt", e); + } + } +} diff --git a/src/main/java/com/javarush/matsarskaya/repository/StatisticRepository.java b/src/main/java/com/javarush/matsarskaya/repository/StatisticRepository.java new file mode 100644 index 0000000..11a2aeb --- /dev/null +++ b/src/main/java/com/javarush/matsarskaya/repository/StatisticRepository.java @@ -0,0 +1,10 @@ +package com.javarush.matsarskaya.repository; + +import com.javarush.matsarskaya.entity.Statistic; + +import java.util.Optional; + +public interface StatisticRepository { + Optional findByUsername(String username); + void save(Statistic statistic); +} diff --git a/src/main/java/com/javarush/matsarskaya/service/StatisticService.java b/src/main/java/com/javarush/matsarskaya/service/StatisticService.java new file mode 100644 index 0000000..233fb24 --- /dev/null +++ b/src/main/java/com/javarush/matsarskaya/service/StatisticService.java @@ -0,0 +1,39 @@ +package com.javarush.matsarskaya.service; + +import com.javarush.matsarskaya.entity.Statistic; +import com.javarush.matsarskaya.repository.StatisticRepository; + +public class StatisticService { + private final StatisticRepository repository; + + public StatisticService(StatisticRepository repository) { + this.repository = repository; + } + + private Statistic getOrCreate(String username) { + return repository.findByUsername(username) + .orElseGet(() -> new Statistic(username, 0, 0, 0)); + } + + public void registerAttempt(String username) { + Statistic statistic = getOrCreate(username); + statistic.incrementAttempts(); + repository.save(statistic); + } + + public void registerWin(String username) { + Statistic statistic = getOrCreate(username); + statistic.incrementWins(); + repository.save(statistic); + } + + public void registerLoss(String username) { + Statistic statistic = getOrCreate(username); + statistic.incrementLosses(); + repository.save(statistic); + } + + public Statistic getStatistic(String username) { + return getOrCreate(username); + } +} diff --git a/src/main/webapp/WEB-INF/home-page.jsp b/src/main/webapp/WEB-INF/home-page.jsp index 51d253e..d6fd333 100644 --- a/src/main/webapp/WEB-INF/home-page.jsp +++ b/src/main/webapp/WEB-INF/home-page.jsp @@ -9,6 +9,9 @@
    + + +
    diff --git a/src/main/webapp/WEB-INF/quest-dragon.jsp b/src/main/webapp/WEB-INF/quest-dragon.jsp index a6209dd..320b761 100644 --- a/src/main/webapp/WEB-INF/quest-dragon.jsp +++ b/src/main/webapp/WEB-INF/quest-dragon.jsp @@ -10,6 +10,9 @@
    + + +
    diff --git a/src/main/webapp/WEB-INF/statistic-page.jsp b/src/main/webapp/WEB-INF/statistic-page.jsp new file mode 100644 index 0000000..1abb14d --- /dev/null +++ b/src/main/webapp/WEB-INF/statistic-page.jsp @@ -0,0 +1,27 @@ +<%@ page contentType="text/html;charset=UTF-8" %> + + + + Статистика + + + +

    📊 Ваша статистика

    + + + + + + + + + + + + +
    ПопыткиПобедыПоражения
    ${statistic.attempts}${statistic.wins}${statistic.losses}
    + +На главную + + + \ No newline at end of file From 86cc3167e612facc9d68de2e51b3f37420998f0a Mon Sep 17 00:00:00 2001 From: KitaYaro-V Date: Tue, 27 Jan 2026 22:38:01 +0300 Subject: [PATCH 08/14] program refactoring --- .../javarush/matsarskaya/cmd/LoginPage.java | 16 +++--- .../javarush/matsarskaya/cmd/QuestDragon.java | 54 +++++++----------- .../matsarskaya/cmd/RegisterPage.java | 13 ++--- .../matsarskaya/cmd/StatisticPage.java | 12 +++- .../matsarskaya/config/FileStorageConfig.java | 26 +++++++++ .../controller/FrontController.java | 54 ++++++++++-------- .../matsarskaya/controller/HttpResolver.java | 39 ++++++++----- .../matsarskaya/entity/UserFileStorage.java | 35 ++++++++++-- .../InvalidCredentialsException.java | 11 ++++ .../exception/UserAlreadyExistsException.java | 11 ++++ .../exception/UserNotFoundException.java | 11 ++++ .../repository/FileStatisticRepository.java | 14 +++-- .../repository/FileUserRepository.java | 11 ++-- .../matsarskaya/service/StatisticService.java | 28 ++++++++- .../matsarskaya/service/UserService.java | 44 ++++++++++++-- src/main/webapp/WEB-INF/header.jsp | 57 +++++++++++++++++++ src/main/webapp/WEB-INF/home-page.jsp | 19 +------ src/main/webapp/WEB-INF/login-page.jsp | 3 + src/main/webapp/WEB-INF/quest-dragon.jsp | 16 +----- src/main/webapp/WEB-INF/register-page.jsp | 3 + src/main/webapp/WEB-INF/statistic-page.jsp | 2 + 21 files changed, 335 insertions(+), 144 deletions(-) create mode 100644 src/main/java/com/javarush/matsarskaya/config/FileStorageConfig.java create mode 100644 src/main/java/com/javarush/matsarskaya/exception/InvalidCredentialsException.java create mode 100644 src/main/java/com/javarush/matsarskaya/exception/UserAlreadyExistsException.java create mode 100644 src/main/java/com/javarush/matsarskaya/exception/UserNotFoundException.java create mode 100644 src/main/webapp/WEB-INF/header.jsp diff --git a/src/main/java/com/javarush/matsarskaya/cmd/LoginPage.java b/src/main/java/com/javarush/matsarskaya/cmd/LoginPage.java index f515c67..4576932 100644 --- a/src/main/java/com/javarush/matsarskaya/cmd/LoginPage.java +++ b/src/main/java/com/javarush/matsarskaya/cmd/LoginPage.java @@ -1,8 +1,7 @@ package com.javarush.matsarskaya.cmd; -import com.javarush.matsarskaya.entity.UserFileStorage; -import com.javarush.matsarskaya.repository.FileUserRepository; -import com.javarush.matsarskaya.repository.UserRepository; +import com.javarush.matsarskaya.exception.InvalidCredentialsException; +import com.javarush.matsarskaya.exception.UserNotFoundException; import com.javarush.matsarskaya.service.UserService; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpSession; @@ -10,7 +9,6 @@ public class LoginPage implements Command { private final UserService userService; - // Конструктор, принимающий UserService public LoginPage(UserService userService) { this.userService = userService; } @@ -25,14 +23,18 @@ public String doPost(HttpServletRequest request) { String username = request.getParameter("username"); String password = request.getParameter("password"); - if (userService.loginUser(username, password).isPresent()) { + try { + userService.loginUser(username, password); HttpSession session = request.getSession(); session.setAttribute("username", username); return "/home-page"; - } else { + } catch (UserNotFoundException e) { + request.setAttribute("error", "Пользователь не найден"); + } catch (InvalidCredentialsException e) { request.setAttribute("error", "Неверное имя пользователя или пароль"); - return getView(); } + + return getView(); } @Override diff --git a/src/main/java/com/javarush/matsarskaya/cmd/QuestDragon.java b/src/main/java/com/javarush/matsarskaya/cmd/QuestDragon.java index eb2074f..0f5d356 100644 --- a/src/main/java/com/javarush/matsarskaya/cmd/QuestDragon.java +++ b/src/main/java/com/javarush/matsarskaya/cmd/QuestDragon.java @@ -3,12 +3,15 @@ import com.javarush.matsarskaya.service.StatisticService; import jakarta.servlet.http.HttpServletRequest; +import java.util.Optional; + public class QuestDragon implements Command{ private final StatisticService statisticService; public QuestDragon(StatisticService statisticService) { this.statisticService = statisticService; } + @Override public String getView() { return "/WEB-INF/quest-dragon.jsp"; @@ -16,76 +19,66 @@ public String getView() { @Override public String doGet(HttpServletRequest request) { - // Для GET-запросов просто возвращаем представление return getView(); } @Override public String doPost(HttpServletRequest request) { - // Обработка POST-запроса с логикой квеста String stageParam = request.getParameter("stage"); String choice = request.getParameter("choice"); String playerNameInput = request.getParameter("playerNameInput"); String quest = request.getParameter("quest"); - - // Получаем сессию var session = request.getSession(); // Обработка перехода с главной страницы на квест - if(quest != null && quest.equals("the way of the dragon rider")) { - // Инициализируем сессию для нового квеста + if (quest != null && quest.equals("the way of the dragon rider")) { session.setAttribute("stage", 0); session.setAttribute("trust", 50); session.setAttribute("questFinished", false); - String username = (String) session.getAttribute("username"); - statisticService.registerAttempt(username); + Optional.ofNullable((String) session.getAttribute("username")) + .ifPresent(statisticService::registerAttempt); return getView(); - } - else if (stageParam != null && Integer.parseInt(stageParam) == 0) { + } else if (stageParam != null && Integer.parseInt(stageParam) == 0) { session.setAttribute("stage", 1); - } - else if (stageParam != null && Integer.parseInt(stageParam) == 1 - && playerNameInput != null && !playerNameInput.isEmpty()) { + } else if (stageParam != null && Integer.parseInt(stageParam) == 1 + && playerNameInput != null && !playerNameInput.isEmpty()) { session.setAttribute("playerName", playerNameInput); session.setAttribute("stage", 2); - } else if(stageParam != null && choice != null) { + } else if (stageParam != null && choice != null) { // Обработка других этапов int currentStage = Integer.parseInt(stageParam); String username = (String) session.getAttribute("username"); - Boolean finished = (Boolean) session.getAttribute("questFinished"); - if (finished == null) { - finished = false; - } + Boolean finished = Optional.ofNullable((Boolean) session.getAttribute("questFinished")) + .orElse(false); // Обновляем доверие в зависимости от выбора - if(currentStage >= 2 && currentStage <= 9) { - Integer trust = (Integer) session.getAttribute("trust"); - if(trust == null) trust = 50; + if (currentStage >= 2 && currentStage <= 9) { + Integer trust = Optional.ofNullable((Integer) session.getAttribute("trust")) + .orElse(50); int trustChange = Integer.parseInt(choice); trust += trustChange; - // Ограничиваем доверие диапазоном 0-100 trust = Math.max(0, Math.min(100, trust)); session.setAttribute("trust", trust); - // Проверяем условия поражения в зависимости от этапа + // Проверяем условия поражения boolean isLossCondition = false; - if (currentStage >= 3 && currentStage <= 6 && trust < 50) { // Поражение если доверие < 50% на этапах 4-7 + if (currentStage >= 3 && currentStage <= 6 && trust < 50) { isLossCondition = true; - } else if (currentStage >= 7 && currentStage <= 10 && trust < 70) { // Поражение если доверие < 70% на этапах 8-11 + } else if (currentStage >= 7 && currentStage <= 10 && trust < 70) { isLossCondition = true; } if (!finished && isLossCondition) { - statisticService.registerLoss(username); + Optional.ofNullable(username).ifPresent(statisticService::registerLoss); session.setAttribute("questFinished", true); - session.setAttribute("stage", 11); // конец квеста + session.setAttribute("stage", 11); return getView(); } } @@ -99,18 +92,15 @@ else if (stageParam != null && Integer.parseInt(stageParam) == 1 if (!finished && nextStage == 11) { session.setAttribute("questFinished", true); if (trust != null && trust >= 70) { - statisticService.registerWin(username); + Optional.ofNullable(username).ifPresent(statisticService::registerWin); } else { - // Регистрируем поражение, если игрок дошел до 11-го этапа, но уровень доверия < 70 - statisticService.registerLoss(username); + Optional.ofNullable(username).ifPresent(statisticService::registerLoss); } } } else { - // Если параметры некорректны, возвращаем на главную return "/WEB-INF/home-page.jsp"; } - // Возвращаем представление квеста return getView(); } } \ No newline at end of file diff --git a/src/main/java/com/javarush/matsarskaya/cmd/RegisterPage.java b/src/main/java/com/javarush/matsarskaya/cmd/RegisterPage.java index 2a8ff74..47ae25a 100644 --- a/src/main/java/com/javarush/matsarskaya/cmd/RegisterPage.java +++ b/src/main/java/com/javarush/matsarskaya/cmd/RegisterPage.java @@ -1,8 +1,6 @@ package com.javarush.matsarskaya.cmd; -import com.javarush.matsarskaya.entity.UserFileStorage; -import com.javarush.matsarskaya.repository.FileUserRepository; -import com.javarush.matsarskaya.repository.UserRepository; +import com.javarush.matsarskaya.exception.UserAlreadyExistsException; import com.javarush.matsarskaya.service.UserService; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpSession; @@ -10,7 +8,6 @@ public class RegisterPage implements Command{ private final UserService userService; - // Конструктор, принимающий UserService public RegisterPage(UserService userService) { this.userService = userService; } @@ -25,15 +22,17 @@ public String doPost(HttpServletRequest request) { String username = request.getParameter("username"); String password = request.getParameter("password"); - if (userService.registerUser(username, password)) { + try { + userService.registerUser(username, password); // Автоматический вход после регистрации HttpSession session = request.getSession(); session.setAttribute("username", username); return "/home-page"; - } else { + } catch (UserAlreadyExistsException e) { request.setAttribute("error", "Пользователь уже существует"); - return getView(); } + + return getView(); } @Override diff --git a/src/main/java/com/javarush/matsarskaya/cmd/StatisticPage.java b/src/main/java/com/javarush/matsarskaya/cmd/StatisticPage.java index 73221ae..9a902eb 100644 --- a/src/main/java/com/javarush/matsarskaya/cmd/StatisticPage.java +++ b/src/main/java/com/javarush/matsarskaya/cmd/StatisticPage.java @@ -4,6 +4,8 @@ import com.javarush.matsarskaya.service.StatisticService; import jakarta.servlet.http.HttpServletRequest; +import java.util.Optional; + public class StatisticPage implements Command{ private final StatisticService statisticService; @@ -13,9 +15,13 @@ public StatisticPage(StatisticService statisticService) { @Override public String doGet(HttpServletRequest request) { - String username = (String) request.getSession().getAttribute("username"); - Statistic statistic = statisticService.getStatistic(username); - request.setAttribute("statistic", statistic); + Optional username = Optional.ofNullable((String) request.getSession().getAttribute("username")); + + username.ifPresent(un -> { + Optional statistic = statisticService.getStatistic(un); + statistic.ifPresent(s -> request.setAttribute("statistic", s)); + }); + return getView(); } diff --git a/src/main/java/com/javarush/matsarskaya/config/FileStorageConfig.java b/src/main/java/com/javarush/matsarskaya/config/FileStorageConfig.java new file mode 100644 index 0000000..b0d981e --- /dev/null +++ b/src/main/java/com/javarush/matsarskaya/config/FileStorageConfig.java @@ -0,0 +1,26 @@ +package com.javarush.matsarskaya.config; + +public class FileStorageConfig { + private static final String USERS_FILE_PATH = "users.txt"; + private static final String STATISTICS_FILE_PATH = "statistics.txt"; + + private FileStorageConfig() { + // Приватный конструктор для предотвращения создания экземпляров + } + + /** + * Возвращает путь к файлу пользователей. + * @return путь к файлу users.txt + */ + public static String getUsersFilePath() { + return USERS_FILE_PATH; + } + + /** + * Возвращает путь к файлу статистики. + * @return путь к файлу statistics.txt + */ + public static String getStatisticsFilePath() { + return STATISTICS_FILE_PATH; + } +} diff --git a/src/main/java/com/javarush/matsarskaya/controller/FrontController.java b/src/main/java/com/javarush/matsarskaya/controller/FrontController.java index f5c6e95..199c1d2 100644 --- a/src/main/java/com/javarush/matsarskaya/controller/FrontController.java +++ b/src/main/java/com/javarush/matsarskaya/controller/FrontController.java @@ -16,41 +16,47 @@ public class FrontController extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { - // Получение пути запроса (например, "/home-page" или "/quest-dragon") - String pathInfo = req.getServletPath(); - - // Проверяем, нужно ли проверять авторизацию - if (pathInfo.equals("/quest-dragon")) { - // Проверяем авторизацию для квеста - if (!UserService.isAuthenticated(req)) { - resp.sendRedirect(req.getContextPath() + "/home-page"); - return; - } - } - // Использование HttpResolver для получения соответствующей команды - Command command = httpResolver.resolve(pathInfo); - // Вызов метода doGet команды, который возвращает путь к JSP-странице - String viewPath = command.doGet(req); - // Перенаправление запроса на соответствующую JSP-страницу - req.getRequestDispatcher(viewPath).forward(req, resp); + processRequest(req, resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { + processRequest(req, resp); + } + + /** + * Обрабатывает HTTP-запрос. + * @param req HTTP запрос + * @param resp HTTP ответ + * @throws ServletException ошибка сервлета + * @throws IOException ошибка ввода-вывода + */ + private void processRequest(HttpServletRequest req, HttpServletResponse resp) + throws ServletException, IOException { String pathInfo = req.getServletPath(); - // Проверяем, нужно ли проверять авторизацию - if (pathInfo.equals("/quest-dragon")) { - if (!UserService.isAuthenticated(req)) { - resp.sendRedirect(req.getContextPath() + "/home-page"); - return; - } + // Проверяем авторизацию для защищённых страниц + if (isProtectedPath(pathInfo) && !UserService.isAuthenticated(req)) { + resp.sendRedirect(req.getContextPath() + "/home-page"); + return; } + // Получаем команду и выполняем её Command command = httpResolver.resolve(pathInfo); - String viewPath = command.doPost(req); + String viewPath = "GET".equals(req.getMethod()) ? command.doGet(req) : command.doPost(req); + + // Перенаправляем на JSP-страницу req.getRequestDispatcher(viewPath).forward(req, resp); } + + /** + * Проверяет, является ли путь защищённым (требует авторизации). + * @param pathInfo путь запроса + * @return true если путь защищённый + */ + private boolean isProtectedPath(String pathInfo) { + return "/quest-dragon".equals(pathInfo) || "/statistic-page".equals(pathInfo); + } } diff --git a/src/main/java/com/javarush/matsarskaya/controller/HttpResolver.java b/src/main/java/com/javarush/matsarskaya/controller/HttpResolver.java index ad582fd..59e09f2 100644 --- a/src/main/java/com/javarush/matsarskaya/controller/HttpResolver.java +++ b/src/main/java/com/javarush/matsarskaya/controller/HttpResolver.java @@ -9,25 +9,36 @@ import com.javarush.matsarskaya.service.StatisticService; import com.javarush.matsarskaya.service.UserService; -import java.util.HashMap; import java.util.Map; public class HttpResolver { - private static final UserFileStorage storage = new UserFileStorage(); - private static final UserRepository repository = new FileUserRepository(storage); - private static final UserService userService = new UserService(repository); - private static final StatisticRepository statisticRepository = new FileStatisticRepository(); - private static final StatisticService statisticService = new StatisticService(statisticRepository); + private final Map commandMap; - private final Map commandMap = Map.of( - "/home-page", new HomePage(), - "/quest-dragon", new QuestDragon(statisticService), - "/login-page", new LoginPage(userService), - "/register-page", new RegisterPage(userService), - "/logout", new LogoutPage(userService), - "/statistic-page", new StatisticPage(statisticService) - ); + public HttpResolver() { + // Инициализация зависимостей через ServiceFactory + UserFileStorage storage = new UserFileStorage(); + UserRepository userRepository = new FileUserRepository(storage); + UserService userService = new UserService(userRepository); + StatisticRepository statisticRepository = new FileStatisticRepository(); + StatisticService statisticService = new StatisticService(statisticRepository); + + // Создание карты команд + this.commandMap = Map.of( + "/home-page", new HomePage(), + "/quest-dragon", new QuestDragon(statisticService), + "/login-page", new LoginPage(userService), + "/register-page", new RegisterPage(userService), + "/logout", new LogoutPage(userService), + "/statistic-page", new StatisticPage(statisticService) + ); + } + + /** + * Возвращает команду по пути запроса. + * @param pathInfo путь запроса + * @return команда для обработки запроса + */ public Command resolve(String pathInfo) { return commandMap.getOrDefault(pathInfo, new HomePage()); } diff --git a/src/main/java/com/javarush/matsarskaya/entity/UserFileStorage.java b/src/main/java/com/javarush/matsarskaya/entity/UserFileStorage.java index 47ba4e5..6447a1a 100644 --- a/src/main/java/com/javarush/matsarskaya/entity/UserFileStorage.java +++ b/src/main/java/com/javarush/matsarskaya/entity/UserFileStorage.java @@ -1,13 +1,15 @@ package com.javarush.matsarskaya.entity; +import com.javarush.matsarskaya.config.FileStorageConfig; + import java.io.*; import java.nio.file.Files; import java.nio.file.Paths; import java.util.HashMap; import java.util.Map; +import java.util.Optional; public class UserFileStorage { - private static final String USERS_FILE_PATH = "users.txt"; private final Map users = new HashMap<>(); private boolean loaded = false; @@ -15,22 +17,41 @@ public UserFileStorage() { loadUsersIfNeeded(); } + /** + * Сохраняет пользователя в файл. + * @param username имя пользователя + * @param password пароль + */ public void saveUser(String username, String password) { loadUsersIfNeeded(); users.put(username, password); saveUsersToFile(); } - public String getPasswordByUsername(String username) { + /** + * Возвращает пароль пользователя по имени. + * @param username имя пользователя + * @return Optional с паролем, если пользователь существует + */ + public Optional getPasswordByUsername(String username) { loadUsersIfNeeded(); - return users.get(username); + return Optional.ofNullable(users.get(username)); } + /** + * Проверяет существование пользователя. + * @param username имя пользователя + * @return true если пользователь существует + */ public boolean userExists(String username) { loadUsersIfNeeded(); return users.containsKey(username); } + /** + * Возвращает копию всех пользователей. + * @return Map с пользователями + */ public Map getAllUsers() { loadUsersIfNeeded(); return new HashMap<>(users); @@ -44,7 +65,8 @@ private void loadUsersIfNeeded() { } private void saveUsersToFile() { - try (PrintWriter writer = new PrintWriter(new FileWriter(USERS_FILE_PATH))) { + String filePath = FileStorageConfig.getUsersFilePath(); + try (PrintWriter writer = new PrintWriter(new FileWriter(filePath))) { for (Map.Entry entry : users.entrySet()) { writer.println(entry.getKey() + ":" + entry.getValue()); } @@ -54,11 +76,12 @@ private void saveUsersToFile() { } private void loadUsersFromFile() { - if (!Files.exists(Paths.get(USERS_FILE_PATH))) { + String filePath = FileStorageConfig.getUsersFilePath(); + if (!Files.exists(Paths.get(filePath))) { return; } - try (BufferedReader reader = new BufferedReader(new FileReader(USERS_FILE_PATH))) { + try (BufferedReader reader = new BufferedReader(new FileReader(filePath))) { String line; while ((line = reader.readLine()) != null) { String[] parts = line.split(":", 2); diff --git a/src/main/java/com/javarush/matsarskaya/exception/InvalidCredentialsException.java b/src/main/java/com/javarush/matsarskaya/exception/InvalidCredentialsException.java new file mode 100644 index 0000000..eb0b563 --- /dev/null +++ b/src/main/java/com/javarush/matsarskaya/exception/InvalidCredentialsException.java @@ -0,0 +1,11 @@ +package com.javarush.matsarskaya.exception; + +public class InvalidCredentialsException extends RuntimeException { + public InvalidCredentialsException() { + super("Неверное имя пользователя или пароль"); + } + + public InvalidCredentialsException(String message) { + super(message); + } +} diff --git a/src/main/java/com/javarush/matsarskaya/exception/UserAlreadyExistsException.java b/src/main/java/com/javarush/matsarskaya/exception/UserAlreadyExistsException.java new file mode 100644 index 0000000..35f2c53 --- /dev/null +++ b/src/main/java/com/javarush/matsarskaya/exception/UserAlreadyExistsException.java @@ -0,0 +1,11 @@ +package com.javarush.matsarskaya.exception; + +public class UserAlreadyExistsException extends RuntimeException { + public UserAlreadyExistsException(String username) { + super("Пользователь с именем '" + username + "' уже существует"); + } + + public UserAlreadyExistsException(String username, Throwable cause) { + super("Пользователь с именем '" + username + "' уже существует", cause); + } +} diff --git a/src/main/java/com/javarush/matsarskaya/exception/UserNotFoundException.java b/src/main/java/com/javarush/matsarskaya/exception/UserNotFoundException.java new file mode 100644 index 0000000..3e30956 --- /dev/null +++ b/src/main/java/com/javarush/matsarskaya/exception/UserNotFoundException.java @@ -0,0 +1,11 @@ +package com.javarush.matsarskaya.exception; + +public class UserNotFoundException extends RuntimeException { + public UserNotFoundException(String username) { + super("Пользователь с именем '" + username + "' не найден"); + } + + public UserNotFoundException(String username, Throwable cause) { + super("Пользователь с именем '" + username + "' не найден", cause); + } +} diff --git a/src/main/java/com/javarush/matsarskaya/repository/FileStatisticRepository.java b/src/main/java/com/javarush/matsarskaya/repository/FileStatisticRepository.java index ca89038..92cbacf 100644 --- a/src/main/java/com/javarush/matsarskaya/repository/FileStatisticRepository.java +++ b/src/main/java/com/javarush/matsarskaya/repository/FileStatisticRepository.java @@ -1,5 +1,6 @@ package com.javarush.matsarskaya.repository; +import com.javarush.matsarskaya.config.FileStorageConfig; import com.javarush.matsarskaya.entity.Statistic; import java.io.*; @@ -10,7 +11,6 @@ import java.util.Optional; public class FileStatisticRepository implements StatisticRepository { - private static final String FILE_PATH = "statistics.txt"; private final Map statistics = new HashMap<>(); private boolean loaded = false; @@ -18,11 +18,12 @@ private void loadIfNeeded() { if (loaded) return; loaded = true; - if (!Files.exists(Paths.get(FILE_PATH))) { + String filePath = FileStorageConfig.getStatisticsFilePath(); + if (!Files.exists(Paths.get(filePath))) { return; } - try (BufferedReader reader = new BufferedReader(new FileReader(FILE_PATH))) { + try (BufferedReader reader = new BufferedReader(new FileReader(filePath))) { String line; while ((line = reader.readLine()) != null) { String[] parts = line.split(":"); @@ -36,7 +37,7 @@ private void loadIfNeeded() { } } } catch (IOException e) { - throw new RuntimeException("Ошибка чтения statistics.txt", e); + throw new RuntimeException("Ошибка чтения " + filePath, e); } } @@ -51,7 +52,8 @@ public void save(Statistic statistic) { loadIfNeeded(); statistics.put(statistic.getUsername(), statistic); - try (PrintWriter writer = new PrintWriter(new FileWriter(FILE_PATH))) { + String filePath = FileStorageConfig.getStatisticsFilePath(); + try (PrintWriter writer = new PrintWriter(new FileWriter(filePath))) { for (Statistic s : statistics.values()) { writer.println( s.getUsername() + ":" + @@ -61,7 +63,7 @@ public void save(Statistic statistic) { ); } } catch (IOException e) { - throw new RuntimeException("Ошибка записи statistics.txt", e); + throw new RuntimeException("Ошибка записи " + filePath, e); } } } diff --git a/src/main/java/com/javarush/matsarskaya/repository/FileUserRepository.java b/src/main/java/com/javarush/matsarskaya/repository/FileUserRepository.java index 3106082..a5365b9 100644 --- a/src/main/java/com/javarush/matsarskaya/repository/FileUserRepository.java +++ b/src/main/java/com/javarush/matsarskaya/repository/FileUserRepository.java @@ -2,6 +2,7 @@ import com.javarush.matsarskaya.entity.User; import com.javarush.matsarskaya.entity.UserFileStorage; +import com.javarush.matsarskaya.exception.UserAlreadyExistsException; import java.util.Optional; @@ -14,17 +15,17 @@ public FileUserRepository(UserFileStorage storage) { @Override public boolean save(User user) { + if (storage.userExists(user.getUsername())) { + throw new UserAlreadyExistsException(user.getUsername()); + } storage.saveUser(user.getUsername(), user.getPassword()); return true; } @Override public Optional findByUsername(String username) { - String password = storage.getPasswordByUsername(username); - if (password != null) { - return Optional.of(new User(username, password)); - } - return Optional.empty(); + Optional password = storage.getPasswordByUsername(username); + return password.map(pwd -> new User(username, pwd)); } @Override diff --git a/src/main/java/com/javarush/matsarskaya/service/StatisticService.java b/src/main/java/com/javarush/matsarskaya/service/StatisticService.java index 233fb24..24840f0 100644 --- a/src/main/java/com/javarush/matsarskaya/service/StatisticService.java +++ b/src/main/java/com/javarush/matsarskaya/service/StatisticService.java @@ -3,6 +3,8 @@ import com.javarush.matsarskaya.entity.Statistic; import com.javarush.matsarskaya.repository.StatisticRepository; +import java.util.Optional; + public class StatisticService { private final StatisticRepository repository; @@ -10,30 +12,52 @@ public StatisticService(StatisticRepository repository) { this.repository = repository; } + /** + * Получает или создаёт статистику для пользователя. + * @param username имя пользователя + * @return статистика пользователя + */ private Statistic getOrCreate(String username) { return repository.findByUsername(username) .orElseGet(() -> new Statistic(username, 0, 0, 0)); } + /** + * Регистрирует попытку прохождения квеста. + * @param username имя пользователя + */ public void registerAttempt(String username) { Statistic statistic = getOrCreate(username); statistic.incrementAttempts(); repository.save(statistic); } + /** + * Регистрирует победу в квесте. + * @param username имя пользователя + */ public void registerWin(String username) { Statistic statistic = getOrCreate(username); statistic.incrementWins(); repository.save(statistic); } + /** + * Регистрирует поражение в квесте. + * @param username имя пользователя + */ public void registerLoss(String username) { Statistic statistic = getOrCreate(username); statistic.incrementLosses(); repository.save(statistic); } - public Statistic getStatistic(String username) { - return getOrCreate(username); + /** + * Возвращает статистику пользователя. + * @param username имя пользователя + * @return Optional со статистикой + */ + public Optional getStatistic(String username) { + return repository.findByUsername(username); } } diff --git a/src/main/java/com/javarush/matsarskaya/service/UserService.java b/src/main/java/com/javarush/matsarskaya/service/UserService.java index b22ed34..84d128d 100644 --- a/src/main/java/com/javarush/matsarskaya/service/UserService.java +++ b/src/main/java/com/javarush/matsarskaya/service/UserService.java @@ -1,6 +1,9 @@ package com.javarush.matsarskaya.service; import com.javarush.matsarskaya.entity.User; +import com.javarush.matsarskaya.exception.InvalidCredentialsException; +import com.javarush.matsarskaya.exception.UserAlreadyExistsException; +import com.javarush.matsarskaya.exception.UserNotFoundException; import com.javarush.matsarskaya.repository.UserRepository; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpSession; @@ -13,28 +16,57 @@ public UserService(UserRepository userRepository) { this.userRepository = userRepository; } - public boolean registerUser(String username, String password) { + /** + * Регистрирует нового пользователя. + * @param username имя пользователя + * @param password пароль + * @throws Exception если пользователь уже существует + */ + public void registerUser(String username, String password) { if (userRepository.existsByUsername(username)) { - return false; // Пользователь уже существует + throw new UserAlreadyExistsException(username); } User newUser = new User(username, password); - return userRepository.save(newUser); + userRepository.save(newUser); } + /** + * Выполняет вход пользователя в систему. + * @param username имя пользователя + * @param password пароль + * @return Optional с пользователем, если вход успешен + * @throws Exception если неверные учётные данные + * @throws Exception если пользователь не найден + */ public Optional loginUser(String username, String password) { Optional user = userRepository.findByUsername(username); - if (user.isPresent() && user.get().getPassword().equals(password)) { - return user; + + if (user.isEmpty()) { + throw new UserNotFoundException(username); + } + + if (!user.get().getPassword().equals(password)) { + throw new InvalidCredentialsException(); } - return Optional.empty(); + + return user; } + /** + * Проверяет, авторизован ли пользователь. + * @param request HTTP запрос + * @return true если пользователь авторизован + */ public static boolean isAuthenticated(HttpServletRequest request) { HttpSession session = request.getSession(false); return session != null && session.getAttribute("username") != null; } + /** + * Выполняет выход пользователя из системы. + * @param request HTTP запрос + */ public void logout(HttpServletRequest request) { HttpSession session = request.getSession(false); if (session != null) { diff --git a/src/main/webapp/WEB-INF/header.jsp b/src/main/webapp/WEB-INF/header.jsp new file mode 100644 index 0000000..54485a3 --- /dev/null +++ b/src/main/webapp/WEB-INF/header.jsp @@ -0,0 +1,57 @@ +<%@ page contentType="text/html;charset=UTF-8" language="java" %> +<%@ taglib uri="jakarta.tags.core" prefix="c" %> + + +
    + +
    + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/home-page.jsp b/src/main/webapp/WEB-INF/home-page.jsp index d6fd333..bb79159 100644 --- a/src/main/webapp/WEB-INF/home-page.jsp +++ b/src/main/webapp/WEB-INF/home-page.jsp @@ -5,22 +5,7 @@ Квесты - - +

    Здесь начинается ваше приключение!"

    Выберите квест чтобы продолжить

    @@ -31,7 +16,7 @@ -

    Зарегистрируйтесь/войдите чтобы продолжить

    +

    Зарегистрируйтесь/ войдите чтобы продолжить

    ${message}

    diff --git a/src/main/webapp/WEB-INF/login-page.jsp b/src/main/webapp/WEB-INF/login-page.jsp index f23211f..f46a5d0 100644 --- a/src/main/webapp/WEB-INF/login-page.jsp +++ b/src/main/webapp/WEB-INF/login-page.jsp @@ -5,6 +5,9 @@ Вход + + +

    Вход

    ${error}

    diff --git a/src/main/webapp/WEB-INF/quest-dragon.jsp b/src/main/webapp/WEB-INF/quest-dragon.jsp index 320b761..6e5856d 100644 --- a/src/main/webapp/WEB-INF/quest-dragon.jsp +++ b/src/main/webapp/WEB-INF/quest-dragon.jsp @@ -7,21 +7,7 @@ - +

    🐉 Как приручить дракона

    diff --git a/src/main/webapp/WEB-INF/register-page.jsp b/src/main/webapp/WEB-INF/register-page.jsp index 33e2a15..bf12398 100644 --- a/src/main/webapp/WEB-INF/register-page.jsp +++ b/src/main/webapp/WEB-INF/register-page.jsp @@ -5,6 +5,9 @@ Регистрация + + +

    Регистрация

    ${error}

    diff --git a/src/main/webapp/WEB-INF/statistic-page.jsp b/src/main/webapp/WEB-INF/statistic-page.jsp index 1abb14d..97808f0 100644 --- a/src/main/webapp/WEB-INF/statistic-page.jsp +++ b/src/main/webapp/WEB-INF/statistic-page.jsp @@ -6,6 +6,8 @@ + +

    📊 Ваша статистика

    From 58b1ca803d8ad0dbbfa4002e3f97785544b65133 Mon Sep 17 00:00:00 2001 From: KitaYaro-V Date: Thu, 29 Jan 2026 12:53:26 +0300 Subject: [PATCH 09/14] ADD logs --- pom.xml | 10 ++++ .../javarush/matsarskaya/cmd/LoginPage.java | 14 ++++- .../matsarskaya/cmd/StatisticPage.java | 1 - .../controller/FrontController.java | 31 ++++++----- .../repository/FileUserRepository.java | 15 +++++- .../matsarskaya/service/StatisticService.java | 10 +++- .../matsarskaya/service/UserService.java | 51 ++++++++++--------- src/main/resources/logback.xml | 27 ++++++++++ 8 files changed, 115 insertions(+), 44 deletions(-) create mode 100644 src/main/resources/logback.xml diff --git a/pom.xml b/pom.xml index 4a87748..4183e40 100644 --- a/pom.xml +++ b/pom.xml @@ -65,6 +65,16 @@ junit-jupiter-engine test + + org.slf4j + slf4j-api + 2.0.9 + + + ch.qos.logback + logback-classic + 1.4.14 + diff --git a/src/main/java/com/javarush/matsarskaya/cmd/LoginPage.java b/src/main/java/com/javarush/matsarskaya/cmd/LoginPage.java index 4576932..e945daa 100644 --- a/src/main/java/com/javarush/matsarskaya/cmd/LoginPage.java +++ b/src/main/java/com/javarush/matsarskaya/cmd/LoginPage.java @@ -5,8 +5,11 @@ import com.javarush.matsarskaya.service.UserService; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpSession; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; public class LoginPage implements Command { + private static final Logger logger = LoggerFactory.getLogger(LoginPage.class); private final UserService userService; public LoginPage(UserService userService) { @@ -15,6 +18,7 @@ public LoginPage(UserService userService) { @Override public String doGet(HttpServletRequest request) { + logger.debug("Отображение страницы входа"); return getView(); } @@ -22,18 +26,24 @@ public String doGet(HttpServletRequest request) { public String doPost(HttpServletRequest request) { String username = request.getParameter("username"); String password = request.getParameter("password"); + logger.info("Обработка POST запроса на вход для пользователя: {}", username); try { userService.loginUser(username, password); HttpSession session = request.getSession(); + logger.info("Успешный вход пользователя: {}", username); session.setAttribute("username", username); return "/home-page"; } catch (UserNotFoundException e) { + logger.warn("Неудачная попытка входа: пользователь {} не найден", username); request.setAttribute("error", "Пользователь не найден"); } catch (InvalidCredentialsException e) { + logger.warn("Неудачная попытка входа: неверный пароль для пользователя {}", username); request.setAttribute("error", "Неверное имя пользователя или пароль"); - } - + } catch (Exception e) { + logger.error("Неожиданная ошибка при входе пользователя {}: {}", username, e.getMessage(), e); + request.setAttribute("error", "Произошла ошибка при входе"); + } return getView(); } diff --git a/src/main/java/com/javarush/matsarskaya/cmd/StatisticPage.java b/src/main/java/com/javarush/matsarskaya/cmd/StatisticPage.java index 9a902eb..a154f63 100644 --- a/src/main/java/com/javarush/matsarskaya/cmd/StatisticPage.java +++ b/src/main/java/com/javarush/matsarskaya/cmd/StatisticPage.java @@ -3,7 +3,6 @@ import com.javarush.matsarskaya.entity.Statistic; import com.javarush.matsarskaya.service.StatisticService; import jakarta.servlet.http.HttpServletRequest; - import java.util.Optional; public class StatisticPage implements Command{ diff --git a/src/main/java/com/javarush/matsarskaya/controller/FrontController.java b/src/main/java/com/javarush/matsarskaya/controller/FrontController.java index 199c1d2..b0d98c0 100644 --- a/src/main/java/com/javarush/matsarskaya/controller/FrontController.java +++ b/src/main/java/com/javarush/matsarskaya/controller/FrontController.java @@ -7,11 +7,14 @@ import jakarta.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; - +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import java.io.IOException; + @WebServlet({"/home-page", "/quest-dragon", "/login-page", "/register-page", "/logout", "/statistic-page"}) public class FrontController extends HttpServlet { + private static final Logger logger = LoggerFactory.getLogger(FrontController.class); private final HttpResolver httpResolver = new HttpResolver(); @Override @@ -24,29 +27,29 @@ protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws S processRequest(req, resp); } - /** - * Обрабатывает HTTP-запрос. - * @param req HTTP запрос - * @param resp HTTP ответ - * @throws ServletException ошибка сервлета - * @throws IOException ошибка ввода-вывода - */ private void processRequest(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String pathInfo = req.getServletPath(); + String method = req.getMethod(); + + logger.info("Получен {} запрос на путь: {}", method, pathInfo); // Проверяем авторизацию для защищённых страниц if (isProtectedPath(pathInfo) && !UserService.isAuthenticated(req)) { + logger.warn("Попытка доступа к защищённой странице без авторизации: {}", pathInfo); resp.sendRedirect(req.getContextPath() + "/home-page"); return; } - // Получаем команду и выполняем её - Command command = httpResolver.resolve(pathInfo); - String viewPath = "GET".equals(req.getMethod()) ? command.doGet(req) : command.doPost(req); - - // Перенаправляем на JSP-страницу - req.getRequestDispatcher(viewPath).forward(req, resp); + try { + Command command = httpResolver.resolve(pathInfo); + String viewPath = "GET".equals(req.getMethod()) ? command.doGet(req) : command.doPost(req); + logger.debug("Запрос обработан успешно, перенаправление на: {}", viewPath); + req.getRequestDispatcher(viewPath).forward(req, resp); + } catch (Exception e) { + logger.error("Ошибка при обработке запроса {}: {}", pathInfo, e.getMessage(), e); + throw e; + } } /** diff --git a/src/main/java/com/javarush/matsarskaya/repository/FileUserRepository.java b/src/main/java/com/javarush/matsarskaya/repository/FileUserRepository.java index a5365b9..8a4e00f 100644 --- a/src/main/java/com/javarush/matsarskaya/repository/FileUserRepository.java +++ b/src/main/java/com/javarush/matsarskaya/repository/FileUserRepository.java @@ -3,33 +3,46 @@ import com.javarush.matsarskaya.entity.User; import com.javarush.matsarskaya.entity.UserFileStorage; import com.javarush.matsarskaya.exception.UserAlreadyExistsException; - import java.util.Optional; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; public class FileUserRepository implements UserRepository{ + private static final Logger logger = LoggerFactory.getLogger(FileUserRepository.class); private final UserFileStorage storage; public FileUserRepository(UserFileStorage storage) { this.storage = storage; + logger.info("FileUserRepository инициализирован"); } @Override public boolean save(User user) { + logger.debug("Сохранение пользователя: {}", user.getUsername()); if (storage.userExists(user.getUsername())) { + logger.warn("Пользователь {} уже существует в хранилище", user.getUsername()); throw new UserAlreadyExistsException(user.getUsername()); } storage.saveUser(user.getUsername(), user.getPassword()); + logger.info("Пользователь {} успешно сохранён", user.getUsername()); return true; } @Override public Optional findByUsername(String username) { + logger.debug("Поиск пользователя по имени: {}", username); Optional password = storage.getPasswordByUsername(username); + if (password.isPresent()) { + logger.debug("Пользователь {} найден", username); + } else { + logger.debug("Пользователь {} не найден", username); + } return password.map(pwd -> new User(username, pwd)); } @Override public boolean existsByUsername(String username) { + logger.debug("Проверка существования пользователя: {}", username); return storage.userExists(username); } } diff --git a/src/main/java/com/javarush/matsarskaya/service/StatisticService.java b/src/main/java/com/javarush/matsarskaya/service/StatisticService.java index 24840f0..a2618aa 100644 --- a/src/main/java/com/javarush/matsarskaya/service/StatisticService.java +++ b/src/main/java/com/javarush/matsarskaya/service/StatisticService.java @@ -2,14 +2,17 @@ import com.javarush.matsarskaya.entity.Statistic; import com.javarush.matsarskaya.repository.StatisticRepository; - import java.util.Optional; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; public class StatisticService { + private static final Logger logger = LoggerFactory.getLogger(StatisticService.class); private final StatisticRepository repository; public StatisticService(StatisticRepository repository) { this.repository = repository; + logger.info("StatisticService инициализирован"); } /** @@ -18,6 +21,7 @@ public StatisticService(StatisticRepository repository) { * @return статистика пользователя */ private Statistic getOrCreate(String username) { + logger.debug("Получение или создание статистики для пользователя: {}", username); return repository.findByUsername(username) .orElseGet(() -> new Statistic(username, 0, 0, 0)); } @@ -27,6 +31,7 @@ private Statistic getOrCreate(String username) { * @param username имя пользователя */ public void registerAttempt(String username) { + logger.debug("Регистрация попытки для пользователя: {}", username); Statistic statistic = getOrCreate(username); statistic.incrementAttempts(); repository.save(statistic); @@ -37,6 +42,7 @@ public void registerAttempt(String username) { * @param username имя пользователя */ public void registerWin(String username) { + logger.info("Регистрация победы для пользователя: {}", username); Statistic statistic = getOrCreate(username); statistic.incrementWins(); repository.save(statistic); @@ -47,6 +53,7 @@ public void registerWin(String username) { * @param username имя пользователя */ public void registerLoss(String username) { + logger.info("Регистрация поражения для пользователя: {}", username); Statistic statistic = getOrCreate(username); statistic.incrementLosses(); repository.save(statistic); @@ -58,6 +65,7 @@ public void registerLoss(String username) { * @return Optional со статистикой */ public Optional getStatistic(String username) { + logger.debug("Получение статистики для пользователя: {}", username); return repository.findByUsername(username); } } diff --git a/src/main/java/com/javarush/matsarskaya/service/UserService.java b/src/main/java/com/javarush/matsarskaya/service/UserService.java index 84d128d..4cc655a 100644 --- a/src/main/java/com/javarush/matsarskaya/service/UserService.java +++ b/src/main/java/com/javarush/matsarskaya/service/UserService.java @@ -7,70 +7,71 @@ import com.javarush.matsarskaya.repository.UserRepository; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpSession; + import java.util.Optional; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + public class UserService { + private static final Logger logger = LoggerFactory.getLogger(UserService.class); private final UserRepository userRepository; public UserService(UserRepository userRepository) { this.userRepository = userRepository; + logger.info("UserService инициализирован"); } - /** - * Регистрирует нового пользователя. - * @param username имя пользователя - * @param password пароль - * @throws Exception если пользователь уже существует - */ public void registerUser(String username, String password) { + logger.info("Попытка регистрации пользователя: {}", username); + if (userRepository.existsByUsername(username)) { + logger.warn("Пользователь с именем {} уже существует", username); throw new UserAlreadyExistsException(username); } User newUser = new User(username, password); userRepository.save(newUser); + logger.info("Пользователь {} успешно зарегистрирован", username); } - /** - * Выполняет вход пользователя в систему. - * @param username имя пользователя - * @param password пароль - * @return Optional с пользователем, если вход успешен - * @throws Exception если неверные учётные данные - * @throws Exception если пользователь не найден - */ public Optional loginUser(String username, String password) { + logger.info("Попытка входа пользователя: {}", username); Optional user = userRepository.findByUsername(username); if (user.isEmpty()) { + logger.warn("Пользователь {} не найден", username); throw new UserNotFoundException(username); } if (!user.get().getPassword().equals(password)) { + logger.warn("Неверный пароль для пользователя: {}", username); throw new InvalidCredentialsException(); } - + logger.info("Пользователь {} успешно вошёл в систему", username); return user; } - /** - * Проверяет, авторизован ли пользователь. - * @param request HTTP запрос - * @return true если пользователь авторизован - */ public static boolean isAuthenticated(HttpServletRequest request) { HttpSession session = request.getSession(false); - return session != null && session.getAttribute("username") != null; + boolean authenticated = session != null && session.getAttribute("username") != null; + + if (authenticated) { + String username = (String) session.getAttribute("username"); + LoggerFactory.getLogger(UserService.class).debug("Проверка авторизации: пользователь {} авторизован", username); + } + + return authenticated; } - /** - * Выполняет выход пользователя из системы. - * @param request HTTP запрос - */ public void logout(HttpServletRequest request) { HttpSession session = request.getSession(false); if (session != null) { + String username = (String) session.getAttribute("username"); session.invalidate(); + logger.info("Пользователь {} вышел из системы", username); + } else { + logger.debug("Попытка выхода без активной сессии"); } } } diff --git a/src/main/resources/logback.xml b/src/main/resources/logback.xml new file mode 100644 index 0000000..9df70c6 --- /dev/null +++ b/src/main/resources/logback.xml @@ -0,0 +1,27 @@ + + + + + + %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n + + + + + logs/application.log + + %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n + + + logs/application.%d{yyyy-MM-dd}.log + 30 + + + + + + + + + + From 074546e4f58f7caddc9453ed44c10543d9e62d26 Mon Sep 17 00:00:00 2001 From: KitaYaro-V Date: Thu, 29 Jan 2026 17:04:25 +0300 Subject: [PATCH 10/14] ADD tests --- pom.xml | 50 +++++- .../controller/FrontController.java | 10 +- .../matsarskaya/entity/QuestStage.java | 43 +++++ .../matsarskaya/entity/QuestStatus.java | 7 + .../matsarskaya/entity/TrustLevel.java | 38 ++++ .../matsarskaya/cmd/HomePageTest.java | 49 ++++++ .../matsarskaya/cmd/LoginPageTest.java | 102 +++++++++++ .../matsarskaya/cmd/LogoutPageTest.java | 60 +++++++ .../matsarskaya/cmd/QuestDragonTest.java | 164 ++++++++++++++++++ .../matsarskaya/cmd/RegisterPageTest.java | 82 +++++++++ .../matsarskaya/cmd/StatisticPageTest.java | 92 ++++++++++ .../config/FileStorageConfigTest.java | 39 +++++ .../controller/FrontControllerTest.java | 114 ++++++++++++ .../matsarskaya/entity/QuestStageTest.java | 94 ++++++++++ .../matsarskaya/entity/StatisticTest.java | 81 +++++++++ .../matsarskaya/entity/TrustLevelTest.java | 77 ++++++++ .../javarush/matsarskaya/entity/UserTest.java | 45 +++++ .../InvalidCredentialsExceptionTest.java | 26 +++ .../UserAlreadyExistsExceptionTest.java | 28 +++ .../exception/UserNotFoundExceptionTest.java | 28 +++ .../FileStatisticRepositoryTest.java | 104 +++++++++++ .../repository/FileUserRepositoryTest.java | 106 +++++++++++ .../matsarskaya/service/UserServiceTest.java | 152 ++++++++++++++++ 23 files changed, 1583 insertions(+), 8 deletions(-) create mode 100644 src/main/java/com/javarush/matsarskaya/entity/QuestStage.java create mode 100644 src/main/java/com/javarush/matsarskaya/entity/QuestStatus.java create mode 100644 src/main/java/com/javarush/matsarskaya/entity/TrustLevel.java create mode 100644 src/test/java/com/javarush/matsarskaya/cmd/HomePageTest.java create mode 100644 src/test/java/com/javarush/matsarskaya/cmd/LoginPageTest.java create mode 100644 src/test/java/com/javarush/matsarskaya/cmd/LogoutPageTest.java create mode 100644 src/test/java/com/javarush/matsarskaya/cmd/QuestDragonTest.java create mode 100644 src/test/java/com/javarush/matsarskaya/cmd/RegisterPageTest.java create mode 100644 src/test/java/com/javarush/matsarskaya/cmd/StatisticPageTest.java create mode 100644 src/test/java/com/javarush/matsarskaya/config/FileStorageConfigTest.java create mode 100644 src/test/java/com/javarush/matsarskaya/controller/FrontControllerTest.java create mode 100644 src/test/java/com/javarush/matsarskaya/entity/QuestStageTest.java create mode 100644 src/test/java/com/javarush/matsarskaya/entity/StatisticTest.java create mode 100644 src/test/java/com/javarush/matsarskaya/entity/TrustLevelTest.java create mode 100644 src/test/java/com/javarush/matsarskaya/entity/UserTest.java create mode 100644 src/test/java/com/javarush/matsarskaya/exception/InvalidCredentialsExceptionTest.java create mode 100644 src/test/java/com/javarush/matsarskaya/exception/UserAlreadyExistsExceptionTest.java create mode 100644 src/test/java/com/javarush/matsarskaya/exception/UserNotFoundExceptionTest.java create mode 100644 src/test/java/com/javarush/matsarskaya/repository/FileStatisticRepositoryTest.java create mode 100644 src/test/java/com/javarush/matsarskaya/repository/FileUserRepositoryTest.java create mode 100644 src/test/java/com/javarush/matsarskaya/service/UserServiceTest.java diff --git a/pom.xml b/pom.xml index 4183e40..0651135 100644 --- a/pom.xml +++ b/pom.xml @@ -15,14 +15,9 @@ 21 21 5.10.2 + 5.18.0 - - - - - - @@ -65,6 +60,29 @@ junit-jupiter-engine test + + org.junit.jupiter + junit-jupiter-params + test + + + org.mockito + mockito-core + ${mockito.version} + test + + + org.mockito + mockito-junit-jupiter + ${mockito.version} + test + + + org.assertj + assertj-core + 3.25.3 + test + org.slf4j slf4j-api @@ -80,6 +98,25 @@ + + org.jacoco + jacoco-maven-plugin + 0.8.12 + + + + prepare-agent + + + + report + test + + report + + + + org.apache.maven.plugins maven-war-plugin @@ -99,6 +136,5 @@ - \ No newline at end of file diff --git a/src/main/java/com/javarush/matsarskaya/controller/FrontController.java b/src/main/java/com/javarush/matsarskaya/controller/FrontController.java index b0d98c0..fba2582 100644 --- a/src/main/java/com/javarush/matsarskaya/controller/FrontController.java +++ b/src/main/java/com/javarush/matsarskaya/controller/FrontController.java @@ -15,7 +15,15 @@ @WebServlet({"/home-page", "/quest-dragon", "/login-page", "/register-page", "/logout", "/statistic-page"}) public class FrontController extends HttpServlet { private static final Logger logger = LoggerFactory.getLogger(FrontController.class); - private final HttpResolver httpResolver = new HttpResolver(); + private final HttpResolver httpResolver; + + public FrontController() { + this(new HttpResolver()); + } + + public FrontController(HttpResolver httpResolver) { + this.httpResolver = httpResolver; + } @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { diff --git a/src/main/java/com/javarush/matsarskaya/entity/QuestStage.java b/src/main/java/com/javarush/matsarskaya/entity/QuestStage.java new file mode 100644 index 0000000..e79aa88 --- /dev/null +++ b/src/main/java/com/javarush/matsarskaya/entity/QuestStage.java @@ -0,0 +1,43 @@ +package com.javarush.matsarskaya.entity; + +import java.util.Arrays; + +//этапы квеста +public enum QuestStage { + START(0), + NAME_INPUT(1), + STAGE_2(2), STAGE_3(3), STAGE_4(4), STAGE_5(5), + STAGE_6(6), STAGE_7(7), STAGE_8(8), STAGE_9(9), + PRE_FINAL(10), + FINAL(11); + + private final int stageNumber; + + QuestStage(int stageNumber) { + this.stageNumber = stageNumber; + } + + public int getStageNumber() { + return stageNumber; + } + + public static QuestStage fromNumber(int number) { + return Arrays.stream(values()) + .filter(stage -> stage.stageNumber == number) + .findFirst() + .orElseThrow(() -> new IllegalArgumentException("Invalid stage number: " + number)); + } + + public QuestStage next() { + return fromNumber(stageNumber + 1); + } + + public boolean isLossStage(int trust) { + if (stageNumber >= 3 && stageNumber <= 6) { + return trust < 50; + } else if (stageNumber >= 7 && stageNumber <= 10) { + return trust < 70; + } + return false; + } +} diff --git a/src/main/java/com/javarush/matsarskaya/entity/QuestStatus.java b/src/main/java/com/javarush/matsarskaya/entity/QuestStatus.java new file mode 100644 index 0000000..e4caab7 --- /dev/null +++ b/src/main/java/com/javarush/matsarskaya/entity/QuestStatus.java @@ -0,0 +1,7 @@ +package com.javarush.matsarskaya.entity; + +public enum QuestStatus { + IN_PROGRESS, + WON, + LOST +} diff --git a/src/main/java/com/javarush/matsarskaya/entity/TrustLevel.java b/src/main/java/com/javarush/matsarskaya/entity/TrustLevel.java new file mode 100644 index 0000000..82a3331 --- /dev/null +++ b/src/main/java/com/javarush/matsarskaya/entity/TrustLevel.java @@ -0,0 +1,38 @@ +package com.javarush.matsarskaya.entity; + +import java.util.Arrays; + +//уровни доверия +public enum TrustLevel { + CRITICAL(0, 49), + LOW(50, 69), + HIGH(70, 100); + + private final int min; + private final int max; + + TrustLevel(int min, int max) { + this.min = min; + this.max = max; + } + + public static TrustLevel fromValue(int trust) { + return Arrays.stream(values()) + .filter(level -> trust >= level.min && trust <= level.max) + .findFirst() + .orElse(CRITICAL); + } + + public boolean isSufficientForStage(int stageNumber) { + // Для этапов 0, 1, 2 и 11 все уровни достаточны + if (stageNumber <= 2 || stageNumber >= 11) { + return true; + } + // Для этапов 7-10 только HIGH достаточен + if (stageNumber >= 7) { + return this == HIGH; + } + // Для этапов 3-6 LOW и HIGH достаточны + return this != CRITICAL; + } +} diff --git a/src/test/java/com/javarush/matsarskaya/cmd/HomePageTest.java b/src/test/java/com/javarush/matsarskaya/cmd/HomePageTest.java new file mode 100644 index 0000000..75787d3 --- /dev/null +++ b/src/test/java/com/javarush/matsarskaya/cmd/HomePageTest.java @@ -0,0 +1,49 @@ +package com.javarush.matsarskaya.cmd; + +import jakarta.servlet.http.HttpServletRequest; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; + +import static org.assertj.core.api.Assertions.assertThat; + +@ExtendWith(MockitoExtension.class) +@DisplayName("Тесты для HomePage") +class HomePageTest { + @Mock + private HttpServletRequest request; + + private HomePage homePage; + + @BeforeEach + void setUp() { + homePage = new HomePage(); + } + + @Test + @DisplayName("GET запрос возвращает путь к домашней странице") + void testDoGet() { + String result = homePage.doGet(request); + + assertThat(result).isEqualTo("/WEB-INF/home-page.jsp"); + } + + @Test + @DisplayName("POST запрос возвращает путь к домашней странице") + void testDoPost() { + String result = homePage.doPost(request); + + assertThat(result).isEqualTo("/WEB-INF/home-page.jsp"); + } + + @Test + @DisplayName("Получение пути к представлению") + void testGetView() { + String result = homePage.getView(); + + assertThat(result).isEqualTo("/WEB-INF/home-page.jsp"); + } +} diff --git a/src/test/java/com/javarush/matsarskaya/cmd/LoginPageTest.java b/src/test/java/com/javarush/matsarskaya/cmd/LoginPageTest.java new file mode 100644 index 0000000..cf9e3b6 --- /dev/null +++ b/src/test/java/com/javarush/matsarskaya/cmd/LoginPageTest.java @@ -0,0 +1,102 @@ +package com.javarush.matsarskaya.cmd; + +import com.javarush.matsarskaya.entity.User; +import com.javarush.matsarskaya.exception.InvalidCredentialsException; +import com.javarush.matsarskaya.exception.UserNotFoundException; +import com.javarush.matsarskaya.service.UserService; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpSession; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; + +import java.util.Optional; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.*; + +@ExtendWith(MockitoExtension.class) +@DisplayName("Тесты для LoginPage") +class LoginPageTest { + @Mock + private UserService userService; + + @Mock + private HttpServletRequest request; + + @Mock + private HttpSession session; + + private LoginPage loginPage; + + @BeforeEach + void setUp() { + loginPage = new LoginPage(userService); + } + + @Test + @DisplayName("GET запрос возвращает путь к странице входа") + void testDoGet() { + String result = loginPage.doGet(request); + + assertThat(result).isEqualTo("/WEB-INF/login-page.jsp"); + } + + @Test + @DisplayName("Успешный вход пользователя") + void testDoPostSuccess() { + when(request.getParameter("username")).thenReturn("testuser"); + when(request.getParameter("password")).thenReturn("password123"); + when(userService.loginUser("testuser", "password123")) + .thenReturn(Optional.of(new User("testuser", "password123"))); + when(request.getSession()).thenReturn(session); + + String result = loginPage.doPost(request); + + assertThat(result).isEqualTo("/home-page"); + verify(userService).loginUser("testuser", "password123"); + verify(request).getSession(); + verify(session).setAttribute("username", "testuser"); + } + + @Test + @DisplayName("Вход с несуществующим пользователем") + void testDoPostUserNotFound() { + when(request.getParameter("username")).thenReturn("nonexistent"); + when(request.getParameter("password")).thenReturn("password123"); + when(userService.loginUser("nonexistent", "password123")) + .thenThrow(new UserNotFoundException("nonexistent")); + + String result = loginPage.doPost(request); + + assertThat(result).isEqualTo("/WEB-INF/login-page.jsp"); + verify(request).setAttribute("error", "Пользователь не найден"); + verify(userService).loginUser("nonexistent", "password123"); + } + + @Test + @DisplayName("Вход с неверным паролем") + void testDoPostInvalidPassword() { + when(request.getParameter("username")).thenReturn("testuser"); + when(request.getParameter("password")).thenReturn("wrongpassword"); + when(userService.loginUser("testuser", "wrongpassword")) + .thenThrow(new InvalidCredentialsException()); + + String result = loginPage.doPost(request); + + assertThat(result).isEqualTo("/WEB-INF/login-page.jsp"); + verify(request).setAttribute("error", "Неверное имя пользователя или пароль"); + verify(userService).loginUser("testuser", "wrongpassword"); + } + + @Test + @DisplayName("Получение пути к представлению") + void testGetView() { + String result = loginPage.getView(); + + assertThat(result).isEqualTo("/WEB-INF/login-page.jsp"); + } +} diff --git a/src/test/java/com/javarush/matsarskaya/cmd/LogoutPageTest.java b/src/test/java/com/javarush/matsarskaya/cmd/LogoutPageTest.java new file mode 100644 index 0000000..5025e1c --- /dev/null +++ b/src/test/java/com/javarush/matsarskaya/cmd/LogoutPageTest.java @@ -0,0 +1,60 @@ +package com.javarush.matsarskaya.cmd; + +import com.javarush.matsarskaya.service.UserService; +import jakarta.servlet.http.HttpServletRequest; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.*; + +@ExtendWith(MockitoExtension.class) +@DisplayName("Тесты для LogoutPage") +class LogoutPageTest { + @Mock + private UserService userService; + + @Mock + private HttpServletRequest request; + + private LogoutPage logoutPage; + + @BeforeEach + void setUp() { + logoutPage = new LogoutPage(userService); + } + + @Test + @DisplayName("POST запрос выполняет выход из системы") + void testDoPost() { + doNothing().when(userService).logout(request); + + String result = logoutPage.doPost(request); + + assertThat(result).isEqualTo("/home-page"); + verify(userService).logout(request); + } + + @Test + @DisplayName("GET запрос вызывает doPost") + void testDoGet() { + doNothing().when(userService).logout(request); + + String result = logoutPage.doGet(request); + + assertThat(result).isEqualTo("/home-page"); + verify(userService).logout(request); + } + + @Test + @DisplayName("Получение пути к представлению") + void testGetView() { + String result = logoutPage.getView(); + + assertThat(result).isEqualTo("/home-page"); + } +} diff --git a/src/test/java/com/javarush/matsarskaya/cmd/QuestDragonTest.java b/src/test/java/com/javarush/matsarskaya/cmd/QuestDragonTest.java new file mode 100644 index 0000000..6ada244 --- /dev/null +++ b/src/test/java/com/javarush/matsarskaya/cmd/QuestDragonTest.java @@ -0,0 +1,164 @@ +package com.javarush.matsarskaya.cmd; + +import com.javarush.matsarskaya.service.StatisticService; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpSession; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.*; + +@ExtendWith(MockitoExtension.class) +@DisplayName("Тесты для QuestDragon") +class QuestDragonTest { + @Mock + private StatisticService statisticService; + + @Mock + private HttpServletRequest request; + + @Mock + private HttpSession session; + + private QuestDragon questDragon; + + @BeforeEach + void setUp() { + questDragon = new QuestDragon(statisticService); + } + + @Test + @DisplayName("GET запрос возвращает путь к странице квеста") + void testDoGet() { + String result = questDragon.doGet(request); + + assertThat(result).isEqualTo("/WEB-INF/quest-dragon.jsp"); + } + + @Test + @DisplayName("Начало квеста") + void testDoPostStartQuest() { + when(request.getParameter("quest")).thenReturn("the way of the dragon rider"); + when(request.getParameter("stage")).thenReturn(null); + when(request.getParameter("choice")).thenReturn(null); + when(request.getParameter("playerNameInput")).thenReturn(null); + when(request.getSession()).thenReturn(session); + + String result = questDragon.doPost(request); + + assertThat(result).isEqualTo("/WEB-INF/quest-dragon.jsp"); + verify(session).setAttribute("stage", 0); + verify(session).setAttribute("trust", 50); + verify(session).setAttribute("questFinished", false); + } + + @Test + @DisplayName("Переход на этап 1") + void testDoPostStage0() { + when(request.getParameter("stage")).thenReturn("0"); + when(request.getSession()).thenReturn(session); + + String result = questDragon.doPost(request); + + assertThat(result).isEqualTo("/WEB-INF/quest-dragon.jsp"); + verify(session).setAttribute("stage", 1); + } + + @Test + @DisplayName("Ввод имени игрока") + void testDoPostStage1WithName() { + when(request.getParameter("stage")).thenReturn("1"); + when(request.getParameter("playerNameInput")).thenReturn("PlayerName"); + when(request.getParameter("choice")).thenReturn(null); + when(request.getSession()).thenReturn(session); + + String result = questDragon.doPost(request); + + assertThat(result).isEqualTo("/WEB-INF/quest-dragon.jsp"); + verify(session).setAttribute("playerName", "PlayerName"); + verify(session).setAttribute("stage", 2); + } + + @Test + @DisplayName("Переход на следующий этап с выбором") + void testDoPostNextStage() { + when(request.getParameter("stage")).thenReturn("2"); + when(request.getParameter("choice")).thenReturn("10"); + when(request.getSession()).thenReturn(session); + when(session.getAttribute("username")).thenReturn("testuser"); + when(session.getAttribute("questFinished")).thenReturn(false); + when(session.getAttribute("trust")).thenReturn(50); + + String result = questDragon.doPost(request); + + assertThat(result).isEqualTo("/WEB-INF/quest-dragon.jsp"); + verify(session).setAttribute("trust", 60); + verify(session).setAttribute("stage", 3); + } + + @Test + @DisplayName("Поражение при низком уровне доверия") + void testDoPostLossCondition() { + when(request.getParameter("stage")).thenReturn("3"); + when(request.getParameter("choice")).thenReturn("-10"); + when(request.getSession()).thenReturn(session); + when(session.getAttribute("username")).thenReturn("testuser"); + when(session.getAttribute("questFinished")).thenReturn(false); + when(session.getAttribute("trust")).thenReturn(45); + + String result = questDragon.doPost(request); + + assertThat(result).isEqualTo("/WEB-INF/quest-dragon.jsp"); + verify(statisticService).registerLoss("testuser"); + verify(session).setAttribute("questFinished", true); + verify(session).setAttribute("stage", 11); + } + + @Test + @DisplayName("Победа при высоком уровне доверия") + void testDoPostWinCondition() { + when(request.getParameter("stage")).thenReturn("9"); + when(request.getParameter("choice")).thenReturn("10"); + when(request.getSession()).thenReturn(session); + when(session.getAttribute("username")).thenReturn("testuser"); + when(session.getAttribute("questFinished")).thenReturn(false); + when(session.getAttribute("trust")).thenReturn(60); + + String result = questDragon.doPost(request); + + assertThat(result).isEqualTo("/WEB-INF/quest-dragon.jsp"); + verify(session).setAttribute("trust", 70); + verify(session).setAttribute("stage", 10); + } + + @Test + @DisplayName("Победа на финальном этапе при высоком уровне доверия") + void testDoPostFinalStageWin() { + when(request.getParameter("stage")).thenReturn("10"); + when(request.getParameter("choice")).thenReturn("10"); + when(request.getSession()).thenReturn(session); + when(session.getAttribute("username")).thenReturn("testuser"); + when(session.getAttribute("questFinished")).thenReturn(false); + when(session.getAttribute("trust")).thenReturn(70); + + String result = questDragon.doPost(request); + + assertThat(result).isEqualTo("/WEB-INF/quest-dragon.jsp"); + verify(statisticService).registerWin("testuser"); + verify(session).setAttribute("questFinished", true); + verify(session).setAttribute("stage", 11); + } + + @Test + @DisplayName("Получение пути к представлению") + void testGetView() { + String result = questDragon.getView(); + + assertThat(result).isEqualTo("/WEB-INF/quest-dragon.jsp"); + } +} diff --git a/src/test/java/com/javarush/matsarskaya/cmd/RegisterPageTest.java b/src/test/java/com/javarush/matsarskaya/cmd/RegisterPageTest.java new file mode 100644 index 0000000..4f7f231 --- /dev/null +++ b/src/test/java/com/javarush/matsarskaya/cmd/RegisterPageTest.java @@ -0,0 +1,82 @@ +package com.javarush.matsarskaya.cmd; + +import com.javarush.matsarskaya.exception.UserAlreadyExistsException; +import com.javarush.matsarskaya.service.UserService; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpSession; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.*; + +@ExtendWith(MockitoExtension.class) +@DisplayName("Тесты для RegisterPage") +class RegisterPageTest { + @Mock + private UserService userService; + + @Mock + private HttpServletRequest request; + + @Mock + private HttpSession session; + + private RegisterPage registerPage; + + @BeforeEach + void setUp() { + registerPage = new RegisterPage(userService); + } + + @Test + @DisplayName("GET запрос возвращает путь к странице регистрации") + void testDoGet() { + String result = registerPage.doGet(request); + + assertThat(result).isEqualTo("/WEB-INF/register-page.jsp"); + } + + @Test + @DisplayName("Успешная регистрация нового пользователя") + void testDoPostSuccess() { + when(request.getParameter("username")).thenReturn("newuser"); + when(request.getParameter("password")).thenReturn("password123"); + doNothing().when(userService).registerUser("newuser", "password123"); + when(request.getSession()).thenReturn(session); + + String result = registerPage.doPost(request); + + assertThat(result).isEqualTo("/home-page"); + verify(userService).registerUser("newuser", "password123"); + verify(request).getSession(); + verify(session).setAttribute("username", "newuser"); + } + + @Test + @DisplayName("Регистрация существующего пользователя") + void testDoPostUserAlreadyExists() { + when(request.getParameter("username")).thenReturn("existinguser"); + when(request.getParameter("password")).thenReturn("password123"); + doThrow(new UserAlreadyExistsException("existinguser")) + .when(userService).registerUser("existinguser", "password123"); + + String result = registerPage.doPost(request); + + assertThat(result).isEqualTo("/WEB-INF/register-page.jsp"); + verify(request).setAttribute("error", "Пользователь уже существует"); + verify(userService).registerUser("existinguser", "password123"); + } + + @Test + @DisplayName("Получение пути к представлению") + void testGetView() { + String result = registerPage.getView(); + + assertThat(result).isEqualTo("/WEB-INF/register-page.jsp"); + } +} diff --git a/src/test/java/com/javarush/matsarskaya/cmd/StatisticPageTest.java b/src/test/java/com/javarush/matsarskaya/cmd/StatisticPageTest.java new file mode 100644 index 0000000..256e73d --- /dev/null +++ b/src/test/java/com/javarush/matsarskaya/cmd/StatisticPageTest.java @@ -0,0 +1,92 @@ +package com.javarush.matsarskaya.cmd; + +import com.javarush.matsarskaya.entity.Statistic; +import com.javarush.matsarskaya.service.StatisticService; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpSession; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; + +import java.util.Optional; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.*; + +@ExtendWith(MockitoExtension.class) +@DisplayName("Тесты для StatisticPage") +class StatisticPageTest { + @Mock + private StatisticService statisticService; + + @Mock + private HttpServletRequest request; + + @Mock + private HttpSession session; + + private StatisticPage statisticPage; + + @BeforeEach + void setUp() { + statisticPage = new StatisticPage(statisticService); + } + + @Test + @DisplayName("GET запрос с существующей статистикой") + void testDoGetWithStatistic() { + when(request.getSession()).thenReturn(session); + when(session.getAttribute("username")).thenReturn("testuser"); + Statistic stat = new Statistic("testuser", 10, 5, 5); + when(statisticService.getStatistic("testuser")).thenReturn(Optional.of(stat)); + + String result = statisticPage.doGet(request); + + assertThat(result).isEqualTo("/WEB-INF/statistic-page.jsp"); + verify(request).getSession(); + verify(session).getAttribute("username"); + verify(statisticService).getStatistic("testuser"); + verify(request).setAttribute("statistic", stat); + } + + @Test + @DisplayName("GET запрос без статистики") + void testDoGetWithoutStatistic() { + when(request.getSession()).thenReturn(session); + when(session.getAttribute("username")).thenReturn("testuser"); + when(statisticService.getStatistic("testuser")).thenReturn(Optional.empty()); + + String result = statisticPage.doGet(request); + + assertThat(result).isEqualTo("/WEB-INF/statistic-page.jsp"); + verify(request).getSession(); + verify(session).getAttribute("username"); + verify(statisticService).getStatistic("testuser"); + verify(request, never()).setAttribute(eq("statistic"), any()); + } + + @Test + @DisplayName("GET запрос без авторизованного пользователя") + void testDoGetWithoutUser() { + when(request.getSession()).thenReturn(session); + when(session.getAttribute("username")).thenReturn(null); + + String result = statisticPage.doGet(request); + + assertThat(result).isEqualTo("/WEB-INF/statistic-page.jsp"); + verify(request).getSession(); + verify(session).getAttribute("username"); + verify(statisticService, never()).getStatistic(anyString()); + } + + @Test + @DisplayName("Получение пути к представлению") + void testGetView() { + String result = statisticPage.getView(); + + assertThat(result).isEqualTo("/WEB-INF/statistic-page.jsp"); + } +} diff --git a/src/test/java/com/javarush/matsarskaya/config/FileStorageConfigTest.java b/src/test/java/com/javarush/matsarskaya/config/FileStorageConfigTest.java new file mode 100644 index 0000000..b60adbb --- /dev/null +++ b/src/test/java/com/javarush/matsarskaya/config/FileStorageConfigTest.java @@ -0,0 +1,39 @@ +package com.javarush.matsarskaya.config; + +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.DisplayName; +import static org.assertj.core.api.Assertions.assertThat; + +@DisplayName("Тесты для FileStorageConfig") +class FileStorageConfigTest { + + @Test + @DisplayName("Получение пути к файлу пользователей") + void testGetUsersFilePath() { + String path = FileStorageConfig.getUsersFilePath(); + + assertThat(path).isEqualTo("users.txt"); + } + + @Test + @DisplayName("Получение пути к файлу статистики") + void testGetStatisticsFilePath() { + String path = FileStorageConfig.getStatisticsFilePath(); + + assertThat(path).isEqualTo("statistics.txt"); + } + + @Test + @DisplayName("Пути не являются null") + void testPathsAreNotNull() { + assertThat(FileStorageConfig.getUsersFilePath()).isNotNull(); + assertThat(FileStorageConfig.getStatisticsFilePath()).isNotNull(); + } + + @Test + @DisplayName("Пути не являются пустыми") + void testPathsAreNotEmpty() { + assertThat(FileStorageConfig.getUsersFilePath()).isNotEmpty(); + assertThat(FileStorageConfig.getStatisticsFilePath()).isNotEmpty(); + } +} diff --git a/src/test/java/com/javarush/matsarskaya/controller/FrontControllerTest.java b/src/test/java/com/javarush/matsarskaya/controller/FrontControllerTest.java new file mode 100644 index 0000000..d5fcf24 --- /dev/null +++ b/src/test/java/com/javarush/matsarskaya/controller/FrontControllerTest.java @@ -0,0 +1,114 @@ +package com.javarush.matsarskaya.controller; + +import com.javarush.matsarskaya.cmd.Command; +import jakarta.servlet.RequestDispatcher; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpSession; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; + +import java.io.IOException; + +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.Mockito.*; + +@ExtendWith(MockitoExtension.class) +@DisplayName("Тесты для FrontController") +class FrontControllerTest { + @Mock + private HttpServletRequest request; + + @Mock + private HttpServletResponse response; + + @Mock + private HttpSession session; + + @Mock + private RequestDispatcher requestDispatcher; + + @Mock + private Command command; + + @Mock + private HttpResolver httpResolver; + + private FrontController frontController; + + @BeforeEach + void setUp() { + frontController = new FrontController(httpResolver); + } + + @Test + @DisplayName("GET запрос обрабатывается корректно") + void testDoGet() throws ServletException, IOException { + when(request.getServletPath()).thenReturn("/home-page"); + when(request.getMethod()).thenReturn("GET"); + when(request.getRequestDispatcher(anyString())).thenReturn(requestDispatcher); + when(httpResolver.resolve("/home-page")).thenReturn(command); + when(command.doGet(request)).thenReturn("/WEB-INF/home-page.jsp"); + + frontController.doGet(request, response); + + verify(httpResolver).resolve("/home-page"); + verify(command).doGet(request); + verify(request).getRequestDispatcher(anyString()); + verify(requestDispatcher).forward(request, response); + } + + @Test + @DisplayName("POST запрос обрабатывается корректно") + void testDoPost() throws ServletException, IOException { + when(request.getServletPath()).thenReturn("/login-page"); + when(request.getMethod()).thenReturn("POST"); + when(request.getRequestDispatcher(anyString())).thenReturn(requestDispatcher); + when(httpResolver.resolve("/login-page")).thenReturn(command); + when(command.doPost(request)).thenReturn("/WEB-INF/login-page.jsp"); + + frontController.doPost(request, response); + + verify(httpResolver).resolve("/login-page"); + verify(command).doPost(request); + verify(request).getRequestDispatcher(anyString()); + verify(requestDispatcher).forward(request, response); + } + + @Test + @DisplayName("Перенаправление на домашнюю страницу при попытке доступа к защищённой странице без авторизации") + void testProtectedPathWithoutAuthentication() throws ServletException, IOException { + when(request.getServletPath()).thenReturn("/quest-dragon"); + when(request.getMethod()).thenReturn("GET"); + when(request.getContextPath()).thenReturn(""); + + frontController.doGet(request, response); + + verify(response).sendRedirect("/home-page"); + } + + @Test + @DisplayName("Доступ к защищённой странице с авторизацией") + void testProtectedPathWithAuthentication() throws ServletException, IOException { + when(request.getServletPath()).thenReturn("/quest-dragon"); + when(request.getMethod()).thenReturn("GET"); + when(request.getSession(false)).thenReturn(session); + when(session.getAttribute("username")).thenReturn("testuser"); + when(request.getRequestDispatcher(anyString())).thenReturn(requestDispatcher); + when(httpResolver.resolve("/quest-dragon")).thenReturn(command); + when(command.doGet(request)).thenReturn("/WEB-INF/quest-dragon.jsp"); + + frontController.doGet(request, response); + + verify(httpResolver).resolve("/quest-dragon"); + verify(command).doGet(request); + verify(request).getRequestDispatcher(anyString()); + verify(requestDispatcher).forward(request, response); + verify(response, never()).sendRedirect(anyString()); + } +} diff --git a/src/test/java/com/javarush/matsarskaya/entity/QuestStageTest.java b/src/test/java/com/javarush/matsarskaya/entity/QuestStageTest.java new file mode 100644 index 0000000..467f100 --- /dev/null +++ b/src/test/java/com/javarush/matsarskaya/entity/QuestStageTest.java @@ -0,0 +1,94 @@ +package com.javarush.matsarskaya.entity; + +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.CsvSource; +import org.junit.jupiter.params.provider.ValueSource; +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; + +@DisplayName("Тесты для enum QuestStage") +class QuestStageTest { + + @Test + @DisplayName("Получение номера этапа") + void testGetStageNumber() { + assertThat(QuestStage.START.getStageNumber()).isEqualTo(0); + assertThat(QuestStage.NAME_INPUT.getStageNumber()).isEqualTo(1); + assertThat(QuestStage.STAGE_2.getStageNumber()).isEqualTo(2); + assertThat(QuestStage.FINAL.getStageNumber()).isEqualTo(11); + } + + @Test + @DisplayName("Получение этапа по номеру") + void testFromNumber() { + assertThat(QuestStage.fromNumber(0)).isEqualTo(QuestStage.START); + assertThat(QuestStage.fromNumber(1)).isEqualTo(QuestStage.NAME_INPUT); + assertThat(QuestStage.fromNumber(5)).isEqualTo(QuestStage.STAGE_5); + assertThat(QuestStage.fromNumber(11)).isEqualTo(QuestStage.FINAL); + } + + @Test + @DisplayName("Выброс исключения при неверном номере этапа") + void testFromNumberWithInvalidNumber() { + assertThatThrownBy(() -> QuestStage.fromNumber(12)) + .isInstanceOf(IllegalArgumentException.class) + .hasMessageContaining("Invalid stage number: 12"); + + assertThatThrownBy(() -> QuestStage.fromNumber(-1)) + .isInstanceOf(IllegalArgumentException.class) + .hasMessageContaining("Invalid stage number: -1"); + } + + @Test + @DisplayName("Переход к следующему этапу") + void testNext() { + assertThat(QuestStage.START.next()).isEqualTo(QuestStage.NAME_INPUT); + assertThat(QuestStage.NAME_INPUT.next()).isEqualTo(QuestStage.STAGE_2); + assertThat(QuestStage.PRE_FINAL.next()).isEqualTo(QuestStage.FINAL); + } + + @ParameterizedTest + @CsvSource({ + "3, 49, true", + "3, 50, false", + "4, 30, true", + "4, 50, false", + "5, 45, true", + "5, 50, false", + "6, 49, true", + "6, 50, false" + }) + @DisplayName("Проверка условия поражения для этапов 3-6") + void testIsLossStageForStages3To6(int stageNumber, int trust, boolean expected) { + QuestStage stage = QuestStage.fromNumber(stageNumber); + assertThat(stage.isLossStage(trust)).isEqualTo(expected); + } + + @ParameterizedTest + @CsvSource({ + "7, 69, true", + "7, 70, false", + "8, 50, true", + "8, 70, false", + "9, 60, true", + "9, 70, false", + "10, 69, true", + "10, 70, false" + }) + @DisplayName("Проверка условия поражения для этапов 7-10") + void testIsLossStageForStages7To10(int stageNumber, int trust, boolean expected) { + QuestStage stage = QuestStage.fromNumber(stageNumber); + assertThat(stage.isLossStage(trust)).isEqualTo(expected); + } + + @ParameterizedTest + @ValueSource(ints = {0, 1, 2, 11}) + @DisplayName("Этапы 0, 1, 2 и 11 не имеют условия поражения") + void testIsLossStageForNonLossStages(int stageNumber) { + QuestStage stage = QuestStage.fromNumber(stageNumber); + assertThat(stage.isLossStage(0)).isFalse(); + assertThat(stage.isLossStage(100)).isFalse(); + } +} diff --git a/src/test/java/com/javarush/matsarskaya/entity/StatisticTest.java b/src/test/java/com/javarush/matsarskaya/entity/StatisticTest.java new file mode 100644 index 0000000..a5f3103 --- /dev/null +++ b/src/test/java/com/javarush/matsarskaya/entity/StatisticTest.java @@ -0,0 +1,81 @@ +package com.javarush.matsarskaya.entity; + +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.BeforeEach; +import static org.assertj.core.api.Assertions.assertThat; + +@DisplayName("Тесты для сущности Statistic") +class StatisticTest { + + private Statistic statistic; + + @BeforeEach + void setUp() { + statistic = new Statistic("testuser", 0, 0, 0); + } + + @Test + @DisplayName("Создание статистики с нулевыми значениями") + void testStatisticCreationWithZeros() { + assertThat(statistic.getUsername()).isEqualTo("testuser"); + assertThat(statistic.getAttempts()).isEqualTo(0); + assertThat(statistic.getWins()).isEqualTo(0); + assertThat(statistic.getLosses()).isEqualTo(0); + } + + @Test + @DisplayName("Создание статистики с начальными значениями") + void testStatisticCreationWithValues() { + Statistic stat = new Statistic("player1", 10, 5, 5); + + assertThat(stat.getUsername()).isEqualTo("player1"); + assertThat(stat.getAttempts()).isEqualTo(10); + assertThat(stat.getWins()).isEqualTo(5); + assertThat(stat.getLosses()).isEqualTo(5); + } + + @Test + @DisplayName("Увеличение количества попыток") + void testIncrementAttempts() { + statistic.incrementAttempts(); + assertThat(statistic.getAttempts()).isEqualTo(1); + + statistic.incrementAttempts(); + statistic.incrementAttempts(); + assertThat(statistic.getAttempts()).isEqualTo(3); + } + + @Test + @DisplayName("Увеличение количества побед") + void testIncrementWins() { + statistic.incrementWins(); + assertThat(statistic.getWins()).isEqualTo(1); + + statistic.incrementWins(); + statistic.incrementWins(); + assertThat(statistic.getWins()).isEqualTo(3); + } + + @Test + @DisplayName("Увеличение количества поражений") + void testIncrementLosses() { + statistic.incrementLosses(); + assertThat(statistic.getLosses()).isEqualTo(1); + + statistic.incrementLosses(); + statistic.incrementLosses(); + assertThat(statistic.getLosses()).isEqualTo(3); + } + + @Test + @DisplayName("Геттеры возвращают корректные значения") + void testGetters() { + Statistic stat = new Statistic("user2", 15, 8, 7); + + assertThat(stat.getUsername()).isEqualTo("user2"); + assertThat(stat.getAttempts()).isEqualTo(15); + assertThat(stat.getWins()).isEqualTo(8); + assertThat(stat.getLosses()).isEqualTo(7); + } +} diff --git a/src/test/java/com/javarush/matsarskaya/entity/TrustLevelTest.java b/src/test/java/com/javarush/matsarskaya/entity/TrustLevelTest.java new file mode 100644 index 0000000..643b577 --- /dev/null +++ b/src/test/java/com/javarush/matsarskaya/entity/TrustLevelTest.java @@ -0,0 +1,77 @@ +package com.javarush.matsarskaya.entity; + +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.CsvSource; +import org.junit.jupiter.params.provider.ValueSource; +import static org.assertj.core.api.Assertions.assertThat; + +@DisplayName("Тесты для enum TrustLevel") +class TrustLevelTest { + + @Test + @DisplayName("Получение уровня доверия по значению") + void testFromValue() { + assertThat(TrustLevel.fromValue(0)).isEqualTo(TrustLevel.CRITICAL); + assertThat(TrustLevel.fromValue(25)).isEqualTo(TrustLevel.CRITICAL); + assertThat(TrustLevel.fromValue(49)).isEqualTo(TrustLevel.CRITICAL); + + assertThat(TrustLevel.fromValue(50)).isEqualTo(TrustLevel.LOW); + assertThat(TrustLevel.fromValue(60)).isEqualTo(TrustLevel.LOW); + assertThat(TrustLevel.fromValue(69)).isEqualTo(TrustLevel.LOW); + + assertThat(TrustLevel.fromValue(70)).isEqualTo(TrustLevel.HIGH); + assertThat(TrustLevel.fromValue(85)).isEqualTo(TrustLevel.HIGH); + assertThat(TrustLevel.fromValue(100)).isEqualTo(TrustLevel.HIGH); + } + + @ParameterizedTest + @CsvSource({ + "CRITICAL, 3, false", + "CRITICAL, 4, false", + "CRITICAL, 5, false", + "CRITICAL, 6, false", + "LOW, 3, true", + "LOW, 4, true", + "LOW, 5, true", + "LOW, 6, true", + "HIGH, 3, true", + "HIGH, 4, true", + "HIGH, 5, true", + "HIGH, 6, true" + }) + @DisplayName("Проверка достаточности уровня доверия для этапов 3-6") + void testIsSufficientForStageForStages3To6(TrustLevel level, int stageNumber, boolean expected) { + assertThat(level.isSufficientForStage(stageNumber)).isEqualTo(expected); + } + + @ParameterizedTest + @CsvSource({ + "CRITICAL, 7, false", + "CRITICAL, 8, false", + "CRITICAL, 9, false", + "CRITICAL, 10, false", + "LOW, 7, false", + "LOW, 8, false", + "LOW, 9, false", + "LOW, 10, false", + "HIGH, 7, true", + "HIGH, 8, true", + "HIGH, 9, true", + "HIGH, 10, true" + }) + @DisplayName("Проверка достаточности уровня доверия для этапов 7-10") + void testIsSufficientForStageForStages7To10(TrustLevel level, int stageNumber, boolean expected) { + assertThat(level.isSufficientForStage(stageNumber)).isEqualTo(expected); + } + + @ParameterizedTest + @ValueSource(ints = {0, 1, 2, 11}) + @DisplayName("Проверка достаточности уровня доверия для этапов 0, 1, 2 и 11") + void testIsSufficientForStageForNonCriticalStages(int stageNumber) { + assertThat(TrustLevel.CRITICAL.isSufficientForStage(stageNumber)).isTrue(); + assertThat(TrustLevel.LOW.isSufficientForStage(stageNumber)).isTrue(); + assertThat(TrustLevel.HIGH.isSufficientForStage(stageNumber)).isTrue(); + } +} diff --git a/src/test/java/com/javarush/matsarskaya/entity/UserTest.java b/src/test/java/com/javarush/matsarskaya/entity/UserTest.java new file mode 100644 index 0000000..60bc366 --- /dev/null +++ b/src/test/java/com/javarush/matsarskaya/entity/UserTest.java @@ -0,0 +1,45 @@ +package com.javarush.matsarskaya.entity; + +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.DisplayName; +import static org.assertj.core.api.Assertions.assertThat; + +@DisplayName("Тесты для сущности User") +class UserTest { + + @Test + @DisplayName("Создание пользователя с корректными данными") + void testUserCreation() { + User user = new User("testuser", "password123"); + + assertThat(user.getUsername()).isEqualTo("testuser"); + assertThat(user.getPassword()).isEqualTo("password123"); + } + + @Test + @DisplayName("Создание пользователя с пустым именем") + void testUserWithEmptyUsername() { + User user = new User("", "password123"); + + assertThat(user.getUsername()).isEmpty(); + assertThat(user.getPassword()).isEqualTo("password123"); + } + + @Test + @DisplayName("Создание пользователя с пустым паролем") + void testUserWithEmptyPassword() { + User user = new User("testuser", ""); + + assertThat(user.getUsername()).isEqualTo("testuser"); + assertThat(user.getPassword()).isEmpty(); + } + + @Test + @DisplayName("Геттеры возвращают корректные значения") + void testGetters() { + User user = new User("admin", "admin123"); + + assertThat(user.getUsername()).isEqualTo("admin"); + assertThat(user.getPassword()).isEqualTo("admin123"); + } +} diff --git a/src/test/java/com/javarush/matsarskaya/exception/InvalidCredentialsExceptionTest.java b/src/test/java/com/javarush/matsarskaya/exception/InvalidCredentialsExceptionTest.java new file mode 100644 index 0000000..1b6055f --- /dev/null +++ b/src/test/java/com/javarush/matsarskaya/exception/InvalidCredentialsExceptionTest.java @@ -0,0 +1,26 @@ +package com.javarush.matsarskaya.exception; + +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.DisplayName; +import static org.assertj.core.api.Assertions.assertThat; + +@DisplayName("Тесты для InvalidCredentialsException") +class InvalidCredentialsExceptionTest { + + @Test + @DisplayName("Создание исключения без сообщения") + void testExceptionWithoutMessage() { + InvalidCredentialsException exception = new InvalidCredentialsException(); + + assertThat(exception.getMessage()).contains("Неверное имя пользователя или пароль"); + } + + @Test + @DisplayName("Создание исключения с сообщением") + void testExceptionWithMessage() { + String customMessage = "Custom error message"; + InvalidCredentialsException exception = new InvalidCredentialsException(customMessage); + + assertThat(exception.getMessage()).isEqualTo(customMessage); + } +} diff --git a/src/test/java/com/javarush/matsarskaya/exception/UserAlreadyExistsExceptionTest.java b/src/test/java/com/javarush/matsarskaya/exception/UserAlreadyExistsExceptionTest.java new file mode 100644 index 0000000..f35a926 --- /dev/null +++ b/src/test/java/com/javarush/matsarskaya/exception/UserAlreadyExistsExceptionTest.java @@ -0,0 +1,28 @@ +package com.javarush.matsarskaya.exception; + +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.DisplayName; +import static org.assertj.core.api.Assertions.assertThat; + +@DisplayName("Тесты для UserAlreadyExistsException") +class UserAlreadyExistsExceptionTest { + + @Test + @DisplayName("Создание исключения с именем пользователя") + void testExceptionWithUsername() { + UserAlreadyExistsException exception = new UserAlreadyExistsException("testuser"); + + assertThat(exception.getMessage()).contains("testuser"); + assertThat(exception.getMessage()).contains("уже существует"); + } + + @Test + @DisplayName("Создание исключения с именем пользователя и причиной") + void testExceptionWithUsernameAndCause() { + Throwable cause = new RuntimeException("Database error"); + UserAlreadyExistsException exception = new UserAlreadyExistsException("testuser", cause); + + assertThat(exception.getMessage()).contains("testuser"); + assertThat(exception.getCause()).isEqualTo(cause); + } +} diff --git a/src/test/java/com/javarush/matsarskaya/exception/UserNotFoundExceptionTest.java b/src/test/java/com/javarush/matsarskaya/exception/UserNotFoundExceptionTest.java new file mode 100644 index 0000000..c70edea --- /dev/null +++ b/src/test/java/com/javarush/matsarskaya/exception/UserNotFoundExceptionTest.java @@ -0,0 +1,28 @@ +package com.javarush.matsarskaya.exception; + +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.DisplayName; +import static org.assertj.core.api.Assertions.assertThat; + +@DisplayName("Тесты для UserNotFoundException") +class UserNotFoundExceptionTest { + + @Test + @DisplayName("Создание исключения с именем пользователя") + void testExceptionWithUsername() { + UserNotFoundException exception = new UserNotFoundException("testuser"); + + assertThat(exception.getMessage()).contains("testuser"); + assertThat(exception.getMessage()).contains("не найден"); + } + + @Test + @DisplayName("Создание исключения с именем пользователя и причиной") + void testExceptionWithUsernameAndCause() { + Throwable cause = new RuntimeException("Database error"); + UserNotFoundException exception = new UserNotFoundException("testuser", cause); + + assertThat(exception.getMessage()).contains("testuser"); + assertThat(exception.getCause()).isEqualTo(cause); + } +} diff --git a/src/test/java/com/javarush/matsarskaya/repository/FileStatisticRepositoryTest.java b/src/test/java/com/javarush/matsarskaya/repository/FileStatisticRepositoryTest.java new file mode 100644 index 0000000..3343cc0 --- /dev/null +++ b/src/test/java/com/javarush/matsarskaya/repository/FileStatisticRepositoryTest.java @@ -0,0 +1,104 @@ +package com.javarush.matsarskaya.repository; + +import com.javarush.matsarskaya.entity.Statistic; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.io.TempDir; + +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.Optional; + +import static org.assertj.core.api.Assertions.assertThat; + +@DisplayName("Тесты для FileStatisticRepository") +class FileStatisticRepositoryTest { + + @TempDir + Path tempDir; + + private FileStatisticRepository repository; + private String testFilePath; + + @Test + @DisplayName("Сохранение и загрузка статистики") + void testSaveAndLoadStatistic() throws IOException { + testFilePath = tempDir.resolve("test_statistics.txt").toString(); + System.setProperty("statistics.file.path", testFilePath); + + repository = new FileStatisticRepository(); + + Statistic stat = new Statistic("testuser", 10, 5, 5); + repository.save(stat); + + Optional loaded = repository.findByUsername("testuser"); + + assertThat(loaded).isPresent(); + assertThat(loaded.get().getUsername()).isEqualTo("testuser"); + assertThat(loaded.get().getAttempts()).isEqualTo(10); + assertThat(loaded.get().getWins()).isEqualTo(5); + assertThat(loaded.get().getLosses()).isEqualTo(5); + } + + @Test + @DisplayName("Поиск несуществующей статистики") + void testFindNonExistingStatistic() throws IOException { + testFilePath = tempDir.resolve("test_statistics.txt").toString(); + System.setProperty("statistics.file.path", testFilePath); + + repository = new FileStatisticRepository(); + + Optional result = repository.findByUsername("nonexistent"); + + assertThat(result).isEmpty(); + } + + @Test + @DisplayName("Обновление существующей статистики") + void testUpdateExistingStatistic() throws IOException { + testFilePath = tempDir.resolve("test_statistics.txt").toString(); + System.setProperty("statistics.file.path", testFilePath); + + repository = new FileStatisticRepository(); + + Statistic stat1 = new Statistic("testuser", 5, 2, 3); + repository.save(stat1); + + Statistic stat2 = new Statistic("testuser", 10, 6, 4); + repository.save(stat2); + + Optional loaded = repository.findByUsername("testuser"); + + assertThat(loaded).isPresent(); + assertThat(loaded.get().getAttempts()).isEqualTo(10); + assertThat(loaded.get().getWins()).isEqualTo(6); + assertThat(loaded.get().getLosses()).isEqualTo(4); + } + + @Test + @DisplayName("Сохранение статистики нескольких пользователей") + void testSaveMultipleStatistics() throws IOException { + testFilePath = tempDir.resolve("test_statistics.txt").toString(); + System.setProperty("statistics.file.path", testFilePath); + + repository = new FileStatisticRepository(); + + repository.save(new Statistic("user1", 10, 5, 5)); + repository.save(new Statistic("user2", 15, 8, 7)); + repository.save(new Statistic("user3", 20, 12, 8)); + + Optional stat1 = repository.findByUsername("user1"); + Optional stat2 = repository.findByUsername("user2"); + Optional stat3 = repository.findByUsername("user3"); + + assertThat(stat1).isPresent(); + assertThat(stat2).isPresent(); + assertThat(stat3).isPresent(); + + assertThat(stat1.get().getAttempts()).isEqualTo(10); + assertThat(stat2.get().getAttempts()).isEqualTo(15); + assertThat(stat3.get().getAttempts()).isEqualTo(20); + } +} diff --git a/src/test/java/com/javarush/matsarskaya/repository/FileUserRepositoryTest.java b/src/test/java/com/javarush/matsarskaya/repository/FileUserRepositoryTest.java new file mode 100644 index 0000000..f2b97d9 --- /dev/null +++ b/src/test/java/com/javarush/matsarskaya/repository/FileUserRepositoryTest.java @@ -0,0 +1,106 @@ +package com.javarush.matsarskaya.repository; + +import com.javarush.matsarskaya.entity.User; +import com.javarush.matsarskaya.entity.UserFileStorage; +import com.javarush.matsarskaya.exception.UserAlreadyExistsException; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; + +import java.util.Optional; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.Mockito.*; + +@ExtendWith(MockitoExtension.class) +@DisplayName("Тесты для FileUserRepository") +class FileUserRepositoryTest { + @Mock + private UserFileStorage storage; + + private FileUserRepository repository; + + @BeforeEach + void setUp() { + repository = new FileUserRepository(storage); + } + + @Test + @DisplayName("Успешное сохранение нового пользователя") + void testSaveNewUser() { + when(storage.userExists("newuser")).thenReturn(false); + + User user = new User("newuser", "password123"); + boolean result = repository.save(user); + + assertThat(result).isTrue(); + verify(storage).userExists("newuser"); + verify(storage).saveUser("newuser", "password123"); + } + + @Test + @DisplayName("Сохранение существующего пользователя выбрасывает исключение") + void testSaveExistingUser() { + when(storage.userExists("existinguser")).thenReturn(true); + + User user = new User("existinguser", "password123"); + + assertThatThrownBy(() -> repository.save(user)) + .isInstanceOf(UserAlreadyExistsException.class) + .hasMessageContaining("existinguser"); + + verify(storage).userExists("existinguser"); + verify(storage, never()).saveUser(anyString(), anyString()); + } + + @Test + @DisplayName("Поиск существующего пользователя по имени") + void testFindByUsernameExistingUser() { + when(storage.getPasswordByUsername("testuser")).thenReturn(Optional.of("password123")); + + Optional result = repository.findByUsername("testuser"); + + assertThat(result).isPresent(); + assertThat(result.get().getUsername()).isEqualTo("testuser"); + assertThat(result.get().getPassword()).isEqualTo("password123"); + verify(storage).getPasswordByUsername("testuser"); + } + + @Test + @DisplayName("Поиск несуществующего пользователя по имени") + void testFindByUsernameNonExistingUser() { + when(storage.getPasswordByUsername("nonexistent")).thenReturn(Optional.empty()); + + Optional result = repository.findByUsername("nonexistent"); + + assertThat(result).isEmpty(); + verify(storage).getPasswordByUsername("nonexistent"); + } + + @Test + @DisplayName("Проверка существования пользователя - пользователь существует") + void testExistsByUsernameTrue() { + when(storage.userExists("existinguser")).thenReturn(true); + + boolean result = repository.existsByUsername("existinguser"); + + assertThat(result).isTrue(); + verify(storage).userExists("existinguser"); + } + + @Test + @DisplayName("Проверка существования пользователя - пользователь не существует") + void testExistsByUsernameFalse() { + when(storage.userExists("nonexistent")).thenReturn(false); + + boolean result = repository.existsByUsername("nonexistent"); + + assertThat(result).isFalse(); + verify(storage).userExists("nonexistent"); + } +} diff --git a/src/test/java/com/javarush/matsarskaya/service/UserServiceTest.java b/src/test/java/com/javarush/matsarskaya/service/UserServiceTest.java new file mode 100644 index 0000000..acf371b --- /dev/null +++ b/src/test/java/com/javarush/matsarskaya/service/UserServiceTest.java @@ -0,0 +1,152 @@ +package com.javarush.matsarskaya.service; + +import com.javarush.matsarskaya.entity.User; +import com.javarush.matsarskaya.exception.InvalidCredentialsException; +import com.javarush.matsarskaya.exception.UserAlreadyExistsException; +import com.javarush.matsarskaya.exception.UserNotFoundException; +import com.javarush.matsarskaya.repository.UserRepository; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpSession; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; + +import java.util.Optional; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.*; + +@ExtendWith(MockitoExtension.class) +@DisplayName("Тесты для UserService") +class UserServiceTest { + @Mock + private UserRepository userRepository; + + @Mock + private HttpServletRequest request; + + @Mock + private HttpSession session; + + private UserService userService; + + @BeforeEach + void setUp() { + userService = new UserService(userRepository); + } + + @Test + @DisplayName("Успешная регистрация нового пользователя") + void testRegisterUserSuccess() { + when(userRepository.existsByUsername("newuser")).thenReturn(false); + when(userRepository.save(any(User.class))).thenReturn(true); + + userService.registerUser("newuser", "password123"); + + verify(userRepository).existsByUsername("newuser"); + verify(userRepository).save(any(User.class)); + } + + @Test + @DisplayName("Регистрация существующего пользователя выбрасывает исключение") + void testRegisterUserAlreadyExists() { + when(userRepository.existsByUsername("existinguser")).thenReturn(true); + + assertThatThrownBy(() -> userService.registerUser("existinguser", "password123")) + .isInstanceOf(UserAlreadyExistsException.class) + .hasMessageContaining("existinguser"); + + verify(userRepository).existsByUsername("existinguser"); + verify(userRepository, never()).save(any(User.class)); + } + + @Test + @DisplayName("Успешный вход пользователя") + void testLoginUserSuccess() { + User user = new User("testuser", "password123"); + when(userRepository.findByUsername("testuser")).thenReturn(Optional.of(user)); + + Optional result = userService.loginUser("testuser", "password123"); + + assertThat(result).isPresent(); + assertThat(result.get().getUsername()).isEqualTo("testuser"); + verify(userRepository).findByUsername("testuser"); + } + + @Test + @DisplayName("Вход с несуществующим пользователем выбрасывает исключение") + void testLoginUserNotFound() { + when(userRepository.findByUsername("nonexistent")).thenReturn(Optional.empty()); + + assertThatThrownBy(() -> userService.loginUser("nonexistent", "password123")) + .isInstanceOf(UserNotFoundException.class) + .hasMessageContaining("nonexistent"); + + verify(userRepository).findByUsername("nonexistent"); + } + + @Test + @DisplayName("Вход с неверным паролем выбрасывает исключение") + void testLoginUserInvalidPassword() { + User user = new User("testuser", "correctpassword"); + when(userRepository.findByUsername("testuser")).thenReturn(Optional.of(user)); + + assertThatThrownBy(() -> userService.loginUser("testuser", "wrongpassword")) + .isInstanceOf(InvalidCredentialsException.class); + + verify(userRepository).findByUsername("testuser"); + } + + @Test + @DisplayName("Проверка авторизации без сессии") + void testIsAuthenticatedWithoutSession() { + when(request.getSession(false)).thenReturn(null); + + boolean result = UserService.isAuthenticated(request); + + assertThat(result).isFalse(); + verify(request).getSession(false); + } + + @Test + @DisplayName("Проверка авторизации с сессией без username") + void testIsAuthenticatedWithSessionWithoutUsername() { + when(request.getSession(false)).thenReturn(session); + when(session.getAttribute("username")).thenReturn(null); + + boolean result = UserService.isAuthenticated(request); + + assertThat(result).isFalse(); + verify(request).getSession(false); + verify(session).getAttribute("username"); + } + + @Test + @DisplayName("Успешный выход из системы") + void testLogoutSuccess() { + when(request.getSession(false)).thenReturn(session); + when(session.getAttribute("username")).thenReturn("testuser"); + + userService.logout(request); + + verify(request).getSession(false); + verify(session).getAttribute("username"); + verify(session).invalidate(); + } + + @Test + @DisplayName("Выход из системы без активной сессии") + void testLogoutWithoutSession() { + when(request.getSession(false)).thenReturn(null); + + userService.logout(request); + + verify(request).getSession(false); + verify(session, never()).invalidate(); + } +} From 305e57a90d0468ed42cd99528d0253f43566d877 Mon Sep 17 00:00:00 2001 From: KitaYaro-V Date: Thu, 29 Jan 2026 17:04:35 +0300 Subject: [PATCH 11/14] ADD test --- .../controller/HttpResolverTest.java | 87 +++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 src/test/java/com/javarush/matsarskaya/controller/HttpResolverTest.java diff --git a/src/test/java/com/javarush/matsarskaya/controller/HttpResolverTest.java b/src/test/java/com/javarush/matsarskaya/controller/HttpResolverTest.java new file mode 100644 index 0000000..d19f76c --- /dev/null +++ b/src/test/java/com/javarush/matsarskaya/controller/HttpResolverTest.java @@ -0,0 +1,87 @@ +package com.javarush.matsarskaya.controller; + +import com.javarush.matsarskaya.cmd.Command; +import com.javarush.matsarskaya.cmd.HomePage; +import com.javarush.matsarskaya.cmd.LoginPage; +import com.javarush.matsarskaya.cmd.QuestDragon; +import com.javarush.matsarskaya.cmd.RegisterPage; +import com.javarush.matsarskaya.cmd.StatisticPage; +import com.javarush.matsarskaya.cmd.LogoutPage; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.BeforeEach; + +import static org.assertj.core.api.Assertions.assertThat; + +@DisplayName("Тесты для HttpResolver") +class HttpResolverTest { + private HttpResolver httpResolver; + + @BeforeEach + void setUp() { + httpResolver = new HttpResolver(); + } + + @Test + @DisplayName("Разрешение команды для домашней страницы") + void testResolveHomePage() { + Command command = httpResolver.resolve("/home-page"); + + assertThat(command).isNotNull(); + assertThat(command).isInstanceOf(HomePage.class); + } + + @Test + @DisplayName("Разрешение команды для страницы квеста") + void testResolveQuestDragon() { + Command command = httpResolver.resolve("/quest-dragon"); + + assertThat(command).isNotNull(); + assertThat(command).isInstanceOf(QuestDragon.class); + } + + @Test + @DisplayName("Разрешение команды для страницы входа") + void testResolveLoginPage() { + Command command = httpResolver.resolve("/login-page"); + + assertThat(command).isNotNull(); + assertThat(command).isInstanceOf(LoginPage.class); + } + + @Test + @DisplayName("Разрешение команды для страницы регистрации") + void testResolveRegisterPage() { + Command command = httpResolver.resolve("/register-page"); + + assertThat(command).isNotNull(); + assertThat(command).isInstanceOf(RegisterPage.class); + } + + @Test + @DisplayName("Разрешение команды для выхода") + void testResolveLogout() { + Command command = httpResolver.resolve("/logout"); + + assertThat(command).isNotNull(); + assertThat(command).isInstanceOf(LogoutPage.class); + } + + @Test + @DisplayName("Разрешение команды для страницы статистики") + void testResolveStatisticPage() { + Command command = httpResolver.resolve("/statistic-page"); + + assertThat(command).isNotNull(); + assertThat(command).isInstanceOf(StatisticPage.class); + } + + @Test + @DisplayName("Разрешение неизвестного пути возвращает домашнюю страницу") + void testResolveUnknownPath() { + Command command = httpResolver.resolve("/unknown-path"); + + assertThat(command).isNotNull(); + assertThat(command).isInstanceOf(HomePage.class); + } +} From d938025f678316632deaf5101399466d9f0161c1 Mon Sep 17 00:00:00 2001 From: KitaYaro-V Date: Fri, 30 Jan 2026 17:18:47 +0300 Subject: [PATCH 12/14] READY project --- .../javarush/matsarskaya/cmd/LoginPage.java | 18 +- .../javarush/matsarskaya/cmd/LogoutPage.java | 4 - .../javarush/matsarskaya/cmd/QuestDragon.java | 13 +- .../matsarskaya/cmd/RegisterPage.java | 3 +- .../matsarskaya/config/FileStorageConfig.java | 11 - .../controller/FrontController.java | 15 +- .../matsarskaya/controller/HttpResolver.java | 7 - .../matsarskaya/entity/QuestStage.java | 1 - .../matsarskaya/entity/TrustLevel.java | 4 - .../matsarskaya/entity/UserFileStorage.java | 23 +- .../InvalidCredentialsException.java | 2 +- .../exception/UserAlreadyExistsException.java | 4 +- .../exception/UserNotFoundException.java | 4 +- .../repository/FileStatisticRepository.java | 4 +- .../repository/FileUserRepository.java | 16 +- .../matsarskaya/service/StatisticService.java | 34 +- .../matsarskaya/service/UserService.java | 22 +- src/main/webapp/WEB-INF/home-page.jsp | 2 + src/main/webapp/WEB-INF/login-page.jsp | 1 + src/main/webapp/WEB-INF/quest-dragon.jsp | 11 +- src/main/webapp/WEB-INF/register-page.jsp | 1 + src/main/webapp/WEB-INF/statistic-page.jsp | 5 +- src/main/webapp/css/styles.css | 344 ++++++++++++++++++ .../matsarskaya/cmd/HomePageTest.java | 6 +- .../matsarskaya/cmd/LoginPageTest.java | 14 +- .../matsarskaya/cmd/LogoutPageTest.java | 8 +- .../matsarskaya/cmd/QuestDragonTest.java | 23 +- .../matsarskaya/cmd/RegisterPageTest.java | 12 +- .../config/FileStorageConfigTest.java | 10 +- .../controller/FrontControllerTest.java | 10 +- .../controller/HttpResolverTest.java | 16 +- .../matsarskaya/entity/QuestStageTest.java | 16 +- .../matsarskaya/entity/StatisticTest.java | 14 +- .../matsarskaya/entity/TrustLevelTest.java | 10 +- .../javarush/matsarskaya/entity/UserTest.java | 10 +- .../InvalidCredentialsExceptionTest.java | 8 +- .../UserAlreadyExistsExceptionTest.java | 12 +- .../exception/UserNotFoundExceptionTest.java | 12 +- .../FileStatisticRepositoryTest.java | 12 +- .../repository/FileUserRepositoryTest.java | 18 +- .../matsarskaya/service/UserServiceTest.java | 24 +- 41 files changed, 526 insertions(+), 258 deletions(-) create mode 100644 src/main/webapp/css/styles.css diff --git a/src/main/java/com/javarush/matsarskaya/cmd/LoginPage.java b/src/main/java/com/javarush/matsarskaya/cmd/LoginPage.java index e945daa..61ca7ff 100644 --- a/src/main/java/com/javarush/matsarskaya/cmd/LoginPage.java +++ b/src/main/java/com/javarush/matsarskaya/cmd/LoginPage.java @@ -18,7 +18,7 @@ public LoginPage(UserService userService) { @Override public String doGet(HttpServletRequest request) { - logger.debug("Отображение страницы входа"); + logger.debug("Displaying the login page"); return getView(); } @@ -26,23 +26,23 @@ public String doGet(HttpServletRequest request) { public String doPost(HttpServletRequest request) { String username = request.getParameter("username"); String password = request.getParameter("password"); - logger.info("Обработка POST запроса на вход для пользователя: {}", username); + logger.info("Processing the POST login request for the user: {}", username); try { userService.loginUser(username, password); HttpSession session = request.getSession(); - logger.info("Успешный вход пользователя: {}", username); + logger.info("Successful user login: {}", username); session.setAttribute("username", username); return "/home-page"; } catch (UserNotFoundException e) { - logger.warn("Неудачная попытка входа: пользователь {} не найден", username); - request.setAttribute("error", "Пользователь не найден"); + logger.warn("Failed login attempt: user {} not found", username); + request.setAttribute("error", "User not found"); } catch (InvalidCredentialsException e) { - logger.warn("Неудачная попытка входа: неверный пароль для пользователя {}", username); - request.setAttribute("error", "Неверное имя пользователя или пароль"); + logger.warn("Failed login attempt: invalid password for user {}", username); + request.setAttribute("error", "Invalid username or password"); } catch (Exception e) { - logger.error("Неожиданная ошибка при входе пользователя {}: {}", username, e.getMessage(), e); - request.setAttribute("error", "Произошла ошибка при входе"); + logger.error("Unexpected error when user logs in {}: {}", username, e.getMessage(), e); + request.setAttribute("error", "Error occurred when logging in"); } return getView(); } diff --git a/src/main/java/com/javarush/matsarskaya/cmd/LogoutPage.java b/src/main/java/com/javarush/matsarskaya/cmd/LogoutPage.java index e4f6293..da09368 100644 --- a/src/main/java/com/javarush/matsarskaya/cmd/LogoutPage.java +++ b/src/main/java/com/javarush/matsarskaya/cmd/LogoutPage.java @@ -1,15 +1,11 @@ package com.javarush.matsarskaya.cmd; -import com.javarush.matsarskaya.entity.UserFileStorage; -import com.javarush.matsarskaya.repository.FileUserRepository; -import com.javarush.matsarskaya.repository.UserRepository; import com.javarush.matsarskaya.service.UserService; import jakarta.servlet.http.HttpServletRequest; public class LogoutPage implements Command{ private final UserService userService; - // Конструктор, принимающий UserService public LogoutPage(UserService userService) { this.userService = userService; } diff --git a/src/main/java/com/javarush/matsarskaya/cmd/QuestDragon.java b/src/main/java/com/javarush/matsarskaya/cmd/QuestDragon.java index 0f5d356..57736f3 100644 --- a/src/main/java/com/javarush/matsarskaya/cmd/QuestDragon.java +++ b/src/main/java/com/javarush/matsarskaya/cmd/QuestDragon.java @@ -31,7 +31,6 @@ public String doPost(HttpServletRequest request) { var session = request.getSession(); - // Обработка перехода с главной страницы на квест if (quest != null && quest.equals("the way of the dragon rider")) { session.setAttribute("stage", 0); session.setAttribute("trust", 50); @@ -49,15 +48,14 @@ public String doPost(HttpServletRequest request) { session.setAttribute("stage", 2); } else if (stageParam != null && choice != null) { - // Обработка других этапов + int currentStage = Integer.parseInt(stageParam); String username = (String) session.getAttribute("username"); Boolean finished = Optional.ofNullable((Boolean) session.getAttribute("questFinished")) .orElse(false); - // Обновляем доверие в зависимости от выбора - if (currentStage >= 2 && currentStage <= 9) { + if (currentStage >= 2 && currentStage <= 10) { Integer trust = Optional.ofNullable((Integer) session.getAttribute("trust")) .orElse(50); @@ -67,23 +65,20 @@ public String doPost(HttpServletRequest request) { session.setAttribute("trust", trust); - // Проверяем условия поражения boolean isLossCondition = false; - if (currentStage >= 3 && currentStage <= 6 && trust < 50) { + if (currentStage >= 4 && currentStage <= 7 && trust < 50) { isLossCondition = true; - } else if (currentStage >= 7 && currentStage <= 10 && trust < 70) { + } else if (currentStage >= 8 && currentStage <= 11 && trust < 70) { isLossCondition = true; } if (!finished && isLossCondition) { Optional.ofNullable(username).ifPresent(statisticService::registerLoss); session.setAttribute("questFinished", true); - session.setAttribute("stage", 11); return getView(); } } - // Переходим к следующему этапу int nextStage = currentStage + 1; session.setAttribute("stage", nextStage); diff --git a/src/main/java/com/javarush/matsarskaya/cmd/RegisterPage.java b/src/main/java/com/javarush/matsarskaya/cmd/RegisterPage.java index 47ae25a..49dc192 100644 --- a/src/main/java/com/javarush/matsarskaya/cmd/RegisterPage.java +++ b/src/main/java/com/javarush/matsarskaya/cmd/RegisterPage.java @@ -24,12 +24,11 @@ public String doPost(HttpServletRequest request) { try { userService.registerUser(username, password); - // Автоматический вход после регистрации HttpSession session = request.getSession(); session.setAttribute("username", username); return "/home-page"; } catch (UserAlreadyExistsException e) { - request.setAttribute("error", "Пользователь уже существует"); + request.setAttribute("error", "The user already exists"); } return getView(); diff --git a/src/main/java/com/javarush/matsarskaya/config/FileStorageConfig.java b/src/main/java/com/javarush/matsarskaya/config/FileStorageConfig.java index b0d981e..85d6e1e 100644 --- a/src/main/java/com/javarush/matsarskaya/config/FileStorageConfig.java +++ b/src/main/java/com/javarush/matsarskaya/config/FileStorageConfig.java @@ -5,21 +5,10 @@ public class FileStorageConfig { private static final String STATISTICS_FILE_PATH = "statistics.txt"; private FileStorageConfig() { - // Приватный конструктор для предотвращения создания экземпляров } - - /** - * Возвращает путь к файлу пользователей. - * @return путь к файлу users.txt - */ public static String getUsersFilePath() { return USERS_FILE_PATH; } - - /** - * Возвращает путь к файлу статистики. - * @return путь к файлу statistics.txt - */ public static String getStatisticsFilePath() { return STATISTICS_FILE_PATH; } diff --git a/src/main/java/com/javarush/matsarskaya/controller/FrontController.java b/src/main/java/com/javarush/matsarskaya/controller/FrontController.java index fba2582..f7982bd 100644 --- a/src/main/java/com/javarush/matsarskaya/controller/FrontController.java +++ b/src/main/java/com/javarush/matsarskaya/controller/FrontController.java @@ -40,11 +40,10 @@ private void processRequest(HttpServletRequest req, HttpServletResponse resp) String pathInfo = req.getServletPath(); String method = req.getMethod(); - logger.info("Получен {} запрос на путь: {}", method, pathInfo); + logger.info("Received {} request for path: {}", method, pathInfo); - // Проверяем авторизацию для защищённых страниц if (isProtectedPath(pathInfo) && !UserService.isAuthenticated(req)) { - logger.warn("Попытка доступа к защищённой странице без авторизации: {}", pathInfo); + logger.warn("An attempt to access a secure page without authorization: {}", pathInfo); resp.sendRedirect(req.getContextPath() + "/home-page"); return; } @@ -52,19 +51,13 @@ private void processRequest(HttpServletRequest req, HttpServletResponse resp) try { Command command = httpResolver.resolve(pathInfo); String viewPath = "GET".equals(req.getMethod()) ? command.doGet(req) : command.doPost(req); - logger.debug("Запрос обработан успешно, перенаправление на: {}", viewPath); + logger.debug("Request processed successfully, redirection to: {}", viewPath); req.getRequestDispatcher(viewPath).forward(req, resp); } catch (Exception e) { - logger.error("Ошибка при обработке запроса {}: {}", pathInfo, e.getMessage(), e); + logger.error("Request processing error {}: {}", pathInfo, e.getMessage(), e); throw e; } } - - /** - * Проверяет, является ли путь защищённым (требует авторизации). - * @param pathInfo путь запроса - * @return true если путь защищённый - */ private boolean isProtectedPath(String pathInfo) { return "/quest-dragon".equals(pathInfo) || "/statistic-page".equals(pathInfo); } diff --git a/src/main/java/com/javarush/matsarskaya/controller/HttpResolver.java b/src/main/java/com/javarush/matsarskaya/controller/HttpResolver.java index 59e09f2..86a0047 100644 --- a/src/main/java/com/javarush/matsarskaya/controller/HttpResolver.java +++ b/src/main/java/com/javarush/matsarskaya/controller/HttpResolver.java @@ -15,7 +15,6 @@ public class HttpResolver { private final Map commandMap; public HttpResolver() { - // Инициализация зависимостей через ServiceFactory UserFileStorage storage = new UserFileStorage(); UserRepository userRepository = new FileUserRepository(storage); UserService userService = new UserService(userRepository); @@ -23,7 +22,6 @@ public HttpResolver() { StatisticRepository statisticRepository = new FileStatisticRepository(); StatisticService statisticService = new StatisticService(statisticRepository); - // Создание карты команд this.commandMap = Map.of( "/home-page", new HomePage(), "/quest-dragon", new QuestDragon(statisticService), @@ -34,11 +32,6 @@ public HttpResolver() { ); } - /** - * Возвращает команду по пути запроса. - * @param pathInfo путь запроса - * @return команда для обработки запроса - */ public Command resolve(String pathInfo) { return commandMap.getOrDefault(pathInfo, new HomePage()); } diff --git a/src/main/java/com/javarush/matsarskaya/entity/QuestStage.java b/src/main/java/com/javarush/matsarskaya/entity/QuestStage.java index e79aa88..02ae87b 100644 --- a/src/main/java/com/javarush/matsarskaya/entity/QuestStage.java +++ b/src/main/java/com/javarush/matsarskaya/entity/QuestStage.java @@ -2,7 +2,6 @@ import java.util.Arrays; -//этапы квеста public enum QuestStage { START(0), NAME_INPUT(1), diff --git a/src/main/java/com/javarush/matsarskaya/entity/TrustLevel.java b/src/main/java/com/javarush/matsarskaya/entity/TrustLevel.java index 82a3331..a8b2f5f 100644 --- a/src/main/java/com/javarush/matsarskaya/entity/TrustLevel.java +++ b/src/main/java/com/javarush/matsarskaya/entity/TrustLevel.java @@ -2,7 +2,6 @@ import java.util.Arrays; -//уровни доверия public enum TrustLevel { CRITICAL(0, 49), LOW(50, 69), @@ -24,15 +23,12 @@ public static TrustLevel fromValue(int trust) { } public boolean isSufficientForStage(int stageNumber) { - // Для этапов 0, 1, 2 и 11 все уровни достаточны if (stageNumber <= 2 || stageNumber >= 11) { return true; } - // Для этапов 7-10 только HIGH достаточен if (stageNumber >= 7) { return this == HIGH; } - // Для этапов 3-6 LOW и HIGH достаточны return this != CRITICAL; } } diff --git a/src/main/java/com/javarush/matsarskaya/entity/UserFileStorage.java b/src/main/java/com/javarush/matsarskaya/entity/UserFileStorage.java index 6447a1a..370594e 100644 --- a/src/main/java/com/javarush/matsarskaya/entity/UserFileStorage.java +++ b/src/main/java/com/javarush/matsarskaya/entity/UserFileStorage.java @@ -17,41 +17,22 @@ public UserFileStorage() { loadUsersIfNeeded(); } - /** - * Сохраняет пользователя в файл. - * @param username имя пользователя - * @param password пароль - */ public void saveUser(String username, String password) { loadUsersIfNeeded(); users.put(username, password); saveUsersToFile(); } - /** - * Возвращает пароль пользователя по имени. - * @param username имя пользователя - * @return Optional с паролем, если пользователь существует - */ public Optional getPasswordByUsername(String username) { loadUsersIfNeeded(); return Optional.ofNullable(users.get(username)); } - /** - * Проверяет существование пользователя. - * @param username имя пользователя - * @return true если пользователь существует - */ public boolean userExists(String username) { loadUsersIfNeeded(); return users.containsKey(username); } - /** - * Возвращает копию всех пользователей. - * @return Map с пользователями - */ public Map getAllUsers() { loadUsersIfNeeded(); return new HashMap<>(users); @@ -71,7 +52,7 @@ private void saveUsersToFile() { writer.println(entry.getKey() + ":" + entry.getValue()); } } catch (IOException e) { - System.err.println("Ошибка при записи в файл: " + e.getMessage()); + System.err.println("Error when writing to a file: " + e.getMessage()); } } @@ -90,7 +71,7 @@ private void loadUsersFromFile() { } } } catch (IOException e) { - System.err.println("Ошибка при чтении из файла: " + e.getMessage()); + System.err.println("Error when reading from a file: " + e.getMessage()); } } } diff --git a/src/main/java/com/javarush/matsarskaya/exception/InvalidCredentialsException.java b/src/main/java/com/javarush/matsarskaya/exception/InvalidCredentialsException.java index eb0b563..893d6cd 100644 --- a/src/main/java/com/javarush/matsarskaya/exception/InvalidCredentialsException.java +++ b/src/main/java/com/javarush/matsarskaya/exception/InvalidCredentialsException.java @@ -2,7 +2,7 @@ public class InvalidCredentialsException extends RuntimeException { public InvalidCredentialsException() { - super("Неверное имя пользователя или пароль"); + super("Invalid username or password"); } public InvalidCredentialsException(String message) { diff --git a/src/main/java/com/javarush/matsarskaya/exception/UserAlreadyExistsException.java b/src/main/java/com/javarush/matsarskaya/exception/UserAlreadyExistsException.java index 35f2c53..d68819d 100644 --- a/src/main/java/com/javarush/matsarskaya/exception/UserAlreadyExistsException.java +++ b/src/main/java/com/javarush/matsarskaya/exception/UserAlreadyExistsException.java @@ -2,10 +2,10 @@ public class UserAlreadyExistsException extends RuntimeException { public UserAlreadyExistsException(String username) { - super("Пользователь с именем '" + username + "' уже существует"); + super("A user named '\" username + \"' already exists"); } public UserAlreadyExistsException(String username, Throwable cause) { - super("Пользователь с именем '" + username + "' уже существует", cause); + super("A user named '\" username + \"' already exists", cause); } } diff --git a/src/main/java/com/javarush/matsarskaya/exception/UserNotFoundException.java b/src/main/java/com/javarush/matsarskaya/exception/UserNotFoundException.java index 3e30956..ca13d5f 100644 --- a/src/main/java/com/javarush/matsarskaya/exception/UserNotFoundException.java +++ b/src/main/java/com/javarush/matsarskaya/exception/UserNotFoundException.java @@ -2,10 +2,10 @@ public class UserNotFoundException extends RuntimeException { public UserNotFoundException(String username) { - super("Пользователь с именем '" + username + "' не найден"); + super("The user named '\" username + \"' was not found"); } public UserNotFoundException(String username, Throwable cause) { - super("Пользователь с именем '" + username + "' не найден", cause); + super("The user named '\" username + \"' was not found", cause); } } diff --git a/src/main/java/com/javarush/matsarskaya/repository/FileStatisticRepository.java b/src/main/java/com/javarush/matsarskaya/repository/FileStatisticRepository.java index 92cbacf..e458849 100644 --- a/src/main/java/com/javarush/matsarskaya/repository/FileStatisticRepository.java +++ b/src/main/java/com/javarush/matsarskaya/repository/FileStatisticRepository.java @@ -37,7 +37,7 @@ private void loadIfNeeded() { } } } catch (IOException e) { - throw new RuntimeException("Ошибка чтения " + filePath, e); + throw new RuntimeException("Reading error " + filePath, e); } } @@ -63,7 +63,7 @@ public void save(Statistic statistic) { ); } } catch (IOException e) { - throw new RuntimeException("Ошибка записи " + filePath, e); + throw new RuntimeException("Recording error " + filePath, e); } } } diff --git a/src/main/java/com/javarush/matsarskaya/repository/FileUserRepository.java b/src/main/java/com/javarush/matsarskaya/repository/FileUserRepository.java index 8a4e00f..c387bfe 100644 --- a/src/main/java/com/javarush/matsarskaya/repository/FileUserRepository.java +++ b/src/main/java/com/javarush/matsarskaya/repository/FileUserRepository.java @@ -13,36 +13,36 @@ public class FileUserRepository implements UserRepository{ public FileUserRepository(UserFileStorage storage) { this.storage = storage; - logger.info("FileUserRepository инициализирован"); + logger.info("FileUserRepository initialized"); } @Override public boolean save(User user) { - logger.debug("Сохранение пользователя: {}", user.getUsername()); + logger.debug("Saving the user: {}", user.getUsername()); if (storage.userExists(user.getUsername())) { - logger.warn("Пользователь {} уже существует в хранилище", user.getUsername()); + logger.warn("The user {} already exists in the repository", user.getUsername()); throw new UserAlreadyExistsException(user.getUsername()); } storage.saveUser(user.getUsername(), user.getPassword()); - logger.info("Пользователь {} успешно сохранён", user.getUsername()); + logger.info("User {} saved successfully", user.getUsername()); return true; } @Override public Optional findByUsername(String username) { - logger.debug("Поиск пользователя по имени: {}", username); + logger.debug("Search for a user by name: {}", username); Optional password = storage.getPasswordByUsername(username); if (password.isPresent()) { - logger.debug("Пользователь {} найден", username); + logger.debug("User {} found", username); } else { - logger.debug("Пользователь {} не найден", username); + logger.debug("User {} not found", username); } return password.map(pwd -> new User(username, pwd)); } @Override public boolean existsByUsername(String username) { - logger.debug("Проверка существования пользователя: {}", username); + logger.debug("Verifying the user's existence: {}", username); return storage.userExists(username); } } diff --git a/src/main/java/com/javarush/matsarskaya/service/StatisticService.java b/src/main/java/com/javarush/matsarskaya/service/StatisticService.java index a2618aa..de69b0f 100644 --- a/src/main/java/com/javarush/matsarskaya/service/StatisticService.java +++ b/src/main/java/com/javarush/matsarskaya/service/StatisticService.java @@ -12,60 +12,38 @@ public class StatisticService { public StatisticService(StatisticRepository repository) { this.repository = repository; - logger.info("StatisticService инициализирован"); + logger.info("StatisticService initialized"); } - /** - * Получает или создаёт статистику для пользователя. - * @param username имя пользователя - * @return статистика пользователя - */ private Statistic getOrCreate(String username) { - logger.debug("Получение или создание статистики для пользователя: {}", username); + logger.debug("Getting or creating statistics for a user: {}", username); return repository.findByUsername(username) .orElseGet(() -> new Statistic(username, 0, 0, 0)); } - /** - * Регистрирует попытку прохождения квеста. - * @param username имя пользователя - */ public void registerAttempt(String username) { - logger.debug("Регистрация попытки для пользователя: {}", username); + logger.debug("Registering an attempt for a user: {}", username); Statistic statistic = getOrCreate(username); statistic.incrementAttempts(); repository.save(statistic); } - /** - * Регистрирует победу в квесте. - * @param username имя пользователя - */ public void registerWin(String username) { - logger.info("Регистрация победы для пользователя: {}", username); + logger.info("Victory registration for the user: {}", username); Statistic statistic = getOrCreate(username); statistic.incrementWins(); repository.save(statistic); } - /** - * Регистрирует поражение в квесте. - * @param username имя пользователя - */ public void registerLoss(String username) { - logger.info("Регистрация поражения для пользователя: {}", username); + logger.info("Defeat registration for the user: {}", username); Statistic statistic = getOrCreate(username); statistic.incrementLosses(); repository.save(statistic); } - /** - * Возвращает статистику пользователя. - * @param username имя пользователя - * @return Optional со статистикой - */ public Optional getStatistic(String username) { - logger.debug("Получение статистики для пользователя: {}", username); + logger.debug("Getting statistics for the user: {}", username); return repository.findByUsername(username); } } diff --git a/src/main/java/com/javarush/matsarskaya/service/UserService.java b/src/main/java/com/javarush/matsarskaya/service/UserService.java index 4cc655a..640b00b 100644 --- a/src/main/java/com/javarush/matsarskaya/service/UserService.java +++ b/src/main/java/com/javarush/matsarskaya/service/UserService.java @@ -19,36 +19,36 @@ public class UserService { public UserService(UserRepository userRepository) { this.userRepository = userRepository; - logger.info("UserService инициализирован"); + logger.info("UserService is initialized"); } public void registerUser(String username, String password) { - logger.info("Попытка регистрации пользователя: {}", username); + logger.info("User Registration Attempt: {}", username); if (userRepository.existsByUsername(username)) { - logger.warn("Пользователь с именем {} уже существует", username); + logger.warn("The user named {} already exists", username); throw new UserAlreadyExistsException(username); } User newUser = new User(username, password); userRepository.save(newUser); - logger.info("Пользователь {} успешно зарегистрирован", username); + logger.info("User {} successfully registered", username); } public Optional loginUser(String username, String password) { - logger.info("Попытка входа пользователя: {}", username); + logger.info("User Login Attempt: {}", username); Optional user = userRepository.findByUsername(username); if (user.isEmpty()) { - logger.warn("Пользователь {} не найден", username); + logger.warn("User {} not found", username); throw new UserNotFoundException(username); } if (!user.get().getPassword().equals(password)) { - logger.warn("Неверный пароль для пользователя: {}", username); + logger.warn("Invalid password for the user: {}", username); throw new InvalidCredentialsException(); } - logger.info("Пользователь {} успешно вошёл в систему", username); + logger.info("User {} successfully logged in", username); return user; } @@ -58,7 +58,7 @@ public static boolean isAuthenticated(HttpServletRequest request) { if (authenticated) { String username = (String) session.getAttribute("username"); - LoggerFactory.getLogger(UserService.class).debug("Проверка авторизации: пользователь {} авторизован", username); + LoggerFactory.getLogger(UserService.class).debug("Authorization check: user {} is authorized", username); } return authenticated; @@ -69,9 +69,9 @@ public void logout(HttpServletRequest request) { if (session != null) { String username = (String) session.getAttribute("username"); session.invalidate(); - logger.info("Пользователь {} вышел из системы", username); + logger.info("User {} logged out", username); } else { - logger.debug("Попытка выхода без активной сессии"); + logger.debug("Attempt to log out without an active session"); } } } diff --git a/src/main/webapp/WEB-INF/home-page.jsp b/src/main/webapp/WEB-INF/home-page.jsp index bb79159..3488e1e 100644 --- a/src/main/webapp/WEB-INF/home-page.jsp +++ b/src/main/webapp/WEB-INF/home-page.jsp @@ -2,7 +2,9 @@ <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> + Квесты + diff --git a/src/main/webapp/WEB-INF/login-page.jsp b/src/main/webapp/WEB-INF/login-page.jsp index f46a5d0..d35e834 100644 --- a/src/main/webapp/WEB-INF/login-page.jsp +++ b/src/main/webapp/WEB-INF/login-page.jsp @@ -3,6 +3,7 @@ Вход + diff --git a/src/main/webapp/WEB-INF/quest-dragon.jsp b/src/main/webapp/WEB-INF/quest-dragon.jsp index 6e5856d..aa7cbf9 100644 --- a/src/main/webapp/WEB-INF/quest-dragon.jsp +++ b/src/main/webapp/WEB-INF/quest-dragon.jsp @@ -4,12 +4,13 @@ Как приручить дракона + -

    🐉 Как приручить дракона

    +

    Как приручить дракона

    @@ -22,7 +23,7 @@ -

    ❌ Поражение

    +

    ❌ Поражение ❌

    @@ -53,7 +54,7 @@ -

    ❌ Поражение

    +

    ❌ Поражение ❌

    @@ -237,12 +238,12 @@ -

    🏁 Успех

    +

    🏁 Успех 🏁

    Дракон склоняет голову, принимая тебя как своего всадника. Сегодня ты сделал первый шаг на пути, который изменит вашу жизнь.

    -

    ❌ Провал

    +

    ❌ Провал ❌

    Дракон отступает, ясно давая понять — вы пока не готовы быть командой. Возможно, в следующий раз ты сможешь подружиться с драконом, нужна практика.

    diff --git a/src/main/webapp/WEB-INF/register-page.jsp b/src/main/webapp/WEB-INF/register-page.jsp index bf12398..2e9f88c 100644 --- a/src/main/webapp/WEB-INF/register-page.jsp +++ b/src/main/webapp/WEB-INF/register-page.jsp @@ -3,6 +3,7 @@ Регистрация + diff --git a/src/main/webapp/WEB-INF/statistic-page.jsp b/src/main/webapp/WEB-INF/statistic-page.jsp index 97808f0..0a4431a 100644 --- a/src/main/webapp/WEB-INF/statistic-page.jsp +++ b/src/main/webapp/WEB-INF/statistic-page.jsp @@ -2,13 +2,16 @@ + Статистика + + -

    📊 Ваша статистика

    +

    Ваша статистика

    diff --git a/src/main/webapp/css/styles.css b/src/main/webapp/css/styles.css new file mode 100644 index 0000000..a77686c --- /dev/null +++ b/src/main/webapp/css/styles.css @@ -0,0 +1,344 @@ +/* === Basic Styles === */ +* { + margin: 0; + padding: 0; + box-sizing: border-box; +} + +:root { + --bg-dark: #1a1612; + --bg-medium: #2d2620; + --bg-light: #3d352d; + --text-primary: #e8dcc8; + --text-secondary: #b8a99a; + --accent-gold: #c9a227; + --accent-bronze: #8b6914; + --accent-red: #8b3a3a; + --accent-green: #4a6b4a; + --border: #5c4d3d; +} + +body { + font-family: 'Georgia', 'Times New Roman', serif; + background-color: var(--bg-dark); + background-image: + radial-gradient(circle at 20% 30%, rgba(201, 162, 39, 0.05) 0%, transparent 50%), + radial-gradient(circle at 80% 70%, rgba(139, 105, 20, 0.05) 0%, transparent 50%); + min-height: 100vh; + color: var(--text-primary); + line-height: 1.7; +} + +/* === Site header === */ +header { + background: linear-gradient(180deg, var(--bg-medium) 0%, var(--bg-dark) 100%); + padding: 1.2rem 2rem; + border-bottom: 2px solid var(--accent-bronze); + box-shadow: 0 4px 20px rgba(0, 0, 0, 0.5); + position: sticky; + top: 0; + z-index: 100; +} + +nav { + display: flex; + justify-content: space-between; + align-items: center; + max-width: 1200px; + margin: 0 auto; +} + +.logo h1 { + font-size: 2rem; + color: var(--accent-gold); + font-weight: normal; + letter-spacing: 2px; + text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.5); +} + +.nav-links { + display: flex; + list-style: none; + gap: 1rem; +} + +.nav-links a { + color: var(--text-secondary); + text-decoration: none; + padding: 0.6rem 1.2rem; + border: 1px solid var(--border); + border-radius: 4px; + transition: all 0.2s ease; + font-size: 0.95rem; +} + +.nav-links a:hover { + background: var(--bg-light); + color: var(--accent-gold); + border-color: var(--accent-gold); +} + +/* === Main content === */ +h2 { + font-size: 2.2rem; + margin: 2.5rem 0 1.5rem; + text-align: center; + color: var(--accent-gold); + font-weight: normal; + letter-spacing: 1px; + text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.5); +} + +h3 { + font-size: 1.5rem; + margin: 1.8rem 0 1.2rem; + color: var(--text-primary); + font-weight: normal; +} + +p { + margin: 1.2rem 0; + font-size: 1.1rem; + max-width: 750px; + margin-left: auto; + margin-right: auto; + color: var(--text-secondary); +} + +/* === Forms === */ +form { + max-width: 500px; + margin: 2.5rem auto; + padding: 2.5rem; + background: var(--bg-medium); + border: 2px solid var(--border); + border-radius: 8px; + box-shadow: 0 8px 30px rgba(0, 0, 0, 0.4); +} + +form p { + margin-bottom: 1.5rem; + max-width: 100%; + color: var(--text-primary); +} + +label { + display: block; + margin-bottom: 0.6rem; + color: var(--accent-gold); + font-size: 0.95rem; +} + +input[type="text"], +input[type="password"] { + width: 100%; + padding: 12px 16px; + border: 1px solid var(--border); + border-radius: 4px; + font-size: 1rem; + background: var(--bg-dark); + color: var(--text-primary); + font-family: inherit; +} + +input[type="text"]:focus, +input[type="password"]:focus { + outline: none; + border-color: var(--accent-gold); + box-shadow: 0 0 0 2px rgba(201, 162, 39, 0.2); +} + +/* === Buttons === */ +button { + padding: 12px 24px; + background: linear-gradient(180deg, var(--accent-bronze) 0%, var(--accent-gold) 100%); + border: 2px solid var(--accent-gold); + border-radius: 4px; + color: var(--bg-dark); + font-size: 1rem; + font-weight: bold; + cursor: pointer; + transition: all 0.2s ease; + font-family: inherit; + text-transform: uppercase; + letter-spacing: 1px; +} + +button:hover { + background: linear-gradient(180deg, var(--accent-gold) 0%, var(--accent-bronze) 100%); + transform: translateY(-2px); + box-shadow: 0 4px 12px rgba(201, 162, 39, 0.3); +} + +button:active { + transform: translateY(0); +} + +/* Buttons in the quest with animation */ +form button { + width: 100%; + margin: 0.8rem 0; + padding: 16px 20px; + background: linear-gradient(180deg, var(--bg-light) 0%, var(--bg-medium) 100%); + border: 2px solid var(--border); + color: var(--text-primary); + text-transform: none; + letter-spacing: normal; + font-weight: normal; + transition: all 0.3s ease; + position: relative; + overflow: hidden; +} + +form button::before { + content: ''; + position: absolute; + top: 0; + left: -100%; + width: 100%; + height: 100%; + background: linear-gradient(90deg, transparent, rgba(201, 162, 39, 0.2), transparent); + transition: left 0.5s ease; +} + +form button:hover::before { + left: 100%; +} + +form button:hover { + background: linear-gradient(180deg, var(--bg-medium) 0%, var(--bg-light) 100%); + border-color: var(--accent-gold); + color: var(--accent-gold); + transform: translateY(-3px); + box-shadow: 0 6px 20px rgba(201, 162, 39, 0.3); +} + +/* === Links === */ +a { + color: var(--accent-gold); + text-decoration: none; + transition: color 0.2s ease; +} + +a:hover { + color: var(--text-primary); + text-decoration: underline; +} + +/* === Statistics table === */ +table { + width: 100%; + max-width: 500px; + margin: 2.5rem auto; + border-collapse: collapse; + background: var(--bg-medium); + border: 2px solid var(--border); + box-shadow: 0 8px 30px rgba(0, 0, 0, 0.4); +} + +table th, +table td { + padding: 16px 20px; + text-align: center; + border-bottom: 1px solid var(--border); +} + +table th { + background: var(--bg-light); + color: var(--accent-gold); + font-weight: normal; + text-transform: uppercase; + letter-spacing: 1px; + font-size: 0.9rem; +} + +table tr:hover { + background: var(--bg-light); +} + +table tr:last-child td { + border-bottom: none; +} + +/* === Images === */ +img { + display: block; + margin: 2.5rem auto; + border-radius: 4px; + max-width: 100%; + border: 3px solid var(--border); + box-shadow: 0 8px 30px rgba(0, 0, 0, 0.5); +} + +/* === Messages === */ +p[style*="color: #ff3f3f"], +p[style*="color: #ff3535"] { + background: rgba(139, 58, 58, 0.2); + border: 1px solid var(--accent-red); + border-radius: 4px; + padding: 1rem; + margin: 1.5rem auto; + max-width: 500px; + text-align: center; + color: #ff9999; +} + +p[style*="color: #4099ff"] { + background: rgba(74, 107, 74, 0.2); + border: 1px solid var(--accent-green); + border-radius: 4px; + padding: 1rem; + margin: 1.5rem auto; + max-width: 500px; + text-align: center; + color: #99cc99; +} + +/* === Adaptability === */ +@media (max-width: 768px) { + nav { + flex-direction: column; + gap: 1rem; + } + + .nav-links { + flex-wrap: wrap; + justify-content: center; + } + + .logo h1 { + font-size: 1.6rem; + } + + h2 { + font-size: 1.8rem; + } + + form { + padding: 2rem; + margin: 1.5rem; + } + + p { + font-size: 1rem; + padding: 0 1rem; + } +} + +/* === Scrollbar === */ +::-webkit-scrollbar { + width: 10px; +} + +::-webkit-scrollbar-track { + background: var(--bg-dark); +} + +::-webkit-scrollbar-thumb { + background: var(--border); + border-radius: 2px; +} + +::-webkit-scrollbar-thumb:hover { + background: var(--accent-bronze); +} diff --git a/src/test/java/com/javarush/matsarskaya/cmd/HomePageTest.java b/src/test/java/com/javarush/matsarskaya/cmd/HomePageTest.java index 75787d3..d85871d 100644 --- a/src/test/java/com/javarush/matsarskaya/cmd/HomePageTest.java +++ b/src/test/java/com/javarush/matsarskaya/cmd/HomePageTest.java @@ -24,7 +24,7 @@ void setUp() { } @Test - @DisplayName("GET запрос возвращает путь к домашней странице") + @DisplayName("The GET request returns the path to the home page") void testDoGet() { String result = homePage.doGet(request); @@ -32,7 +32,7 @@ void testDoGet() { } @Test - @DisplayName("POST запрос возвращает путь к домашней странице") + @DisplayName("The POST request returns the path to the home page") void testDoPost() { String result = homePage.doPost(request); @@ -40,7 +40,7 @@ void testDoPost() { } @Test - @DisplayName("Получение пути к представлению") + @DisplayName("Getting the path to the view") void testGetView() { String result = homePage.getView(); diff --git a/src/test/java/com/javarush/matsarskaya/cmd/LoginPageTest.java b/src/test/java/com/javarush/matsarskaya/cmd/LoginPageTest.java index cf9e3b6..90752b9 100644 --- a/src/test/java/com/javarush/matsarskaya/cmd/LoginPageTest.java +++ b/src/test/java/com/javarush/matsarskaya/cmd/LoginPageTest.java @@ -38,7 +38,7 @@ void setUp() { } @Test - @DisplayName("GET запрос возвращает путь к странице входа") + @DisplayName("The GET request returns the path to the login page") void testDoGet() { String result = loginPage.doGet(request); @@ -46,7 +46,7 @@ void testDoGet() { } @Test - @DisplayName("Успешный вход пользователя") + @DisplayName("Successful user login") void testDoPostSuccess() { when(request.getParameter("username")).thenReturn("testuser"); when(request.getParameter("password")).thenReturn("password123"); @@ -63,7 +63,7 @@ void testDoPostSuccess() { } @Test - @DisplayName("Вход с несуществующим пользователем") + @DisplayName("Login with a non-existent user") void testDoPostUserNotFound() { when(request.getParameter("username")).thenReturn("nonexistent"); when(request.getParameter("password")).thenReturn("password123"); @@ -73,12 +73,12 @@ void testDoPostUserNotFound() { String result = loginPage.doPost(request); assertThat(result).isEqualTo("/WEB-INF/login-page.jsp"); - verify(request).setAttribute("error", "Пользователь не найден"); + verify(request).setAttribute("error", "User not found"); verify(userService).loginUser("nonexistent", "password123"); } @Test - @DisplayName("Вход с неверным паролем") + @DisplayName("Log in with an incorrect password") void testDoPostInvalidPassword() { when(request.getParameter("username")).thenReturn("testuser"); when(request.getParameter("password")).thenReturn("wrongpassword"); @@ -88,12 +88,12 @@ void testDoPostInvalidPassword() { String result = loginPage.doPost(request); assertThat(result).isEqualTo("/WEB-INF/login-page.jsp"); - verify(request).setAttribute("error", "Неверное имя пользователя или пароль"); + verify(request).setAttribute("error", "Invalid username or password"); verify(userService).loginUser("testuser", "wrongpassword"); } @Test - @DisplayName("Получение пути к представлению") + @DisplayName("Getting the path to the view") void testGetView() { String result = loginPage.getView(); diff --git a/src/test/java/com/javarush/matsarskaya/cmd/LogoutPageTest.java b/src/test/java/com/javarush/matsarskaya/cmd/LogoutPageTest.java index 5025e1c..53393b8 100644 --- a/src/test/java/com/javarush/matsarskaya/cmd/LogoutPageTest.java +++ b/src/test/java/com/javarush/matsarskaya/cmd/LogoutPageTest.java @@ -13,7 +13,7 @@ import static org.mockito.Mockito.*; @ExtendWith(MockitoExtension.class) -@DisplayName("Тесты для LogoutPage") +@DisplayName("Tests for LogoutPage") class LogoutPageTest { @Mock private UserService userService; @@ -29,7 +29,7 @@ void setUp() { } @Test - @DisplayName("POST запрос выполняет выход из системы") + @DisplayName("The POST request performs a logout") void testDoPost() { doNothing().when(userService).logout(request); @@ -40,7 +40,7 @@ void testDoPost() { } @Test - @DisplayName("GET запрос вызывает doPost") + @DisplayName("The GET request calls doPost") void testDoGet() { doNothing().when(userService).logout(request); @@ -51,7 +51,7 @@ void testDoGet() { } @Test - @DisplayName("Получение пути к представлению") + @DisplayName("Getting the path to the view") void testGetView() { String result = logoutPage.getView(); diff --git a/src/test/java/com/javarush/matsarskaya/cmd/QuestDragonTest.java b/src/test/java/com/javarush/matsarskaya/cmd/QuestDragonTest.java index 6ada244..49babb8 100644 --- a/src/test/java/com/javarush/matsarskaya/cmd/QuestDragonTest.java +++ b/src/test/java/com/javarush/matsarskaya/cmd/QuestDragonTest.java @@ -14,7 +14,7 @@ import static org.mockito.Mockito.*; @ExtendWith(MockitoExtension.class) -@DisplayName("Тесты для QuestDragon") +@DisplayName("Tests for QuestDragon") class QuestDragonTest { @Mock private StatisticService statisticService; @@ -33,7 +33,7 @@ void setUp() { } @Test - @DisplayName("GET запрос возвращает путь к странице квеста") + @DisplayName("The GET request returns the path to the quest page") void testDoGet() { String result = questDragon.doGet(request); @@ -41,7 +41,7 @@ void testDoGet() { } @Test - @DisplayName("Начало квеста") + @DisplayName("The beginning of the quest") void testDoPostStartQuest() { when(request.getParameter("quest")).thenReturn("the way of the dragon rider"); when(request.getParameter("stage")).thenReturn(null); @@ -58,7 +58,7 @@ void testDoPostStartQuest() { } @Test - @DisplayName("Переход на этап 1") + @DisplayName("Transition to stage 1") void testDoPostStage0() { when(request.getParameter("stage")).thenReturn("0"); when(request.getSession()).thenReturn(session); @@ -70,7 +70,7 @@ void testDoPostStage0() { } @Test - @DisplayName("Ввод имени игрока") + @DisplayName("Entering the player's name") void testDoPostStage1WithName() { when(request.getParameter("stage")).thenReturn("1"); when(request.getParameter("playerNameInput")).thenReturn("PlayerName"); @@ -85,7 +85,7 @@ void testDoPostStage1WithName() { } @Test - @DisplayName("Переход на следующий этап с выбором") + @DisplayName("Moving to the next stage with a choice") void testDoPostNextStage() { when(request.getParameter("stage")).thenReturn("2"); when(request.getParameter("choice")).thenReturn("10"); @@ -102,9 +102,9 @@ void testDoPostNextStage() { } @Test - @DisplayName("Поражение при низком уровне доверия") + @DisplayName("Defeat at a low level of trust") void testDoPostLossCondition() { - when(request.getParameter("stage")).thenReturn("3"); + when(request.getParameter("stage")).thenReturn("4"); when(request.getParameter("choice")).thenReturn("-10"); when(request.getSession()).thenReturn(session); when(session.getAttribute("username")).thenReturn("testuser"); @@ -116,11 +116,10 @@ void testDoPostLossCondition() { assertThat(result).isEqualTo("/WEB-INF/quest-dragon.jsp"); verify(statisticService).registerLoss("testuser"); verify(session).setAttribute("questFinished", true); - verify(session).setAttribute("stage", 11); } @Test - @DisplayName("Победа при высоком уровне доверия") + @DisplayName("Winning with a high level of trust") void testDoPostWinCondition() { when(request.getParameter("stage")).thenReturn("9"); when(request.getParameter("choice")).thenReturn("10"); @@ -137,7 +136,7 @@ void testDoPostWinCondition() { } @Test - @DisplayName("Победа на финальном этапе при высоком уровне доверия") + @DisplayName("Winning the final stage with a high level of trust") void testDoPostFinalStageWin() { when(request.getParameter("stage")).thenReturn("10"); when(request.getParameter("choice")).thenReturn("10"); @@ -155,7 +154,7 @@ void testDoPostFinalStageWin() { } @Test - @DisplayName("Получение пути к представлению") + @DisplayName("Getting the path to the view") void testGetView() { String result = questDragon.getView(); diff --git a/src/test/java/com/javarush/matsarskaya/cmd/RegisterPageTest.java b/src/test/java/com/javarush/matsarskaya/cmd/RegisterPageTest.java index 4f7f231..711496f 100644 --- a/src/test/java/com/javarush/matsarskaya/cmd/RegisterPageTest.java +++ b/src/test/java/com/javarush/matsarskaya/cmd/RegisterPageTest.java @@ -15,7 +15,7 @@ import static org.mockito.Mockito.*; @ExtendWith(MockitoExtension.class) -@DisplayName("Тесты для RegisterPage") +@DisplayName("Tests for RegisterPage") class RegisterPageTest { @Mock private UserService userService; @@ -34,7 +34,7 @@ void setUp() { } @Test - @DisplayName("GET запрос возвращает путь к странице регистрации") + @DisplayName("The GET request returns the path to the registration page") void testDoGet() { String result = registerPage.doGet(request); @@ -42,7 +42,7 @@ void testDoGet() { } @Test - @DisplayName("Успешная регистрация нового пользователя") + @DisplayName("Successful registration of a new user") void testDoPostSuccess() { when(request.getParameter("username")).thenReturn("newuser"); when(request.getParameter("password")).thenReturn("password123"); @@ -58,7 +58,7 @@ void testDoPostSuccess() { } @Test - @DisplayName("Регистрация существующего пользователя") + @DisplayName("Registering an existing user") void testDoPostUserAlreadyExists() { when(request.getParameter("username")).thenReturn("existinguser"); when(request.getParameter("password")).thenReturn("password123"); @@ -68,12 +68,12 @@ void testDoPostUserAlreadyExists() { String result = registerPage.doPost(request); assertThat(result).isEqualTo("/WEB-INF/register-page.jsp"); - verify(request).setAttribute("error", "Пользователь уже существует"); + verify(request).setAttribute("error", "The user already exists"); verify(userService).registerUser("existinguser", "password123"); } @Test - @DisplayName("Получение пути к представлению") + @DisplayName("Getting the path to the view") void testGetView() { String result = registerPage.getView(); diff --git a/src/test/java/com/javarush/matsarskaya/config/FileStorageConfigTest.java b/src/test/java/com/javarush/matsarskaya/config/FileStorageConfigTest.java index b60adbb..faa9bae 100644 --- a/src/test/java/com/javarush/matsarskaya/config/FileStorageConfigTest.java +++ b/src/test/java/com/javarush/matsarskaya/config/FileStorageConfigTest.java @@ -4,11 +4,11 @@ import org.junit.jupiter.api.DisplayName; import static org.assertj.core.api.Assertions.assertThat; -@DisplayName("Тесты для FileStorageConfig") +@DisplayName("Tests for FileStorageConfig") class FileStorageConfigTest { @Test - @DisplayName("Получение пути к файлу пользователей") + @DisplayName("Getting the path to the user's file") void testGetUsersFilePath() { String path = FileStorageConfig.getUsersFilePath(); @@ -16,7 +16,7 @@ void testGetUsersFilePath() { } @Test - @DisplayName("Получение пути к файлу статистики") + @DisplayName("Getting the path to the statistics file") void testGetStatisticsFilePath() { String path = FileStorageConfig.getStatisticsFilePath(); @@ -24,14 +24,14 @@ void testGetStatisticsFilePath() { } @Test - @DisplayName("Пути не являются null") + @DisplayName("Paths are not null") void testPathsAreNotNull() { assertThat(FileStorageConfig.getUsersFilePath()).isNotNull(); assertThat(FileStorageConfig.getStatisticsFilePath()).isNotNull(); } @Test - @DisplayName("Пути не являются пустыми") + @DisplayName("Paths are not empty") void testPathsAreNotEmpty() { assertThat(FileStorageConfig.getUsersFilePath()).isNotEmpty(); assertThat(FileStorageConfig.getStatisticsFilePath()).isNotEmpty(); diff --git a/src/test/java/com/javarush/matsarskaya/controller/FrontControllerTest.java b/src/test/java/com/javarush/matsarskaya/controller/FrontControllerTest.java index d5fcf24..e26a989 100644 --- a/src/test/java/com/javarush/matsarskaya/controller/FrontControllerTest.java +++ b/src/test/java/com/javarush/matsarskaya/controller/FrontControllerTest.java @@ -19,7 +19,7 @@ import static org.mockito.Mockito.*; @ExtendWith(MockitoExtension.class) -@DisplayName("Тесты для FrontController") +@DisplayName("Tests for the FrontController") class FrontControllerTest { @Mock private HttpServletRequest request; @@ -47,7 +47,7 @@ void setUp() { } @Test - @DisplayName("GET запрос обрабатывается корректно") + @DisplayName("The GET request is being processed correctly") void testDoGet() throws ServletException, IOException { when(request.getServletPath()).thenReturn("/home-page"); when(request.getMethod()).thenReturn("GET"); @@ -64,7 +64,7 @@ void testDoGet() throws ServletException, IOException { } @Test - @DisplayName("POST запрос обрабатывается корректно") + @DisplayName("The POST request is being processed correctly") void testDoPost() throws ServletException, IOException { when(request.getServletPath()).thenReturn("/login-page"); when(request.getMethod()).thenReturn("POST"); @@ -81,7 +81,7 @@ void testDoPost() throws ServletException, IOException { } @Test - @DisplayName("Перенаправление на домашнюю страницу при попытке доступа к защищённой странице без авторизации") + @DisplayName("Redirecting to the home page when trying to access a secure page without authorization") void testProtectedPathWithoutAuthentication() throws ServletException, IOException { when(request.getServletPath()).thenReturn("/quest-dragon"); when(request.getMethod()).thenReturn("GET"); @@ -93,7 +93,7 @@ void testProtectedPathWithoutAuthentication() throws ServletException, IOExcepti } @Test - @DisplayName("Доступ к защищённой странице с авторизацией") + @DisplayName("Access to a secure page with authorization") void testProtectedPathWithAuthentication() throws ServletException, IOException { when(request.getServletPath()).thenReturn("/quest-dragon"); when(request.getMethod()).thenReturn("GET"); diff --git a/src/test/java/com/javarush/matsarskaya/controller/HttpResolverTest.java b/src/test/java/com/javarush/matsarskaya/controller/HttpResolverTest.java index d19f76c..784fea4 100644 --- a/src/test/java/com/javarush/matsarskaya/controller/HttpResolverTest.java +++ b/src/test/java/com/javarush/matsarskaya/controller/HttpResolverTest.java @@ -13,7 +13,7 @@ import static org.assertj.core.api.Assertions.assertThat; -@DisplayName("Тесты для HttpResolver") +@DisplayName("Tests for HttpResolver") class HttpResolverTest { private HttpResolver httpResolver; @@ -23,7 +23,7 @@ void setUp() { } @Test - @DisplayName("Разрешение команды для домашней страницы") + @DisplayName("Team permission for the home page") void testResolveHomePage() { Command command = httpResolver.resolve("/home-page"); @@ -32,7 +32,7 @@ void testResolveHomePage() { } @Test - @DisplayName("Разрешение команды для страницы квеста") + @DisplayName("Team permission for the quest page") void testResolveQuestDragon() { Command command = httpResolver.resolve("/quest-dragon"); @@ -41,7 +41,7 @@ void testResolveQuestDragon() { } @Test - @DisplayName("Разрешение команды для страницы входа") + @DisplayName("Team permission for the login page") void testResolveLoginPage() { Command command = httpResolver.resolve("/login-page"); @@ -50,7 +50,7 @@ void testResolveLoginPage() { } @Test - @DisplayName("Разрешение команды для страницы регистрации") + @DisplayName("Team permission for the registration page") void testResolveRegisterPage() { Command command = httpResolver.resolve("/register-page"); @@ -59,7 +59,7 @@ void testResolveRegisterPage() { } @Test - @DisplayName("Разрешение команды для выхода") + @DisplayName("Allowing the command to exit") void testResolveLogout() { Command command = httpResolver.resolve("/logout"); @@ -68,7 +68,7 @@ void testResolveLogout() { } @Test - @DisplayName("Разрешение команды для страницы статистики") + @DisplayName("Team permission for the statistics page") void testResolveStatisticPage() { Command command = httpResolver.resolve("/statistic-page"); @@ -77,7 +77,7 @@ void testResolveStatisticPage() { } @Test - @DisplayName("Разрешение неизвестного пути возвращает домашнюю страницу") + @DisplayName("Resolving an unknown path returns the home page") void testResolveUnknownPath() { Command command = httpResolver.resolve("/unknown-path"); diff --git a/src/test/java/com/javarush/matsarskaya/entity/QuestStageTest.java b/src/test/java/com/javarush/matsarskaya/entity/QuestStageTest.java index 467f100..698d052 100644 --- a/src/test/java/com/javarush/matsarskaya/entity/QuestStageTest.java +++ b/src/test/java/com/javarush/matsarskaya/entity/QuestStageTest.java @@ -8,11 +8,11 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; -@DisplayName("Тесты для enum QuestStage") +@DisplayName("Tests for the enum QuestStage") class QuestStageTest { @Test - @DisplayName("Получение номера этапа") + @DisplayName("Getting the stage number") void testGetStageNumber() { assertThat(QuestStage.START.getStageNumber()).isEqualTo(0); assertThat(QuestStage.NAME_INPUT.getStageNumber()).isEqualTo(1); @@ -21,7 +21,7 @@ void testGetStageNumber() { } @Test - @DisplayName("Получение этапа по номеру") + @DisplayName("Getting a stage by number") void testFromNumber() { assertThat(QuestStage.fromNumber(0)).isEqualTo(QuestStage.START); assertThat(QuestStage.fromNumber(1)).isEqualTo(QuestStage.NAME_INPUT); @@ -30,7 +30,7 @@ void testFromNumber() { } @Test - @DisplayName("Выброс исключения при неверном номере этапа") + @DisplayName("Throwing an exception for an incorrect stage number") void testFromNumberWithInvalidNumber() { assertThatThrownBy(() -> QuestStage.fromNumber(12)) .isInstanceOf(IllegalArgumentException.class) @@ -42,7 +42,7 @@ void testFromNumberWithInvalidNumber() { } @Test - @DisplayName("Переход к следующему этапу") + @DisplayName("Moving on to the next stage") void testNext() { assertThat(QuestStage.START.next()).isEqualTo(QuestStage.NAME_INPUT); assertThat(QuestStage.NAME_INPUT.next()).isEqualTo(QuestStage.STAGE_2); @@ -60,7 +60,7 @@ void testNext() { "6, 49, true", "6, 50, false" }) - @DisplayName("Проверка условия поражения для этапов 3-6") + @DisplayName("Checking the defeat condition for stages 3-6") void testIsLossStageForStages3To6(int stageNumber, int trust, boolean expected) { QuestStage stage = QuestStage.fromNumber(stageNumber); assertThat(stage.isLossStage(trust)).isEqualTo(expected); @@ -77,7 +77,7 @@ void testIsLossStageForStages3To6(int stageNumber, int trust, boolean expected) "10, 69, true", "10, 70, false" }) - @DisplayName("Проверка условия поражения для этапов 7-10") + @DisplayName("Checking the damage condition for stages 7-10") void testIsLossStageForStages7To10(int stageNumber, int trust, boolean expected) { QuestStage stage = QuestStage.fromNumber(stageNumber); assertThat(stage.isLossStage(trust)).isEqualTo(expected); @@ -85,7 +85,7 @@ void testIsLossStageForStages7To10(int stageNumber, int trust, boolean expected) @ParameterizedTest @ValueSource(ints = {0, 1, 2, 11}) - @DisplayName("Этапы 0, 1, 2 и 11 не имеют условия поражения") + @DisplayName("Stages 0, 1, 2, and 11 do not have a defeat condition.") void testIsLossStageForNonLossStages(int stageNumber) { QuestStage stage = QuestStage.fromNumber(stageNumber); assertThat(stage.isLossStage(0)).isFalse(); diff --git a/src/test/java/com/javarush/matsarskaya/entity/StatisticTest.java b/src/test/java/com/javarush/matsarskaya/entity/StatisticTest.java index a5f3103..04cac50 100644 --- a/src/test/java/com/javarush/matsarskaya/entity/StatisticTest.java +++ b/src/test/java/com/javarush/matsarskaya/entity/StatisticTest.java @@ -5,7 +5,7 @@ import org.junit.jupiter.api.BeforeEach; import static org.assertj.core.api.Assertions.assertThat; -@DisplayName("Тесты для сущности Statistic") +@DisplayName("Tests for the Statistical entity") class StatisticTest { private Statistic statistic; @@ -16,7 +16,7 @@ void setUp() { } @Test - @DisplayName("Создание статистики с нулевыми значениями") + @DisplayName("Creating statistics with zero values") void testStatisticCreationWithZeros() { assertThat(statistic.getUsername()).isEqualTo("testuser"); assertThat(statistic.getAttempts()).isEqualTo(0); @@ -25,7 +25,7 @@ void testStatisticCreationWithZeros() { } @Test - @DisplayName("Создание статистики с начальными значениями") + @DisplayName("Creating statistics with initial values") void testStatisticCreationWithValues() { Statistic stat = new Statistic("player1", 10, 5, 5); @@ -36,7 +36,7 @@ void testStatisticCreationWithValues() { } @Test - @DisplayName("Увеличение количества попыток") + @DisplayName("Increasing the number of attempts") void testIncrementAttempts() { statistic.incrementAttempts(); assertThat(statistic.getAttempts()).isEqualTo(1); @@ -47,7 +47,7 @@ void testIncrementAttempts() { } @Test - @DisplayName("Увеличение количества побед") + @DisplayName("Increasing the number of wins") void testIncrementWins() { statistic.incrementWins(); assertThat(statistic.getWins()).isEqualTo(1); @@ -58,7 +58,7 @@ void testIncrementWins() { } @Test - @DisplayName("Увеличение количества поражений") + @DisplayName("An increase in the number of lesions") void testIncrementLosses() { statistic.incrementLosses(); assertThat(statistic.getLosses()).isEqualTo(1); @@ -69,7 +69,7 @@ void testIncrementLosses() { } @Test - @DisplayName("Геттеры возвращают корректные значения") + @DisplayName("Getters return correct values.") void testGetters() { Statistic stat = new Statistic("user2", 15, 8, 7); diff --git a/src/test/java/com/javarush/matsarskaya/entity/TrustLevelTest.java b/src/test/java/com/javarush/matsarskaya/entity/TrustLevelTest.java index 643b577..8a9d59b 100644 --- a/src/test/java/com/javarush/matsarskaya/entity/TrustLevelTest.java +++ b/src/test/java/com/javarush/matsarskaya/entity/TrustLevelTest.java @@ -7,11 +7,11 @@ import org.junit.jupiter.params.provider.ValueSource; import static org.assertj.core.api.Assertions.assertThat; -@DisplayName("Тесты для enum TrustLevel") +@DisplayName("Tests for enum TrustLevel") class TrustLevelTest { @Test - @DisplayName("Получение уровня доверия по значению") + @DisplayName("Getting the confidence level by value") void testFromValue() { assertThat(TrustLevel.fromValue(0)).isEqualTo(TrustLevel.CRITICAL); assertThat(TrustLevel.fromValue(25)).isEqualTo(TrustLevel.CRITICAL); @@ -41,7 +41,7 @@ void testFromValue() { "HIGH, 5, true", "HIGH, 6, true" }) - @DisplayName("Проверка достаточности уровня доверия для этапов 3-6") + @DisplayName("Verification of the sufficiency of the trust level for stages 3-6") void testIsSufficientForStageForStages3To6(TrustLevel level, int stageNumber, boolean expected) { assertThat(level.isSufficientForStage(stageNumber)).isEqualTo(expected); } @@ -61,14 +61,14 @@ void testIsSufficientForStageForStages3To6(TrustLevel level, int stageNumber, bo "HIGH, 9, true", "HIGH, 10, true" }) - @DisplayName("Проверка достаточности уровня доверия для этапов 7-10") + @DisplayName("Verification of the sufficiency of the trust level for stages 7-10") void testIsSufficientForStageForStages7To10(TrustLevel level, int stageNumber, boolean expected) { assertThat(level.isSufficientForStage(stageNumber)).isEqualTo(expected); } @ParameterizedTest @ValueSource(ints = {0, 1, 2, 11}) - @DisplayName("Проверка достаточности уровня доверия для этапов 0, 1, 2 и 11") + @DisplayName("Verification of the sufficiency of the trust level for stages 0, 1, 2 and 11") void testIsSufficientForStageForNonCriticalStages(int stageNumber) { assertThat(TrustLevel.CRITICAL.isSufficientForStage(stageNumber)).isTrue(); assertThat(TrustLevel.LOW.isSufficientForStage(stageNumber)).isTrue(); diff --git a/src/test/java/com/javarush/matsarskaya/entity/UserTest.java b/src/test/java/com/javarush/matsarskaya/entity/UserTest.java index 60bc366..841cd96 100644 --- a/src/test/java/com/javarush/matsarskaya/entity/UserTest.java +++ b/src/test/java/com/javarush/matsarskaya/entity/UserTest.java @@ -4,11 +4,11 @@ import org.junit.jupiter.api.DisplayName; import static org.assertj.core.api.Assertions.assertThat; -@DisplayName("Тесты для сущности User") +@DisplayName("Tests for the User entity") class UserTest { @Test - @DisplayName("Создание пользователя с корректными данными") + @DisplayName("Creating a user with correct data") void testUserCreation() { User user = new User("testuser", "password123"); @@ -17,7 +17,7 @@ void testUserCreation() { } @Test - @DisplayName("Создание пользователя с пустым именем") + @DisplayName("Creating a user with an empty name") void testUserWithEmptyUsername() { User user = new User("", "password123"); @@ -26,7 +26,7 @@ void testUserWithEmptyUsername() { } @Test - @DisplayName("Создание пользователя с пустым паролем") + @DisplayName("Creating a user with an empty password") void testUserWithEmptyPassword() { User user = new User("testuser", ""); @@ -35,7 +35,7 @@ void testUserWithEmptyPassword() { } @Test - @DisplayName("Геттеры возвращают корректные значения") + @DisplayName("Getters return correct values.") void testGetters() { User user = new User("admin", "admin123"); diff --git a/src/test/java/com/javarush/matsarskaya/exception/InvalidCredentialsExceptionTest.java b/src/test/java/com/javarush/matsarskaya/exception/InvalidCredentialsExceptionTest.java index 1b6055f..3142acc 100644 --- a/src/test/java/com/javarush/matsarskaya/exception/InvalidCredentialsExceptionTest.java +++ b/src/test/java/com/javarush/matsarskaya/exception/InvalidCredentialsExceptionTest.java @@ -4,19 +4,19 @@ import org.junit.jupiter.api.DisplayName; import static org.assertj.core.api.Assertions.assertThat; -@DisplayName("Тесты для InvalidCredentialsException") +@DisplayName("Tests for InvalidCredentialsException") class InvalidCredentialsExceptionTest { @Test - @DisplayName("Создание исключения без сообщения") + @DisplayName("Creating an exception without a message") void testExceptionWithoutMessage() { InvalidCredentialsException exception = new InvalidCredentialsException(); - assertThat(exception.getMessage()).contains("Неверное имя пользователя или пароль"); + assertThat(exception.getMessage()).contains("Invalid username or password"); } @Test - @DisplayName("Создание исключения с сообщением") + @DisplayName("Creating an exception with a message") void testExceptionWithMessage() { String customMessage = "Custom error message"; InvalidCredentialsException exception = new InvalidCredentialsException(customMessage); diff --git a/src/test/java/com/javarush/matsarskaya/exception/UserAlreadyExistsExceptionTest.java b/src/test/java/com/javarush/matsarskaya/exception/UserAlreadyExistsExceptionTest.java index f35a926..b53aea2 100644 --- a/src/test/java/com/javarush/matsarskaya/exception/UserAlreadyExistsExceptionTest.java +++ b/src/test/java/com/javarush/matsarskaya/exception/UserAlreadyExistsExceptionTest.java @@ -4,25 +4,25 @@ import org.junit.jupiter.api.DisplayName; import static org.assertj.core.api.Assertions.assertThat; -@DisplayName("Тесты для UserAlreadyExistsException") +@DisplayName("Tests for UserAlreadyExistsException") class UserAlreadyExistsExceptionTest { @Test - @DisplayName("Создание исключения с именем пользователя") + @DisplayName("Creating an exception with a username") void testExceptionWithUsername() { UserAlreadyExistsException exception = new UserAlreadyExistsException("testuser"); - assertThat(exception.getMessage()).contains("testuser"); - assertThat(exception.getMessage()).contains("уже существует"); + assertThat(exception.getMessage()).contains("username"); + assertThat(exception.getMessage()).contains("already exists"); } @Test - @DisplayName("Создание исключения с именем пользователя и причиной") + @DisplayName("Creating an exception with a username and reason") void testExceptionWithUsernameAndCause() { Throwable cause = new RuntimeException("Database error"); UserAlreadyExistsException exception = new UserAlreadyExistsException("testuser", cause); - assertThat(exception.getMessage()).contains("testuser"); + assertThat(exception.getMessage()).contains("username"); assertThat(exception.getCause()).isEqualTo(cause); } } diff --git a/src/test/java/com/javarush/matsarskaya/exception/UserNotFoundExceptionTest.java b/src/test/java/com/javarush/matsarskaya/exception/UserNotFoundExceptionTest.java index c70edea..e9d35a5 100644 --- a/src/test/java/com/javarush/matsarskaya/exception/UserNotFoundExceptionTest.java +++ b/src/test/java/com/javarush/matsarskaya/exception/UserNotFoundExceptionTest.java @@ -4,25 +4,25 @@ import org.junit.jupiter.api.DisplayName; import static org.assertj.core.api.Assertions.assertThat; -@DisplayName("Тесты для UserNotFoundException") +@DisplayName("Tests for UserNotFoundException") class UserNotFoundExceptionTest { @Test - @DisplayName("Создание исключения с именем пользователя") + @DisplayName("Creating an exception with a username") void testExceptionWithUsername() { UserNotFoundException exception = new UserNotFoundException("testuser"); - assertThat(exception.getMessage()).contains("testuser"); - assertThat(exception.getMessage()).contains("не найден"); + assertThat(exception.getMessage()).contains("username"); + assertThat(exception.getMessage()).contains("not found"); } @Test - @DisplayName("Создание исключения с именем пользователя и причиной") + @DisplayName("Creating an exception with a username and reason") void testExceptionWithUsernameAndCause() { Throwable cause = new RuntimeException("Database error"); UserNotFoundException exception = new UserNotFoundException("testuser", cause); - assertThat(exception.getMessage()).contains("testuser"); + assertThat(exception.getMessage()).contains("username"); assertThat(exception.getCause()).isEqualTo(cause); } } diff --git a/src/test/java/com/javarush/matsarskaya/repository/FileStatisticRepositoryTest.java b/src/test/java/com/javarush/matsarskaya/repository/FileStatisticRepositoryTest.java index 3343cc0..8b9fdab 100644 --- a/src/test/java/com/javarush/matsarskaya/repository/FileStatisticRepositoryTest.java +++ b/src/test/java/com/javarush/matsarskaya/repository/FileStatisticRepositoryTest.java @@ -5,15 +5,13 @@ import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.io.TempDir; -import java.io.File; import java.io.IOException; -import java.nio.file.Files; import java.nio.file.Path; import java.util.Optional; import static org.assertj.core.api.Assertions.assertThat; -@DisplayName("Тесты для FileStatisticRepository") +@DisplayName("Tests for FileStatisticRepository") class FileStatisticRepositoryTest { @TempDir @@ -23,7 +21,7 @@ class FileStatisticRepositoryTest { private String testFilePath; @Test - @DisplayName("Сохранение и загрузка статистики") + @DisplayName("Saving and uploading statistics") void testSaveAndLoadStatistic() throws IOException { testFilePath = tempDir.resolve("test_statistics.txt").toString(); System.setProperty("statistics.file.path", testFilePath); @@ -43,7 +41,7 @@ void testSaveAndLoadStatistic() throws IOException { } @Test - @DisplayName("Поиск несуществующей статистики") + @DisplayName("Search for non-existent statistics") void testFindNonExistingStatistic() throws IOException { testFilePath = tempDir.resolve("test_statistics.txt").toString(); System.setProperty("statistics.file.path", testFilePath); @@ -56,7 +54,7 @@ void testFindNonExistingStatistic() throws IOException { } @Test - @DisplayName("Обновление существующей статистики") + @DisplayName("Updating existing statistics") void testUpdateExistingStatistic() throws IOException { testFilePath = tempDir.resolve("test_statistics.txt").toString(); System.setProperty("statistics.file.path", testFilePath); @@ -78,7 +76,7 @@ void testUpdateExistingStatistic() throws IOException { } @Test - @DisplayName("Сохранение статистики нескольких пользователей") + @DisplayName("Saving statistics for multiple users") void testSaveMultipleStatistics() throws IOException { testFilePath = tempDir.resolve("test_statistics.txt").toString(); System.setProperty("statistics.file.path", testFilePath); diff --git a/src/test/java/com/javarush/matsarskaya/repository/FileUserRepositoryTest.java b/src/test/java/com/javarush/matsarskaya/repository/FileUserRepositoryTest.java index f2b97d9..56ee156 100644 --- a/src/test/java/com/javarush/matsarskaya/repository/FileUserRepositoryTest.java +++ b/src/test/java/com/javarush/matsarskaya/repository/FileUserRepositoryTest.java @@ -18,7 +18,7 @@ import static org.mockito.Mockito.*; @ExtendWith(MockitoExtension.class) -@DisplayName("Тесты для FileUserRepository") +@DisplayName("Tests for FileUserRepository") class FileUserRepositoryTest { @Mock private UserFileStorage storage; @@ -31,7 +31,7 @@ void setUp() { } @Test - @DisplayName("Успешное сохранение нового пользователя") + @DisplayName("Successful saving of a new user") void testSaveNewUser() { when(storage.userExists("newuser")).thenReturn(false); @@ -44,22 +44,22 @@ void testSaveNewUser() { } @Test - @DisplayName("Сохранение существующего пользователя выбрасывает исключение") + @DisplayName("Saving an existing user throws an exception") void testSaveExistingUser() { when(storage.userExists("existinguser")).thenReturn(true); User user = new User("existinguser", "password123"); - + assertThatThrownBy(() -> repository.save(user)) .isInstanceOf(UserAlreadyExistsException.class) - .hasMessageContaining("existinguser"); + .hasMessageContaining("username"); verify(storage).userExists("existinguser"); verify(storage, never()).saveUser(anyString(), anyString()); } @Test - @DisplayName("Поиск существующего пользователя по имени") + @DisplayName("Search for an existing user by name") void testFindByUsernameExistingUser() { when(storage.getPasswordByUsername("testuser")).thenReturn(Optional.of("password123")); @@ -72,7 +72,7 @@ void testFindByUsernameExistingUser() { } @Test - @DisplayName("Поиск несуществующего пользователя по имени") + @DisplayName("Search for a non-existent user by name") void testFindByUsernameNonExistingUser() { when(storage.getPasswordByUsername("nonexistent")).thenReturn(Optional.empty()); @@ -83,7 +83,7 @@ void testFindByUsernameNonExistingUser() { } @Test - @DisplayName("Проверка существования пользователя - пользователь существует") + @DisplayName("Verification of user's existence - user exists") void testExistsByUsernameTrue() { when(storage.userExists("existinguser")).thenReturn(true); @@ -94,7 +94,7 @@ void testExistsByUsernameTrue() { } @Test - @DisplayName("Проверка существования пользователя - пользователь не существует") + @DisplayName("Verification of user's existence - user does not exist") void testExistsByUsernameFalse() { when(storage.userExists("nonexistent")).thenReturn(false); diff --git a/src/test/java/com/javarush/matsarskaya/service/UserServiceTest.java b/src/test/java/com/javarush/matsarskaya/service/UserServiceTest.java index acf371b..35c58bc 100644 --- a/src/test/java/com/javarush/matsarskaya/service/UserServiceTest.java +++ b/src/test/java/com/javarush/matsarskaya/service/UserServiceTest.java @@ -22,7 +22,7 @@ import static org.mockito.Mockito.*; @ExtendWith(MockitoExtension.class) -@DisplayName("Тесты для UserService") +@DisplayName("Tests for UserService") class UserServiceTest { @Mock private UserRepository userRepository; @@ -41,7 +41,7 @@ void setUp() { } @Test - @DisplayName("Успешная регистрация нового пользователя") + @DisplayName("Successful registration of a new user") void testRegisterUserSuccess() { when(userRepository.existsByUsername("newuser")).thenReturn(false); when(userRepository.save(any(User.class))).thenReturn(true); @@ -53,20 +53,20 @@ void testRegisterUserSuccess() { } @Test - @DisplayName("Регистрация существующего пользователя выбрасывает исключение") + @DisplayName("Registering an existing user throws an exception") void testRegisterUserAlreadyExists() { when(userRepository.existsByUsername("existinguser")).thenReturn(true); assertThatThrownBy(() -> userService.registerUser("existinguser", "password123")) .isInstanceOf(UserAlreadyExistsException.class) - .hasMessageContaining("existinguser"); + .hasMessageContaining("username"); verify(userRepository).existsByUsername("existinguser"); verify(userRepository, never()).save(any(User.class)); } @Test - @DisplayName("Успешный вход пользователя") + @DisplayName("Successful user login") void testLoginUserSuccess() { User user = new User("testuser", "password123"); when(userRepository.findByUsername("testuser")).thenReturn(Optional.of(user)); @@ -79,19 +79,19 @@ void testLoginUserSuccess() { } @Test - @DisplayName("Вход с несуществующим пользователем выбрасывает исключение") + @DisplayName("Logging in with a non-existent user throws an exception") void testLoginUserNotFound() { when(userRepository.findByUsername("nonexistent")).thenReturn(Optional.empty()); assertThatThrownBy(() -> userService.loginUser("nonexistent", "password123")) .isInstanceOf(UserNotFoundException.class) - .hasMessageContaining("nonexistent"); + .hasMessageContaining("username"); verify(userRepository).findByUsername("nonexistent"); } @Test - @DisplayName("Вход с неверным паролем выбрасывает исключение") + @DisplayName("Logging in with an incorrect password throws an exception.") void testLoginUserInvalidPassword() { User user = new User("testuser", "correctpassword"); when(userRepository.findByUsername("testuser")).thenReturn(Optional.of(user)); @@ -103,7 +103,7 @@ void testLoginUserInvalidPassword() { } @Test - @DisplayName("Проверка авторизации без сессии") + @DisplayName("Checking authorization without a session") void testIsAuthenticatedWithoutSession() { when(request.getSession(false)).thenReturn(null); @@ -114,7 +114,7 @@ void testIsAuthenticatedWithoutSession() { } @Test - @DisplayName("Проверка авторизации с сессией без username") + @DisplayName("Verifying authorization with a session without username") void testIsAuthenticatedWithSessionWithoutUsername() { when(request.getSession(false)).thenReturn(session); when(session.getAttribute("username")).thenReturn(null); @@ -127,7 +127,7 @@ void testIsAuthenticatedWithSessionWithoutUsername() { } @Test - @DisplayName("Успешный выход из системы") + @DisplayName("Successful logout") void testLogoutSuccess() { when(request.getSession(false)).thenReturn(session); when(session.getAttribute("username")).thenReturn("testuser"); @@ -140,7 +140,7 @@ void testLogoutSuccess() { } @Test - @DisplayName("Выход из системы без активной сессии") + @DisplayName("Log out without an active session") void testLogoutWithoutSession() { when(request.getSession(false)).thenReturn(null); From 41144f6c22a8dc2d0b2fbfe04d178dc293d56873 Mon Sep 17 00:00:00 2001 From: KitaYaro-V Date: Fri, 30 Jan 2026 17:23:18 +0300 Subject: [PATCH 13/14] READY project --- src/main/webapp/WEB-INF/header.jsp | 35 +------------------ .../matsarskaya/cmd/StatisticPageTest.java | 10 +++--- 2 files changed, 6 insertions(+), 39 deletions(-) diff --git a/src/main/webapp/WEB-INF/header.jsp b/src/main/webapp/WEB-INF/header.jsp index 54485a3..d1b0433 100644 --- a/src/main/webapp/WEB-INF/header.jsp +++ b/src/main/webapp/WEB-INF/header.jsp @@ -1,7 +1,7 @@ <%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ taglib uri="jakarta.tags.core" prefix="c" %> - +
    - \ No newline at end of file diff --git a/src/test/java/com/javarush/matsarskaya/cmd/StatisticPageTest.java b/src/test/java/com/javarush/matsarskaya/cmd/StatisticPageTest.java index 256e73d..16c0ec3 100644 --- a/src/test/java/com/javarush/matsarskaya/cmd/StatisticPageTest.java +++ b/src/test/java/com/javarush/matsarskaya/cmd/StatisticPageTest.java @@ -17,7 +17,7 @@ import static org.mockito.Mockito.*; @ExtendWith(MockitoExtension.class) -@DisplayName("Тесты для StatisticPage") +@DisplayName("Tests for StatisticPage") class StatisticPageTest { @Mock private StatisticService statisticService; @@ -36,7 +36,7 @@ void setUp() { } @Test - @DisplayName("GET запрос с существующей статистикой") + @DisplayName("GET a request with existing statistics") void testDoGetWithStatistic() { when(request.getSession()).thenReturn(session); when(session.getAttribute("username")).thenReturn("testuser"); @@ -53,7 +53,7 @@ void testDoGetWithStatistic() { } @Test - @DisplayName("GET запрос без статистики") + @DisplayName("GET a request without statistics") void testDoGetWithoutStatistic() { when(request.getSession()).thenReturn(session); when(session.getAttribute("username")).thenReturn("testuser"); @@ -69,7 +69,7 @@ void testDoGetWithoutStatistic() { } @Test - @DisplayName("GET запрос без авторизованного пользователя") + @DisplayName("GET a request without an authorized user") void testDoGetWithoutUser() { when(request.getSession()).thenReturn(session); when(session.getAttribute("username")).thenReturn(null); @@ -83,7 +83,7 @@ void testDoGetWithoutUser() { } @Test - @DisplayName("Получение пути к представлению") + @DisplayName("Getting the path to the view") void testGetView() { String result = statisticPage.getView(); From 1dfb07dd2289219cbc8bca8b9dd27a8fa038c2f5 Mon Sep 17 00:00:00 2001 From: KitaYaro-V Date: Fri, 30 Jan 2026 17:57:20 +0300 Subject: [PATCH 14/14] Deleted files --- .../com/javarush/khmelov/cmd/Command.java | 37 --------- .../com/javarush/khmelov/cmd/EditUser.java | 52 ------------- .../com/javarush/khmelov/cmd/ListUser.java | 26 ------- .../com/javarush/khmelov/cmd/StartPage.java | 6 -- .../com/javarush/khmelov/config/Winter.java | 29 ------- .../khmelov/controller/FrontController.java | 43 ----------- .../khmelov/controller/HttpResolver.java | 41 ---------- .../com/javarush/khmelov/entity/Role.java | 5 -- .../com/javarush/khmelov/entity/User.java | 26 ------- .../khmelov/repository/Repository.java | 19 ----- .../khmelov/repository/UserRepository.java | 50 ------------ .../javarush/khmelov/service/UserService.java | 36 --------- .../javarush/matsarskaya/FrontController.java | 39 ---------- src/main/webapp/WEB-INF/edit-user.jsp | 73 ------------------ src/main/webapp/WEB-INF/head.jsp | 11 --- src/main/webapp/WEB-INF/list-user.jsp | 9 --- src/main/webapp/WEB-INF/start-page.jsp | 8 -- src/main/webapp/images/cat.png | Bin 98607 -> 0 bytes 18 files changed, 510 deletions(-) delete mode 100644 src/main/java/com/javarush/khmelov/cmd/Command.java delete mode 100644 src/main/java/com/javarush/khmelov/cmd/EditUser.java delete mode 100644 src/main/java/com/javarush/khmelov/cmd/ListUser.java delete mode 100644 src/main/java/com/javarush/khmelov/cmd/StartPage.java delete mode 100644 src/main/java/com/javarush/khmelov/config/Winter.java delete mode 100644 src/main/java/com/javarush/khmelov/controller/FrontController.java delete mode 100644 src/main/java/com/javarush/khmelov/controller/HttpResolver.java delete mode 100644 src/main/java/com/javarush/khmelov/entity/Role.java delete mode 100644 src/main/java/com/javarush/khmelov/entity/User.java delete mode 100644 src/main/java/com/javarush/khmelov/repository/Repository.java delete mode 100644 src/main/java/com/javarush/khmelov/repository/UserRepository.java delete mode 100644 src/main/java/com/javarush/khmelov/service/UserService.java delete mode 100644 src/main/java/com/javarush/matsarskaya/FrontController.java delete mode 100644 src/main/webapp/WEB-INF/edit-user.jsp delete mode 100644 src/main/webapp/WEB-INF/head.jsp delete mode 100644 src/main/webapp/WEB-INF/list-user.jsp delete mode 100644 src/main/webapp/WEB-INF/start-page.jsp delete mode 100644 src/main/webapp/images/cat.png diff --git a/src/main/java/com/javarush/khmelov/cmd/Command.java b/src/main/java/com/javarush/khmelov/cmd/Command.java deleted file mode 100644 index fd4035b..0000000 --- a/src/main/java/com/javarush/khmelov/cmd/Command.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.javarush.khmelov.cmd; - -import jakarta.servlet.http.HttpServletRequest; - -import java.util.stream.Collectors; -import java.util.stream.Stream; - -public interface Command { - - default String doGet(HttpServletRequest request) { - return getView(); - } - - default String doPost(HttpServletRequest request) { - return getView(); - } - - default String getView() { - String simpleName = this.getClass().getSimpleName(); - return convertCamelCaseToKebabStyle(simpleName); - } - - private static String convertCamelCaseToKebabStyle(String string) { - String snakeName = string.chars() - .mapToObj(s -> String.valueOf((char) s)) - .flatMap(s -> s.matches("[A-Z]") - ? Stream.of("-", s) - : Stream.of(s)) - .collect(Collectors.joining()) - .toLowerCase(); - return snakeName.startsWith("-") - ? snakeName.substring(1) - : snakeName; - } - - -} diff --git a/src/main/java/com/javarush/khmelov/cmd/EditUser.java b/src/main/java/com/javarush/khmelov/cmd/EditUser.java deleted file mode 100644 index ae191b4..0000000 --- a/src/main/java/com/javarush/khmelov/cmd/EditUser.java +++ /dev/null @@ -1,52 +0,0 @@ -package com.javarush.khmelov.cmd; - -import com.javarush.khmelov.entity.Role; -import com.javarush.khmelov.entity.User; -import com.javarush.khmelov.service.UserService; -import jakarta.servlet.http.HttpServletRequest; - -import java.util.Optional; - - -@SuppressWarnings("unused") -public class EditUser implements Command { - - private final UserService userService; - - public EditUser(UserService userService) { - this.userService = userService; - } - - - @Override - public String doGet(HttpServletRequest req) { - String stringId = req.getParameter("id"); - if (stringId != null) { - long id = Long.parseLong(stringId); - Optional optionalUser = userService.get(id); - if (optionalUser.isPresent()) { - User user = optionalUser.get(); - req.setAttribute("user", user); - } - } - return getView(); - } - - @Override - public String doPost(HttpServletRequest req) { - User user = User.builder() - .login(req.getParameter("login")) - .password(req.getParameter("password")) - .role(Role.valueOf(req.getParameter("role"))) - .build(); - if (req.getParameter("create") != null) { - userService.create(user); - } else if (req.getParameter("update") != null) { - user.setId(Long.parseLong(req.getParameter("id"))); - userService.update(user); - } - return getView() + "?id=" + user.getId(); - } - - -} \ No newline at end of file diff --git a/src/main/java/com/javarush/khmelov/cmd/ListUser.java b/src/main/java/com/javarush/khmelov/cmd/ListUser.java deleted file mode 100644 index 9257917..0000000 --- a/src/main/java/com/javarush/khmelov/cmd/ListUser.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.javarush.khmelov.cmd; - -import com.javarush.khmelov.entity.User; -import com.javarush.khmelov.service.UserService; -import jakarta.servlet.http.HttpServletRequest; - -import java.util.Collection; - -@SuppressWarnings("unused") -public class ListUser implements Command { - - private final UserService userService; - - public ListUser(UserService userService) { - this.userService = userService; - } - - @Override - public String doGet(HttpServletRequest request) { - Collection users = userService.getAll(); - request.setAttribute("users", users); - return getView(); - } - - -} \ No newline at end of file diff --git a/src/main/java/com/javarush/khmelov/cmd/StartPage.java b/src/main/java/com/javarush/khmelov/cmd/StartPage.java deleted file mode 100644 index d268f93..0000000 --- a/src/main/java/com/javarush/khmelov/cmd/StartPage.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.javarush.khmelov.cmd; - -@SuppressWarnings("unused") -public class StartPage implements Command { - -} diff --git a/src/main/java/com/javarush/khmelov/config/Winter.java b/src/main/java/com/javarush/khmelov/config/Winter.java deleted file mode 100644 index 48bd8a7..0000000 --- a/src/main/java/com/javarush/khmelov/config/Winter.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.javarush.khmelov.config; - -import lombok.SneakyThrows; - -import java.lang.reflect.Constructor; -import java.util.concurrent.ConcurrentHashMap; - -public class Winter { - - public static ConcurrentHashMap, Object> components = new ConcurrentHashMap<>(); - - - @SuppressWarnings("unchecked") - @SneakyThrows - public static T find(Class aClass) { - Object component = components.get(aClass); - if (component == null) { - Constructor constructor = aClass.getConstructors()[0]; - Class[] parameterTypes = constructor.getParameterTypes(); - Object[] parameters = new Object[parameterTypes.length]; - for (int i = 0; i < parameters.length; i++) { - parameters[i] = Winter.find(parameterTypes[i]); - } - Object newInstance = constructor.newInstance(parameters); - components.put(aClass, newInstance); - } - return (T) components.get(aClass); - } -} diff --git a/src/main/java/com/javarush/khmelov/controller/FrontController.java b/src/main/java/com/javarush/khmelov/controller/FrontController.java deleted file mode 100644 index 33242b2..0000000 --- a/src/main/java/com/javarush/khmelov/controller/FrontController.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.javarush.khmelov.controller; - -import com.javarush.khmelov.cmd.Command; -import com.javarush.khmelov.config.Winter; -import com.javarush.khmelov.entity.Role; -import jakarta.servlet.ServletConfig; -import jakarta.servlet.ServletException; -import jakarta.servlet.annotation.WebServlet; -import jakarta.servlet.http.HttpServlet; -import jakarta.servlet.http.HttpServletRequest; -import jakarta.servlet.http.HttpServletResponse; - -import java.io.IOException; - -@WebServlet({"", "/home", "/list-user", "/edit-user"}) -public class FrontController extends HttpServlet { - - private final HttpResolver httpResolver = Winter.find(HttpResolver.class); - - @Override - protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { - Command command = httpResolver.resolve(req); - String view = command.doGet(req); - String jsp = getJsp(view); - req.getRequestDispatcher(jsp).forward(req, resp); - } - - @Override - public void init(ServletConfig config) { - config.getServletContext().setAttribute("roles", Role.values()); - } - - private static String getJsp(String view) { - return "/WEB-INF/" + view + ".jsp"; - } - - @Override - protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { - Command command = httpResolver.resolve(req); - String redirect = command.doPost(req); - resp.sendRedirect(redirect); - } -} diff --git a/src/main/java/com/javarush/khmelov/controller/HttpResolver.java b/src/main/java/com/javarush/khmelov/controller/HttpResolver.java deleted file mode 100644 index 18bb761..0000000 --- a/src/main/java/com/javarush/khmelov/controller/HttpResolver.java +++ /dev/null @@ -1,41 +0,0 @@ -package com.javarush.khmelov.controller; - -import com.javarush.khmelov.cmd.Command; -import com.javarush.khmelov.config.Winter; -import jakarta.servlet.http.HttpServletRequest; - -public class HttpResolver { - - public Command resolve(HttpServletRequest request) { - // /cmd-example - try { - String requestURI = request.getRequestURI(); - requestURI = requestURI.equals("/") ? "/start-page" : requestURI; - String kebabName = requestURI.split("[?#/]")[1]; - String simpleName = convertKebabStyleToCamelCase(kebabName); - String fullName = Command.class.getPackageName() + "." + simpleName; - Class aClass = Class.forName(fullName); - return (Command) Winter.find(aClass); - } catch (ClassNotFoundException e) { - throw new RuntimeException(e); - } - } - - private String convertKebabStyleToCamelCase(String input) { - StringBuilder result = new StringBuilder(); - boolean capitalizeNext = true; - for (char c : input.toCharArray()) { - if (c == '-') { - capitalizeNext = true; - } else { - if (capitalizeNext) { - result.append(Character.toUpperCase(c)); - capitalizeNext = false; - } else { - result.append(Character.toLowerCase(c)); - } - } - } - return result.toString(); - } -} diff --git a/src/main/java/com/javarush/khmelov/entity/Role.java b/src/main/java/com/javarush/khmelov/entity/Role.java deleted file mode 100644 index 5ae365f..0000000 --- a/src/main/java/com/javarush/khmelov/entity/Role.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.javarush.khmelov.entity; - -public enum Role { - USER, ADMIN, GUEST -} diff --git a/src/main/java/com/javarush/khmelov/entity/User.java b/src/main/java/com/javarush/khmelov/entity/User.java deleted file mode 100644 index f7fa2d6..0000000 --- a/src/main/java/com/javarush/khmelov/entity/User.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.javarush.khmelov.entity; - -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Data; -import lombok.NoArgsConstructor; - -@Data -@NoArgsConstructor -@AllArgsConstructor -@Builder -public class User { - - private Long id; - - private String login; - - private String password; - - private Role role; - - public String getImage() { //TODO move to DTO - return "image-" + id; - } - -} diff --git a/src/main/java/com/javarush/khmelov/repository/Repository.java b/src/main/java/com/javarush/khmelov/repository/Repository.java deleted file mode 100644 index f1abdac..0000000 --- a/src/main/java/com/javarush/khmelov/repository/Repository.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.javarush.khmelov.repository; - -import com.javarush.khmelov.entity.User; - -import java.util.Collection; -import java.util.Optional; - -public interface Repository { - - Collection getAll(); - - Optional get(long id); - - void create(T entity); - - void update(T entity); - - void delete(T entity); -} diff --git a/src/main/java/com/javarush/khmelov/repository/UserRepository.java b/src/main/java/com/javarush/khmelov/repository/UserRepository.java deleted file mode 100644 index 58b32ea..0000000 --- a/src/main/java/com/javarush/khmelov/repository/UserRepository.java +++ /dev/null @@ -1,50 +0,0 @@ -package com.javarush.khmelov.repository; - -import com.javarush.khmelov.entity.Role; -import com.javarush.khmelov.entity.User; - -import java.util.Collection; -import java.util.HashMap; -import java.util.Map; -import java.util.Optional; -import java.util.concurrent.atomic.AtomicLong; - -public class UserRepository implements Repository { - - private final Map map = new HashMap<>(); - - public static final AtomicLong id = new AtomicLong(System.currentTimeMillis()); - - public UserRepository() { - map.put(1L, new User(1L, "Alisa", "qwerty", Role.USER)); - map.put(2L, new User(2L, "Bob", "", Role.GUEST)); - map.put(3L, new User(3L, "Carl", "admin", Role.ADMIN)); - map.put(4L, new User(4L, "Khmelov", "admin", Role.ADMIN)); - } - - @Override - public Collection getAll() { - return map.values(); - } - - @Override - public Optional get(long id) { - return Optional.ofNullable(map.get(id)); - } - - @Override - public void create(User entity) { - entity.setId(id.incrementAndGet()); - update(entity); - } - - @Override - public void update(User entity) { - map.put(entity.getId(), entity); - } - - @Override - public void delete(User entity) { - map.remove(entity.getId()); - } -} diff --git a/src/main/java/com/javarush/khmelov/service/UserService.java b/src/main/java/com/javarush/khmelov/service/UserService.java deleted file mode 100644 index b17527c..0000000 --- a/src/main/java/com/javarush/khmelov/service/UserService.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.javarush.khmelov.service; - -import com.javarush.khmelov.entity.User; -import com.javarush.khmelov.repository.UserRepository; - -import java.util.Collection; -import java.util.Optional; - -public class UserService { - - private final UserRepository userRepository; - - public UserService(UserRepository userRepository) { - this.userRepository = userRepository; - } - - public void create(User user) { - userRepository.create(user); - } - - public void update(User user) { - userRepository.update(user); - } - - public void delete(User user) { - userRepository.delete(user); - } - - public Collection getAll() { - return userRepository.getAll(); - } - - public Optional get(long id) { - return userRepository.get(id); - } -} diff --git a/src/main/java/com/javarush/matsarskaya/FrontController.java b/src/main/java/com/javarush/matsarskaya/FrontController.java deleted file mode 100644 index 454546d..0000000 --- a/src/main/java/com/javarush/matsarskaya/FrontController.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.javarush.matsarskaya; - -import jakarta.servlet.ServletException; -import jakarta.servlet.annotation.WebServlet; -import jakarta.servlet.http.HttpServlet; -import jakarta.servlet.http.HttpServletRequest; -import jakarta.servlet.http.HttpServletResponse; - -import java.io.IOException; - -@WebServlet("/") -public class FrontController extends HttpServlet { - - @Override - protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { - // Прямое перенаправление на JSP страницу - req.getRequestDispatcher("/WEB-INF/home.jsp").forward(req, resp); - - } - - @Override - protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { - String choiceQuest =req.getParameter("quest"); - String message = ""; - - if (choiceQuest.equals("the way of the dragon rider")) { - message = "Вы выбрали квест путь всадника дракона"; - } - req.setAttribute("message", message); - req.getRequestDispatcher("/WEB-INF/home.jsp").forward(req, resp); - } - - @Override - public void init() throws ServletException { - super.init(); - } -} - - diff --git a/src/main/webapp/WEB-INF/edit-user.jsp b/src/main/webapp/WEB-INF/edit-user.jsp deleted file mode 100644 index f274104..0000000 --- a/src/main/webapp/WEB-INF/edit-user.jsp +++ /dev/null @@ -1,73 +0,0 @@ -<%@ page contentType="text/html;charset=UTF-8" language="java" %> -<%@include file="head.jsp" %> - -
    -
    -
    - - - Edit user: - - -
    - -
    - - min 3 symbols -
    -
    - - -
    - -
    - - min 8 symb -
    -
    - - - -
    - -
    - -
    -
    - - -
    - -
    - - - - - - - -
    -
    - -
    - -
    - - diff --git a/src/main/webapp/WEB-INF/head.jsp b/src/main/webapp/WEB-INF/head.jsp deleted file mode 100644 index 2f7b9f2..0000000 --- a/src/main/webapp/WEB-INF/head.jsp +++ /dev/null @@ -1,11 +0,0 @@ -<%@ page contentType="text/html;charset=UTF-8" language="java" %> -<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> - - - Title - - - \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/list-user.jsp b/src/main/webapp/WEB-INF/list-user.jsp deleted file mode 100644 index dd52c55..0000000 --- a/src/main/webapp/WEB-INF/list-user.jsp +++ /dev/null @@ -1,9 +0,0 @@ -<%@ page contentType="text/html;charset=UTF-8" language="java" %> -<%@include file="head.jsp"%> - - - ${user.login} - - - - diff --git a/src/main/webapp/WEB-INF/start-page.jsp b/src/main/webapp/WEB-INF/start-page.jsp deleted file mode 100644 index 0531c1c..0000000 --- a/src/main/webapp/WEB-INF/start-page.jsp +++ /dev/null @@ -1,8 +0,0 @@ -<%@ page contentType="text/html;charset=UTF-8" language="java" %> -<%@include file="head.jsp"%> - -

    <%= "Hello World!" %> -

    -
    -List Users - diff --git a/src/main/webapp/images/cat.png b/src/main/webapp/images/cat.png deleted file mode 100644 index 41771a150e8b04624df7697882a13e789b48af7d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 98607 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%0Aj+deS- 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