From aedf37fd3b9b68a9577d389f84114e334bc57ba4 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Martin=20Gargalovi=C4=8D?= <xgargal@fi.muni.cz>
Date: Sun, 19 Mar 2023 12:41:32 +0100
Subject: [PATCH 01/11] mail-module impl

---
 application/model/pom.xml                     |  7 +++++
 application/module-mail/pom.xml               | 15 ++++++++++
 .../fuseri/modulemail/service/EmailDto.java   | 15 ++++++++++
 .../modulemail/service/MailControler.java     | 28 +++++++++++++++++++
 .../modulemail/service/MailService.java       | 23 +++++++++++++++
 .../src/main/resources/application.properties |  9 +++++-
 6 files changed, 96 insertions(+), 1 deletion(-)
 create mode 100644 application/module-mail/src/main/java/org/fuseri/modulemail/service/EmailDto.java
 create mode 100644 application/module-mail/src/main/java/org/fuseri/modulemail/service/MailControler.java
 create mode 100644 application/module-mail/src/main/java/org/fuseri/modulemail/service/MailService.java

diff --git a/application/model/pom.xml b/application/model/pom.xml
index aa4f9b93..705682e3 100644
--- a/application/model/pom.xml
+++ b/application/model/pom.xml
@@ -17,5 +17,12 @@
     <properties>
         <spring-boot.repackage.skip>true</spring-boot.repackage.skip>
     </properties>
+    <dependencies>
+        <dependency>
+            <groupId>org.ifinalframework.annotation</groupId>
+            <artifactId>final-annotation-web</artifactId>
+            <version>1.4.0</version>
+        </dependency>
+    </dependencies>
 
 </project>
\ No newline at end of file
diff --git a/application/module-mail/pom.xml b/application/module-mail/pom.xml
index 4e729ff3..42f8c4f9 100644
--- a/application/module-mail/pom.xml
+++ b/application/module-mail/pom.xml
@@ -27,6 +27,21 @@
             <artifactId>spring-boot-starter-test</artifactId>
             <scope>test</scope>
         </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-web</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-mail</artifactId>
+            <version>3.0.4</version>
+        </dependency>
+
+<!--        <dependency>-->
+<!--            <groupId>javax.mail</groupId>-->
+<!--            <artifactId>mail</artifactId>-->
+<!--            <version>1.4.7</version>-->
+<!--        </dependency>-->
     </dependencies>
 
     <build>
diff --git a/application/module-mail/src/main/java/org/fuseri/modulemail/service/EmailDto.java b/application/module-mail/src/main/java/org/fuseri/modulemail/service/EmailDto.java
new file mode 100644
index 00000000..7db3d98a
--- /dev/null
+++ b/application/module-mail/src/main/java/org/fuseri/modulemail/service/EmailDto.java
@@ -0,0 +1,15 @@
+package org.fuseri.modulemail.service;
+
+public class EmailDto {
+
+    String sender;
+    String receiver;
+    String content;
+
+    public EmailDto(String sender, String receiver, String content) {
+        this.sender = sender;
+        this.receiver = receiver;
+        this.content = content;
+    }
+
+}
diff --git a/application/module-mail/src/main/java/org/fuseri/modulemail/service/MailControler.java b/application/module-mail/src/main/java/org/fuseri/modulemail/service/MailControler.java
new file mode 100644
index 00000000..87d7d61b
--- /dev/null
+++ b/application/module-mail/src/main/java/org/fuseri/modulemail/service/MailControler.java
@@ -0,0 +1,28 @@
+package org.fuseri.modulemail.service;
+
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+@RequestMapping("/mail")
+public class MailControler {
+
+    private final MailService service;
+
+    @Autowired
+    public MailControler(MailService service) {
+        this.service = service;
+    }
+
+    @PostMapping()
+    public ResponseEntity sendMail(@RequestBody EmailDto emailDto) {
+        return ResponseEntity.ok(service.send(emailDto));
+    }
+
+
+}
diff --git a/application/module-mail/src/main/java/org/fuseri/modulemail/service/MailService.java b/application/module-mail/src/main/java/org/fuseri/modulemail/service/MailService.java
new file mode 100644
index 00000000..32e13bc6
--- /dev/null
+++ b/application/module-mail/src/main/java/org/fuseri/modulemail/service/MailService.java
@@ -0,0 +1,23 @@
+package org.fuseri.modulemail.service;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.mail.SimpleMailMessage;
+import org.springframework.mail.javamail.JavaMailSender;
+@Service
+public class MailService {
+
+    @Autowired
+    private JavaMailSender emailSender;
+
+    public String send(EmailDto dto) {
+        var message = new SimpleMailMessage();
+        message.setFrom(dto.sender);
+        message.setTo(dto.receiver);
+        message.setSubject("Sprachschul");
+        message.setText(dto.content);
+
+        emailSender.send(message);
+        return "Success, you have sent: " + dto.content;
+    }
+}
diff --git a/application/module-mail/src/main/resources/application.properties b/application/module-mail/src/main/resources/application.properties
index 8b137891..fe4165e1 100644
--- a/application/module-mail/src/main/resources/application.properties
+++ b/application/module-mail/src/main/resources/application.properties
@@ -1 +1,8 @@
-
+spring.mail.host=smtp.gmail.com
+spring.mail.port=587
+# change the email to app dedicated mail
+spring.mail.username=email@gmail.com
+# set the mail app password for the dedicated email
+spring.mail.password=password
+spring.mail.properties.mail.smtp.auth=true
+spring.mail.properties.mail.smtp.starttls.enable=true
-- 
GitLab


