diff --git a/README.md b/README.md
index 07502a8..9a8594c 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,20 @@
# CRUDRepository
-Beans Life Cycle homework
+Stanescu Gabriel
+Grupa A
-IBAN: [2 letter prefix] + [14 digits]
-TransferController checks if a transfer should be internal or external, based on the prefix.
+Tema Unit Tests
-Multiple Transfer Beans, separated with @Qualifier.
\ No newline at end of file
+Am avut dificultati in crearea a 2 Bean-uri pentru User Repository, mai exact
+la extinderea/implementarea superclaselor. Am gasit o solutie prin care clasele
+"frunze" sa fie abstracte, doar ca nu erau recunoscute de profile. Am inteles
+conceptul in sine, dar nu am reusit sa il implementez in aceasta tema. Prin urmare,
+UnitTestele ruleaza pe serverul de database, deja populat.
+
+Am lasat un fisier pentru popularea tabelelor.
+
+Unele teste vor pica deoarece la rularea tuturor, se va crea cate un user nou,
+iar un test verifica totalitatea initialelor, care depind, evident, de nr de useri.
+
+Coverage-ul este relativ mic din cauza interfetelor care nu au niciun rol si din
+cauza ca nu am implementat cateva teste care sunt de tipul Post Request. Nu am gasit
+o modalitate prin care sa trimit un body de forma form-data fara sa primesc erori.
\ No newline at end of file
diff --git a/dump.sql b/dump.sql
new file mode 100644
index 0000000..6e6fa19
--- /dev/null
+++ b/dump.sql
@@ -0,0 +1,84 @@
+-- MySQL dump 10.13 Distrib 8.0.28, for Win64 (x86_64)
+--
+-- Host: localhost Database: project
+-- ------------------------------------------------------
+-- Server version 8.0.28
+
+/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
+/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
+/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
+/*!50503 SET NAMES utf8 */;
+/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
+/*!40103 SET TIME_ZONE='+00:00' */;
+/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
+/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
+/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
+/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
+
+--
+-- Table structure for table `accounts`
+--
+
+DROP TABLE IF EXISTS `accounts`;
+/*!40101 SET @saved_cs_client = @@character_set_client */;
+/*!50503 SET character_set_client = utf8mb4 */;
+CREATE TABLE `accounts` (
+ `id` int NOT NULL,
+ `iban` varchar(255) DEFAULT NULL,
+ `balance` double NOT NULL,
+ `currency` varchar(255) DEFAULT NULL,
+ `user_id` int DEFAULT NULL,
+ PRIMARY KEY (`id`),
+ KEY `FKnjuop33mo69pd79ctplkck40n` (`user_id`),
+ CONSTRAINT `FKnjuop33mo69pd79ctplkck40n` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
+/*!40101 SET character_set_client = @saved_cs_client */;
+
+--
+-- Dumping data for table `accounts`
+--
+
+LOCK TABLES `accounts` WRITE;
+/*!40000 ALTER TABLE `accounts` DISABLE KEYS */;
+INSERT INTO `accounts` VALUES (1,'DB09079714855445',0,'RON',1);
+/*!40000 ALTER TABLE `accounts` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `users`
+--
+
+DROP TABLE IF EXISTS `users`;
+/*!40101 SET @saved_cs_client = @@character_set_client */;
+/*!50503 SET character_set_client = utf8mb4 */;
+CREATE TABLE `users` (
+ `id` int NOT NULL AUTO_INCREMENT,
+ `age` smallint NOT NULL,
+ `email` varchar(255) DEFAULT NULL,
+ `first_name` varchar(255) DEFAULT NULL,
+ `last_name` varchar(255) DEFAULT NULL,
+ `password` varchar(255) DEFAULT NULL,
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=165 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
+/*!40101 SET character_set_client = @saved_cs_client */;
+
+--
+-- Dumping data for table `users`
+--
+
+LOCK TABLES `users` WRITE;
+/*!40000 ALTER TABLE `users` DISABLE KEYS */;
+INSERT INTO `users` VALUES (1,21,'email','Gabriel','ln','pass'),(2,71,'dignissim.pharetra@aol.com','Dominic','Cade','HFU23JWM7VY'),(3,30,'at@protonmail.ca','Guy','Henry','OGU78MJU0GS'),(4,31,'scelerisque.neque.sed@protonmail.couk','Laurel','Jared','BWC11OYX0WW'),(5,44,'cras.vehicula.aliquet@google.ca','Prescott','Regina','KQB58MNI3YP'),(6,36,'euismod@aol.com','Gareth','Kenneth','OVM56HBI5GY'),(7,47,'amet.consectetuer.adipiscing@yahoo.couk','Asher','Plato','ICJ52XNY1PH'),(8,50,'consequat.lectus@google.org','Jamalia','Brendan','GHJ22MQV7YT'),(9,56,'mauris@hotmail.net','Ina','Willa','FBT48RAT8NR'),(10,52,'hendrerit@hotmail.ca','Neil','Trevor','LBD81CMJ6BK'),(11,38,'interdum.ligula@icloud.ca','Kylie','Carl','RLU45MWU7XR'),(12,39,'turpis@outlook.net','Dexter','Indigo','WJH42QIM7BX'),(13,69,'faucibus.ut@gmail.com','Harrison','Dane','CDW27QJX7HK'),(14,20,'vestibulum.mauris@google.com','Jenette','Brock','DMZ36HHD1FL'),(15,47,'primis.in@icloud.edu','Elmo','Julian','OJQ21VDI3EJ'),(16,46,'purus.ac.tellus@protonmail.couk','Herrod','Nevada','LEL15SLV2WW'),(17,58,'laoreet.libero.et@hotmail.org','Orson','Rogan','VVJ38QON8RC'),(18,42,'vel.venenatis@gmail.org','Orli','Olivia','RUT65RTE1TO'),(19,35,'libero.dui@protonmail.couk','Rhea','Baker','LBG76RFE7LU'),(20,35,'augue.malesuada@protonmail.net','Paul','Dawn','SSY78SBX3JS'),(21,23,'ac.sem.ut@icloud.net','Stacey','Holly','TFR57CIM3GF'),(22,32,'sed@google.ca','William','Maryam','ZKP12HNP2OC'),(23,61,'orci.quis@yahoo.edu','Felicia','Roanna','RFT73RMN0MV'),(24,20,'tincidunt@hotmail.couk','Raja','Howard','NIX87ZYT6LH'),(25,48,'lorem.lorem.luctus@google.edu','Sylvia','Lareina','FGJ15IKJ5JF'),(26,39,'lacus.pede@google.couk','Dolan','Vivian','HMC55IGG5TZ'),(27,64,'duis.dignissim.tempor@google.edu','Graham','Garrison','GGN18KRB0UU'),(28,61,'consequat.lectus@google.edu','Renee','Steel','TJN45FLW7IT'),(29,47,'arcu@outlook.couk','Nissim','Amy','TFB46KPW4EV'),(30,48,'nam.ac.nulla@google.couk','Marsden','Wing','BGL23LLM7SM'),(31,70,'malesuada.vel.convallis@yahoo.org','Branden','Cheyenne','VNO55TVH7EO'),(32,23,'turpis.non.enim@google.net','Oprah','Nola','JEN43MMI3QH'),(33,57,'vitae.sodales@icloud.org','Kenneth','Andrew','YTB13QDP2GD'),(34,47,'vehicula.pellentesque@google.net','Grant','Amos','XLQ65RND3TU'),(35,77,'velit.quisque.varius@outlook.ca','Kylie','Igor','JZP81ICF3RJ'),(36,34,'dignissim.maecenas@icloud.edu','Dalton','Hiram','TXX13KOL6BG'),(37,46,'arcu.ac@google.net','Deanna','Velma','CHT71QOM3EY'),(38,53,'sagittis.nullam.vitae@google.org','Lynn','Olympia','OVD71GRQ0QI'),(39,36,'magnis@aol.ca','Nathan','Wilma','HCE81AIJ7ER'),(40,27,'nec.euismod@aol.org','Laith','Stuart','PVP23GJN3DD'),(41,78,'est@icloud.com','Abel','Lillith','YSL56WHX9KY'),(42,60,'justo.proin@outlook.net','Gray','Amelia','WQK35RCR4XW'),(43,74,'montes.nascetur.ridiculus@icloud.edu','Russell','Honorato','LRK21HXM9QJ'),(44,79,'et.magnis.dis@aol.ca','Rudyard','Clayton','RTD76GGI5NW'),(45,61,'phasellus.ornare@outlook.net','Warren','Evan','MYJ53IEB5RC'),(46,46,'dui.suspendisse@aol.ca','Yael','Upton','UWQ15AEL9UY'),(47,24,'dictum.sapien@hotmail.edu','Lacey','Ella','WID92LGK6AT'),(48,78,'tincidunt.vehicula@hotmail.com','Raphael','Colleen','EJI73VQS1QD'),(49,28,'phasellus.libero@hotmail.org','Jolene','Colleen','QNO36NYO7LM'),(50,80,'dapibus.id@protonmail.org','Arden','Karleigh','QSF44SYB7AH'),(51,35,'elit.nulla@icloud.edu','Prescott','Sandra','BXP03ZCY8WI'),(52,80,'mi.duis.risus@outlook.edu','Kaseem','Channing','RPY15LYB5YW'),(53,39,'maecenas.libero.est@icloud.org','Belle','Pearl','EXW73EHV7UN'),(54,39,'lorem@yahoo.org','Nadine','Abdul','VCL66RSY7CO'),(55,75,'lacus.vestibulum@aol.com','Reece','Pascale','ETK63LWP4RF'),(56,33,'justo.nec@icloud.couk','Chase','Tyrone','CRQ14OGS0MY'),(57,49,'sed.eu.eros@icloud.ca','Samson','Yetta','UIA83BCP8LB'),(58,60,'in.felis@google.edu','Michael','Felix','FLT13ZQS1HL'),(59,5,'cum.sociis@protonmail.ca','Cameron','Molly','LGE72KLA2GS'),(60,59,'turpis@aol.couk','Arden','Maryam','XTE08KQJ1EG'),(61,25,'et.tristique@google.net','Amelia','Susan','WHY82TWM6ZH'),(62,29,'ornare@yahoo.net','Erich','Adrienne','CWG86EBW9VQ'),(63,13,'lorem.sit.amet@icloud.com','Burke','Wade','LXH63LCG5NW'),(64,35,'vel.nisl.quisque@outlook.com','Charity','Yasir','OCM28QFK5WB'),(65,45,'lectus.nullam@outlook.com','Martena','Hadassah','KPO24OKB3XN'),(66,64,'conubia.nostra@yahoo.org','Alden','Ruby','AEE84ZXX1VF'),(67,35,'aliquam.nisl@aol.edu','Murphy','Amaya','HFO67EAA8PL'),(68,44,'penatibus.et.magnis@google.org','Marshall','Holmes','TMK82GPN3MQ'),(69,5,'orci@hotmail.org','Kitra','Genevieve','BHD52UPH5OU'),(70,57,'nullam.vitae@hotmail.com','Lee','Amery','KZS97NSR4PU'),(71,53,'purus.accumsan@aol.couk','Joseph','Scarlet','JNU23ZRP1WQ'),(72,4,'tristique.ac@icloud.net','Inez','Vladimir','WIN82TYD8MK'),(73,61,'semper@outlook.com','Jack','Lysandra','NFM88FHP2ED'),(74,59,'ut@yahoo.net','Grant','Alika','DBT35HKI1EB'),(75,2,'penatibus.et@icloud.edu','Nigel','Dominique','VEL88NBQ5CY'),(76,75,'sed.turpis@outlook.edu','Dillon','Kennedy','BQO21DDZ6UY'),(77,47,'donec.tincidunt.donec@yahoo.org','Lydia','Jackson','VEK72HBH8JM'),(78,56,'dictum.placerat@outlook.ca','Gabriel','Allen','RUQ20YRV4AK'),(79,0,'orci.in.consequat@google.net','Holly','Anika','ENP44WVP0MJ'),(80,48,'aliquam@yahoo.com','Ignatius','Marshall','JGJ72UKB0FJ'),(81,44,'ut.sagittis.lobortis@yahoo.org','Ferdinand','Savannah','ELV18XJF7TO'),(82,41,'elit.pretium@google.ca','Dexter','Iliana','MLC81UNK6IA'),(83,19,'ac.urna@yahoo.ca','Gisela','Christian','FCB56MHP8HO'),(84,50,'vitae.semper@aol.couk','Cheryl','Abbot','EVC75FXC3HR'),(85,33,'gravida.sagittis.duis@icloud.net','Ainsley','Audrey','LKF96OWF1MH'),(86,43,'luctus.et.ultrices@aol.edu','Jerome','Drake','ONV89AVN4ZI'),(87,46,'ipsum.ac.mi@protonmail.org','Savannah','Chase','JSH54KTP0GX'),(88,38,'elit@outlook.com','Timothy','Rashad','URX37DGA6VX'),(89,46,'arcu.nunc.mauris@icloud.edu','Demetrius','Jonas','URW23ECU0WK'),(90,28,'eget@aol.edu','Mallory','Branden','WIK30IHE6WY'),(91,48,'risus@protonmail.org','Axel','Cheyenne','UHS60LMD5NV'),(92,4,'arcu.iaculis.enim@outlook.ca','Charde','Keiko','LBN15WJZ8TC'),(93,28,'orci@outlook.ca','Deanna','Quinlan','HUD87WVF9DU'),(94,21,'a@aol.com','Cruz','Nasim','GUG15JFD7EH'),(95,40,'a@yahoo.org','Patrick','Merrill','CHO19UOP0FC'),(96,73,'orci.sem@google.net','Roth','Prescott','MWT89JYB7WE'),(97,0,'sit.amet@google.ca','Yuli','Christian','TCN80ETR5XU'),(98,45,'vitae@protonmail.couk','Sopoline','Rogan','UDK77INS4YC'),(99,31,'semper.dui@protonmail.org','Sophia','Moana','RGP52OIV5FF'),(100,15,'eu.metus@icloud.edu','Chiquita','Ginger','NXV95GQZ6JO'),(101,46,'feugiat.metus@google.ca','Sybill','Kylee','AKU29MTD2NH'),(102,22,'enim.nec@yahoo.org','Buffy','Hashim','PYW65TWF7ER'),(103,32,'vitae.diam@outlook.couk','Zane','Josephine','JAH16ZQC3FS'),(104,9,'lorem.lorem@google.com','Ira','Athena','CJE16HKJ7EO'),(105,11,'vehicula@protonmail.org','Lewis','Tasha','AOP58OCT7VS'),(106,27,'erat.vivamus.nisi@hotmail.com','Colby','Jemima','HNF59KCC6OT'),(107,74,'tincidunt@hotmail.couk','Ulric','Amaya','VJN57AJP5RH'),(108,31,'velit@protonmail.couk','Craig','Nora','MOP35YJH7EK'),(109,56,'posuere@outlook.com','Austin','Lavinia','DNB62AAJ5XT'),(110,24,'mus@google.couk','Bevis','Michelle','GZS69CBC5QQ'),(111,70,'eros.turpis@aol.org','Katell','India','YFJ64OBU2NB'),(112,78,'pretium@google.com','Joseph','Rose','BMD84GJI2JY'),(113,22,'libero.et@google.net','Madeline','Byron','HFY28NHA1OX'),(114,3,'consectetuer.cursus@google.com','Chastity','Priscilla','EVT72XXV3MY'),(115,49,'nulla.in@outlook.edu','Melvin','Rina','SNE43VHV3SE'),(116,40,'cursus.nunc@yahoo.org','Fritz','Aladdin','QYW72YUQ9ES'),(117,64,'dapibus.gravida.aliquam@protonmail.ca','Levi','Kay','LKA37XYK1YB'),(118,79,'vestibulum.ut@hotmail.org','Avram','Tashya','ELC18QXX1CG'),(119,8,'non.lorem.vitae@google.couk','Serena','Branden','MOW07YYV7XY'),(120,65,'at.fringilla@google.net','Vivien','Louis','OWH02FHG7TJ'),(121,48,'tincidunt.dui@aol.edu','Wallace','Hoyt','USE31CRW2BG'),(122,19,'eu.ultrices@icloud.couk','Mannix','Xander','DUT51JMF8HG'),(123,9,'tincidunt.congue@protonmail.org','Mara','Damon','WFB48TPR8UL'),(124,11,'netus.et@icloud.edu','Amery','Jessamine','UFV42DSC7SE'),(125,33,'augue.scelerisque@icloud.ca','Graham','Laurel','KUF37FJC6NM'),(126,49,'velit.pellentesque@protonmail.org','Marny','Vincent','DQT47RYM8JR'),(127,49,'mauris.sit@aol.net','Ruby','Valentine','DLX33UIM6OV'),(128,4,'posuere@protonmail.org','Ira','Emmanuel','VNO62TXB7GK'),(129,36,'sit@outlook.org','Vielka','Kyra','HCM61UAC6UY'),(130,32,'accumsan@aol.ca','Tad','Kim','GVE67XXG2UO'),(131,22,'enim@aol.com','Dante','Debra','NDF85UNY2HB'),(132,55,'luctus@yahoo.ca','Rana','Ulric','XAT59QGG6UJ'),(133,66,'vitae.mauris.sit@google.edu','Remedios','Kelly','CTL80JIW9HN'),(134,55,'odio.aliquam@outlook.ca','Aimee','Thaddeus','KPN21YZH4UM'),(135,49,'ligula.aliquam@aol.org','Dexter','Ashton','AJL28TSW2GD'),(136,45,'sodales.mauris@outlook.com','Ann','Latifah','XRY79PXS7XI'),(137,2,'mauris.vestibulum@outlook.net','Madonna','Aspen','NTG77RSX0KK'),(138,16,'sem.egestas.blandit@protonmail.couk','Jana','Reed','KFJ72FIK6AI'),(139,15,'condimentum.donec.at@aol.net','Ursula','Graiden','IBI44ZSB6RQ'),(140,8,'donec.est@protonmail.ca','Karina','Cassady','IUX33WWX4BQ'),(141,32,'adipiscing.elit@protonmail.com','Slade','Thor','WGU55MYA1ZB'),(142,79,'erat.etiam@protonmail.ca','Guy','Rashad','CDY76BRY6BZ'),(143,7,'ac.feugiat@yahoo.org','Amena','Alyssa','TIB81FZB5UC'),(144,33,'nulla.interdum@outlook.com','Austin','Sylvester','EXM15GKH2BD'),(145,64,'risus.quis.diam@icloud.couk','Walter','Noel','JTH23ZYQ2AP'),(146,72,'amet.ante@google.ca','Chaney','Vera','DCG09NZR8PU'),(147,69,'semper.erat@yahoo.com','Herrod','Grant','ANT48UYU7WW'),(148,67,'posuere.enim@icloud.com','Miriam','Ria','RVQ64TUE3KS'),(149,22,'ipsum.phasellus.vitae@aol.org','Malik','Dean','YZA76TJL2EN'),(150,15,'turpis.aliquam@outlook.org','Felicia','Samson','YUY17YZX2GH'),(151,31,'mail','FirstName','ln','123'),(152,31,'mail','FirstName','ln','123'),(153,31,'mail','FirstName','ln','123'),(154,31,'mail','FirstName','ln','123'),(155,31,'mail','FirstName','ln','123'),(156,31,'mail','FirstName','ln','123'),(157,31,'mail','FirstName','ln','123'),(158,31,'mail','FirstName','ln','123'),(159,31,'mail','FirstName','ln','123'),(160,31,'mail','FirstName','ln','123'),(161,31,'mail','FirstName','ln','123'),(162,31,'mail','FirstName','ln','123'),(163,31,'mail','FirstName','ln','123'),(164,31,'mail','FirstName','ln','123');
+/*!40000 ALTER TABLE `users` ENABLE KEYS */;
+UNLOCK TABLES;
+/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
+
+/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
+/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
+/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
+/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
+/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
+/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
+/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
+
+-- Dump completed on 2022-04-21 2:51:38
diff --git a/insert_queries.sql b/insert_queries.sql
new file mode 100644
index 0000000..1497435
--- /dev/null
+++ b/insert_queries.sql
@@ -0,0 +1,132 @@
+DROP TABLE IF EXISTS `users`;
+
+CREATE TABLE `users` (
+ `id` mediumint(8) unsigned NOT NULL auto_increment,
+ `age` mediumint default NULL,
+ `email` varchar(255) default NULL,
+ `first_name` varchar(255) default NULL,
+ `last_name` varchar(255) default NULL,
+ `password` varchar(255),
+ PRIMARY KEY (`id`)
+) AUTO_INCREMENT=1;
+
+INSERT INTO `users` (`age`,`email`,`first_name`,`last_name`,`password`)
+VALUES
+ (35,"elit.nulla@icloud.edu","Prescott","Sandra","BXP03ZCY8WI"),
+ (80,"mi.duis.risus@outlook.edu","Kaseem","Channing","RPY15LYB5YW"),
+ (39,"maecenas.libero.est@icloud.org","Belle","Pearl","EXW73EHV7UN"),
+ (39,"lorem@yahoo.org","Nadine","Abdul","VCL66RSY7CO"),
+ (75,"lacus.vestibulum@aol.com","Reece","Pascale","ETK63LWP4RF"),
+ (33,"justo.nec@icloud.couk","Chase","Tyrone","CRQ14OGS0MY"),
+ (49,"sed.eu.eros@icloud.ca","Samson","Yetta","UIA83BCP8LB"),
+ (60,"in.felis@google.edu","Michael","Felix","FLT13ZQS1HL"),
+ (5,"cum.sociis@protonmail.ca","Cameron","Molly","LGE72KLA2GS"),
+ (59,"turpis@aol.couk","Arden","Maryam","XTE08KQJ1EG");
+INSERT INTO `users` (`age`,`email`,`first_name`,`last_name`,`password`)
+VALUES
+ (25,"et.tristique@google.net","Amelia","Susan","WHY82TWM6ZH"),
+ (29,"ornare@yahoo.net","Erich","Adrienne","CWG86EBW9VQ"),
+ (13,"lorem.sit.amet@icloud.com","Burke","Wade","LXH63LCG5NW"),
+ (35,"vel.nisl.quisque@outlook.com","Charity","Yasir","OCM28QFK5WB"),
+ (45,"lectus.nullam@outlook.com","Martena","Hadassah","KPO24OKB3XN"),
+ (64,"conubia.nostra@yahoo.org","Alden","Ruby","AEE84ZXX1VF"),
+ (35,"aliquam.nisl@aol.edu","Murphy","Amaya","HFO67EAA8PL"),
+ (44,"penatibus.et.magnis@google.org","Marshall","Holmes","TMK82GPN3MQ"),
+ (5,"orci@hotmail.org","Kitra","Genevieve","BHD52UPH5OU"),
+ (57,"nullam.vitae@hotmail.com","Lee","Amery","KZS97NSR4PU");
+INSERT INTO `users` (`age`,`email`,`first_name`,`last_name`,`password`)
+VALUES
+ (53,"purus.accumsan@aol.couk","Joseph","Scarlet","JNU23ZRP1WQ"),
+ (4,"tristique.ac@icloud.net","Inez","Vladimir","WIN82TYD8MK"),
+ (61,"semper@outlook.com","Jack","Lysandra","NFM88FHP2ED"),
+ (59,"ut@yahoo.net","Grant","Alika","DBT35HKI1EB"),
+ (2,"penatibus.et@icloud.edu","Nigel","Dominique","VEL88NBQ5CY"),
+ (75,"sed.turpis@outlook.edu","Dillon","Kennedy","BQO21DDZ6UY"),
+ (47,"donec.tincidunt.donec@yahoo.org","Lydia","Jackson","VEK72HBH8JM"),
+ (56,"dictum.placerat@outlook.ca","Gabriel","Allen","RUQ20YRV4AK"),
+ (0,"orci.in.consequat@google.net","Holly","Anika","ENP44WVP0MJ"),
+ (48,"aliquam@yahoo.com","Ignatius","Marshall","JGJ72UKB0FJ");
+INSERT INTO `users` (`age`,`email`,`first_name`,`last_name`,`password`)
+VALUES
+ (44,"ut.sagittis.lobortis@yahoo.org","Ferdinand","Savannah","ELV18XJF7TO"),
+ (41,"elit.pretium@google.ca","Dexter","Iliana","MLC81UNK6IA"),
+ (19,"ac.urna@yahoo.ca","Gisela","Christian","FCB56MHP8HO"),
+ (50,"vitae.semper@aol.couk","Cheryl","Abbot","EVC75FXC3HR"),
+ (33,"gravida.sagittis.duis@icloud.net","Ainsley","Audrey","LKF96OWF1MH"),
+ (43,"luctus.et.ultrices@aol.edu","Jerome","Drake","ONV89AVN4ZI"),
+ (46,"ipsum.ac.mi@protonmail.org","Savannah","Chase","JSH54KTP0GX"),
+ (38,"elit@outlook.com","Timothy","Rashad","URX37DGA6VX"),
+ (46,"arcu.nunc.mauris@icloud.edu","Demetrius","Jonas","URW23ECU0WK"),
+ (28,"eget@aol.edu","Mallory","Branden","WIK30IHE6WY");
+INSERT INTO `users` (`age`,`email`,`first_name`,`last_name`,`password`)
+VALUES
+ (48,"risus@protonmail.org","Axel","Cheyenne","UHS60LMD5NV"),
+ (4,"arcu.iaculis.enim@outlook.ca","Charde","Keiko","LBN15WJZ8TC"),
+ (28,"orci@outlook.ca","Deanna","Quinlan","HUD87WVF9DU"),
+ (21,"a@aol.com","Cruz","Nasim","GUG15JFD7EH"),
+ (40,"a@yahoo.org","Patrick","Merrill","CHO19UOP0FC"),
+ (73,"orci.sem@google.net","Roth","Prescott","MWT89JYB7WE"),
+ (0,"sit.amet@google.ca","Yuli","Christian","TCN80ETR5XU"),
+ (45,"vitae@protonmail.couk","Sopoline","Rogan","UDK77INS4YC"),
+ (31,"semper.dui@protonmail.org","Sophia","Moana","RGP52OIV5FF"),
+ (15,"eu.metus@icloud.edu","Chiquita","Ginger","NXV95GQZ6JO");
+INSERT INTO `users` (`age`,`email`,`first_name`,`last_name`,`password`)
+VALUES
+ (46,"feugiat.metus@google.ca","Sybill","Kylee","AKU29MTD2NH"),
+ (22,"enim.nec@yahoo.org","Buffy","Hashim","PYW65TWF7ER"),
+ (32,"vitae.diam@outlook.couk","Zane","Josephine","JAH16ZQC3FS"),
+ (9,"lorem.lorem@google.com","Ira","Athena","CJE16HKJ7EO"),
+ (11,"vehicula@protonmail.org","Lewis","Tasha","AOP58OCT7VS"),
+ (27,"erat.vivamus.nisi@hotmail.com","Colby","Jemima","HNF59KCC6OT"),
+ (74,"tincidunt@hotmail.couk","Ulric","Amaya","VJN57AJP5RH"),
+ (31,"velit@protonmail.couk","Craig","Nora","MOP35YJH7EK"),
+ (56,"posuere@outlook.com","Austin","Lavinia","DNB62AAJ5XT"),
+ (24,"mus@google.couk","Bevis","Michelle","GZS69CBC5QQ");
+INSERT INTO `users` (`age`,`email`,`first_name`,`last_name`,`password`)
+VALUES
+ (70,"eros.turpis@aol.org","Katell","India","YFJ64OBU2NB"),
+ (78,"pretium@google.com","Joseph","Rose","BMD84GJI2JY"),
+ (22,"libero.et@google.net","Madeline","Byron","HFY28NHA1OX"),
+ (3,"consectetuer.cursus@google.com","Chastity","Priscilla","EVT72XXV3MY"),
+ (49,"nulla.in@outlook.edu","Melvin","Rina","SNE43VHV3SE"),
+ (40,"cursus.nunc@yahoo.org","Fritz","Aladdin","QYW72YUQ9ES"),
+ (64,"dapibus.gravida.aliquam@protonmail.ca","Levi","Kay","LKA37XYK1YB"),
+ (79,"vestibulum.ut@hotmail.org","Avram","Tashya","ELC18QXX1CG"),
+ (8,"non.lorem.vitae@google.couk","Serena","Branden","MOW07YYV7XY"),
+ (65,"at.fringilla@google.net","Vivien","Louis","OWH02FHG7TJ");
+INSERT INTO `users` (`age`,`email`,`first_name`,`last_name`,`password`)
+VALUES
+ (48,"tincidunt.dui@aol.edu","Wallace","Hoyt","USE31CRW2BG"),
+ (19,"eu.ultrices@icloud.couk","Mannix","Xander","DUT51JMF8HG"),
+ (9,"tincidunt.congue@protonmail.org","Mara","Damon","WFB48TPR8UL"),
+ (11,"netus.et@icloud.edu","Amery","Jessamine","UFV42DSC7SE"),
+ (33,"augue.scelerisque@icloud.ca","Graham","Laurel","KUF37FJC6NM"),
+ (49,"velit.pellentesque@protonmail.org","Marny","Vincent","DQT47RYM8JR"),
+ (49,"mauris.sit@aol.net","Ruby","Valentine","DLX33UIM6OV"),
+ (4,"posuere@protonmail.org","Ira","Emmanuel","VNO62TXB7GK"),
+ (36,"sit@outlook.org","Vielka","Kyra","HCM61UAC6UY"),
+ (32,"accumsan@aol.ca","Tad","Kim","GVE67XXG2UO");
+INSERT INTO `users` (`age`,`email`,`first_name`,`last_name`,`password`)
+VALUES
+ (22,"enim@aol.com","Dante","Debra","NDF85UNY2HB"),
+ (55,"luctus@yahoo.ca","Rana","Ulric","XAT59QGG6UJ"),
+ (66,"vitae.mauris.sit@google.edu","Remedios","Kelly","CTL80JIW9HN"),
+ (55,"odio.aliquam@outlook.ca","Aimee","Thaddeus","KPN21YZH4UM"),
+ (49,"ligula.aliquam@aol.org","Dexter","Ashton","AJL28TSW2GD"),
+ (45,"sodales.mauris@outlook.com","Ann","Latifah","XRY79PXS7XI"),
+ (2,"mauris.vestibulum@outlook.net","Madonna","Aspen","NTG77RSX0KK"),
+ (16,"sem.egestas.blandit@protonmail.couk","Jana","Reed","KFJ72FIK6AI"),
+ (15,"condimentum.donec.at@aol.net","Ursula","Graiden","IBI44ZSB6RQ"),
+ (8,"donec.est@protonmail.ca","Karina","Cassady","IUX33WWX4BQ");
+INSERT INTO `users` (`age`,`email`,`first_name`,`last_name`,`password`)
+VALUES
+ (32,"adipiscing.elit@protonmail.com","Slade","Thor","WGU55MYA1ZB"),
+ (79,"erat.etiam@protonmail.ca","Guy","Rashad","CDY76BRY6BZ"),
+ (7,"ac.feugiat@yahoo.org","Amena","Alyssa","TIB81FZB5UC"),
+ (33,"nulla.interdum@outlook.com","Austin","Sylvester","EXM15GKH2BD"),
+ (64,"risus.quis.diam@icloud.couk","Walter","Noel","JTH23ZYQ2AP"),
+ (72,"amet.ante@google.ca","Chaney","Vera","DCG09NZR8PU"),
+ (69,"semper.erat@yahoo.com","Herrod","Grant","ANT48UYU7WW"),
+ (67,"posuere.enim@icloud.com","Miriam","Ria","RVQ64TUE3KS"),
+ (22,"ipsum.phasellus.vitae@aol.org","Malik","Dean","YZA76TJL2EN"),
+ (15,"turpis.aliquam@outlook.org","Felicia","Samson","YUY17YZX2GH");
diff --git a/pom.xml b/pom.xml
index 42346df..241d84f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -44,6 +44,34 @@
org.springframework.boot
spring-boot-starter-thymeleaf
+
+
+ org.jacoco
+ jacoco-maven-plugin
+ 0.8.8
+
+
+ org.junit.jupiter
+ junit-jupiter-api
+ 5.8.2
+ test
+
+
+ org.mockito
+ mockito-junit-jupiter
+ 4.0.0
+ test
+
+
+ com.google.code.gson
+ gson
+ 2.9.0
+
+
+ com.h2database
+ h2
+ runtime
+
@@ -60,6 +88,25 @@
+
+ org.jacoco
+ jacoco-maven-plugin
+ 0.8.8
+
+
+
+ prepare-agent
+
+
+
+ report
+ prepare-package
+
+ report
+
+
+
+
diff --git a/src/main/java/com/crudrepo/helper/HttpHelper.java b/src/main/java/com/crudrepo/helper/HttpHelper.java
new file mode 100644
index 0000000..2c64e3b
--- /dev/null
+++ b/src/main/java/com/crudrepo/helper/HttpHelper.java
@@ -0,0 +1,38 @@
+package com.crudrepo.helper;
+
+import com.google.gson.Gson;
+
+import java.net.MalformedURLException;
+import java.net.URISyntaxException;
+import java.net.URL;
+import java.net.http.HttpRequest;
+
+public class HttpHelper {
+ public static Gson gson = new Gson();
+
+ public static HttpRequest createGetRequest(String url) {
+ HttpRequest getRequest = null;
+ try {
+ URL getUrl = new URL(url);
+ getRequest = HttpRequest.newBuilder(getUrl.toURI()).build();
+ } catch (URISyntaxException | MalformedURLException e) {
+ e.printStackTrace();
+ }
+ return getRequest;
+ }
+
+ public static HttpRequest createPostRequest(String url, Object body) {
+ HttpRequest postRequest = null;
+ String json = gson.toJson(body);
+ try {
+ URL postUrl = new URL(url);
+ postRequest = HttpRequest.newBuilder(postUrl.toURI())
+ .header("Content-Type", "application/json")
+ .POST(HttpRequest.BodyPublishers.ofString(json))
+ .build();
+ } catch (URISyntaxException | MalformedURLException e) {
+ e.printStackTrace();
+ }
+ return postRequest;
+ }
+}
diff --git a/src/main/java/com/crudrepo/user/UserController.java b/src/main/java/com/crudrepo/user/UserController.java
index 0456dc8..cce3300 100644
--- a/src/main/java/com/crudrepo/user/UserController.java
+++ b/src/main/java/com/crudrepo/user/UserController.java
@@ -20,10 +20,10 @@ public class UserController {
@Autowired
UserStreamService userStreamService;
- @PostMapping()
+ @PostMapping
public ResponseEntity> createUser(@RequestBody User user) {
userService.createUser(user);
- return new ResponseEntity<>(HttpStatus.OK);
+ return new ResponseEntity<>("User successfully created", HttpStatus.OK);
}
@GetMapping("{id}")
@@ -31,8 +31,8 @@ public User getUserById(@PathVariable("id") Integer id) {
return userService.getUser(id);
}
- @GetMapping("/list")
- public List getUsersByName(@RequestParam("name") String name) {
+ @PostMapping("/list")
+ public List getUsersByName(@RequestParam(name = "name") String name) {
return userService.getUsersByName(name);
}
diff --git a/src/main/java/com/crudrepo/user/model/Account.java b/src/main/java/com/crudrepo/user/model/Account.java
index 70d1539..94b71d3 100644
--- a/src/main/java/com/crudrepo/user/model/Account.java
+++ b/src/main/java/com/crudrepo/user/model/Account.java
@@ -1,14 +1,19 @@
package com.crudrepo.user.model;
+import lombok.AllArgsConstructor;
import lombok.Getter;
+import lombok.NoArgsConstructor;
import lombok.Setter;
import javax.persistence.*;
+import java.util.Objects;
@Getter
@Setter
@Table(name="accounts")
@Entity
+@NoArgsConstructor
+@AllArgsConstructor
public class Account {
@Id
@GeneratedValue()
@@ -18,4 +23,32 @@ public class Account {
private String currency;
private String IBAN;
private double balance;
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+ Account account = (Account) o;
+ return id == account.id &&
+ userId == account.userId &&
+ account.balance == balance &&
+ currency.equals(account.currency) &&
+ IBAN.equals(account.IBAN);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(id, userId, currency, IBAN, balance);
+ }
+
+ @Override
+ public String toString() {
+ return "Account{" +
+ "id=" + id +
+ ", userId=" + userId +
+ ", currency='" + currency + '\'' +
+ ", IBAN='" + IBAN + '\'' +
+ ", balance=" + balance +
+ '}';
+ }
}
\ No newline at end of file
diff --git a/src/main/java/com/crudrepo/user/model/User.java b/src/main/java/com/crudrepo/user/model/User.java
index b22362b..6d72b8b 100644
--- a/src/main/java/com/crudrepo/user/model/User.java
+++ b/src/main/java/com/crudrepo/user/model/User.java
@@ -1,13 +1,20 @@
package com.crudrepo.user.model;
+import lombok.AllArgsConstructor;
import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
import javax.persistence.*;
import java.util.List;
+import java.util.Objects;
@Getter
@Table(name = "users")
@Entity
+@Setter
+@AllArgsConstructor
+@NoArgsConstructor
public class User {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@@ -21,4 +28,36 @@ public class User {
@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL, orphanRemoval = true)
@JoinColumn(name = "user_id")
List accountList;
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+ User user = (User) o;
+ return id == user.id &&
+ age == user.age &&
+ firstName.equals(user.firstName) &&
+ lastName.equals(user.lastName) &&
+ email.equals(user.email) &&
+ password.equals(user.password) &&
+ accountList.equals(user.accountList);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(id, firstName, lastName, age, email, password, accountList);
+ }
+
+ @Override
+ public String toString() {
+ return "User{" +
+ "id=" + id +
+ ", firstName='" + firstName + '\'' +
+ ", lastName='" + lastName + '\'' +
+ ", age=" + age +
+ ", email='" + email + '\'' +
+ ", password='" + password + '\'' +
+ ", accountList=" + accountList +
+ '}';
+ }
}
diff --git a/src/main/java/com/crudrepo/user/service/UserProductionRepository.java b/src/main/java/com/crudrepo/user/service/UserProductionRepository.java
new file mode 100644
index 0000000..edc8460
--- /dev/null
+++ b/src/main/java/com/crudrepo/user/service/UserProductionRepository.java
@@ -0,0 +1,19 @@
+package com.crudrepo.user.service;
+
+import com.crudrepo.user.model.User;
+import org.springframework.context.annotation.Profile;
+import org.springframework.data.repository.CrudRepository;
+import org.springframework.stereotype.Component;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+@Repository
+@Profile("production")
+@Component
+public abstract class UserProductionRepository implements UserRepository {
+ public List findByFirstName(String firstName) {
+ return null;
+ }
+
+}
diff --git a/src/main/java/com/crudrepo/user/service/UserRepository.java b/src/main/java/com/crudrepo/user/service/UserRepository.java
index 650d021..c2ce4b8 100644
--- a/src/main/java/com/crudrepo/user/service/UserRepository.java
+++ b/src/main/java/com/crudrepo/user/service/UserRepository.java
@@ -1,7 +1,9 @@
package com.crudrepo.user.service;
import com.crudrepo.user.model.User;
+import org.springframework.context.annotation.Profile;
import org.springframework.data.repository.CrudRepository;
+import org.springframework.stereotype.Repository;
import java.util.List;
diff --git a/src/main/java/com/crudrepo/user/service/UserService.java b/src/main/java/com/crudrepo/user/service/UserService.java
index 31ede02..dcef76b 100644
--- a/src/main/java/com/crudrepo/user/service/UserService.java
+++ b/src/main/java/com/crudrepo/user/service/UserService.java
@@ -2,6 +2,8 @@
import com.crudrepo.user.model.User;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.context.annotation.Profile;
import org.springframework.stereotype.Service;
import java.util.List;
diff --git a/src/main/java/com/crudrepo/user/service/UserTestRepository.java b/src/main/java/com/crudrepo/user/service/UserTestRepository.java
new file mode 100644
index 0000000..dea2f72
--- /dev/null
+++ b/src/main/java/com/crudrepo/user/service/UserTestRepository.java
@@ -0,0 +1,28 @@
+package com.crudrepo.user.service;
+
+import com.crudrepo.user.model.User;
+import org.springframework.context.annotation.Profile;
+import org.springframework.stereotype.Component;
+import org.springframework.stereotype.Repository;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Optional;
+
+@Repository
+@Profile("test")
+@Component
+public abstract class UserTestRepository implements UserRepository {
+ public List findByFirstName(String firstName) {
+ List userList = new ArrayList<>();
+ User user = new User(1, firstName, "ln", (short) 21, "email", "pass", null);
+ User user1 = new User(2, firstName, "name", (short) 22, "yahoo", "123", null);
+ userList.add(user);
+ userList.add(user1);
+ return userList;
+ }
+
+ public Optional findById(Integer id) {
+ return Optional.of(new User(id, "Gabriel", "ln", (short) 21, "email", "pass", null));
+ }
+}
diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties
index 29276d2..414cd27 100644
--- a/src/main/resources/application.properties
+++ b/src/main/resources/application.properties
@@ -3,7 +3,7 @@ spring.thymeleaf.suffix=.html
spring.thymeleaf.template-loader-path=classpath:/templates
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.username=root
-spring.datasource.password=root
+spring.datasource.password=1778
spring.datasource.url= jdbc:mysql://localhost:3306/project
spring.jpa.hibernate.ddl-auto=update
diff --git a/src/test/java/com/crudrepo/account/AccountControllerTest.java b/src/test/java/com/crudrepo/account/AccountControllerTest.java
new file mode 100644
index 0000000..bd817c5
--- /dev/null
+++ b/src/test/java/com/crudrepo/account/AccountControllerTest.java
@@ -0,0 +1,49 @@
+package com.crudrepo.account;
+
+import com.crudrepo.helper.HttpHelper;
+import com.crudrepo.user.model.Account;
+import com.crudrepo.user.model.User;
+import com.google.gson.Gson;
+import org.junit.jupiter.api.Test;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.ActiveProfiles;
+
+import java.io.IOException;
+import java.net.http.HttpClient;
+import java.net.http.HttpRequest;
+import java.net.http.HttpResponse;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+@SpringBootTest
+@ActiveProfiles("test")
+public class AccountControllerTest {
+ private final HttpClient httpClient = HttpClient.newHttpClient();
+ private Gson gson = new Gson();
+
+ @Test
+ public void shouldGetAccount() {
+ List accountList = requestUserWithId(1);
+ Account account = new Account(1, 1, "RON", "DB09079714855445", 0);
+ assertEquals(accountList.get(0).getBalance(), account.getBalance());
+ assertEquals(accountList.get(0).getId(), account.getId());
+ assertEquals(accountList.get(0).getUserId(), account.getUserId());
+ }
+
+ private List requestUserWithId(int id) {
+ HttpRequest httpRequest = HttpHelper.createGetRequest("http://localhost:8082/accounts/" + id);
+ String responseBody = "";
+ try {
+ HttpResponse response = httpClient.send(httpRequest, HttpResponse.BodyHandlers.ofString());
+ responseBody = response.body();
+ } catch (IOException | InterruptedException e) {
+ e.printStackTrace();
+ }
+ // weird bug where any iban returned is null ???
+ Account[] accounts = gson.fromJson(responseBody, Account[].class);
+ return Arrays.asList(accounts);
+ }
+}
diff --git a/src/test/java/com/crudrepo/account/AccountRepositoryTest.java b/src/test/java/com/crudrepo/account/AccountRepositoryTest.java
new file mode 100644
index 0000000..40d1d6d
--- /dev/null
+++ b/src/test/java/com/crudrepo/account/AccountRepositoryTest.java
@@ -0,0 +1,43 @@
+package com.crudrepo.account;
+
+import com.crudrepo.user.model.Account;
+import com.crudrepo.user.service.AccountRepository;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.mockito.Mockito;
+import org.mockito.junit.jupiter.MockitoExtension;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.boot.test.mock.mockito.MockBean;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Optional;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+@SpringBootTest(classes = AccountRepository.class)
+@ExtendWith(MockitoExtension.class)
+public class AccountRepositoryTest {
+ @MockBean
+ AccountRepository accountRepository;
+
+ @Test
+ public void shouldGetByIban() {
+ Optional accountOp = Optional.of(new Account());
+ accountOp.get().setIBAN("RO12345678901234");
+ Mockito.when(accountRepository.findByIBAN("RO12345678901234")).thenReturn(accountOp);
+ assertEquals(accountOp, accountRepository.findByIBAN("RO12345678901234"), "failed to get account");
+ assertEquals(accountOp.get().getIBAN(), accountRepository.findByIBAN("RO12345678901234").get().getIBAN(), "failed to get IBAN");
+ }
+
+ @Test
+ public void shouldGetAccounts() {
+ List accountList = new ArrayList<>();
+ accountList.add(new Account(1, 1, "RON", "iban1", 100d));
+ accountList.add(new Account(2, 1, "EUR", "iban2", 200d));
+ accountList.add(new Account(3, 1, "USD", "iban3", 300d));
+ Mockito.when(accountRepository.findAllByUserId(1)).thenReturn(accountList);
+ assertEquals(3, accountRepository.findAllByUserId(1).size(), "invalid list size");
+ assertEquals(accountList, accountRepository.findAllByUserId(1), "failed to get list");
+ }
+}
diff --git a/src/test/java/com/crudrepo/user/UserControllerTest.java b/src/test/java/com/crudrepo/user/UserControllerTest.java
new file mode 100644
index 0000000..195b97f
--- /dev/null
+++ b/src/test/java/com/crudrepo/user/UserControllerTest.java
@@ -0,0 +1,85 @@
+package com.crudrepo.user;
+
+import com.crudrepo.helper.HttpHelper;
+import com.crudrepo.user.model.User;
+import com.google.gson.Gson;
+import org.junit.jupiter.api.Test;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.ActiveProfiles;
+
+import java.io.IOException;
+import java.net.http.HttpClient;
+import java.net.http.HttpRequest;
+import java.net.http.HttpResponse;
+import java.util.ArrayList;
+import java.util.List;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+@SpringBootTest
+@ActiveProfiles("test")
+public class UserControllerTest {
+ private final HttpClient httpClient = HttpClient.newHttpClient();
+ private Gson gson = new Gson();
+
+ @Test
+ public void shouldGetUser() {
+ User user = requestUserWithId(1);
+ assertEquals(user, new User(1, "Gabriel", "ln", (short) 21, "email", "pass", new ArrayList<>()));
+ }
+
+ @Test
+ public void shouldCreateUser() {
+ User bodyUser = new User(500, "FirstName", "ln", (short) 31, "mail", "123", new ArrayList<>());
+ HttpRequest postRequest = HttpHelper.createPostRequest("http://localhost:8082/users", bodyUser);
+ HttpResponse response = null;
+ try {
+ response = httpClient.send(postRequest, HttpResponse.BodyHandlers.ofString());
+ } catch (IOException | InterruptedException e) {
+ e.printStackTrace();
+ }
+ assertEquals(200, response.statusCode(), "failed to create user");
+ }
+
+ @Test
+ public void shouldGetInitials() {
+ HttpRequest httpRequest = HttpHelper.createGetRequest("http://localhost:8082/users/streams/initials");
+ String responseBody = "";
+ try {
+ HttpResponse response = httpClient.send(httpRequest, HttpResponse.BodyHandlers.ofString());
+ responseBody = response.body();
+ } catch (IOException | InterruptedException e) {
+ e.printStackTrace();
+ }
+ List initials = gson.fromJson(responseBody, ArrayList.class);
+ // should fail when all tests are runned because an user is being created all the time
+ assertEquals(162, initials.size(), "failed to get initials");
+ }
+
+ @Test
+ public void shouldGetGmailUsers() {
+ HttpRequest httpRequest = HttpHelper.createGetRequest("http://localhost:8082/users/streams/gmails");
+ String responseBody = "";
+ try {
+ HttpResponse response = httpClient.send(httpRequest, HttpResponse.BodyHandlers.ofString());
+ responseBody = response.body();
+ } catch (IOException | InterruptedException e) {
+ e.printStackTrace();
+ }
+ Long noOfGmail = gson.fromJson(responseBody, Long.class);
+ assertEquals(2, noOfGmail, "failed to get gmail users");
+ }
+
+ private User requestUserWithId(Integer id) {
+ HttpRequest httpRequest = HttpHelper.createGetRequest("http://localhost:8082/users/" + id);
+ String responseBody = "";
+ try {
+ HttpResponse response = httpClient.send(httpRequest, HttpResponse.BodyHandlers.ofString());
+ responseBody = response.body();
+ } catch (IOException | InterruptedException e) {
+ e.printStackTrace();
+ }
+ return gson.fromJson(responseBody, User.class);
+ }
+
+}
diff --git a/src/test/java/com/crudrepo/user/UserRepositoryTest.java b/src/test/java/com/crudrepo/user/UserRepositoryTest.java
new file mode 100644
index 0000000..b70c63e
--- /dev/null
+++ b/src/test/java/com/crudrepo/user/UserRepositoryTest.java
@@ -0,0 +1,33 @@
+package com.crudrepo.user;
+
+import com.crudrepo.user.model.User;
+import com.crudrepo.user.service.UserRepository;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.mockito.Mockito;
+import org.mockito.junit.jupiter.MockitoExtension;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.boot.test.mock.mockito.MockBean;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+@SpringBootTest(classes = UserRepository.class)
+@ExtendWith(MockitoExtension.class)
+public class UserRepositoryTest {
+ @MockBean(name = "userRepository")
+ private UserRepository userRepository;
+
+ @Test
+ public void shouldFindByName() {
+ List userList = new ArrayList<>();
+ userList.add(new User(1, "Gabriel", "Stanescu", (short) 21, "test", "test", null));
+ userList.add(new User(2, "Gabriel", "Gabi", (short) 20, "email", "pass", null));
+ Mockito.when(userRepository.findByFirstName("Gabriel")).thenReturn(userList);
+ assertEquals(2, userRepository.findByFirstName("Gabriel").size(), "invalid list size");
+ assertEquals("Gabriel", userRepository.findByFirstName("Gabriel").get(0).getFirstName(), "find by first name failed.");
+ assertEquals("Gabriel", userRepository.findByFirstName("Gabriel").get(1).getFirstName(), "find by first name failed.");
+ }
+}