From 071d001e086e1fc51c465ecda76e2da08a2590f9 Mon Sep 17 00:00:00 2001 From: Pavel_Sorokin Date: Mon, 27 Mar 2023 23:08:33 +0400 Subject: [PATCH] =?UTF-8?q?3=20=D0=BB=D0=B0=D0=B1=D0=B0=20=D0=AF=20=D0=BD?= =?UTF-8?q?=D0=B0=D0=B2=D0=B5=D1=80=D0=BD=D0=BE=D0=B5=20=D1=81=D0=BA=D0=BE?= =?UTF-8?q?=D1=80=D0=BE=20=D1=83=D0=BC=D1=80=D1=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- data.mv.db | Bin 20480 -> 28672 bytes data.trace.db | 116 ++++++++++++++++++ .../ulstu/is/sbapp/Comment/model/Comment.java | 44 +------ .../sbapp/Comment/service/CommentService.java | 39 +----- .../ru/ulstu/is/sbapp/Post/model/Post.java | 25 ++-- .../is/sbapp/Post/service/PostService.java | 38 +++--- .../ru/ulstu/is/sbapp/User/model/User.java | 22 ++-- .../is/sbapp/User/service/UserService.java | 28 ++--- .../ru/ulstu/is/sbapp/JpaClientTests.java | 27 ++++ ...JpaTidingTest.java => JpaCommentTest.java} | 45 ++----- .../java/ru/ulstu/is/sbapp/JpaPostTests.java | 97 +++++++++++++++ 11 files changed, 302 insertions(+), 179 deletions(-) rename src/test/java/ru/ulstu/is/sbapp/{JpaTidingTest.java => JpaCommentTest.java} (57%) create mode 100644 src/test/java/ru/ulstu/is/sbapp/JpaPostTests.java diff --git a/data.mv.db b/data.mv.db index 73561466bbf73d4d5bf708f2ce9d71fc8805bff3..90e8210bd01bce66a224c17c85485aa1d0cfdd64 100644 GIT binary patch literal 28672 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 z(JdbcConnection.java:122) + at org.h2.util.JdbcUtils.getConnection(JdbcUtils.java:288) + at org.h2.server.web.WebServer.getConnection(WebServer.java:807) + at org.h2.server.web.WebApp.login(WebApp.java:1033) + at org.h2.server.web.WebApp.process(WebApp.java:226) + at org.h2.server.web.WebApp.processRequest(WebApp.java:176) + at org.h2.server.web.JakartaWebServlet.doGet(JakartaWebServlet.java:129) + at org.h2.server.web.JakartaWebServlet.doPost(JakartaWebServlet.java:166) + at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:731) + at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:814) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:223) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:158) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:185) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:158) + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:185) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:158) + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:185) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:158) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:185) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:158) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:177) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:119) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:400) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:859) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1734) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) + at java.base/java.lang.Thread.run(Thread.java:833) +Caused by: org.h2.jdbc.JdbcSQLInvalidAuthorizationSpecException: Неверное имя пользователя или пароль +Wrong user name or password [28000-210] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:529) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:496) + ... 50 more +2023-03-27 21:45:50 database: wrong user or password; user: "SA" +org.h2.message.DbException: Неверное имя пользователя или пароль +Wrong user name or password [28000-210] + at org.h2.message.DbException.get(DbException.java:227) + at org.h2.message.DbException.get(DbException.java:203) + at org.h2.message.DbException.get(DbException.java:192) + at org.h2.engine.Engine.openSession(Engine.java:154) + at org.h2.engine.Engine.openSession(Engine.java:222) + at org.h2.engine.Engine.createSession(Engine.java:201) + at org.h2.engine.SessionRemote.connectEmbeddedOrServer(SessionRemote.java:338) + at org.h2.jdbc.JdbcConnection.(JdbcConnection.java:122) + at org.h2.util.JdbcUtils.getConnection(JdbcUtils.java:288) + at org.h2.server.web.WebServer.getConnection(WebServer.java:807) + at org.h2.server.web.WebApp.login(WebApp.java:1033) + at org.h2.server.web.WebApp.process(WebApp.java:226) + at org.h2.server.web.WebApp.processRequest(WebApp.java:176) + at org.h2.server.web.JakartaWebServlet.doGet(JakartaWebServlet.java:129) + at org.h2.server.web.JakartaWebServlet.doPost(JakartaWebServlet.java:166) + at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:731) + at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:814) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:223) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:158) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:185) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:158) + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:185) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:158) + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:185) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:158) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:185) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:158) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:177) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:119) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:400) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:859) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1734) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) + at java.base/java.lang.Thread.run(Thread.java:833) +Caused by: org.h2.jdbc.JdbcSQLInvalidAuthorizationSpecException: Неверное имя пользователя или пароль +Wrong user name or password [28000-210] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:529) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:496) + ... 50 more diff --git a/src/main/java/ru/ulstu/is/sbapp/Comment/model/Comment.java b/src/main/java/ru/ulstu/is/sbapp/Comment/model/Comment.java index 2704b64..98277ba 100644 --- a/src/main/java/ru/ulstu/is/sbapp/Comment/model/Comment.java +++ b/src/main/java/ru/ulstu/is/sbapp/Comment/model/Comment.java @@ -15,15 +15,12 @@ public class Comment { @GeneratedValue(strategy = GenerationType.AUTO) private Long id; - @Column - private Date DateOfAdd; - private String Text; - @ManyToOne(fetch = FetchType.EAGER) + @ManyToOne(fetch = FetchType.EAGER,cascade = CascadeType.MERGE) private Post post; - @ManyToOne(fetch = FetchType.EAGER) + @ManyToOne(fetch = FetchType.EAGER,cascade = CascadeType.MERGE) private User user; public Comment() @@ -31,24 +28,15 @@ public class Comment { } - public Comment(Date DateOfAdd,String text) + public Comment(String text) { - this.DateOfAdd=DateOfAdd; this.Text=text; } public Long getId() { return id; } - public Date getDateOfAdd() - { - return DateOfAdd; - } public String getText() {return Text;} - public void setDateOfAdd(Date DateOfAdd) - { - this.DateOfAdd=DateOfAdd; - } public void setText(String text){this.Text=text;} public User getUser() { @@ -58,29 +46,10 @@ public class Comment { { return post; } - public void setUser(User user) { - this.user = user; - if (!user.getComments().contains(this)) { - user.addNewComment(this); - } - } - public void deleteUser() { - if (user.getComments().contains(this)) { - user.deleteComment(this); - } - this.user = null; - } - public void setPost(Post post) { + public void setPost(Post post, User user){ this.post = post; - if (!post.getComments().contains(this)) { - post.addNewComment(this); - } - } - public void deletePost() { - if (post.getComments().contains(this)) { - post.deleteComment(this); - } - this.user = null; + post.getComments().add(this); + this.user = user; } @Override @@ -101,7 +70,6 @@ public class Comment { public String toString() { return "Comment{" + "id=" + id + - ", DateOfAdd='" + DateOfAdd + '\'' + ", Text='" + Text + '\'' + '}'; } diff --git a/src/main/java/ru/ulstu/is/sbapp/Comment/service/CommentService.java b/src/main/java/ru/ulstu/is/sbapp/Comment/service/CommentService.java index 4454661..e70c16c 100644 --- a/src/main/java/ru/ulstu/is/sbapp/Comment/service/CommentService.java +++ b/src/main/java/ru/ulstu/is/sbapp/Comment/service/CommentService.java @@ -21,15 +21,11 @@ public class CommentService { private EntityManager em; @Transactional - public Comment addComment(Date DateOfAdd, String Text) { - if(DateOfAdd==null) - { - throw new IllegalArgumentException("Date is null or empty"); - } + public Comment addComment(String Text) { if (!StringUtils.hasText(Text)) { throw new IllegalArgumentException("TEXT is null or empty"); } - final Comment comment = new Comment(DateOfAdd,Text); + final Comment comment = new Comment(Text); em.persist(comment); return comment; } @@ -49,13 +45,8 @@ public class CommentService { .getResultList(); } @Transactional - public Comment updateComment(Long id, Date DateOfAdd,String Text) { - if(DateOfAdd==null) - { - throw new IllegalArgumentException("Date is null or empty"); - } + public Comment updateComment(Long id,String Text) { final Comment currentComment = findComment(id); - currentComment.setDateOfAdd(DateOfAdd); currentComment.setText(Text); return em.merge(currentComment); } @@ -70,31 +61,7 @@ public class CommentService { public void deleteAllComments() { em.createQuery("delete from Comment").executeUpdate(); } - @Transactional - public void addUser(Long id, User u) { - final Comment comment = findComment(id); - comment.setUser(u); - em.merge(comment); - } - @Transactional - public void deleteUser(Long id) { - final Comment comment = findComment(id); - comment.deleteUser(); - em.merge(comment); - } - @Transactional - public void addPost(Long id, Post p) { - final Comment comment = findComment(id); - comment.setPost(p); - em.merge(comment); - } - @Transactional - public void deletePost(Long id) { - final Comment comment = findComment(id); - comment.deletePost(); - em.merge(comment); - } } \ No newline at end of file diff --git a/src/main/java/ru/ulstu/is/sbapp/Post/model/Post.java b/src/main/java/ru/ulstu/is/sbapp/Post/model/Post.java index ff1f4f1..9bcf8cd 100644 --- a/src/main/java/ru/ulstu/is/sbapp/Post/model/Post.java +++ b/src/main/java/ru/ulstu/is/sbapp/Post/model/Post.java @@ -21,10 +21,10 @@ public class Post { - @ManyToOne(fetch = FetchType.EAGER) + @ManyToOne(fetch = FetchType.EAGER,cascade = CascadeType.MERGE) private User user; - @OneToMany(mappedBy = "post",fetch = FetchType.EAGER) + @OneToMany(mappedBy = "post",fetch = FetchType.EAGER,cascade = CascadeType.MERGE) private List comments=new ArrayList<>(); public Post(){} @@ -55,27 +55,16 @@ public class Post { } public void setUser(User user) { this.user = user; - if (!user.getPosts().contains(this)) { - user.addNewPost(this); - } + } + public User getUser() + { + return user; } + public void deleteUser() { - if (user.getPosts().contains(this)) { - user.deletePost(this); - } this.user = null; } - public void addNewComment(Comment comment) - { - comments.add(comment); - comment.setPost(this); - } - public void deleteComment(Comment comment) - { - comments.remove(comment); - comment.deletePost(); - } public List getComments() { return comments; diff --git a/src/main/java/ru/ulstu/is/sbapp/Post/service/PostService.java b/src/main/java/ru/ulstu/is/sbapp/Post/service/PostService.java index 90408f1..73a05c1 100644 --- a/src/main/java/ru/ulstu/is/sbapp/Post/service/PostService.java +++ b/src/main/java/ru/ulstu/is/sbapp/Post/service/PostService.java @@ -17,6 +17,7 @@ public class PostService { @PersistenceContext private EntityManager em; + @Transactional public Post addPost(String Heading, String Content) { if (!StringUtils.hasText(Heading) || !StringUtils.hasText(Content) ) { @@ -56,38 +57,35 @@ public class PostService { @Transactional public Post deletePost(Long id) { final Post currentPost = findPost(id); + em.createQuery("Delete from Comment where post.id = "+id).executeUpdate(); em.remove(currentPost); return currentPost; } @Transactional - public void deleteAllTidings() { + public void deleteAllPosts() { em.createQuery("delete from Post").executeUpdate(); } + @Transactional - public void addUser(Long id, User u) { + public Comment addCommentToPost(Long id, User user, String text){ final Post post = findPost(id); - post.setUser(u); - em.merge(post); + if(post == null){ + throw new IllegalArgumentException("Post with id " + id + " not found"); + } + Comment comment=new Comment(text); + comment.setPost(post, em.find(User.class, user.getId())); + return em.merge(comment); } @Transactional - public void deleteUser(Long id) { + public void removeCommentFromPost(Long id, Comment comment){ final Post post = findPost(id); - post.deleteUser(); - em.merge(post); - } - @Transactional - public void addNewComment(Long id, Comment comment) { - Post currentPost= findPost(id); - currentPost.addNewComment(comment); - em.merge(currentPost); - } - - @Transactional - public void deletePost(Long id, Comment comment) { - Post currentPost= findPost(id); - currentPost.deleteComment(comment); - em.merge(currentPost); + if(post == null){ + throw new IllegalArgumentException("Post with id " + id + " not found"); + } + post.getComments().remove(comment); + comment.setPost(null, null); + em.remove(comment); } } diff --git a/src/main/java/ru/ulstu/is/sbapp/User/model/User.java b/src/main/java/ru/ulstu/is/sbapp/User/model/User.java index 3d6deb9..503ab4a 100644 --- a/src/main/java/ru/ulstu/is/sbapp/User/model/User.java +++ b/src/main/java/ru/ulstu/is/sbapp/User/model/User.java @@ -20,10 +20,10 @@ public class User { private String email; - @OneToMany(mappedBy ="user",cascade = CascadeType.ALL,fetch = FetchType.EAGER) + @OneToMany(mappedBy ="user",cascade = CascadeType.MERGE,fetch = FetchType.EAGER) private List posts =new ArrayList<>(); - @OneToMany(mappedBy ="user",cascade = CascadeType.ALL,fetch = FetchType.EAGER) + @OneToMany(mappedBy ="user",cascade = CascadeType.MERGE,fetch = FetchType.EAGER) private List comments =new ArrayList<>(); public User() { @@ -72,16 +72,6 @@ public class User { posts.remove(post); post.deleteUser(); } - public void addNewComment(Comment comment) - { - comments.add(comment); - comment.setUser(this); - } - public void deleteComment(Comment comment) - { - comments.remove(comment); - comment.deleteUser(); - } public String getEmail() @@ -91,7 +81,13 @@ public class User { public void setEmail(String email){ this.email=email; } - + public void removePost(Post post) + { + if(posts!=null) + { + posts.remove(post); + } + } @Override diff --git a/src/main/java/ru/ulstu/is/sbapp/User/service/UserService.java b/src/main/java/ru/ulstu/is/sbapp/User/service/UserService.java index 91f1722..25ea291 100644 --- a/src/main/java/ru/ulstu/is/sbapp/User/service/UserService.java +++ b/src/main/java/ru/ulstu/is/sbapp/User/service/UserService.java @@ -63,39 +63,31 @@ public class UserService { @Transactional public User deleteUser(Long id) { final User currentUser = findUser(id); + em.createQuery("Delete from Post Where user.id = "+ id).executeUpdate(); + em.createQuery("Delete from Comment Where user.id = "+id).executeUpdate(); em.remove(currentUser); return currentUser; } @Transactional public void deleteAllUsers() { + em.createQuery("Delete from Post").executeUpdate(); + em.createQuery("Delete from Comment").executeUpdate(); em.createQuery("delete from User").executeUpdate(); } @Transactional - public void addNewPost(Long id, Post post) { + public Post addNewPost(Long id, String Heading,String Content) { User currentUser= findUser(id); - currentUser.addNewPost(post); - em.merge(currentUser); + Post post=new Post(Heading,Content); + post.setUser(currentUser); + return em.merge(post); } @Transactional public void deletePost(Long id, Post post) { - User currentUser = findUser(id); - currentUser.deletePost(post); - em.merge(currentUser); - } - @Transactional - public void addNewComment(Long id, Comment comment) { - User currentUser= findUser(id); - currentUser.addNewComment(comment); - em.merge(currentUser); + em.createQuery("Delete Comment where post.Id = "+ post.getId()).executeUpdate(); + em.createQuery("Delete from Post").executeUpdate(); } - @Transactional - public void deleteComment(Long id, Comment comment) { - User currentUser = findUser(id); - currentUser.deleteComment(comment); - em.merge(currentUser); - } } diff --git a/src/test/java/ru/ulstu/is/sbapp/JpaClientTests.java b/src/test/java/ru/ulstu/is/sbapp/JpaClientTests.java index 1b34217..2ebcc3e 100644 --- a/src/test/java/ru/ulstu/is/sbapp/JpaClientTests.java +++ b/src/test/java/ru/ulstu/is/sbapp/JpaClientTests.java @@ -7,6 +7,8 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; +import ru.ulstu.is.sbapp.Post.model.Post; +import ru.ulstu.is.sbapp.Post.service.PostService; import ru.ulstu.is.sbapp.User.model.User; import ru.ulstu.is.sbapp.User.service.UserService; @@ -17,6 +19,8 @@ public class JpaClientTests { private static final Logger log = LoggerFactory.getLogger(JpaClientTests.class); @Autowired private UserService userService; + @Autowired + private PostService postService; @Test void testClientCreate() { @@ -61,4 +65,27 @@ public class JpaClientTests { log.info("testUserReadAllEmpty: " + users.toString()); Assertions.assertEquals(users.size(), 0); } + + @Test + void testAddAndDeletePost() + { + postService.deleteAllPosts(); + userService.deleteAllUsers(); + final User user = userService.addUser("Pasha","Sorokin","sorokin.zxcv@gmail.com"); + final Post post =userService.addNewPost(user.getId(),"Text1","Text2"); + final List posts =postService.findAllPosts(); + final User user1 = userService.findUser(user.getId()); + final List posts1 = user1.getPosts(); + log.info("testAddAndDeletePost :: ADD " + posts.toString() + " and " + posts1.toString()); + Assertions.assertEquals(posts.get(0).getUser(), user); + Assertions.assertEquals(posts.toString(), posts1.toString()); + log.info("testAddAndDeletePost :: Delete "); + userService.deletePost(user.getId(),post); + final User us = userService.findUser(user.getId()); + Assertions.assertThrows(EntityNotFoundException.class, () -> postService.findPost(post.getId())); + + log.info(us.getPosts().toString()); + userService.deleteAllUsers(); + postService.deleteAllPosts(); + } } diff --git a/src/test/java/ru/ulstu/is/sbapp/JpaTidingTest.java b/src/test/java/ru/ulstu/is/sbapp/JpaCommentTest.java similarity index 57% rename from src/test/java/ru/ulstu/is/sbapp/JpaTidingTest.java rename to src/test/java/ru/ulstu/is/sbapp/JpaCommentTest.java index 3c2fa73..b4fc702 100644 --- a/src/test/java/ru/ulstu/is/sbapp/JpaTidingTest.java +++ b/src/test/java/ru/ulstu/is/sbapp/JpaCommentTest.java @@ -9,17 +9,15 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import ru.ulstu.is.sbapp.Comment.model.Comment; import ru.ulstu.is.sbapp.Comment.service.CommentService; -import ru.ulstu.is.sbapp.User.model.User; import ru.ulstu.is.sbapp.User.service.UserService; -import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; @SpringBootTest -public class JpaTidingTest { - private static final Logger log = LoggerFactory.getLogger(JpaTidingTest.class); +public class JpaCommentTest { + private static final Logger log = LoggerFactory.getLogger(JpaCommentTest.class); @Autowired private CommentService commentService; @Autowired @@ -29,8 +27,7 @@ public class JpaTidingTest { void testTidingCreate() { commentService.deleteAllComments(); - final Date dateofadd= new Date(1212121212121L); - final Comment comment=commentService.addComment(dateofadd,"Net"); + final Comment comment=commentService.addComment("Net"); log.info("testCommentCreate: " + comment.toString()); Assertions.assertNotNull(comment.getId()); commentService.deleteAllComments(); @@ -39,8 +36,7 @@ public class JpaTidingTest { void testTidingRead() { commentService.deleteAllComments(); - final Date dateofadd= new Date(1212121212121L); - final Comment comment=commentService.addComment(dateofadd,"Net"); + final Comment comment=commentService.addComment("Net"); log.info("testCommentRead[0]: " + comment.toString()); final Comment findComment=commentService.findComment(comment.getId()); log.info("testCommentRead[1]: " + findComment.toString()); @@ -57,10 +53,8 @@ public class JpaTidingTest { void testAllTidingRead() { commentService.deleteAllComments(); - final Date dateofadd1= new Date(112121212121L); - final Date dateofadd2= new Date(1212121212121L); - commentService.addComment(dateofadd1,"Net"); - commentService.addComment(dateofadd2,"yep"); + commentService.addComment("Net"); + commentService.addComment("yep"); final List comments = commentService.findAllComments(); log.info("testAllCommentRead: " + comments.toString()); Assertions.assertEquals(comments.size(), 2); @@ -78,34 +72,13 @@ public class JpaTidingTest { void testUpdateTiding() { commentService.deleteAllComments(); - final Date dateofadd1= new Date(112121212121L); - final Date dateofadd2= new Date(1212121212121L); - final Comment comment=commentService.addComment(dateofadd1,"Net"); + final Comment comment=commentService.addComment("Net"); log.info("testUpdateComment: " + comment.toString()); - commentService.updateComment(comment.getId(),dateofadd2,"Ladno"); + commentService.updateComment(comment.getId(),"Ladno"); final Comment comment1=commentService.findComment(comment.getId()); log.info("testUpdateComment: " + comment1.toString()); - Assertions.assertEquals(comment1.getDateOfAdd(), dateofadd2); Assertions.assertEquals(comment1.getText(), "Ladno"); commentService.deleteAllComments(); } - @Test - void testSetAndDeleteUser() - { - commentService.deleteAllComments(); - userService.deleteAllUsers(); - final User user = userService.addUser("Pasha","Sorokin","sorokin.zxcv@gmail.com"); - final Date dateofadd1= new Date("12/02/2020"); - final Comment comment=commentService.addComment(dateofadd1,"Net"); - commentService.addUser(comment.getId(),user); - final User user1=userService.findUser(user.getId()); - final Comment comment1=commentService.findComment(comment.getId()); - Assertions.assertEquals(comment1.getUser(), user1); - Assertions.assertEquals(user1.getComments().get(0), comment); - commentService.deleteUser(user.getId()); - final User user2=userService.findUser(user.getId()); - final Comment comment2=commentService.findComment(comment.getId()); - Assertions.assertEquals(comment2.getUser(), null); - Assertions.assertEquals(user2.getComments().size(), 0); - } + } diff --git a/src/test/java/ru/ulstu/is/sbapp/JpaPostTests.java b/src/test/java/ru/ulstu/is/sbapp/JpaPostTests.java new file mode 100644 index 0000000..cbdb252 --- /dev/null +++ b/src/test/java/ru/ulstu/is/sbapp/JpaPostTests.java @@ -0,0 +1,97 @@ +package ru.ulstu.is.sbapp; + +import jakarta.persistence.EntityNotFoundException; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import ru.ulstu.is.sbapp.Comment.model.Comment; +import ru.ulstu.is.sbapp.Comment.service.CommentService; +import ru.ulstu.is.sbapp.Post.model.Post; +import ru.ulstu.is.sbapp.Post.service.PostService; +import ru.ulstu.is.sbapp.User.model.User; +import ru.ulstu.is.sbapp.User.service.UserService; + +import java.util.List; + +@SpringBootTest +public class JpaPostTests { + private static final Logger log = LoggerFactory.getLogger(JpaPostTests.class); + @Autowired + private CommentService commentService; + @Autowired + private UserService userService; + @Autowired + private PostService postService; + + @Test + void TestAddPost(){ + postService.deleteAllPosts(); + final Post post = postService.addPost("Test","Test"); + Assertions.assertNotNull(post.getId()); + } + + @Test + void TestFindPost(){ + postService.deleteAllPosts(); + final Post post = postService.addPost("Test","Test"); + final Post findPost = postService.findPost(post.getId()); + Assertions.assertEquals(post, findPost); + } + + @Test + void TestPostReadNotFound(){ + postService.deleteAllPosts(); + Assertions.assertThrows(EntityNotFoundException.class, () -> postService.findPost(-1L)); + } + + @Test + void TestFindAllPost(){ + postService.deleteAllPosts(); + final Post firstPost = postService.addPost("Test1","Test1"); + final Post secondPost = postService.addPost("Test2","Test2"); + final List posts = postService.findAllPosts(); + Assertions.assertEquals(posts.size(), 2); + } + @Test + void TestPostReadAllEmpty() { + postService.deleteAllPosts(); + final List posts = postService.findAllPosts(); + Assertions.assertEquals(posts.size(), 0); + } + + @Test + void TestPostUpdate(){ + postService.deleteAllPosts(); + Post post = postService.addPost("Test1", "Test1"); + post = postService.updatePost(post.getId(), "Test2", "Test2"); + Assertions.assertEquals(post.getHeading(), "Test2"); + Assertions.assertEquals(post.getContent(), "Test2"); + } + + @Test + void TestDeletePost(){ + postService.deleteAllPosts(); + final Post post = postService.addPost("Test","Test"); + postService.deletePost(post.getId()); + Assertions.assertThrows(EntityNotFoundException.class, () -> postService.findPost(1L)); + } + + @Test + void TestAddComment() + { + postService.deleteAllPosts(); + userService.deleteAllUsers(); + final User user = userService.addUser("Pasha","Sorokin","sorokin.zxcv@gmail.com"); + final Post post =userService.addNewPost(user.getId(),"Text1","Text2"); + final Comment comment =postService.addCommentToPost(post.getId(),user,"СОООСИИ УЕБОК ЕБАННЫЙ"); + final List comments = commentService.findAllComments(); + log.info(comments.toString()); + final User user1=userService.findUser(user.getId()); + log.info(user1.getComments().toString()); + final Post post1=postService.findPost(post.getId()); + log.info(post1.getComments().toString()); + } +}