From 2812459132019d6ff6bf5139833f50ec0af9b08c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Martin=20Gargalovi=C4=8D?= <xgargal@fi.muni.cz>
Date: Sun, 19 Mar 2023 14:23:00 +0100
Subject: [PATCH 02/11] created a dedicated mail

---
 .../module-mail/src/main/resources/application.properties   | 6 ++----
 1 file changed, 2 insertions(+), 4 deletions(-)

diff --git a/application/module-mail/src/main/resources/application.properties b/application/module-mail/src/main/resources/application.properties
index fe4165e1..59c05327 100644
--- a/application/module-mail/src/main/resources/application.properties
+++ b/application/module-mail/src/main/resources/application.properties
@@ -1,8 +1,6 @@
 spring.mail.host=smtp.gmail.com
 spring.mail.port=587
-# change the email to app dedicated mail
-spring.mail.username=email@gmail.com
-# set the mail app password for the dedicated email
-spring.mail.password=password
+spring.mail.username=sprachschul@gmail.com
+spring.mail.password=xnyxsknctypmubbb
 spring.mail.properties.mail.smtp.auth=true
 spring.mail.properties.mail.smtp.starttls.enable=true
-- 
GitLab


From a0277648d2613b60aac5201a706de7ca4c8a847c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Martin=20Gargalovi=C4=8D?= <xgargal@fi.muni.cz>
Date: Thu, 23 Mar 2023 16:20:06 +0100
Subject: [PATCH 03/11] added toString()

---
 .../main/java/org/fuseri/modulemail/service/EmailDto.java | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/application/module-mail/src/main/java/org/fuseri/modulemail/service/EmailDto.java b/application/module-mail/src/main/java/org/fuseri/modulemail/service/EmailDto.java
index 7db3d98a..3b4a552d 100644
--- a/application/module-mail/src/main/java/org/fuseri/modulemail/service/EmailDto.java
+++ b/application/module-mail/src/main/java/org/fuseri/modulemail/service/EmailDto.java
@@ -12,4 +12,12 @@ public class EmailDto {
         this.content = content;
     }
 
+    @Override
+    public String toString() {
+        return "EmailDto{" +
+                "sender='" + sender + '\'' +
+                ", receiver='" + receiver + '\'' +
+                ", content='" + content + '\'' +
+                '}';
+    }
 }
-- 
GitLab


From 320c2916267b772449d206941a66abc8e9a31f7f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Martin=20Gargalovi=C4=8D?= <xgargal@fi.muni.cz>
Date: Thu, 23 Mar 2023 16:20:27 +0100
Subject: [PATCH 04/11] added get and delete mail

---
 .../fuseri/modulemail/service/MailControler.java  | 15 +++++++++++++++
 1 file changed, 15 insertions(+)

