From 4f47eff74dca675a17ed109187016b77933373d0 Mon Sep 17 00:00:00 2001 From: strogiyotec Date: Fri, 21 Feb 2020 15:43:10 -0800 Subject: [PATCH 01/27] AtReference on skip log --- .../java/com/devadmin/vicky/listener/AtReferenceListener.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/com/devadmin/vicky/listener/AtReferenceListener.java b/src/main/java/com/devadmin/vicky/listener/AtReferenceListener.java index f50785b..c33d358 100644 --- a/src/main/java/com/devadmin/vicky/listener/AtReferenceListener.java +++ b/src/main/java/com/devadmin/vicky/listener/AtReferenceListener.java @@ -36,6 +36,8 @@ public void onApplicationEvent(TaskEventModelWrapper eventWrapper) { if (commentNotEmpty(event)) { sendMessageToReferencedPersons(event); + } else{ + log.warn("Ignore empty comment"); } } From 3f173cc18dd37aa0d02d6a4814f48e029c143e1b Mon Sep 17 00:00:00 2001 From: strogiyotec Date: Fri, 21 Feb 2020 15:43:27 -0800 Subject: [PATCH 02/27] normalize imports --- .../java/com/devadmin/vicky/service/slack/MessageService.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/main/java/com/devadmin/vicky/service/slack/MessageService.java b/src/main/java/com/devadmin/vicky/service/slack/MessageService.java index a0e9d6c..e0519ef 100644 --- a/src/main/java/com/devadmin/vicky/service/slack/MessageService.java +++ b/src/main/java/com/devadmin/vicky/service/slack/MessageService.java @@ -5,8 +5,6 @@ */ package com.devadmin.vicky.service.slack; -import com.devadmin.vicky.MessageServiceException; - /** * A generic messaging service. Allows writing string messages to a named channel or privately to a * person. From 43f7230a3f52da0fec6cd03bbfed1cd1e9ee762b Mon Sep 17 00:00:00 2001 From: strogiyotec Date: Fri, 21 Feb 2020 15:43:44 -0800 Subject: [PATCH 03/27] AtReference Listener test --- .../vicky/test/AtReferenceListenerTest.java | 178 ++++++++++++++++++ 1 file changed, 178 insertions(+) create mode 100644 src/test/java/com/devadmin/vicky/test/AtReferenceListenerTest.java diff --git a/src/test/java/com/devadmin/vicky/test/AtReferenceListenerTest.java b/src/test/java/com/devadmin/vicky/test/AtReferenceListenerTest.java new file mode 100644 index 0000000..a3db80a --- /dev/null +++ b/src/test/java/com/devadmin/vicky/test/AtReferenceListenerTest.java @@ -0,0 +1,178 @@ +package com.devadmin.vicky.test; + +import com.devadmin.vicky.config.FormatConfig; +import com.devadmin.vicky.event.TaskEventModelWrapper; +import com.devadmin.vicky.format.SimpleTaskEventFormatter; +import com.devadmin.vicky.format.TaskEventFormatter; +import com.devadmin.vicky.listener.AtReferenceListener; +import com.devadmin.vicky.model.jira.AuthorModel; +import com.devadmin.vicky.model.jira.FieldModel; +import com.devadmin.vicky.model.jira.JiraEventModel; +import com.devadmin.vicky.model.jira.comment.CommentModel; +import com.devadmin.vicky.model.jira.status.StatusModel; +import com.devadmin.vicky.model.jira.task.IssueModel; +import com.devadmin.vicky.model.jira.task.IssueTypeModel; +import com.devadmin.vicky.service.slack.MessageService; +import com.devadmin.vicky.service.slack.SlackMessageServiceImpl; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mockito; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.context.ApplicationEventPublisher; +import org.springframework.test.context.junit4.SpringRunner; + +import static org.mockito.Mockito.*; + +/** + * Test class for {@link AtReferenceListener} + */ +@RunWith(SpringRunner.class) +@SpringBootTest( + classes = { + FormatConfig.class, + AtReferenceListener.class, + SimpleTaskEventFormatter.class, + SlackMessageServiceImpl.class, + ApplicationEventPublisher.class, + } +) +public class AtReferenceListenerTest { + + /** + * Event publisher. + */ + @Autowired + private ApplicationEventPublisher applicationEventPublisher; + + /** + * Event formatter to test. + * Add qualifier to avoid warning from IDEA + */ + @Autowired + @Qualifier("SimpleFormatter") + private TaskEventFormatter eventFormatter; + + /** + * Mocked slack message sender. + */ + @MockBean + private MessageService messageService; + + /** + * Nobody will get message because reference format is incorrect. + */ + @Test + public void testMessageWithInvalidReference() { + final JiraEventModel testEventModel = taskModel("Wrong reference format Lollipop"); + this.applicationEventPublisher.publishEvent(new TaskEventModelWrapper(testEventModel)); + Mockito.verify( + this.messageService, never()) + .sendPrivateMessage( + any(), + any() + ); + } + + /** + * Nobody will get message because reference format is incorrect. + */ + @Test + public void testSkipEmptyComment() { + final JiraEventModel testEventModel = taskModel("[~lollipop]"); + testEventModel.setComment(null); + this.applicationEventPublisher.publishEvent(new TaskEventModelWrapper(testEventModel)); + Mockito.verify( + this.messageService, never()) + .sendPrivateMessage( + any(), + any() + ); + } + + /** + * Test that if reference and author are the same, then don't send notification. + */ + @Test + public void testTheSameReferenceAndAuthor() { + final JiraEventModel testEventModel = taskModel("serpento"); + this.applicationEventPublisher.publishEvent(new TaskEventModelWrapper(testEventModel)); + Mockito.verify( + this.messageService, never()) + .sendPrivateMessage( + any(), + any() + ); + } + + /** + * Test that multiple users will receive private messages. + */ + @Test + public void testMultipleReferences() { + final JiraEventModel testEventModel = taskModel("[~lollipop] and [~vvorski]"); + this.applicationEventPublisher.publishEvent(new TaskEventModelWrapper(testEventModel)); + Mockito.verify( + this.messageService, atLeastOnce()) + .sendPrivateMessage( + "lollipop", + this.eventFormatter.format(testEventModel) + ); + Mockito.verify( + this.messageService, atLeastOnce()) + .sendPrivateMessage( + "vvorski", + this.eventFormatter.format(testEventModel) + ); + } + + + /** + * Test that one user will receive private message. + */ + @Test + public void shouldSendPrivateMessage() { + final JiraEventModel testEventModel = taskModel("[~Lollipop]"); + this.applicationEventPublisher.publishEvent(new TaskEventModelWrapper(testEventModel)); + Mockito.verify( + this.messageService, times(1)) + .sendPrivateMessage( + "Lollipop", + this.eventFormatter.format(testEventModel) + ); + } + + /** + * Create task model with given body. + * + * @param body Body to use + * @return Test task + */ + private static JiraEventModel taskModel(final String body) { + final AuthorModel authorModel = new AuthorModel(); + authorModel.setName("serpento"); + + final CommentModel comment = new CommentModel(); + comment.setBody(body); + comment.setAuthor(authorModel); + + final IssueTypeModel issueTypeModel = new IssueTypeModel(); + issueTypeModel.setId("13"); + + final StatusModel statusModel = new StatusModel(); + statusModel.setName("test"); + final FieldModel fieldModel = new FieldModel(); + fieldModel.setIssueType(issueTypeModel); + fieldModel.setStatus(statusModel); + final IssueModel issueModel = new IssueModel(); + issueModel.setId("13"); + issueModel.setFields(fieldModel); + JiraEventModel testEventModel = new JiraEventModel(); + testEventModel.setComment(comment); + testEventModel.setIssue(issueModel); + + return testEventModel; + } +} From b3c8841443af8dfc33ffb7e4d1f21fab2c399647 Mon Sep 17 00:00:00 2001 From: strogiyotec Date: Fri, 21 Feb 2020 15:59:06 -0800 Subject: [PATCH 04/27] comment task listener test --- .../vicky/test/CommentedTaskListenerTest.java | 103 ++++++++++++++++++ .../com/devadmin/vicky/test/TestTasks.java | 52 +++++++++ 2 files changed, 155 insertions(+) create mode 100644 src/test/java/com/devadmin/vicky/test/CommentedTaskListenerTest.java create mode 100644 src/test/java/com/devadmin/vicky/test/TestTasks.java diff --git a/src/test/java/com/devadmin/vicky/test/CommentedTaskListenerTest.java b/src/test/java/com/devadmin/vicky/test/CommentedTaskListenerTest.java new file mode 100644 index 0000000..b7bf01b --- /dev/null +++ b/src/test/java/com/devadmin/vicky/test/CommentedTaskListenerTest.java @@ -0,0 +1,103 @@ +package com.devadmin.vicky.test; + +import com.devadmin.vicky.config.FormatConfig; +import com.devadmin.vicky.event.TaskEventModelWrapper; +import com.devadmin.vicky.format.SimpleTaskEventFormatter; +import com.devadmin.vicky.format.TaskEventFormatter; +import com.devadmin.vicky.listener.CommentedTaskListener; +import com.devadmin.vicky.model.jira.JiraEventModel; +import com.devadmin.vicky.service.slack.MessageService; +import com.devadmin.vicky.service.slack.SlackMessageServiceImpl; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mockito; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.context.ApplicationEventPublisher; +import org.springframework.test.context.junit4.SpringRunner; + +import static com.devadmin.vicky.test.TestTasks.taskModel; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.atLeastOnce; +import static org.mockito.Mockito.never; + +@RunWith(SpringRunner.class) +@SpringBootTest( + classes = { + FormatConfig.class, + CommentedTaskListener.class, + SimpleTaskEventFormatter.class, + SlackMessageServiceImpl.class, + ApplicationEventPublisher.class + } +) +public class CommentedTaskListenerTest { + + /** + * Event publisher. + */ + @Autowired + private ApplicationEventPublisher applicationEventPublisher; + + /** + * Event formatter to test. + * Add qualifier to avoid warning from IDEA + */ + @Autowired + @Qualifier("SimpleFormatter") + private TaskEventFormatter eventFormatter; + + /** + * Mocked slack message sender. + */ + @MockBean + private MessageService messageService; + + /** + * test CommentedTaskListener if commenter and assignee is different users + */ + @Test + public void testWhenCommenterAndAssigneeAreDifferent() { + final JiraEventModel testEventModel = taskModel("serpento", "testUser", "This is a simple comment"); + this.applicationEventPublisher.publishEvent(new TaskEventModelWrapper(testEventModel)); + Mockito.verify( + this.messageService, atLeastOnce()) + .sendPrivateMessage( + "serpento", + this.eventFormatter.format(testEventModel) + ); + } + + /* + * Test that message service is not called if assignee and author are equal. + */ + @Test + public void testWhenCommenterAndAssigneeAreSameUsers() { + final JiraEventModel testEventModel = taskModel("testUser", "testUser", "This is a simple comment"); + this.applicationEventPublisher.publishEvent(new TaskEventModelWrapper(testEventModel)); + Mockito.verify( + this.messageService, never()) + .sendPrivateMessage( + any(), + any() + ); + } + + /** + * test CommentedTaskListener if event does not contain comment + */ + @Test + public void testCommentIsNull() { + final JiraEventModel testEventModel = taskModel("serpento", "testUser", "This is a simple comment"); + testEventModel.setComment(null); + this.applicationEventPublisher.publishEvent(new TaskEventModelWrapper(testEventModel)); + Mockito.verify( + this.messageService, never()) + .sendPrivateMessage( + any(), + any() + ); + } +} diff --git a/src/test/java/com/devadmin/vicky/test/TestTasks.java b/src/test/java/com/devadmin/vicky/test/TestTasks.java new file mode 100644 index 0000000..c37518d --- /dev/null +++ b/src/test/java/com/devadmin/vicky/test/TestTasks.java @@ -0,0 +1,52 @@ +package com.devadmin.vicky.test; + +import com.devadmin.vicky.model.jira.AuthorModel; +import com.devadmin.vicky.model.jira.FieldModel; +import com.devadmin.vicky.model.jira.JiraEventModel; +import com.devadmin.vicky.model.jira.UserModel; +import com.devadmin.vicky.model.jira.comment.CommentModel; +import com.devadmin.vicky.model.jira.status.StatusModel; +import com.devadmin.vicky.model.jira.task.IssueModel; +import com.devadmin.vicky.model.jira.task.IssueTypeModel; + +/** + * Create test tasks. + */ +public final class TestTasks { + + public static JiraEventModel taskModel(final String creator, final String assignee, final String body) { + final AuthorModel authorModel = new AuthorModel(); + authorModel.setName(creator); + authorModel.setDisplayName(creator); + authorModel.setEmailAddress(creator); + + final CommentModel comment = new CommentModel(); + comment.setBody(body); + comment.setAuthor(authorModel); + + + final IssueTypeModel issueTypeModel = new IssueTypeModel(); + issueTypeModel.setId("13"); + + final StatusModel statusModel = new StatusModel(); + statusModel.setName("test"); + + final UserModel userModel = new UserModel(); + userModel.setName(assignee); + userModel.setDisplayName(assignee); + userModel.setEmailAddress(assignee); + + final FieldModel fieldModel = new FieldModel(); + fieldModel.setIssueType(issueTypeModel); + fieldModel.setStatus(statusModel); + fieldModel.setAssignee(userModel); + final IssueModel issueModel = new IssueModel(); + issueModel.setId("13"); + issueModel.setFields(fieldModel); + JiraEventModel testEventModel = new JiraEventModel(); + testEventModel.setComment(comment); + testEventModel.setIssue(issueModel); + + return testEventModel; + } +} From cf0b47e3b44f09bf09ebdcdfe9eaed5307de8758 Mon Sep 17 00:00:00 2001 From: strogiyotec Date: Fri, 21 Feb 2020 16:08:41 -0800 Subject: [PATCH 05/27] create task listener test --- .../vicky/test/CreatedTaskListenerTest.java | 112 ++++++++++++++++++ .../com/devadmin/vicky/test/TestTasks.java | 14 ++- 2 files changed, 121 insertions(+), 5 deletions(-) create mode 100644 src/test/java/com/devadmin/vicky/test/CreatedTaskListenerTest.java diff --git a/src/test/java/com/devadmin/vicky/test/CreatedTaskListenerTest.java b/src/test/java/com/devadmin/vicky/test/CreatedTaskListenerTest.java new file mode 100644 index 0000000..d5ec591 --- /dev/null +++ b/src/test/java/com/devadmin/vicky/test/CreatedTaskListenerTest.java @@ -0,0 +1,112 @@ +package com.devadmin.vicky.test; + +import com.devadmin.vicky.config.FormatConfig; +import com.devadmin.vicky.event.TaskEventModelWrapper; +import com.devadmin.vicky.format.SummaryTaskEventFormatter; +import com.devadmin.vicky.format.TaskEventFormatter; +import com.devadmin.vicky.listener.CreatedTaskListener; +import com.devadmin.vicky.model.jira.JiraEventModel; +import com.devadmin.vicky.model.jira.task.TaskEventType; +import com.devadmin.vicky.service.slack.MessageService; +import com.devadmin.vicky.service.slack.SlackMessageServiceImpl; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mockito; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.context.ApplicationEventPublisher; +import org.springframework.test.context.junit4.SpringRunner; + +import static com.devadmin.vicky.test.TestTasks.PROJECT; +import static com.devadmin.vicky.test.TestTasks.taskModel; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.atLeastOnce; +import static org.mockito.Mockito.never; + +/** + * Test class for {@link CreatedTaskListener} + */ +@RunWith(SpringRunner.class) +@SpringBootTest( + classes = { + FormatConfig.class, + CreatedTaskListener.class, + SummaryTaskEventFormatter.class, + SlackMessageServiceImpl.class, + ApplicationEventPublisher.class + } +) +public class CreatedTaskListenerTest { + + /** + * Event publisher. + */ + @Autowired + private ApplicationEventPublisher applicationEventPublisher; + + /** + * Event formatter to test. + * Add qualifier to avoid warning from IDEA + */ + @Autowired + @Qualifier("SummaryFormatter") + private TaskEventFormatter eventFormatter; + + /** + * Mocked slack message sender. + */ + @MockBean + private MessageService messageService; + + /** + * Test that channel gets notification. + */ + @Test + public void testSendNotificationOnCreatedEvent() { + final JiraEventModel testEventModel = taskModel("serpento", "testUser", "Test task"); + testEventModel.setType(TaskEventType.CREATED); + this.applicationEventPublisher.publishEvent(new TaskEventModelWrapper(testEventModel)); + Mockito.verify( + this.messageService, atLeastOnce()) + .sendChannelMessage( + PROJECT, + this.eventFormatter.format(testEventModel) + ); + } + + /** + * Test that UPDATED type will be skipped. + */ + @Test + public void testWrongEventType() { + final JiraEventModel testEventModel = taskModel("serpento", "testUser", "Test task"); + testEventModel.setType(TaskEventType.UPDATED); + this.applicationEventPublisher.publishEvent(new TaskEventModelWrapper(testEventModel)); + Mockito.verify( + this.messageService, never()) + .sendChannelMessage( + any(), + any() + ); + } + + /** + * Test that only issues with id 13 are supported. + */ + @Test + public void testSkipIssueId() { + final JiraEventModel testEventModel = taskModel("serpento", "testUser", "Test task"); + testEventModel.getIssue().getFields().getIssueType().setId("228"); + this.applicationEventPublisher.publishEvent(new TaskEventModelWrapper(testEventModel)); + Mockito.verify( + this.messageService, never()) + .sendChannelMessage( + any(), + any() + ); + } + + +} diff --git a/src/test/java/com/devadmin/vicky/test/TestTasks.java b/src/test/java/com/devadmin/vicky/test/TestTasks.java index c37518d..d6a455a 100644 --- a/src/test/java/com/devadmin/vicky/test/TestTasks.java +++ b/src/test/java/com/devadmin/vicky/test/TestTasks.java @@ -1,9 +1,6 @@ package com.devadmin.vicky.test; -import com.devadmin.vicky.model.jira.AuthorModel; -import com.devadmin.vicky.model.jira.FieldModel; -import com.devadmin.vicky.model.jira.JiraEventModel; -import com.devadmin.vicky.model.jira.UserModel; +import com.devadmin.vicky.model.jira.*; import com.devadmin.vicky.model.jira.comment.CommentModel; import com.devadmin.vicky.model.jira.status.StatusModel; import com.devadmin.vicky.model.jira.task.IssueModel; @@ -14,6 +11,8 @@ */ public final class TestTasks { + public static final String PROJECT = "vicky"; + public static JiraEventModel taskModel(final String creator, final String assignee, final String body) { final AuthorModel authorModel = new AuthorModel(); authorModel.setName(creator); @@ -30,23 +29,28 @@ public static JiraEventModel taskModel(final String creator, final String assign final StatusModel statusModel = new StatusModel(); statusModel.setName("test"); + statusModel.setDescription("Bla bla"); final UserModel userModel = new UserModel(); userModel.setName(assignee); userModel.setDisplayName(assignee); userModel.setEmailAddress(assignee); + final ProjectModel projectModel = new ProjectModel(); + projectModel.setName(PROJECT); + final FieldModel fieldModel = new FieldModel(); fieldModel.setIssueType(issueTypeModel); fieldModel.setStatus(statusModel); fieldModel.setAssignee(userModel); + fieldModel.setProject(projectModel); final IssueModel issueModel = new IssueModel(); issueModel.setId("13"); issueModel.setFields(fieldModel); JiraEventModel testEventModel = new JiraEventModel(); testEventModel.setComment(comment); testEventModel.setIssue(issueModel); - + testEventModel.setTimeStamp(System.currentTimeMillis()); return testEventModel; } } From 9b9a6e9276391cde2a9d00c7803e7c8936be4519 Mon Sep 17 00:00:00 2001 From: strogiyotec Date: Fri, 21 Feb 2020 16:14:56 -0800 Subject: [PATCH 06/27] fix comment type in create task test --- .../java/com/devadmin/vicky/test/CreatedTaskListenerTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/com/devadmin/vicky/test/CreatedTaskListenerTest.java b/src/test/java/com/devadmin/vicky/test/CreatedTaskListenerTest.java index d5ec591..69f4597 100644 --- a/src/test/java/com/devadmin/vicky/test/CreatedTaskListenerTest.java +++ b/src/test/java/com/devadmin/vicky/test/CreatedTaskListenerTest.java @@ -61,7 +61,7 @@ public class CreatedTaskListenerTest { private MessageService messageService; /** - * Test that channel gets notification. + * Test that channel skip created type. */ @Test public void testSendNotificationOnCreatedEvent() { From b4fc17bca07be2cd2e353873e659b4523c741814 Mon Sep 17 00:00:00 2001 From: strogiyotec Date: Fri, 21 Feb 2020 16:16:30 -0800 Subject: [PATCH 07/27] add labeled task test --- .../java/com/devadmin/vicky/listener/LabeledTaskListener.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/devadmin/vicky/listener/LabeledTaskListener.java b/src/main/java/com/devadmin/vicky/listener/LabeledTaskListener.java index 3a2817d..277114d 100644 --- a/src/main/java/com/devadmin/vicky/listener/LabeledTaskListener.java +++ b/src/main/java/com/devadmin/vicky/listener/LabeledTaskListener.java @@ -51,7 +51,7 @@ private boolean shouldListenerReactOnEvent(TaskEvent event, TaskEventModelWrappe private void sendMessage(TaskEvent event) { for (String label : event.getTask().getLabels()) { - log.info("Trying to send channel message about labeled task"); + log.info("Trying to send channel message about labeled task {}", label); messageService.sendChannelMessage(label, formatter.format(event)); } } From 32d3c3ef11c4d4346e80ad90b21a0605559943ef Mon Sep 17 00:00:00 2001 From: strogiyotec Date: Fri, 21 Feb 2020 16:17:26 -0800 Subject: [PATCH 08/27] add labeled task test --- .../vicky/test/LabeledTaskListenerTest.java | 117 ++++++++++++++++++ 1 file changed, 117 insertions(+) create mode 100644 src/test/java/com/devadmin/vicky/test/LabeledTaskListenerTest.java diff --git a/src/test/java/com/devadmin/vicky/test/LabeledTaskListenerTest.java b/src/test/java/com/devadmin/vicky/test/LabeledTaskListenerTest.java new file mode 100644 index 0000000..4f431c7 --- /dev/null +++ b/src/test/java/com/devadmin/vicky/test/LabeledTaskListenerTest.java @@ -0,0 +1,117 @@ +package com.devadmin.vicky.test; + +import com.devadmin.vicky.config.FormatConfig; +import com.devadmin.vicky.event.TaskEventModelWrapper; +import com.devadmin.vicky.format.SimpleTaskEventFormatter; +import com.devadmin.vicky.format.TaskEventFormatter; +import com.devadmin.vicky.listener.LabeledTaskListener; +import com.devadmin.vicky.model.jira.JiraEventModel; +import com.devadmin.vicky.model.jira.task.TaskEventType; +import com.devadmin.vicky.service.slack.MessageService; +import com.devadmin.vicky.service.slack.SlackMessageServiceImpl; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mockito; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.context.ApplicationEventPublisher; +import org.springframework.test.context.junit4.SpringRunner; + +import java.util.Arrays; +import java.util.List; + +import static com.devadmin.vicky.test.TestTasks.taskModel; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.atLeastOnce; +import static org.mockito.Mockito.never; + +/** + * Test class for {@link LabeledTaskListener} + */ +@RunWith(SpringRunner.class) +@SpringBootTest( + classes = { + FormatConfig.class, + LabeledTaskListener.class, + SimpleTaskEventFormatter.class, + SlackMessageServiceImpl.class, + ApplicationEventPublisher.class + } +) +public class LabeledTaskListenerTest { + + /** + * Event publisher. + */ + @Autowired + private ApplicationEventPublisher applicationEventPublisher; + + /** + * Event formatter to test. + * Add qualifier to avoid warning from IDEA + */ + @Autowired + @Qualifier("SimpleFormatter") + private TaskEventFormatter eventFormatter; + + /** + * Mocked slack message sender. + */ + @MockBean + private MessageService messageService; + + /** + * Tests that the event was not handled if task isn't contain label. + */ + @Test + public void eventShouldNotBeHandledWithoutLabelsTest() { + final JiraEventModel testEventModel = taskModel("serpento", "testUser", "Test task"); + testEventModel.getTask().getFields().setLabels(new String[0]); + this.applicationEventPublisher.publishEvent(new TaskEventModelWrapper(testEventModel)); + Mockito.verify( + this.messageService, never()) + .sendChannelMessage( + any(), + any() + ); + } + + /** + * Test that channel skip updated type. + */ + @Test + public void testSendNotificationOnCreatedEvent() { + final JiraEventModel testEventModel = taskModel("serpento", "testUser", "Test task"); + testEventModel.setType(TaskEventType.UPDATED); + testEventModel.getTask().getFields().setLabels(new String[]{"first", "second"}); + this.applicationEventPublisher.publishEvent(new TaskEventModelWrapper(testEventModel)); + Mockito.verify( + this.messageService, never()) + .sendChannelMessage( + any(), + any() + ); + } + + /** + * Tests that the message was sent two times. + */ + @Test + public void testMuptypleLabels() { + final List labels = Arrays.asList("first", "second"); + final JiraEventModel testTaskEventModel = taskModel("serpento", "testUser", "Test task"); + testTaskEventModel.getTask().getFields().setLabels(labels.toArray(new String[0])); + testTaskEventModel.setType(TaskEventType.CREATED); + this.applicationEventPublisher.publishEvent(new TaskEventModelWrapper(testTaskEventModel)); + for (final String label : labels) { + Mockito.verify( + this.messageService, atLeastOnce()) + .sendChannelMessage( + label, + this.eventFormatter.format(testTaskEventModel) + ); + } + } +} From b672d07e49fc9e7dda9f1858297b737a9bdd0209 Mon Sep 17 00:00:00 2001 From: strogiyotec Date: Fri, 21 Feb 2020 16:26:51 -0800 Subject: [PATCH 09/27] fix created task test comment typo --- .../java/com/devadmin/vicky/test/CreatedTaskListenerTest.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/test/java/com/devadmin/vicky/test/CreatedTaskListenerTest.java b/src/test/java/com/devadmin/vicky/test/CreatedTaskListenerTest.java index 69f4597..819209a 100644 --- a/src/test/java/com/devadmin/vicky/test/CreatedTaskListenerTest.java +++ b/src/test/java/com/devadmin/vicky/test/CreatedTaskListenerTest.java @@ -61,7 +61,7 @@ public class CreatedTaskListenerTest { private MessageService messageService; /** - * Test that channel skip created type. + * Test that channel will send notification. */ @Test public void testSendNotificationOnCreatedEvent() { @@ -107,6 +107,4 @@ this.messageService, never()) any() ); } - - } From 384c1bc67408dc154a412b97fbd2161a4a3729e6 Mon Sep 17 00:00:00 2001 From: strogiyotec Date: Fri, 21 Feb 2020 16:56:16 -0800 Subject: [PATCH 10/27] add PMOnAssign test --- .../vicky/test/PMOnAssignListenerTest.java | 131 ++++++++++++++++++ .../com/devadmin/vicky/test/TestTasks.java | 20 ++- 2 files changed, 150 insertions(+), 1 deletion(-) create mode 100644 src/test/java/com/devadmin/vicky/test/PMOnAssignListenerTest.java diff --git a/src/test/java/com/devadmin/vicky/test/PMOnAssignListenerTest.java b/src/test/java/com/devadmin/vicky/test/PMOnAssignListenerTest.java new file mode 100644 index 0000000..a5757ec --- /dev/null +++ b/src/test/java/com/devadmin/vicky/test/PMOnAssignListenerTest.java @@ -0,0 +1,131 @@ +package com.devadmin.vicky.test; + +import com.devadmin.vicky.config.FormatConfig; +import com.devadmin.vicky.event.TaskEventModelWrapper; +import com.devadmin.vicky.format.AssignTaskEventFormatter; +import com.devadmin.vicky.format.TaskEventFormatter; +import com.devadmin.vicky.listener.PMOnAssignListener; +import com.devadmin.vicky.model.jira.JiraEventModel; +import com.devadmin.vicky.model.jira.changelog.JiraChangeLogItemModel; +import com.devadmin.vicky.service.slack.MessageService; +import com.devadmin.vicky.service.slack.SlackMessageServiceImpl; +import org.hamcrest.CoreMatchers; +import org.junit.Assert; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mockito; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.context.ApplicationEventPublisher; +import org.springframework.test.context.junit4.SpringRunner; + +import java.util.Arrays; +import java.util.List; + +import static com.devadmin.vicky.test.TestTasks.taskModel; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.atLeastOnce; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.times; + +/** + * Test fpr {@link com.devadmin.vicky.listener.PMOnAssignListener} + */ +@RunWith(SpringRunner.class) +@SpringBootTest( + classes = { + FormatConfig.class, + PMOnAssignListener.class, + AssignTaskEventFormatter.class, + SlackMessageServiceImpl.class, + ApplicationEventPublisher.class + } +) +public class PMOnAssignListenerTest { + + /** + * Event publisher. + */ + @Autowired + private ApplicationEventPublisher applicationEventPublisher; + + /** + * Event formatter to test. + * Add qualifier to avoid warning from IDEA + */ + @Autowired + @Qualifier("AssignFormatter") + private TaskEventFormatter eventFormatter; + + /** + * Mocked slack message sender. + */ + @MockBean + private MessageService messageService; + + /** + * Test that channel skip created type. + */ + @Test + public void testSendNotificationOnCreatedEvent() { + final JiraEventModel testEventModel = taskModel("serpento", "testUser", "Test task"); + this.applicationEventPublisher.publishEvent(new TaskEventModelWrapper(testEventModel)); + Mockito.verify( + this.messageService, atLeastOnce()) + .sendPrivateMessage( + "testUser", + this.eventFormatter.format(testEventModel) + ); + } + + /** + * Test that not assignee field is skipped. + */ + @Test + public void testNotAssigneeEvent() { + final JiraEventModel testEventModel = taskModel("serpento", "testUser", "Test task"); + ((JiraChangeLogItemModel) testEventModel.getChangeLog().getItems().get(0)).setField("not assignee"); + this.applicationEventPublisher.publishEvent(new TaskEventModelWrapper(testEventModel)); + Mockito.verify( + this.messageService, never()) + .sendPrivateMessage( + any(), + any() + ); + } + + /** + * Test multiple change logs. + */ + @Test + public void testMultipleChangeLogs() { + final JiraEventModel testEventModel = taskModel("serpento", "testUser", "Test task"); + final List itemModels = this.multipleItems(); + + Assert.assertThat(itemModels.size(), CoreMatchers.is(2)); + + testEventModel.getChangeLog().setItems(itemModels); + this.applicationEventPublisher.publishEvent(new TaskEventModelWrapper(testEventModel)); + Mockito.verify( + this.messageService, times(2)) + .sendPrivateMessage( + any(), + any() + ); + } + + private List multipleItems() { + final JiraChangeLogItemModel logItemModel = new JiraChangeLogItemModel(); + logItemModel.setField("assignee"); + logItemModel.setTo("testUser2"); + + final JiraChangeLogItemModel logItemModel2 = new JiraChangeLogItemModel(); + logItemModel2.setField("assignee"); + logItemModel2.setTo("testUser3"); + + return Arrays.asList(logItemModel, logItemModel2); + } + +} diff --git a/src/test/java/com/devadmin/vicky/test/TestTasks.java b/src/test/java/com/devadmin/vicky/test/TestTasks.java index d6a455a..d9d2f17 100644 --- a/src/test/java/com/devadmin/vicky/test/TestTasks.java +++ b/src/test/java/com/devadmin/vicky/test/TestTasks.java @@ -1,11 +1,15 @@ package com.devadmin.vicky.test; import com.devadmin.vicky.model.jira.*; +import com.devadmin.vicky.model.jira.changelog.ChangeLogModel; +import com.devadmin.vicky.model.jira.changelog.JiraChangeLogItemModel; import com.devadmin.vicky.model.jira.comment.CommentModel; import com.devadmin.vicky.model.jira.status.StatusModel; import com.devadmin.vicky.model.jira.task.IssueModel; import com.devadmin.vicky.model.jira.task.IssueTypeModel; +import java.util.Collections; + /** * Create test tasks. */ @@ -44,13 +48,27 @@ public static JiraEventModel taskModel(final String creator, final String assign fieldModel.setStatus(statusModel); fieldModel.setAssignee(userModel); fieldModel.setProject(projectModel); + final IssueModel issueModel = new IssueModel(); issueModel.setId("13"); issueModel.setFields(fieldModel); - JiraEventModel testEventModel = new JiraEventModel(); + + final JiraChangeLogItemModel logItemModel = new JiraChangeLogItemModel(); + logItemModel.setField("assignee"); + logItemModel.setTo(assignee); + + final ChangeLogModel changeLogModel = new ChangeLogModel(); + changeLogModel.setId("13"); + changeLogModel.setItems(Collections.singletonList(logItemModel)); + + final JiraEventModel testEventModel = new JiraEventModel(); testEventModel.setComment(comment); + testEventModel.setUser(userModel); testEventModel.setIssue(issueModel); testEventModel.setTimeStamp(System.currentTimeMillis()); + testEventModel.setChangeLog(changeLogModel); + + return testEventModel; } } From 8169a9ec998fcd66a48b21439cdeddaf104b1a7f Mon Sep 17 00:00:00 2001 From: strogiyotec Date: Fri, 21 Feb 2020 16:59:15 -0800 Subject: [PATCH 11/27] typos --- .../java/com/devadmin/vicky/test/CommentedTaskListenerTest.java | 2 +- .../java/com/devadmin/vicky/test/PMOnAssignListenerTest.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/test/java/com/devadmin/vicky/test/CommentedTaskListenerTest.java b/src/test/java/com/devadmin/vicky/test/CommentedTaskListenerTest.java index b7bf01b..bcadc83 100644 --- a/src/test/java/com/devadmin/vicky/test/CommentedTaskListenerTest.java +++ b/src/test/java/com/devadmin/vicky/test/CommentedTaskListenerTest.java @@ -56,7 +56,7 @@ public class CommentedTaskListenerTest { private MessageService messageService; /** - * test CommentedTaskListener if commenter and assignee is different users + * test CommentedTaskListener if commenter and assignee are different users */ @Test public void testWhenCommenterAndAssigneeAreDifferent() { diff --git a/src/test/java/com/devadmin/vicky/test/PMOnAssignListenerTest.java b/src/test/java/com/devadmin/vicky/test/PMOnAssignListenerTest.java index a5757ec..e3bde76 100644 --- a/src/test/java/com/devadmin/vicky/test/PMOnAssignListenerTest.java +++ b/src/test/java/com/devadmin/vicky/test/PMOnAssignListenerTest.java @@ -66,7 +66,7 @@ public class PMOnAssignListenerTest { private MessageService messageService; /** - * Test that channel skip created type. + * Test that sends notification. */ @Test public void testSendNotificationOnCreatedEvent() { From debf3fdee97be402953d0535fddeec31f1bab4ae Mon Sep 17 00:00:00 2001 From: strogiyotec Date: Fri, 21 Feb 2020 19:51:59 -0800 Subject: [PATCH 12/27] improve comments in tests --- .../com/devadmin/vicky/test/AtReferenceListenerTest.java | 2 +- .../com/devadmin/vicky/test/CommentedTaskListenerTest.java | 6 +++--- .../com/devadmin/vicky/test/CreatedTaskListenerTest.java | 2 +- .../com/devadmin/vicky/test/LabeledTaskListenerTest.java | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/test/java/com/devadmin/vicky/test/AtReferenceListenerTest.java b/src/test/java/com/devadmin/vicky/test/AtReferenceListenerTest.java index a3db80a..c237ac9 100644 --- a/src/test/java/com/devadmin/vicky/test/AtReferenceListenerTest.java +++ b/src/test/java/com/devadmin/vicky/test/AtReferenceListenerTest.java @@ -77,7 +77,7 @@ this.messageService, never()) } /** - * Nobody will get message because reference format is incorrect. + * Nobody will get message because comment is null. */ @Test public void testSkipEmptyComment() { diff --git a/src/test/java/com/devadmin/vicky/test/CommentedTaskListenerTest.java b/src/test/java/com/devadmin/vicky/test/CommentedTaskListenerTest.java index bcadc83..7d0b8c9 100644 --- a/src/test/java/com/devadmin/vicky/test/CommentedTaskListenerTest.java +++ b/src/test/java/com/devadmin/vicky/test/CommentedTaskListenerTest.java @@ -56,10 +56,10 @@ public class CommentedTaskListenerTest { private MessageService messageService; /** - * test CommentedTaskListener if commenter and assignee are different users + * test that listener sends notification. */ @Test - public void testWhenCommenterAndAssigneeAreDifferent() { + public void testSendNotificationOnCreatedEvent() { final JiraEventModel testEventModel = taskModel("serpento", "testUser", "This is a simple comment"); this.applicationEventPublisher.publishEvent(new TaskEventModelWrapper(testEventModel)); Mockito.verify( @@ -86,7 +86,7 @@ this.messageService, never()) } /** - * test CommentedTaskListener if event does not contain comment + * Skip message because comment is null. */ @Test public void testCommentIsNull() { diff --git a/src/test/java/com/devadmin/vicky/test/CreatedTaskListenerTest.java b/src/test/java/com/devadmin/vicky/test/CreatedTaskListenerTest.java index 819209a..be16142 100644 --- a/src/test/java/com/devadmin/vicky/test/CreatedTaskListenerTest.java +++ b/src/test/java/com/devadmin/vicky/test/CreatedTaskListenerTest.java @@ -93,7 +93,7 @@ this.messageService, never()) } /** - * Test that only issues with id 13 are supported. + * Test that unsupported issue ids ae skipped */ @Test public void testSkipIssueId() { diff --git a/src/test/java/com/devadmin/vicky/test/LabeledTaskListenerTest.java b/src/test/java/com/devadmin/vicky/test/LabeledTaskListenerTest.java index 4f431c7..15597fc 100644 --- a/src/test/java/com/devadmin/vicky/test/LabeledTaskListenerTest.java +++ b/src/test/java/com/devadmin/vicky/test/LabeledTaskListenerTest.java @@ -63,7 +63,7 @@ public class LabeledTaskListenerTest { private MessageService messageService; /** - * Tests that the event was not handled if task isn't contain label. + * Sip event if it doesn't have labels. */ @Test public void eventShouldNotBeHandledWithoutLabelsTest() { From fd02c3009e2c8d8eacac26a01f6ce6cd6261d653 Mon Sep 17 00:00:00 2001 From: strogiyotec Date: Fri, 21 Feb 2020 19:54:12 -0800 Subject: [PATCH 13/27] format Resolved Listener --- .../com/devadmin/vicky/listener/ResolvedTaskListener.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/devadmin/vicky/listener/ResolvedTaskListener.java b/src/main/java/com/devadmin/vicky/listener/ResolvedTaskListener.java index 480f4d3..fe1b395 100644 --- a/src/main/java/com/devadmin/vicky/listener/ResolvedTaskListener.java +++ b/src/main/java/com/devadmin/vicky/listener/ResolvedTaskListener.java @@ -50,6 +50,8 @@ public void onApplicationEvent(TaskEventModelWrapper eventWrapper) { * What we want is just to send notification on resolved task , also we check if eventWrapper contain all the data or we should skip it */ private boolean shouldListenerReactOnEvent(TaskEvent event, Task task, TaskEventModelWrapper eventWrapper) { - return task.isResolved() && event.getType() != null && event.getType().equals(TaskEventType.UPDATED) && !this.shouldSkip(eventWrapper); + return task.isResolved() && event.getType() != null + && event.getType() == TaskEventType.UPDATED + && !this.shouldSkip(eventWrapper); } } From 6a18aa7e7e2c05078f40cf4d97822dc7b0678565 Mon Sep 17 00:00:00 2001 From: strogiyotec Date: Fri, 21 Feb 2020 19:54:53 -0800 Subject: [PATCH 14/27] make resolved string as constant --- .../com/devadmin/vicky/model/jira/status/StatusModel.java | 2 ++ .../java/com/devadmin/vicky/model/jira/task/IssueModel.java | 5 +++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/devadmin/vicky/model/jira/status/StatusModel.java b/src/main/java/com/devadmin/vicky/model/jira/status/StatusModel.java index ff69f98..ad316ef 100644 --- a/src/main/java/com/devadmin/vicky/model/jira/status/StatusModel.java +++ b/src/main/java/com/devadmin/vicky/model/jira/status/StatusModel.java @@ -11,6 +11,8 @@ @JsonIgnoreProperties(ignoreUnknown = true) public class StatusModel { + public static final String RESOLVED = "Resolved 解決済"; + @JsonProperty("self") private String self; diff --git a/src/main/java/com/devadmin/vicky/model/jira/task/IssueModel.java b/src/main/java/com/devadmin/vicky/model/jira/task/IssueModel.java index 875c580..e55326c 100644 --- a/src/main/java/com/devadmin/vicky/model/jira/task/IssueModel.java +++ b/src/main/java/com/devadmin/vicky/model/jira/task/IssueModel.java @@ -1,7 +1,8 @@ package com.devadmin.vicky.model.jira.task; -import com.devadmin.vicky.model.jira.comment.CommentModel; import com.devadmin.vicky.model.jira.FieldModel; +import com.devadmin.vicky.model.jira.comment.CommentModel; +import com.devadmin.vicky.model.jira.status.StatusModel; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonProperty; import org.springframework.beans.factory.annotation.Value; @@ -96,7 +97,7 @@ public List getLabels() { */ @Override public Boolean isResolved() { - return "Resolved 解決済".equals(this.fields.getStatus().getName()); + return StatusModel.RESOLVED.equals(this.fields.getStatus().getName()); } @Override From e9d41e5f7cc29dad80a8f0a1b5853640a927e81b Mon Sep 17 00:00:00 2001 From: strogiyotec Date: Fri, 21 Feb 2020 19:55:07 -0800 Subject: [PATCH 15/27] test for Resolved Listener --- .../vicky/test/ResolvedTestListenerTest.java | 108 ++++++++++++++++++ .../com/devadmin/vicky/test/TestTasks.java | 5 +- 2 files changed, 111 insertions(+), 2 deletions(-) create mode 100644 src/test/java/com/devadmin/vicky/test/ResolvedTestListenerTest.java diff --git a/src/test/java/com/devadmin/vicky/test/ResolvedTestListenerTest.java b/src/test/java/com/devadmin/vicky/test/ResolvedTestListenerTest.java new file mode 100644 index 0000000..2124562 --- /dev/null +++ b/src/test/java/com/devadmin/vicky/test/ResolvedTestListenerTest.java @@ -0,0 +1,108 @@ +package com.devadmin.vicky.test; + +import com.devadmin.vicky.config.FormatConfig; +import com.devadmin.vicky.event.TaskEventModelWrapper; +import com.devadmin.vicky.format.SimpleTaskEventFormatter; +import com.devadmin.vicky.format.TaskEventFormatter; +import com.devadmin.vicky.listener.ResolvedTaskListener; +import com.devadmin.vicky.model.jira.JiraEventModel; +import com.devadmin.vicky.model.jira.task.TaskEventType; +import com.devadmin.vicky.service.slack.MessageService; +import com.devadmin.vicky.service.slack.SlackMessageServiceImpl; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mockito; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.context.ApplicationEventPublisher; +import org.springframework.test.context.junit4.SpringRunner; + +import static com.devadmin.vicky.test.TestTasks.taskModel; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.atLeastOnce; +import static org.mockito.Mockito.never; + +/** + * Test fpr {@link com.devadmin.vicky.listener.ResolvedTaskListener} + */ +@RunWith(SpringRunner.class) +@SpringBootTest( + classes = { + FormatConfig.class, + ResolvedTaskListener.class, + SimpleTaskEventFormatter.class, + SlackMessageServiceImpl.class, + ApplicationEventPublisher.class + } +) +public class ResolvedTestListenerTest { + + /** + * Event publisher. + */ + @Autowired + private ApplicationEventPublisher applicationEventPublisher; + + /** + * Event formatter to test. + * Add qualifier to avoid warning from IDEA + */ + @Autowired + @Qualifier("SimpleFormatter") + private TaskEventFormatter eventFormatter; + + /** + * Mocked slack message sender. + */ + @MockBean + private MessageService messageService; + + /** + * Test that sends notification. + */ + @Test + public void testSendNotificationOnCreatedEvent() { + final JiraEventModel testEventModel = taskModel("serpento", "testUser", "Test task"); + this.applicationEventPublisher.publishEvent(new TaskEventModelWrapper(testEventModel)); + Mockito.verify( + this.messageService, atLeastOnce()) + .sendChannelMessage( + TestTasks.PROJECT, + this.eventFormatter.format(testEventModel) + ); + } + + /** + * Test that listener skip non updated status. + */ + @Test + public void testSkipByStatus() { + final JiraEventModel testEventModel = taskModel("serpento", "testUser", "Test task"); + testEventModel.setType(TaskEventType.COMMENT); + this.applicationEventPublisher.publishEvent(new TaskEventModelWrapper(testEventModel)); + Mockito.verify( + this.messageService, never()) + .sendChannelMessage( + any(), + any() + ); + } + + /** + * Test that listener skip non updated status. + */ + @Test + public void testSkipUnsupportedId() { + final JiraEventModel testEventModel = taskModel("serpento", "testUser", "Test task"); + testEventModel.getIssue().getFields().getIssueType().setId("228"); + this.applicationEventPublisher.publishEvent(new TaskEventModelWrapper(testEventModel)); + Mockito.verify( + this.messageService, never()) + .sendChannelMessage( + any(), + any() + ); + } +} diff --git a/src/test/java/com/devadmin/vicky/test/TestTasks.java b/src/test/java/com/devadmin/vicky/test/TestTasks.java index d9d2f17..48db815 100644 --- a/src/test/java/com/devadmin/vicky/test/TestTasks.java +++ b/src/test/java/com/devadmin/vicky/test/TestTasks.java @@ -7,6 +7,7 @@ import com.devadmin.vicky.model.jira.status.StatusModel; import com.devadmin.vicky.model.jira.task.IssueModel; import com.devadmin.vicky.model.jira.task.IssueTypeModel; +import com.devadmin.vicky.model.jira.task.TaskEventType; import java.util.Collections; @@ -32,7 +33,7 @@ public static JiraEventModel taskModel(final String creator, final String assign issueTypeModel.setId("13"); final StatusModel statusModel = new StatusModel(); - statusModel.setName("test"); + statusModel.setName(StatusModel.RESOLVED); statusModel.setDescription("Bla bla"); final UserModel userModel = new UserModel(); @@ -67,7 +68,7 @@ public static JiraEventModel taskModel(final String creator, final String assign testEventModel.setIssue(issueModel); testEventModel.setTimeStamp(System.currentTimeMillis()); testEventModel.setChangeLog(changeLogModel); - + testEventModel.setType(TaskEventType.UPDATED); return testEventModel; } From 71dbeecc89d8069e095057377c7314a5f2c2f30e Mon Sep 17 00:00:00 2001 From: strogiyotec Date: Fri, 21 Feb 2020 19:56:17 -0800 Subject: [PATCH 16/27] move listener tests to separate folder --- .../java/com/devadmin/vicky/event/EventModelWrapper.java | 2 +- .../vicky/test/{ => listener}/AtReferenceListenerTest.java | 2 +- .../test/{ => listener}/CommentedTaskListenerTest.java | 4 ++-- .../vicky/test/{ => listener}/CreatedTaskListenerTest.java | 6 +++--- .../vicky/test/{ => listener}/LabeledTaskListenerTest.java | 4 ++-- .../vicky/test/{ => listener}/PMOnAssignListenerTest.java | 4 ++-- .../vicky/test/{ => listener}/ResolvedTestListenerTest.java | 4 ++-- .../test/{ => listener}/SimpleTaskEventFormatterTest.java | 2 +- .../com/devadmin/vicky/test/{ => listener}/TestTasks.java | 2 +- 9 files changed, 15 insertions(+), 15 deletions(-) rename src/test/java/com/devadmin/vicky/test/{ => listener}/AtReferenceListenerTest.java (99%) rename src/test/java/com/devadmin/vicky/test/{ => listener}/CommentedTaskListenerTest.java (96%) rename src/test/java/com/devadmin/vicky/test/{ => listener}/CreatedTaskListenerTest.java (95%) rename src/test/java/com/devadmin/vicky/test/{ => listener}/LabeledTaskListenerTest.java (97%) rename src/test/java/com/devadmin/vicky/test/{ => listener}/PMOnAssignListenerTest.java (97%) rename src/test/java/com/devadmin/vicky/test/{ => listener}/ResolvedTestListenerTest.java (97%) rename src/test/java/com/devadmin/vicky/test/{ => listener}/SimpleTaskEventFormatterTest.java (98%) rename src/test/java/com/devadmin/vicky/test/{ => listener}/TestTasks.java (98%) diff --git a/src/main/java/com/devadmin/vicky/event/EventModelWrapper.java b/src/main/java/com/devadmin/vicky/event/EventModelWrapper.java index 650381e..fb690c6 100644 --- a/src/main/java/com/devadmin/vicky/event/EventModelWrapper.java +++ b/src/main/java/com/devadmin/vicky/event/EventModelWrapper.java @@ -5,7 +5,7 @@ /** * An event wrapper holding a model which describes the event. *

- *

This allows listeners to not care about the implementation of the event model. + *

This allows listener to not care about the implementation of the event model. */ abstract class EventModelWrapper extends ApplicationEvent { private T eventModel; diff --git a/src/test/java/com/devadmin/vicky/test/AtReferenceListenerTest.java b/src/test/java/com/devadmin/vicky/test/listener/AtReferenceListenerTest.java similarity index 99% rename from src/test/java/com/devadmin/vicky/test/AtReferenceListenerTest.java rename to src/test/java/com/devadmin/vicky/test/listener/AtReferenceListenerTest.java index c237ac9..e45c716 100644 --- a/src/test/java/com/devadmin/vicky/test/AtReferenceListenerTest.java +++ b/src/test/java/com/devadmin/vicky/test/listener/AtReferenceListenerTest.java @@ -1,4 +1,4 @@ -package com.devadmin.vicky.test; +package com.devadmin.vicky.test.listener; import com.devadmin.vicky.config.FormatConfig; import com.devadmin.vicky.event.TaskEventModelWrapper; diff --git a/src/test/java/com/devadmin/vicky/test/CommentedTaskListenerTest.java b/src/test/java/com/devadmin/vicky/test/listener/CommentedTaskListenerTest.java similarity index 96% rename from src/test/java/com/devadmin/vicky/test/CommentedTaskListenerTest.java rename to src/test/java/com/devadmin/vicky/test/listener/CommentedTaskListenerTest.java index 7d0b8c9..2c591bf 100644 --- a/src/test/java/com/devadmin/vicky/test/CommentedTaskListenerTest.java +++ b/src/test/java/com/devadmin/vicky/test/listener/CommentedTaskListenerTest.java @@ -1,4 +1,4 @@ -package com.devadmin.vicky.test; +package com.devadmin.vicky.test.listener; import com.devadmin.vicky.config.FormatConfig; import com.devadmin.vicky.event.TaskEventModelWrapper; @@ -18,7 +18,7 @@ import org.springframework.context.ApplicationEventPublisher; import org.springframework.test.context.junit4.SpringRunner; -import static com.devadmin.vicky.test.TestTasks.taskModel; +import static com.devadmin.vicky.test.listener.TestTasks.taskModel; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.atLeastOnce; import static org.mockito.Mockito.never; diff --git a/src/test/java/com/devadmin/vicky/test/CreatedTaskListenerTest.java b/src/test/java/com/devadmin/vicky/test/listener/CreatedTaskListenerTest.java similarity index 95% rename from src/test/java/com/devadmin/vicky/test/CreatedTaskListenerTest.java rename to src/test/java/com/devadmin/vicky/test/listener/CreatedTaskListenerTest.java index be16142..80cdb16 100644 --- a/src/test/java/com/devadmin/vicky/test/CreatedTaskListenerTest.java +++ b/src/test/java/com/devadmin/vicky/test/listener/CreatedTaskListenerTest.java @@ -1,4 +1,4 @@ -package com.devadmin.vicky.test; +package com.devadmin.vicky.test.listener; import com.devadmin.vicky.config.FormatConfig; import com.devadmin.vicky.event.TaskEventModelWrapper; @@ -19,8 +19,8 @@ import org.springframework.context.ApplicationEventPublisher; import org.springframework.test.context.junit4.SpringRunner; -import static com.devadmin.vicky.test.TestTasks.PROJECT; -import static com.devadmin.vicky.test.TestTasks.taskModel; +import static com.devadmin.vicky.test.listener.TestTasks.PROJECT; +import static com.devadmin.vicky.test.listener.TestTasks.taskModel; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.atLeastOnce; import static org.mockito.Mockito.never; diff --git a/src/test/java/com/devadmin/vicky/test/LabeledTaskListenerTest.java b/src/test/java/com/devadmin/vicky/test/listener/LabeledTaskListenerTest.java similarity index 97% rename from src/test/java/com/devadmin/vicky/test/LabeledTaskListenerTest.java rename to src/test/java/com/devadmin/vicky/test/listener/LabeledTaskListenerTest.java index 15597fc..f2d14f6 100644 --- a/src/test/java/com/devadmin/vicky/test/LabeledTaskListenerTest.java +++ b/src/test/java/com/devadmin/vicky/test/listener/LabeledTaskListenerTest.java @@ -1,4 +1,4 @@ -package com.devadmin.vicky.test; +package com.devadmin.vicky.test.listener; import com.devadmin.vicky.config.FormatConfig; import com.devadmin.vicky.event.TaskEventModelWrapper; @@ -22,7 +22,7 @@ import java.util.Arrays; import java.util.List; -import static com.devadmin.vicky.test.TestTasks.taskModel; +import static com.devadmin.vicky.test.listener.TestTasks.taskModel; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.atLeastOnce; import static org.mockito.Mockito.never; diff --git a/src/test/java/com/devadmin/vicky/test/PMOnAssignListenerTest.java b/src/test/java/com/devadmin/vicky/test/listener/PMOnAssignListenerTest.java similarity index 97% rename from src/test/java/com/devadmin/vicky/test/PMOnAssignListenerTest.java rename to src/test/java/com/devadmin/vicky/test/listener/PMOnAssignListenerTest.java index e3bde76..2647fa7 100644 --- a/src/test/java/com/devadmin/vicky/test/PMOnAssignListenerTest.java +++ b/src/test/java/com/devadmin/vicky/test/listener/PMOnAssignListenerTest.java @@ -1,4 +1,4 @@ -package com.devadmin.vicky.test; +package com.devadmin.vicky.test.listener; import com.devadmin.vicky.config.FormatConfig; import com.devadmin.vicky.event.TaskEventModelWrapper; @@ -24,7 +24,7 @@ import java.util.Arrays; import java.util.List; -import static com.devadmin.vicky.test.TestTasks.taskModel; +import static com.devadmin.vicky.test.listener.TestTasks.taskModel; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.atLeastOnce; import static org.mockito.Mockito.never; diff --git a/src/test/java/com/devadmin/vicky/test/ResolvedTestListenerTest.java b/src/test/java/com/devadmin/vicky/test/listener/ResolvedTestListenerTest.java similarity index 97% rename from src/test/java/com/devadmin/vicky/test/ResolvedTestListenerTest.java rename to src/test/java/com/devadmin/vicky/test/listener/ResolvedTestListenerTest.java index 2124562..8015a5a 100644 --- a/src/test/java/com/devadmin/vicky/test/ResolvedTestListenerTest.java +++ b/src/test/java/com/devadmin/vicky/test/listener/ResolvedTestListenerTest.java @@ -1,4 +1,4 @@ -package com.devadmin.vicky.test; +package com.devadmin.vicky.test.listener; import com.devadmin.vicky.config.FormatConfig; import com.devadmin.vicky.event.TaskEventModelWrapper; @@ -19,7 +19,7 @@ import org.springframework.context.ApplicationEventPublisher; import org.springframework.test.context.junit4.SpringRunner; -import static com.devadmin.vicky.test.TestTasks.taskModel; +import static com.devadmin.vicky.test.listener.TestTasks.taskModel; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.atLeastOnce; import static org.mockito.Mockito.never; diff --git a/src/test/java/com/devadmin/vicky/test/SimpleTaskEventFormatterTest.java b/src/test/java/com/devadmin/vicky/test/listener/SimpleTaskEventFormatterTest.java similarity index 98% rename from src/test/java/com/devadmin/vicky/test/SimpleTaskEventFormatterTest.java rename to src/test/java/com/devadmin/vicky/test/listener/SimpleTaskEventFormatterTest.java index 81f82e9..ce907f6 100644 --- a/src/test/java/com/devadmin/vicky/test/SimpleTaskEventFormatterTest.java +++ b/src/test/java/com/devadmin/vicky/test/listener/SimpleTaskEventFormatterTest.java @@ -1,4 +1,4 @@ -package com.devadmin.vicky.test; +package com.devadmin.vicky.test.listener; import com.devadmin.vicky.config.FormatConfig; diff --git a/src/test/java/com/devadmin/vicky/test/TestTasks.java b/src/test/java/com/devadmin/vicky/test/listener/TestTasks.java similarity index 98% rename from src/test/java/com/devadmin/vicky/test/TestTasks.java rename to src/test/java/com/devadmin/vicky/test/listener/TestTasks.java index 48db815..3c506a8 100644 --- a/src/test/java/com/devadmin/vicky/test/TestTasks.java +++ b/src/test/java/com/devadmin/vicky/test/listener/TestTasks.java @@ -1,4 +1,4 @@ -package com.devadmin.vicky.test; +package com.devadmin.vicky.test.listener; import com.devadmin.vicky.model.jira.*; import com.devadmin.vicky.model.jira.changelog.ChangeLogModel; From 1a68fd7aa5c73c67d4ca737eed0237f285d6d94e Mon Sep 17 00:00:00 2001 From: strogiyotec Date: Fri, 21 Feb 2020 19:57:19 -0800 Subject: [PATCH 17/27] move formatter test to separate package --- .../test/{listener => format}/SimpleTaskEventFormatterTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename src/test/java/com/devadmin/vicky/test/{listener => format}/SimpleTaskEventFormatterTest.java (98%) diff --git a/src/test/java/com/devadmin/vicky/test/listener/SimpleTaskEventFormatterTest.java b/src/test/java/com/devadmin/vicky/test/format/SimpleTaskEventFormatterTest.java similarity index 98% rename from src/test/java/com/devadmin/vicky/test/listener/SimpleTaskEventFormatterTest.java rename to src/test/java/com/devadmin/vicky/test/format/SimpleTaskEventFormatterTest.java index ce907f6..76a3e1c 100644 --- a/src/test/java/com/devadmin/vicky/test/listener/SimpleTaskEventFormatterTest.java +++ b/src/test/java/com/devadmin/vicky/test/format/SimpleTaskEventFormatterTest.java @@ -1,4 +1,4 @@ -package com.devadmin.vicky.test.listener; +package com.devadmin.vicky.test.format; import com.devadmin.vicky.config.FormatConfig; From e01f6fc34f4eac1b45866479e7a25897cb8fe00e Mon Sep 17 00:00:00 2001 From: strogiyotec Date: Fri, 21 Feb 2020 20:00:08 -0800 Subject: [PATCH 18/27] add test profile to load yml properties --- .../vicky/test/listener/CreatedTaskListenerTest.java | 2 ++ .../vicky/test/listener/ResolvedTestListenerTest.java | 2 ++ src/test/resources/application-test.yml | 5 +++++ 3 files changed, 9 insertions(+) create mode 100644 src/test/resources/application-test.yml diff --git a/src/test/java/com/devadmin/vicky/test/listener/CreatedTaskListenerTest.java b/src/test/java/com/devadmin/vicky/test/listener/CreatedTaskListenerTest.java index 80cdb16..f9ad9f9 100644 --- a/src/test/java/com/devadmin/vicky/test/listener/CreatedTaskListenerTest.java +++ b/src/test/java/com/devadmin/vicky/test/listener/CreatedTaskListenerTest.java @@ -17,6 +17,7 @@ import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.context.ApplicationEventPublisher; +import org.springframework.test.context.ActiveProfiles; import org.springframework.test.context.junit4.SpringRunner; import static com.devadmin.vicky.test.listener.TestTasks.PROJECT; @@ -38,6 +39,7 @@ ApplicationEventPublisher.class } ) +@ActiveProfiles("test") // to load yml public class CreatedTaskListenerTest { /** diff --git a/src/test/java/com/devadmin/vicky/test/listener/ResolvedTestListenerTest.java b/src/test/java/com/devadmin/vicky/test/listener/ResolvedTestListenerTest.java index 8015a5a..bd81048 100644 --- a/src/test/java/com/devadmin/vicky/test/listener/ResolvedTestListenerTest.java +++ b/src/test/java/com/devadmin/vicky/test/listener/ResolvedTestListenerTest.java @@ -17,6 +17,7 @@ import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.context.ApplicationEventPublisher; +import org.springframework.test.context.ActiveProfiles; import org.springframework.test.context.junit4.SpringRunner; import static com.devadmin.vicky.test.listener.TestTasks.taskModel; @@ -37,6 +38,7 @@ ApplicationEventPublisher.class } ) +@ActiveProfiles("test")// to load yml public class ResolvedTestListenerTest { /** diff --git a/src/test/resources/application-test.yml b/src/test/resources/application-test.yml new file mode 100644 index 0000000..e258602 --- /dev/null +++ b/src/test/resources/application-test.yml @@ -0,0 +1,5 @@ +slack: + notification: + task-types: + createdTask: 13 + resolvedTask: 13 \ No newline at end of file From 113c102c2ab276f640e211c1ca9950ab32ddf056 Mon Sep 17 00:00:00 2001 From: strogiyotec Date: Fri, 21 Feb 2020 20:08:08 -0800 Subject: [PATCH 19/27] move TeskTasks utility to global package --- .../com/devadmin/vicky/test/{listener => }/TestTasks.java | 2 +- .../vicky/test/listener/CommentedTaskListenerTest.java | 2 +- .../devadmin/vicky/test/listener/CreatedTaskListenerTest.java | 4 ++-- .../devadmin/vicky/test/listener/LabeledTaskListenerTest.java | 2 +- .../devadmin/vicky/test/listener/PMOnAssignListenerTest.java | 2 +- .../vicky/test/listener/ResolvedTestListenerTest.java | 3 ++- 6 files changed, 8 insertions(+), 7 deletions(-) rename src/test/java/com/devadmin/vicky/test/{listener => }/TestTasks.java (98%) diff --git a/src/test/java/com/devadmin/vicky/test/listener/TestTasks.java b/src/test/java/com/devadmin/vicky/test/TestTasks.java similarity index 98% rename from src/test/java/com/devadmin/vicky/test/listener/TestTasks.java rename to src/test/java/com/devadmin/vicky/test/TestTasks.java index 3c506a8..48db815 100644 --- a/src/test/java/com/devadmin/vicky/test/listener/TestTasks.java +++ b/src/test/java/com/devadmin/vicky/test/TestTasks.java @@ -1,4 +1,4 @@ -package com.devadmin.vicky.test.listener; +package com.devadmin.vicky.test; import com.devadmin.vicky.model.jira.*; import com.devadmin.vicky.model.jira.changelog.ChangeLogModel; diff --git a/src/test/java/com/devadmin/vicky/test/listener/CommentedTaskListenerTest.java b/src/test/java/com/devadmin/vicky/test/listener/CommentedTaskListenerTest.java index 2c591bf..428060e 100644 --- a/src/test/java/com/devadmin/vicky/test/listener/CommentedTaskListenerTest.java +++ b/src/test/java/com/devadmin/vicky/test/listener/CommentedTaskListenerTest.java @@ -18,7 +18,7 @@ import org.springframework.context.ApplicationEventPublisher; import org.springframework.test.context.junit4.SpringRunner; -import static com.devadmin.vicky.test.listener.TestTasks.taskModel; +import static com.devadmin.vicky.test.TestTasks.taskModel; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.atLeastOnce; import static org.mockito.Mockito.never; diff --git a/src/test/java/com/devadmin/vicky/test/listener/CreatedTaskListenerTest.java b/src/test/java/com/devadmin/vicky/test/listener/CreatedTaskListenerTest.java index f9ad9f9..07eb671 100644 --- a/src/test/java/com/devadmin/vicky/test/listener/CreatedTaskListenerTest.java +++ b/src/test/java/com/devadmin/vicky/test/listener/CreatedTaskListenerTest.java @@ -20,8 +20,8 @@ import org.springframework.test.context.ActiveProfiles; import org.springframework.test.context.junit4.SpringRunner; -import static com.devadmin.vicky.test.listener.TestTasks.PROJECT; -import static com.devadmin.vicky.test.listener.TestTasks.taskModel; +import static com.devadmin.vicky.test.TestTasks.PROJECT; +import static com.devadmin.vicky.test.TestTasks.taskModel; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.atLeastOnce; import static org.mockito.Mockito.never; diff --git a/src/test/java/com/devadmin/vicky/test/listener/LabeledTaskListenerTest.java b/src/test/java/com/devadmin/vicky/test/listener/LabeledTaskListenerTest.java index f2d14f6..d510dd2 100644 --- a/src/test/java/com/devadmin/vicky/test/listener/LabeledTaskListenerTest.java +++ b/src/test/java/com/devadmin/vicky/test/listener/LabeledTaskListenerTest.java @@ -22,7 +22,7 @@ import java.util.Arrays; import java.util.List; -import static com.devadmin.vicky.test.listener.TestTasks.taskModel; +import static com.devadmin.vicky.test.TestTasks.taskModel; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.atLeastOnce; import static org.mockito.Mockito.never; diff --git a/src/test/java/com/devadmin/vicky/test/listener/PMOnAssignListenerTest.java b/src/test/java/com/devadmin/vicky/test/listener/PMOnAssignListenerTest.java index 2647fa7..f7ac847 100644 --- a/src/test/java/com/devadmin/vicky/test/listener/PMOnAssignListenerTest.java +++ b/src/test/java/com/devadmin/vicky/test/listener/PMOnAssignListenerTest.java @@ -24,7 +24,7 @@ import java.util.Arrays; import java.util.List; -import static com.devadmin.vicky.test.listener.TestTasks.taskModel; +import static com.devadmin.vicky.test.TestTasks.taskModel; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.atLeastOnce; import static org.mockito.Mockito.never; diff --git a/src/test/java/com/devadmin/vicky/test/listener/ResolvedTestListenerTest.java b/src/test/java/com/devadmin/vicky/test/listener/ResolvedTestListenerTest.java index bd81048..2758f2f 100644 --- a/src/test/java/com/devadmin/vicky/test/listener/ResolvedTestListenerTest.java +++ b/src/test/java/com/devadmin/vicky/test/listener/ResolvedTestListenerTest.java @@ -9,6 +9,7 @@ import com.devadmin.vicky.model.jira.task.TaskEventType; import com.devadmin.vicky.service.slack.MessageService; import com.devadmin.vicky.service.slack.SlackMessageServiceImpl; +import com.devadmin.vicky.test.TestTasks; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mockito; @@ -20,7 +21,7 @@ import org.springframework.test.context.ActiveProfiles; import org.springframework.test.context.junit4.SpringRunner; -import static com.devadmin.vicky.test.listener.TestTasks.taskModel; +import static com.devadmin.vicky.test.TestTasks.taskModel; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.atLeastOnce; import static org.mockito.Mockito.never; From aedc2f5e2f7c7f3da911093763ede71adc9cb3f1 Mon Sep 17 00:00:00 2001 From: strogiyotec Date: Fri, 21 Feb 2020 20:23:30 -0800 Subject: [PATCH 20/27] assign task formatter test --- .../com/devadmin/vicky/test/TestTasks.java | 11 ++- .../format/AssignTaskEventFormatterTest.java | 85 +++++++++++++++++++ 2 files changed, 93 insertions(+), 3 deletions(-) create mode 100644 src/test/java/com/devadmin/vicky/test/format/AssignTaskEventFormatterTest.java diff --git a/src/test/java/com/devadmin/vicky/test/TestTasks.java b/src/test/java/com/devadmin/vicky/test/TestTasks.java index 48db815..a906b80 100644 --- a/src/test/java/com/devadmin/vicky/test/TestTasks.java +++ b/src/test/java/com/devadmin/vicky/test/TestTasks.java @@ -18,6 +18,8 @@ public final class TestTasks { public static final String PROJECT = "vicky"; + public static final String TEST_ID = "13"; + public static JiraEventModel taskModel(final String creator, final String assignee, final String body) { final AuthorModel authorModel = new AuthorModel(); authorModel.setName(creator); @@ -30,7 +32,7 @@ public static JiraEventModel taskModel(final String creator, final String assign final IssueTypeModel issueTypeModel = new IssueTypeModel(); - issueTypeModel.setId("13"); + issueTypeModel.setId(TEST_ID); final StatusModel statusModel = new StatusModel(); statusModel.setName(StatusModel.RESOLVED); @@ -48,18 +50,21 @@ public static JiraEventModel taskModel(final String creator, final String assign fieldModel.setIssueType(issueTypeModel); fieldModel.setStatus(statusModel); fieldModel.setAssignee(userModel); + fieldModel.setSummary("Everything is ok"); fieldModel.setProject(projectModel); final IssueModel issueModel = new IssueModel(); - issueModel.setId("13"); + issueModel.setId(TEST_ID); + issueModel.setKey("test key"); issueModel.setFields(fieldModel); + final JiraChangeLogItemModel logItemModel = new JiraChangeLogItemModel(); logItemModel.setField("assignee"); logItemModel.setTo(assignee); final ChangeLogModel changeLogModel = new ChangeLogModel(); - changeLogModel.setId("13"); + changeLogModel.setId(TEST_ID); changeLogModel.setItems(Collections.singletonList(logItemModel)); final JiraEventModel testEventModel = new JiraEventModel(); diff --git a/src/test/java/com/devadmin/vicky/test/format/AssignTaskEventFormatterTest.java b/src/test/java/com/devadmin/vicky/test/format/AssignTaskEventFormatterTest.java new file mode 100644 index 0000000..cfa68e9 --- /dev/null +++ b/src/test/java/com/devadmin/vicky/test/format/AssignTaskEventFormatterTest.java @@ -0,0 +1,85 @@ +package com.devadmin.vicky.test.format; + +import com.devadmin.vicky.config.FormatConfig; +import com.devadmin.vicky.format.AssignTaskEventFormatter; +import com.devadmin.vicky.format.TaskEventFormatter; +import com.devadmin.vicky.model.jira.JiraEventModel; +import com.devadmin.vicky.test.TestTasks; +import org.hamcrest.CoreMatchers; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mockito; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.test.context.junit4.SpringRunner; + +import java.util.Properties; + +/** + * Test class for {@link AssignTaskEventFormatter} + */ +@RunWith(SpringRunner.class) +@SpringBootTest( + classes = { + FormatConfig.class, + AssignTaskEventFormatter.class, + } +) +public class AssignTaskEventFormatterTest { + + /** + * Formatter to use. + */ + @Autowired + @Qualifier("AssignFormatter") + private TaskEventFormatter taskEventFormatter; + + /** + * Mock properties. + */ + @MockBean(name = "issueTypeIdToIconsMapping") + private Properties properties; + + + /** + * Init. + */ + @Before + public void init() { + Mockito.when(this.properties.getProperty(TestTasks.TEST_ID)) + .thenReturn("test icon"); + } + + /** + * Test correct format. + */ + @Test + public void testFormat() { + final JiraEventModel jiraEventModel = TestTasks.taskModel("lollipop", "fin", "Hello world!"); + Assert.assertThat( + this.taskEventFormatter.format(jiraEventModel), + CoreMatchers.is( + String.join( + "", + "fin assigned to you: test icon Resolved 解決済: Everything is ok @fin\n", + " lollipop ➠ Hello world!" + ) + ) + ); + } + + /** + * Test that format will fail without user. + */ + @Test(expected = NullPointerException.class) + public void testFailsWithoutUser() { + final JiraEventModel jiraEventModel = TestTasks.taskModel("lollipop", "fin", "Hello world!"); + jiraEventModel.setUser(null); + this.taskEventFormatter.format(jiraEventModel); + } +} From 7421d95823c32b9b212d804370790e6b55b65502 Mon Sep 17 00:00:00 2001 From: strogiyotec Date: Fri, 21 Feb 2020 20:31:18 -0800 Subject: [PATCH 21/27] test for summary format --- .../format/SimpleTaskEventFormatter.java | 5 +- .../format/SummaryTaskEventFormatter.java | 2 +- .../format/SummaryTaskEventFormatterTest.java | 93 +++++++++++++++++++ 3 files changed, 97 insertions(+), 3 deletions(-) create mode 100644 src/test/java/com/devadmin/vicky/test/format/SummaryTaskEventFormatterTest.java diff --git a/src/main/java/com/devadmin/vicky/format/SimpleTaskEventFormatter.java b/src/main/java/com/devadmin/vicky/format/SimpleTaskEventFormatter.java index f02a838..e07555e 100644 --- a/src/main/java/com/devadmin/vicky/format/SimpleTaskEventFormatter.java +++ b/src/main/java/com/devadmin/vicky/format/SimpleTaskEventFormatter.java @@ -29,6 +29,7 @@ public class SimpleTaskEventFormatter implements TaskEventFormatter { private static final int COMMENT_CUT_LENGTH = 256; // all comments are cut off at this length for display private static final String DEFAULT_ICON_KEY = "default"; + public static final String EMPTY_COMMENT = "This task does not contain comment"; /** * composes basic part of message (without comment) @@ -88,7 +89,7 @@ protected String getShortDescription(TaskEvent event) { */ private String getIcon(@NotNull Task task) { String icon = issueTypeIdToIconsMapping.getProperty(task.getTypeId()); - if(icon == null){ + if (icon == null) { icon = issueTypeIdToIconsMapping.getProperty(DEFAULT_ICON_KEY); } return icon != null ? icon : ""; @@ -125,7 +126,7 @@ protected String getLastComment(TaskEvent event) { Comment comment = task.getLastComment(); if (comment == null || comment.getBody() == null) { - lastComment = "This task does not contain comment"; + lastComment = EMPTY_COMMENT; } else { String truncatedComment = truncateComment(comment.getBody()); lastComment = truncatedComment.replace("[~", "@").replace("]", ""); diff --git a/src/main/java/com/devadmin/vicky/format/SummaryTaskEventFormatter.java b/src/main/java/com/devadmin/vicky/format/SummaryTaskEventFormatter.java index 87a118f..cbe3d6d 100644 --- a/src/main/java/com/devadmin/vicky/format/SummaryTaskEventFormatter.java +++ b/src/main/java/com/devadmin/vicky/format/SummaryTaskEventFormatter.java @@ -19,7 +19,7 @@ public class SummaryTaskEventFormatter extends SimpleTaskEventFormatter { @Override public String format(TaskEvent event) { final String lastComment = super.getLastComment(event); - if (StringUtils.isNotBlank(lastComment)) { + if (StringUtils.isNotBlank(lastComment) && !lastComment.equals(EMPTY_COMMENT)) { return String.format( "%s %s %s ➠ %s", super.formatBase(event), diff --git a/src/test/java/com/devadmin/vicky/test/format/SummaryTaskEventFormatterTest.java b/src/test/java/com/devadmin/vicky/test/format/SummaryTaskEventFormatterTest.java new file mode 100644 index 0000000..d5944ad --- /dev/null +++ b/src/test/java/com/devadmin/vicky/test/format/SummaryTaskEventFormatterTest.java @@ -0,0 +1,93 @@ +package com.devadmin.vicky.test.format; + +import com.devadmin.vicky.config.FormatConfig; +import com.devadmin.vicky.format.SummaryTaskEventFormatter; +import com.devadmin.vicky.format.TaskEventFormatter; +import com.devadmin.vicky.model.jira.JiraEventModel; +import com.devadmin.vicky.test.TestTasks; +import org.hamcrest.CoreMatchers; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mockito; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.test.context.junit4.SpringRunner; + +import java.util.Properties; + +/** + * Test class for {@link com.devadmin.vicky.format.SummaryTaskEventFormatter} + */ +@RunWith(SpringRunner.class) +@SpringBootTest( + classes = { + FormatConfig.class, + SummaryTaskEventFormatter.class, + } +) +public class SummaryTaskEventFormatterTest { + + /** + * Formatter to use. + */ + @Autowired + @Qualifier("SummaryFormatter") + private TaskEventFormatter taskEventFormatter; + + /** + * Mock properties. + */ + @MockBean(name = "issueTypeIdToIconsMapping") + private Properties properties; + + + /** + * Init. + */ + @Before + public void init() { + Mockito.when(this.properties.getProperty(TestTasks.TEST_ID)) + .thenReturn("test icon"); + } + + /** + * Test correct format. + */ + @Test + public void testFormat() { + final JiraEventModel jiraEventModel = TestTasks.taskModel("lollipop", "fin", "Hello world!"); + Assert.assertThat( + this.taskEventFormatter.format(jiraEventModel), + CoreMatchers.is( + String.join( + "", + "test icon Resolved 解決済: ", + "Everything is ok @fin Bla bla lollipop ➠ Hello world!" + ) + ) + ); + } + + /** + * Test correct format. + */ + @Test + public void testFormatWithoutComment() { + final JiraEventModel jiraEventModel = TestTasks.taskModel("lollipop", "fin", "Hello world!"); + jiraEventModel.setComment(null); + Assert.assertThat( + this.taskEventFormatter.format(jiraEventModel), + CoreMatchers.is( + String.join( + "", + "test icon Resolved 解決済: Everything is ok @fin Bla bla " + ) + ) + ); + } +} From d659e907739772b9ce596d01d6590affc01dab88 Mon Sep 17 00:00:00 2001 From: strogiyotec Date: Sun, 23 Feb 2020 10:37:21 -0800 Subject: [PATCH 22/27] code format for jira service --- .../service/jira/JiraTaskServiceImpl.java | 52 +++++++++---------- 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/src/main/java/com/devadmin/vicky/service/jira/JiraTaskServiceImpl.java b/src/main/java/com/devadmin/vicky/service/jira/JiraTaskServiceImpl.java index 0ce087c..0e16d51 100644 --- a/src/main/java/com/devadmin/vicky/service/jira/JiraTaskServiceImpl.java +++ b/src/main/java/com/devadmin/vicky/service/jira/JiraTaskServiceImpl.java @@ -23,6 +23,32 @@ public class JiraTaskServiceImpl implements TaskService { private final JiraClient jiraClient; + @Override + public List getBlockerTasks() { + try { + Issue.SearchResult searchResult = jiraClient.searchIssues(BLOCKER_TASKS_JQL); + return searchResult.issues.stream() + .map(JiraTaskServiceImpl::convertIssueToIssueModel) + .collect(Collectors.toList()); + } catch (JiraException e) { + return Collections.emptyList(); + } + } + + @Override + public Comment getLastCommentByTaskId(String taskId) { + Comment lastComment = null; + try { + List comments = jiraClient.getIssue(taskId).getComments(); + if (!comments.isEmpty()) { + lastComment = comments.get(comments.size() - 1); + } + } catch (JiraException e) { + log.error("There was a problem getting issue from jira", e.getMessage()); + } + return lastComment; + } + /** * @param issue Issue * @return issueModel which was converted from issue @@ -114,30 +140,4 @@ private static UserModel getAssignee(Issue issue) { return userModel; } - - @Override - public List getBlockerTasks() { - try { - Issue.SearchResult searchResult = jiraClient.searchIssues(BLOCKER_TASKS_JQL); - return searchResult.issues.stream() - .map(JiraTaskServiceImpl::convertIssueToIssueModel) - .collect(Collectors.toList()); - } catch (JiraException e) { - return Collections.emptyList(); - } - } - - @Override - public Comment getLastCommentByTaskId(String taskId) { - Comment lastComment = null; - try { - List comments = jiraClient.getIssue(taskId).getComments(); - if (!comments.isEmpty()) { - lastComment = comments.get(comments.size() - 1); - } - } catch (JiraException e) { - log.error("There was a problem getting issue from jira", e.getMessage()); - } - return lastComment; - } } From 2cb9426dc4822ed71aba599bc6d95e1d4592102e Mon Sep 17 00:00:00 2001 From: strogiyotec Date: Sun, 23 Feb 2020 10:37:33 -0800 Subject: [PATCH 23/27] test for jira client --- .../vicky/test/service/JiraServiceTest.java | 162 ++++++++++++++++++ 1 file changed, 162 insertions(+) create mode 100644 src/test/java/com/devadmin/vicky/test/service/JiraServiceTest.java diff --git a/src/test/java/com/devadmin/vicky/test/service/JiraServiceTest.java b/src/test/java/com/devadmin/vicky/test/service/JiraServiceTest.java new file mode 100644 index 0000000..21ef603 --- /dev/null +++ b/src/test/java/com/devadmin/vicky/test/service/JiraServiceTest.java @@ -0,0 +1,162 @@ +package com.devadmin.vicky.test.service; + +import com.devadmin.vicky.model.jira.FieldModel; +import com.devadmin.vicky.model.jira.task.Task; +import com.devadmin.vicky.service.jira.JiraTaskServiceImpl; +import com.devadmin.vicky.service.jira.TaskService; +import net.rcarz.jiraclient.*; +import org.hamcrest.CoreMatchers; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; +import org.mockito.Mockito; + +import java.util.Arrays; +import java.util.Collections; +import java.util.Date; +import java.util.List; + +import static org.mockito.Mockito.*; + +/** + * Test {@link JiraTaskServiceImpl}. + */ +public final class JiraServiceTest { + + /** + * Id of empty comment. + */ + private static final String EMPTY_COMMENT = "empty"; + + /** + * Id of existing comment. + */ + private static final String EXISTING_COMMENT = "exist"; + + /** + * Id of comment that throws exception. + */ + private static final String EXCEPTIONAL_COMMENT = "exception"; + + /** + * Jira service. + */ + private TaskService taskService; + + /** + * Init jira service. + * + * @throws JiraException if failed + */ + @Before + public void init() throws JiraException { + this.taskService = new JiraTaskServiceImpl(this.prepareClient()); + } + + /** + * Test that service returns blocker tasks. + */ + @Test + public void testBlockerTasks() { + final List blockerTasks = this.taskService.getBlockerTasks(); + Assert.assertThat( + blockerTasks.size(), + CoreMatchers.is(1) + ); + final FieldModel fields = blockerTasks.get(0).getFields(); + Assert.assertNotNull(fields); + Assert.assertNotNull(fields.getAssignee()); + Assert.assertNotNull(fields.getStatus()); + Assert.assertNotNull(fields.getPriority()); + } + + /** + * Test that service returns comments. + */ + @Test + public void testComments() { + Assert.assertNotNull(this.taskService.getLastCommentByTaskId(EXISTING_COMMENT)); + Assert.assertNull(this.taskService.getLastCommentByTaskId(EMPTY_COMMENT)); + Assert.assertNull(this.taskService.getLastCommentByTaskId(EXCEPTIONAL_COMMENT)); + } + + /** + * Prepare mocked jira client. + * + * @return Mocked jira client + * @throws JiraException if failed + */ + private JiraClient prepareClient() throws JiraException { + final Issue.SearchResult searchResult = Mockito.mock(Issue.SearchResult.class); + final Issue issue = Mockito.mock(Issue.class); + this.prepareIssue(issue); + searchResult.issues = Collections.singletonList(issue); + final JiraClient jiraClient = Mockito.mock(JiraClient.class, RETURNS_DEEP_STUBS); + when(jiraClient.searchIssues(any())).thenReturn(searchResult); + when(jiraClient.getIssue(EMPTY_COMMENT).getComments()).thenReturn(Collections.emptyList()); + when(jiraClient.getIssue(EXISTING_COMMENT).getComments()).thenReturn(Collections.singletonList(Mockito.mock(Comment.class))); + when(jiraClient.getIssue(EXCEPTIONAL_COMMENT)).thenThrow(new JiraException("Comment doesn't exist")); + return jiraClient; + } + + /** + * Prepare mocked jira issue + * + * @param issue Mocked issue + */ + private void prepareIssue(final Issue issue) { + final User user = Mockito.mock(User.class); + this.prepareUserMock(user); + + final Status status = Mockito.mock(Status.class); + this.prepareStatus(status); + + final Priority priority = Mockito.mock(Priority.class); + this.preparePriority(priority); + + when(issue.getCreatedDate()).thenReturn(new Date()); + when(issue.getUpdatedDate()).thenReturn(new Date()); + when(issue.getLabels()).thenReturn(Arrays.asList("1", "2", "3")); + when(issue.getAssignee()).thenReturn(user); + when(issue.getPriority()).thenReturn(priority); + when(issue.getStatus()).thenReturn(status); + } + + /** + * Prepare mocked jira priority. + * + * @param priority Mocked priority + */ + private void preparePriority(final Priority priority) { + when(priority.getId()).thenReturn("1"); + when(priority.getIconUrl()).thenReturn("example.com"); + when(priority.getName()).thenReturn("Test"); + when(priority.getSelf()).thenReturn("example.com"); + } + + /** + * Prepare mocked jira status. + * + * @param status Mocked status + */ + private void prepareStatus(final Status status) { + when(status.getId()).thenReturn("1"); + when(status.getDescription()).thenReturn("Test"); + when(status.getIconUrl()).thenReturn("example.com"); + when(status.getName()).thenReturn("Test"); + when(status.getSelf()).thenReturn("example.com"); + } + + /** + * Prepare mocked jira user. + * + * @param user Mocked user + */ + private void prepareUserMock(final User user) { + when(user.getId()).thenReturn("1"); + when(user.getSelf()).thenReturn("example.com"); + when(user.getName()).thenReturn("almas"); + when(user.getEmail()).thenReturn("Lollipop@devadmin.com"); + when(user.getDisplayName()).thenReturn("Lollipop"); + } +} From 8d06e5bc6682302ece049d96bafb85722a157ec0 Mon Sep 17 00:00:00 2001 From: strogiyotec Date: Sun, 23 Feb 2020 13:59:15 -0800 Subject: [PATCH 24/27] move debug message in slack service to constuctor --- .../vicky/service/slack/SlackMessageServiceImpl.java | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/devadmin/vicky/service/slack/SlackMessageServiceImpl.java b/src/main/java/com/devadmin/vicky/service/slack/SlackMessageServiceImpl.java index 4ead087..2c8127a 100644 --- a/src/main/java/com/devadmin/vicky/service/slack/SlackMessageServiceImpl.java +++ b/src/main/java/com/devadmin/vicky/service/slack/SlackMessageServiceImpl.java @@ -27,13 +27,18 @@ public class SlackMessageServiceImpl implements MessageService { private final SlackProperties properties; private final SlackApiEndpoints slackApiEndpoints; private final RestTemplate restTemplate; - @Value("${debug.message-service.additional-information:}") - private String additionalMessageInformation; + private final String additionalMessageInformation; - public SlackMessageServiceImpl(SlackProperties properties, SlackApiEndpoints slackApiEndpoints, RestTemplate restTemplate) { + public SlackMessageServiceImpl( + SlackProperties properties, + SlackApiEndpoints slackApiEndpoints, + RestTemplate restTemplate, + @Value("${debug.message-service.additional-information:}") final String additionalMessageInformation + ) { this.properties = properties; this.slackApiEndpoints = slackApiEndpoints; this.restTemplate = restTemplate; + this.additionalMessageInformation = additionalMessageInformation; } /** From 749ee9e3a2c78929c60811dfe6121b30df1fcbe7 Mon Sep 17 00:00:00 2001 From: strogiyotec Date: Sun, 23 Feb 2020 13:59:29 -0800 Subject: [PATCH 25/27] add test to slack service --- .../vicky/test/service/SlackServiceTest.java | 193 ++++++++++++++++++ 1 file changed, 193 insertions(+) create mode 100644 src/test/java/com/devadmin/vicky/test/service/SlackServiceTest.java diff --git a/src/test/java/com/devadmin/vicky/test/service/SlackServiceTest.java b/src/test/java/com/devadmin/vicky/test/service/SlackServiceTest.java new file mode 100644 index 0000000..20892ae --- /dev/null +++ b/src/test/java/com/devadmin/vicky/test/service/SlackServiceTest.java @@ -0,0 +1,193 @@ +package com.devadmin.vicky.test.service; + +import com.devadmin.vicky.config.slack.SlackApiEndpoints; +import com.devadmin.vicky.config.slack.SlackProperties; +import com.devadmin.vicky.model.slack.Event; +import com.devadmin.vicky.service.slack.MessageService; +import com.devadmin.vicky.service.slack.SlackMessageServiceImpl; +import me.ramswaroop.jbot.core.slack.models.User; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.Mockito; +import org.mockito.junit.MockitoJUnitRunner; +import org.springframework.http.ResponseEntity; +import org.springframework.web.client.RestTemplate; + +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.ArgumentMatchers.isNull; +import static org.mockito.Mockito.*; + +/** + * Test {@link SlackMessageServiceImpl}. + */ +@RunWith(MockitoJUnitRunner.class) +public final class SlackServiceTest { + + /** + * Email to test. + */ + private static final String TEST_EMAIL = "Lollipop@devadmin.com"; + + /** + * User id to test. + */ + private static final String TEST_ID = "1"; + + /** + * MessageService to test. + */ + private MessageService messageService; + + /** + * Slack properties with fake data. + */ + private SlackProperties properties; + + /** + * Mocked rest template. + */ + @Mock + private RestTemplate restTemplate; + + /** + * Mocked slack endpoints. + */ + @Mock + private SlackApiEndpoints endpoints; + + /** + * Init objects. + */ + @Before + public void init() { + this.prepareProperties(); + this.prepareEndpoints(); + this.prepareRestTemplate(); + + this.messageService = new SlackMessageServiceImpl( + this.properties, + this.endpoints, + this.restTemplate, + "" + ); + } + + /** + * Test that service sends channel message using rest template. + */ + @Test + public void testChannelMessage() { + this.messageService.sendChannelMessage("dev", "Good morning"); + verify(this.restTemplate, atLeastOnce()) + .postForEntity( + eq(this.endpoints.getChatPostMessageApi()), + isNull(), + eq(String.class), + eq(this.properties.getToken().getBot()), + any(), + any() + ); + } + + /** + * Test private message. + * Firstly gets list of users using rest template + * Then sends message to user with TEST_EMAIL using rest template + */ + @Test + public void testPrivateMessage() { + this.messageService.sendPrivateMessage(TEST_EMAIL, "Good morning"); + verify(this.restTemplate, atLeastOnce()) + .postForEntity( + eq(this.endpoints.getUserListApi()), + isNull(), + eq(Event.class), + eq(this.properties.getToken().getBot()) + ); + verify(this.restTemplate, atLeastOnce()) + .postForEntity( + eq(this.endpoints.getChatPostMessageApi()), + isNull(), + eq(String.class), + eq(this.properties.getToken().getBot()), + eq(TEST_ID), + any() + ); + } + + /** + * Prepare mocked rest template. + */ + private void prepareRestTemplate() { + final Event event = this.prepareEvent(); + //send Channel message + when( + this.restTemplate.postForEntity( + eq(this.endpoints.getChatPostMessageApi()), + isNull(), + eq(String.class), + eq(this.properties.getToken().getBot()), + any(), + any() + ) + ).thenReturn(ResponseEntity.ok("Success")); + //send private message to get users + when( + this.restTemplate + .postForEntity( + eq(this.endpoints.getUserListApi()), + isNull(), + eq(Event.class), + eq(this.properties.getToken().getBot()) + ) + ).thenReturn(ResponseEntity.ok(event)); + //send private message to one user from list + when( + this.restTemplate + .postForEntity( + eq(this.endpoints.getChatPostMessageApi()), + isNull(), + eq(String.class), + eq(this.properties.getToken().getBot()), + eq(TEST_ID), + any() + ) + ).thenReturn(ResponseEntity.ok("Success")); + } + + /** + * Prepare mocked event. + * + * @return Mocked event + */ + private Event prepareEvent() { + final User user = Mockito.mock(User.class, RETURNS_DEEP_STUBS); + when(user.getProfile().getEmail()).thenReturn(TEST_EMAIL); + when(user.getId()).thenReturn(TEST_ID); + final Event event = Mockito.mock(Event.class, RETURNS_DEEP_STUBS); + when(event.getMembers()).thenReturn(new User[]{user}); + return event; + } + + /** + * Prepare mocked endpoints. + */ + private void prepareEndpoints() { + when(this.endpoints.getChatPostMessageApi()).thenReturn("www.example.com"); + when(this.endpoints.getUserListApi()).thenReturn("www.example.com"); + } + + /** + * Prepare properties with fake data. + */ + private void prepareProperties() { + this.properties = new SlackProperties(); + this.properties.setApiUrl("example.com"); + final SlackProperties.Token token = new SlackProperties.Token(); + token.setBot("bot"); + this.properties.setToken(token); + } +} From 4c4b15be4077c9d699548ca1aa74a1bc90f21f7b Mon Sep 17 00:00:00 2001 From: strogiyotec Date: Sun, 23 Feb 2020 17:09:23 -0800 Subject: [PATCH 26/27] fix default icon --- .../format/SimpleTaskEventFormatter.java | 3 +- .../format/SimpleTaskEventFormatterTest.java | 33 +++++++------------ 2 files changed, 13 insertions(+), 23 deletions(-) diff --git a/src/main/java/com/devadmin/vicky/format/SimpleTaskEventFormatter.java b/src/main/java/com/devadmin/vicky/format/SimpleTaskEventFormatter.java index e07555e..c23b26c 100644 --- a/src/main/java/com/devadmin/vicky/format/SimpleTaskEventFormatter.java +++ b/src/main/java/com/devadmin/vicky/format/SimpleTaskEventFormatter.java @@ -91,8 +91,9 @@ private String getIcon(@NotNull Task task) { String icon = issueTypeIdToIconsMapping.getProperty(task.getTypeId()); if (icon == null) { icon = issueTypeIdToIconsMapping.getProperty(DEFAULT_ICON_KEY); + assert icon != null; } - return icon != null ? icon : ""; + return icon; } /** diff --git a/src/test/java/com/devadmin/vicky/test/format/SimpleTaskEventFormatterTest.java b/src/test/java/com/devadmin/vicky/test/format/SimpleTaskEventFormatterTest.java index 76a3e1c..433b73c 100644 --- a/src/test/java/com/devadmin/vicky/test/format/SimpleTaskEventFormatterTest.java +++ b/src/test/java/com/devadmin/vicky/test/format/SimpleTaskEventFormatterTest.java @@ -3,13 +3,15 @@ import com.devadmin.vicky.config.FormatConfig; import com.devadmin.vicky.format.SimpleTaskEventFormatter; +import com.devadmin.vicky.format.TaskEventFormatter; import com.devadmin.vicky.model.jira.task.Task; import com.devadmin.vicky.model.jira.task.TaskEvent; +import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.mock.mockito.MockReset; import org.springframework.boot.test.mock.mockito.SpyBean; import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.junit4.SpringRunner; @@ -23,14 +25,16 @@ @SpringBootTest(classes = {SimpleTaskEventFormatter.class, FormatConfig.class}) public class SimpleTaskEventFormatterTest { + /** + * Formatter to test. + * Use qualifier to avoid IDE warning + */ @Autowired - private SimpleTaskEventFormatter simpleTaskEventFormatter; - - @SpyBean(name = "issueTypeIdToIconsMapping") - private Properties properties; + @Qualifier("SimpleFormatter") + private TaskEventFormatter simpleTaskEventFormatter; @Test - public void testFormattedEventHasRightIcon(){ + public void testFormattedEventHasRightIcon() { //Arrange Task task = mock(Task.class, RETURNS_DEEP_STUBS); TaskEvent taskEvent = mock(TaskEvent.class); @@ -42,28 +46,13 @@ public void testFormattedEventHasRightIcon(){ } @Test - public void testFormattedEventHasDefaultIcon(){ + public void testFormattedEventHasDefaultIcon() { //Arrange Task task = mock(Task.class, RETURNS_DEEP_STUBS); TaskEvent taskEvent = mock(TaskEvent.class); when(task.getTypeId()).thenReturn("177"); when(taskEvent.getTask()).thenReturn(task); - //Act + Assert assertThat(simpleTaskEventFormatter.format(taskEvent)).isEqualTo(":rocket: null: null @null\n null ➠ This task does not contain comment"); } - - @Test - @DirtiesContext - public void testFormattedEventHasEmptyIcon(){ - //Arrange - Task task = mock(Task.class, RETURNS_DEEP_STUBS); - TaskEvent taskEvent = mock(TaskEvent.class); - when(task.getTypeId()).thenReturn("177"); - when(taskEvent.getTask()).thenReturn(task); - when(properties.getProperty("default")).thenReturn(null); - - //Act + Assert - assertThat(simpleTaskEventFormatter.format(taskEvent)).isEqualTo(" null: null @null\n null ➠ This task does not contain comment"); - } } From f1f09fea0c5baae69775a2306410b149e6072b9c Mon Sep 17 00:00:00 2001 From: strogiyotec Date: Sun, 23 Feb 2020 23:24:48 -0800 Subject: [PATCH 27/27] simple task formatter test when default icon is null --- .../format/SimpleTaskEventFormatter.java | 7 +++---- .../format/SimpleTaskEventFormatterTest.java | 19 ++++++++++++++++++- 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/devadmin/vicky/format/SimpleTaskEventFormatter.java b/src/main/java/com/devadmin/vicky/format/SimpleTaskEventFormatter.java index c23b26c..fcecd90 100644 --- a/src/main/java/com/devadmin/vicky/format/SimpleTaskEventFormatter.java +++ b/src/main/java/com/devadmin/vicky/format/SimpleTaskEventFormatter.java @@ -28,8 +28,8 @@ public class SimpleTaskEventFormatter implements TaskEventFormatter { private Properties issueTypeIdToIconsMapping; private static final int COMMENT_CUT_LENGTH = 256; // all comments are cut off at this length for display - private static final String DEFAULT_ICON_KEY = "default"; - public static final String EMPTY_COMMENT = "This task does not contain comment"; + public static final String DEFAULT_ICON_KEY = "default"; + static final String EMPTY_COMMENT = "This task does not contain comment"; /** * composes basic part of message (without comment) @@ -91,9 +91,8 @@ private String getIcon(@NotNull Task task) { String icon = issueTypeIdToIconsMapping.getProperty(task.getTypeId()); if (icon == null) { icon = issueTypeIdToIconsMapping.getProperty(DEFAULT_ICON_KEY); - assert icon != null; } - return icon; + return icon != null ? icon : ""; } /** diff --git a/src/test/java/com/devadmin/vicky/test/format/SimpleTaskEventFormatterTest.java b/src/test/java/com/devadmin/vicky/test/format/SimpleTaskEventFormatterTest.java index 433b73c..03a31d1 100644 --- a/src/test/java/com/devadmin/vicky/test/format/SimpleTaskEventFormatterTest.java +++ b/src/test/java/com/devadmin/vicky/test/format/SimpleTaskEventFormatterTest.java @@ -6,7 +6,6 @@ import com.devadmin.vicky.format.TaskEventFormatter; import com.devadmin.vicky.model.jira.task.Task; import com.devadmin.vicky.model.jira.task.TaskEvent; -import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; @@ -18,6 +17,7 @@ import java.util.Properties; +import static com.devadmin.vicky.format.SimpleTaskEventFormatter.DEFAULT_ICON_KEY; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.*; @@ -33,6 +33,9 @@ public class SimpleTaskEventFormatterTest { @Qualifier("SimpleFormatter") private TaskEventFormatter simpleTaskEventFormatter; + @SpyBean(name = "issueTypeIdToIconsMapping") + private Properties properties; + @Test public void testFormattedEventHasRightIcon() { //Arrange @@ -55,4 +58,18 @@ public void testFormattedEventHasDefaultIcon() { //Act + Assert assertThat(simpleTaskEventFormatter.format(taskEvent)).isEqualTo(":rocket: null: null @null\n null ➠ This task does not contain comment"); } + + @Test + @DirtiesContext + public void testFormattedEventHasEmptyIcon() { + //Arrange + Task task = mock(Task.class, RETURNS_DEEP_STUBS); + TaskEvent taskEvent = mock(TaskEvent.class); + when(task.getTypeId()).thenReturn("177"); + when(taskEvent.getTask()).thenReturn(task); + when(properties.getProperty(DEFAULT_ICON_KEY)).thenReturn(null); + + //Act + Assert + assertThat(simpleTaskEventFormatter.format(taskEvent)).isEqualTo(" null: null @null\n null ➠ This task does not contain comment"); + } }