diff --git a/application/module-mail/src/main/java/org/fuseri/modulemail/service/MailControler.java b/application/module-mail/src/main/java/org/fuseri/modulemail/service/MailControler.java
index 87d7d61b..7a295183 100644
--- a/application/module-mail/src/main/java/org/fuseri/modulemail/service/MailControler.java
+++ b/application/module-mail/src/main/java/org/fuseri/modulemail/service/MailControler.java
@@ -1,8 +1,12 @@
 package org.fuseri.modulemail.service;
 
 
+import jakarta.websocket.server.PathParam;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -19,6 +23,17 @@ public class MailControler {
         this.service = service;
     }
 
+
+    @GetMapping("/{id}")
+    public ResponseEntity getEmail(@PathVariable("id") Long id) {
+        return ResponseEntity.ok(service.getMail(id).toString());
+    }
+
+    @DeleteMapping("/delete/{id}")
+    public ResponseEntity deleteMail(@PathVariable("id") Long id) {
+        return ResponseEntity.ok(service.DeleteMail(id));
+}
+
     @PostMapping()
     public ResponseEntity sendMail(@RequestBody EmailDto emailDto) {
         return ResponseEntity.ok(service.send(emailDto));
-- 
GitLab


From e1b9d63fc3954d32ebcd1354c664faca3aa3bb7a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Martin=20Gargalovi=C4=8D?= <xgargal@fi.muni.cz>
Date: Thu, 23 Mar 2023 16:21:20 +0100
Subject: [PATCH 05/11] added dummy implementation for get and delete mail

---
 .../org/fuseri/modulemail/service/MailService.java    | 11 +++++++++++
 1 file changed, 11 insertions(+)

diff --git a/application/module-mail/src/main/java/org/fuseri/modulemail/service/MailService.java b/application/module-mail/src/main/java/org/fuseri/modulemail/service/MailService.java
index 32e13bc6..f19e7fc3 100644
--- a/application/module-mail/src/main/java/org/fuseri/modulemail/service/MailService.java
+++ b/application/module-mail/src/main/java/org/fuseri/modulemail/service/MailService.java
@@ -18,6 +18,17 @@ public class MailService {
         message.setText(dto.content);
 
         emailSender.send(message);
+        // store to database once there is one
+
         return "Success, you have sent: " + dto.content;
     }
+
+    public EmailDto getMail(long id) {
+        return new EmailDto("","",""); // return from database once there is one
+    }
+
+    public String DeleteMail (long id) {
+        return "No mail with that Id";
+    }
+
 }
-- 
GitLab


From 17c730b26e522b3280885be2ed7fa0a880f8e22d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Martin=20Gargalovi=C4=8D?= <xgargal@fi.muni.cz>
Date: Sun, 26 Mar 2023 12:25:03 +0200
Subject: [PATCH 06/11] added validation to mail

---
 application/module-mail/pom.xml                |  5 +++++
 .../fuseri/modulemail/service/EmailDto.java    | 17 +++++------------
 .../modulemail/service/MailControler.java      | 18 ++++++++----------
 .../fuseri/modulemail/service/MailService.java |  4 ++--
 4 files changed, 20 insertions(+), 24 deletions(-)

diff --git a/application/module-mail/pom.xml b/application/module-mail/pom.xml
index 42f8c4f9..9d99c12f 100644
--- a/application/module-mail/pom.xml
+++ b/application/module-mail/pom.xml
@@ -22,6 +22,11 @@
             <artifactId>spring-boot-starter</artifactId>
         </dependency>
 
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-validation</artifactId>
+        </dependency>
+
         <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-test</artifactId>
diff --git a/application/module-mail/src/main/java/org/fuseri/modulemail/service/EmailDto.java b/application/module-mail/src/main/java/org/fuseri/modulemail/service/EmailDto.java
index 3b4a552d..9b863edd 100644
--- a/application/module-mail/src/main/java/org/fuseri/modulemail/service/EmailDto.java
+++ b/application/module-mail/src/main/java/org/fuseri/modulemail/service/EmailDto.java
@@ -1,23 +1,16 @@
 package org.fuseri.modulemail.service;
 
+import jakarta.validation.constraints.NotBlank;
+
 public class EmailDto {
 
-    String sender;
+    @NotBlank
     String receiver;
+    @NotBlank
     String content;
 
-    public EmailDto(String sender, String receiver, String content) {
-        this.sender = sender;
+    public EmailDto(String receiver, String content) {
         this.receiver = receiver;
         this.content = content;
     }
-
-    @Override
-    public String toString() {
-        return "EmailDto{" +
-                "sender='" + sender + '\'' +
-                ", receiver='" + receiver + '\'' +
-                ", content='" + content + '\'' +
-                '}';
-    }
 }
diff --git a/application/module-mail/src/main/java/org/fuseri/modulemail/service/MailControler.java b/application/module-mail/src/main/java/org/fuseri/modulemail/service/MailControler.java
index 7a295183..935aeb92 100644
--- a/application/module-mail/src/main/java/org/fuseri/modulemail/service/MailControler.java
+++ b/application/module-mail/src/main/java/org/fuseri/modulemail/service/MailControler.java
@@ -1,9 +1,9 @@
 package org.fuseri.modulemail.service;
 
 
-import jakarta.websocket.server.PathParam;
+import jakarta.validation.Valid;
+import jakarta.validation.constraints.PositiveOrZero;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.DeleteMapping;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PathVariable;
@@ -25,19 +25,17 @@ public class MailControler {
 
 
     @GetMapping("/{id}")
-    public ResponseEntity getEmail(@PathVariable("id") Long id) {
-        return ResponseEntity.ok(service.getMail(id).toString());
+    public String getEmail(@PositiveOrZero @PathVariable("id") Long id) {
+        return  "No mail with that id yet";
     }
 
     @DeleteMapping("/delete/{id}")
-    public ResponseEntity deleteMail(@PathVariable("id") Long id) {
-        return ResponseEntity.ok(service.DeleteMail(id));
+    public String deleteMail(@PositiveOrZero @PathVariable("id") Long id) {
+        return "Nothing to delete Yet";
 }
 
     @PostMapping()
-    public ResponseEntity sendMail(@RequestBody EmailDto emailDto) {
-        return ResponseEntity.ok(service.send(emailDto));
+    public String sendMail(@Valid @RequestBody EmailDto emailDto) {
+        return service.send(emailDto);
     }
-
-
 }
diff --git a/application/module-mail/src/main/java/org/fuseri/modulemail/service/MailService.java b/application/module-mail/src/main/java/org/fuseri/modulemail/service/MailService.java
index f19e7fc3..8eba0dac 100644
--- a/application/module-mail/src/main/java/org/fuseri/modulemail/service/MailService.java
+++ b/application/module-mail/src/main/java/org/fuseri/modulemail/service/MailService.java
@@ -12,7 +12,7 @@ public class MailService {
 
     public String send(EmailDto dto) {
         var message = new SimpleMailMessage();
-        message.setFrom(dto.sender);
+        message.setFrom("sprachul@gmail.com");
         message.setTo(dto.receiver);
         message.setSubject("Sprachschul");
         message.setText(dto.content);
@@ -24,7 +24,7 @@ public class MailService {
     }
 
     public EmailDto getMail(long id) {
-        return new EmailDto("","",""); // return from database once there is one
+        return new EmailDto("empty","empty"); // return from database once there is one
     }
 
     public String DeleteMail (long id) {
-- 
GitLab


From 8cbcbe98a7aa027450654271c274c60bd7e1a955 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Martin=20Gargalovi=C4=8D?= <xgargal@fi.muni.cz>
Date: Sun, 26 Mar 2023 13:33:59 +0200
Subject: [PATCH 07/11] fixing typos and refactoring MailDto to correct dir

---
 application/model/pom.xml                            |  4 ++++
 .../java/org/fuseri/model/dto/mail/MailDto.java}     | 12 +++++++++---
 application/module-mail/pom.xml                      |  8 +++++++-
 .../{MailControler.java => MailController.java}      |  7 ++++---
 .../org/fuseri/modulemail/service/MailService.java   |  9 +++++----
 5 files changed, 29 insertions(+), 11 deletions(-)
 rename application/{module-mail/src/main/java/org/fuseri/modulemail/service/EmailDto.java => model/src/main/java/org/fuseri/model/dto/mail/MailDto.java} (50%)
 rename application/module-mail/src/main/java/org/fuseri/modulemail/service/{MailControler.java => MailController.java} (85%)

diff --git a/application/model/pom.xml b/application/model/pom.xml
index 705682e3..1add6d56 100644
--- a/application/model/pom.xml
+++ b/application/model/pom.xml
@@ -23,6 +23,10 @@
             <artifactId>final-annotation-web</artifactId>
             <version>1.4.0</version>
         </dependency>
+        <dependency>
+            <groupId>jakarta.validation</groupId>
+            <artifactId>jakarta.validation-api</artifactId>
+        </dependency>
     </dependencies>
 
 </project>
\ No newline at end of file
diff --git a/application/module-mail/src/main/java/org/fuseri/modulemail/service/EmailDto.java b/application/model/src/main/java/org/fuseri/model/dto/mail/MailDto.java
similarity index 50%
rename from application/module-mail/src/main/java/org/fuseri/modulemail/service/EmailDto.java
rename to application/model/src/main/java/org/fuseri/model/dto/mail/MailDto.java
index 9b863edd..413e15b2 100644
--- a/application/module-mail/src/main/java/org/fuseri/modulemail/service/EmailDto.java
+++ b/application/model/src/main/java/org/fuseri/model/dto/mail/MailDto.java
@@ -1,15 +1,21 @@
-package org.fuseri.modulemail.service;
+package org.fuseri.model.dto.mail;
 
 import jakarta.validation.constraints.NotBlank;
+import lombok.Getter;
+import lombok.Setter;
 
-public class EmailDto {
+@Getter
+@Setter
+public class MailDto {
 
     @NotBlank
+    public
     String receiver;
     @NotBlank
+    public
     String content;
 
-    public EmailDto(String receiver, String content) {
+    public MailDto(String receiver, String content) {
         this.receiver = receiver;
         this.content = content;
     }
diff --git a/application/module-mail/pom.xml b/application/module-mail/pom.xml
index 9d99c12f..451076a8 100644
--- a/application/module-mail/pom.xml
+++ b/application/module-mail/pom.xml
@@ -41,8 +41,14 @@
             <artifactId>spring-boot-starter-mail</artifactId>
             <version>3.0.4</version>
         </dependency>
+        <dependency>
+            <groupId>org.fuseri</groupId>
+            <artifactId>models</artifactId>
+            <version>0.0.1-SNAPSHOT</version>
+            <scope>compile</scope>
+        </dependency>
 
-<!--        <dependency>-->
+        <!--        <dependency>-->
 <!--            <groupId>javax.mail</groupId>-->
 <!--            <artifactId>mail</artifactId>-->
 <!--            <version>1.4.7</version>-->
diff --git a/application/module-mail/src/main/java/org/fuseri/modulemail/service/MailControler.java b/application/module-mail/src/main/java/org/fuseri/modulemail/service/MailController.java
similarity index 85%
rename from application/module-mail/src/main/java/org/fuseri/modulemail/service/MailControler.java
rename to application/module-mail/src/main/java/org/fuseri/modulemail/service/MailController.java
index 935aeb92..58f76ef0 100644
--- a/application/module-mail/src/main/java/org/fuseri/modulemail/service/MailControler.java
+++ b/application/module-mail/src/main/java/org/fuseri/modulemail/service/MailController.java
@@ -3,6 +3,7 @@ package org.fuseri.modulemail.service;
 
 import jakarta.validation.Valid;
 import jakarta.validation.constraints.PositiveOrZero;
+import org.fuseri.model.dto.mail.MailDto;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.DeleteMapping;
 import org.springframework.web.bind.annotation.GetMapping;
@@ -14,12 +15,12 @@ import org.springframework.web.bind.annotation.RestController;
 
 @RestController
 @RequestMapping("/mail")
-public class MailControler {
+public class MailController {
 
     private final MailService service;
 
     @Autowired
-    public MailControler(MailService service) {
+    public MailController(MailService service) {
         this.service = service;
     }
 
@@ -35,7 +36,7 @@ public class MailControler {
 }
 
     @PostMapping()
-    public String sendMail(@Valid @RequestBody EmailDto emailDto) {
+    public String sendMail(@Valid @RequestBody MailDto emailDto) {
         return service.send(emailDto);
     }
 }
diff --git a/application/module-mail/src/main/java/org/fuseri/modulemail/service/MailService.java b/application/module-mail/src/main/java/org/fuseri/modulemail/service/MailService.java
index 8eba0dac..a2ee5539 100644
--- a/application/module-mail/src/main/java/org/fuseri/modulemail/service/MailService.java
+++ b/application/module-mail/src/main/java/org/fuseri/modulemail/service/MailService.java
@@ -1,5 +1,6 @@
 package org.fuseri.modulemail.service;
 
+import org.fuseri.model.dto.mail.MailDto;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.mail.SimpleMailMessage;
@@ -10,7 +11,7 @@ public class MailService {
     @Autowired
     private JavaMailSender emailSender;
 
-    public String send(EmailDto dto) {
+    public String send(MailDto dto) {
         var message = new SimpleMailMessage();
         message.setFrom("sprachul@gmail.com");
         message.setTo(dto.receiver);
@@ -23,11 +24,11 @@ public class MailService {
         return "Success, you have sent: " + dto.content;
     }
 
-    public EmailDto getMail(long id) {
-        return new EmailDto("empty","empty"); // return from database once there is one
+    public MailDto getMail(long id) {
+        return new MailDto("empty","empty"); // return from database once there is one
     }
 
-    public String DeleteMail (long id) {
+    public String deleteMail(long id) {
         return "No mail with that Id";
     }
 
-- 
GitLab


From deba5edfec8c66590fce1f2fd21b95d524a27972 Mon Sep 17 00:00:00 2001
From: Dominika Zemanovicova <xzemanov@fi.muni.cz>
Date: Sun, 26 Mar 2023 18:23:57 +0200
Subject: [PATCH 08/11] Add mail controller tests

---
 .../service/MailControllerTest.java           | 32 +++++++++++++++++++
 1 file changed, 32 insertions(+)
 create mode 100644 application/module-mail/src/test/java/org/fuseri/modulemail/service/MailControllerTest.java

diff --git a/application/module-mail/src/test/java/org/fuseri/modulemail/service/MailControllerTest.java b/application/module-mail/src/test/java/org/fuseri/modulemail/service/MailControllerTest.java
new file mode 100644
index 00000000..af394ca5
--- /dev/null
+++ b/application/module-mail/src/test/java/org/fuseri/modulemail/service/MailControllerTest.java
@@ -0,0 +1,32 @@
+package org.fuseri.modulemail.service;
+
+import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.web.servlet.MockMvc;
+
+import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.delete;
+import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
+import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
+
+@SpringBootTest
+@AutoConfigureMockMvc
+class MailControllerTest {
+
+    @Autowired
+    private MockMvc mockMvc;
+
+    @Test
+    void getEmail() throws Exception {
+        mockMvc.perform(get("/mail/{id}", 1))
+                .andExpect(status().isOk());
+    }
+
+    @Test
+    void deleteMail() throws Exception {
+        mockMvc.perform(delete("/mail/delete/{id}", 1))
+                .andExpect(status().isOk());
+    }
+
+}
\ No newline at end of file
-- 
GitLab


From 2b698701a5a2968ff8ebb79309046faa244dbd33 Mon Sep 17 00:00:00 2001
From: Dominika Zemanovicova <xzemanov@fi.muni.cz>
Date: Sun, 26 Mar 2023 18:25:57 +0200
Subject: [PATCH 09/11] Change to Autowire in constructor

---
 .../java/org/fuseri/modulemail/service/MailService.java     | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/application/module-mail/src/main/java/org/fuseri/modulemail/service/MailService.java b/application/module-mail/src/main/java/org/fuseri/modulemail/service/MailService.java
index a2ee5539..06f5fb82 100644
--- a/application/module-mail/src/main/java/org/fuseri/modulemail/service/MailService.java
+++ b/application/module-mail/src/main/java/org/fuseri/modulemail/service/MailService.java
@@ -8,8 +8,12 @@ import org.springframework.mail.javamail.JavaMailSender;
 @Service
 public class MailService {
 
+    private final JavaMailSender emailSender;
+
     @Autowired
-    private JavaMailSender emailSender;
+    public MailService(JavaMailSender emailSender) {
+        this.emailSender = emailSender;
+    }
 
     public String send(MailDto dto) {
         var message = new SimpleMailMessage();
-- 
GitLab


From d24ac9faca0daee52cd1ffc27a80588b5d892641 Mon Sep 17 00:00:00 2001
From: Dominika Zemanovicova <xzemanov@fi.muni.cz>
Date: Sun, 26 Mar 2023 19:05:21 +0200
Subject: [PATCH 10/11] Add sendMail

---
 .../service/MailControllerTest.java           | 22 +++++++++++++++++--
 1 file changed, 20 insertions(+), 2 deletions(-)

diff --git a/application/module-mail/src/test/java/org/fuseri/modulemail/service/MailControllerTest.java b/application/module-mail/src/test/java/org/fuseri/modulemail/service/MailControllerTest.java
index af394ca5..4105485f 100644
--- a/application/module-mail/src/test/java/org/fuseri/modulemail/service/MailControllerTest.java
+++ b/application/module-mail/src/test/java/org/fuseri/modulemail/service/MailControllerTest.java
@@ -1,13 +1,17 @@
 package org.fuseri.modulemail.service;
 
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import org.fuseri.model.dto.mail.MailDto;
 import org.junit.jupiter.api.Test;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
 import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.boot.test.mock.mockito.MockBean;
+import org.springframework.http.MediaType;
 import org.springframework.test.web.servlet.MockMvc;
 
-import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.delete;
-import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
+import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;
 import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
 
 @SpringBootTest
@@ -29,4 +33,18 @@ class MailControllerTest {
                 .andExpect(status().isOk());
     }
 
+    @Test
+    void sendMail() throws Exception {
+        // TODO use mocks
+
+        mockMvc.perform(post("/mail")
+                        .content(asJsonString(new MailDto("12marting02@gmail.com", "Hello")))
+                        .contentType(MediaType.APPLICATION_JSON))
+                .andExpect(status().isOk());
+    }
+
+    private static String asJsonString(final Object obj) throws JsonProcessingException {
+        return new ObjectMapper().writeValueAsString(obj);
+    }
+
 }
\ No newline at end of file
-- 
GitLab


From 80dc8a9c05d5eaee1c85e86ac30bd86e80d5429a Mon Sep 17 00:00:00 2001
From: Dominika Zemanovicova <xzemanov@fi.muni.cz>
Date: Sun, 26 Mar 2023 21:10:31 +0200
Subject: [PATCH 11/11] Send mail mock

---
 .../fuseri/modulemail/service/MailControllerTest.java    | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/application/module-mail/src/test/java/org/fuseri/modulemail/service/MailControllerTest.java b/application/module-mail/src/test/java/org/fuseri/modulemail/service/MailControllerTest.java
index 4105485f..8ec50ec9 100644
--- a/application/module-mail/src/test/java/org/fuseri/modulemail/service/MailControllerTest.java
+++ b/application/module-mail/src/test/java/org/fuseri/modulemail/service/MailControllerTest.java
@@ -7,10 +7,11 @@ import org.junit.jupiter.api.Test;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
 import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.boot.test.mock.mockito.MockBean;
 import org.springframework.http.MediaType;
 import org.springframework.test.web.servlet.MockMvc;
 
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
 import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;
 import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
 
@@ -35,10 +36,12 @@ class MailControllerTest {
 
     @Test
     void sendMail() throws Exception {
-        // TODO use mocks
+        var mailDto = new MailDto("user@example.com", "Hello");
+        MailController mailController = mock(MailController.class);
+        when(mailController.sendMail(mailDto)).thenReturn("Success, you have sent: " + mailDto.getContent());
 
         mockMvc.perform(post("/mail")
-                        .content(asJsonString(new MailDto("12marting02@gmail.com", "Hello")))
+                        .content(asJsonString(mailDto))
                         .contentType(MediaType.APPLICATION_JSON))
                 .andExpect(status().isOk());
     }
-- 
GitLab