From f1efebd6108249886df93e925b9dc52729664b5f Mon Sep 17 00:00:00 2001 From: Yaroslav <6i4bbb@gmail.com> Date: Wed, 25 Dec 2024 18:47:45 +0200 Subject: [PATCH 01/15] EditContact & EditContactMenu Testing --- .../gnew/m2/cli/commands/AddContactTest.java | 104 +++++++------- .../m2/cli/commands/DeleteContactTest.java | 93 ++++++------- .../gnew/m2/cli/commands/EditContactTest.java | 128 ++++++++++++++++++ .../gnew/m2/service/SimplePhoneBookTest.java | 3 +- 4 files changed, 226 insertions(+), 102 deletions(-) create mode 100644 src/test/java/ua/com/javarush/gnew/m2/cli/commands/EditContactTest.java diff --git a/src/test/java/ua/com/javarush/gnew/m2/cli/commands/AddContactTest.java b/src/test/java/ua/com/javarush/gnew/m2/cli/commands/AddContactTest.java index f10c26a..6e4cf36 100644 --- a/src/test/java/ua/com/javarush/gnew/m2/cli/commands/AddContactTest.java +++ b/src/test/java/ua/com/javarush/gnew/m2/cli/commands/AddContactTest.java @@ -1,5 +1,13 @@ package ua.com.javarush.gnew.m2.cli.commands; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +import java.lang.reflect.Field; +import java.util.List; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.mockito.Mock; @@ -8,72 +16,64 @@ import ua.com.javarush.gnew.m2.dto.ContactDto; import ua.com.javarush.gnew.m2.service.PhoneBookInterface; -import java.lang.reflect.Field; -import java.util.List; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.Mockito.when; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.times; - - class AddContactTest { - @Mock - private PhoneBookInterface phoneBookInterface; + @Mock private PhoneBookInterface phoneBookInterface; - private AddContact addContact; + private AddContact addContact; - @BeforeEach - void setUp() throws Exception { - MockitoAnnotations.openMocks(this); + @BeforeEach + void setUp() throws Exception { + MockitoAnnotations.openMocks(this); - addContact = new AddContact(); + addContact = new AddContact(); - Field phoneBookInterfaceField = AddContact.class.getDeclaredField("phoneBookInterface"); - phoneBookInterfaceField.setAccessible(true); - phoneBookInterfaceField.set(addContact, phoneBookInterface); - } + Field phoneBookInterfaceField = AddContact.class.getDeclaredField("phoneBookInterface"); + phoneBookInterfaceField.setAccessible(true); + phoneBookInterfaceField.set(addContact, phoneBookInterface); + } - @Test - void testCallAddContactSuccessfully() throws Exception { + @Test + void testCallAddContactSuccessfully() throws Exception { - ContactDto savedContact = new ContactDto("Иван Иванов", List.of("123456789"), List.of("ivan@example.com"), "ivanGitHub"); - when(phoneBookInterface.add(any(ContactDto.class))).thenReturn(savedContact); + ContactDto savedContact = + new ContactDto( + "Иван Иванов", List.of("123456789"), List.of("ivan@example.com"), "ivanGitHub"); + when(phoneBookInterface.add(any(ContactDto.class))).thenReturn(savedContact); - String[] args = { - "--name", "Иван Иванов", - "--phone", "123456789", - "--email", "ivan@example.com", - "--github", "ivanGitHub" - }; - CommandLine.populateCommand(addContact, args); + String[] args = { + "--name", "Иван Иванов", + "--phone", "123456789", + "--email", "ivan@example.com", + "--github", "ivanGitHub" + }; + CommandLine.populateCommand(addContact, args); - Integer result = addContact.call(); + Integer result = addContact.call(); - verify(phoneBookInterface, times(1)).add(any(ContactDto.class)); + verify(phoneBookInterface, times(1)).add(any(ContactDto.class)); - assertEquals(0, result); - } + assertEquals(0, result); + } - @Test - void testCallWithException() throws Exception { + @Test + void testCallWithException() throws Exception { - when(phoneBookInterface.add(any(ContactDto.class))).thenThrow(new RuntimeException("Ошибка добавления")); + when(phoneBookInterface.add(any(ContactDto.class))) + .thenThrow(new RuntimeException("Ошибка добавления")); - String[] args = { - "--name", "Иван Иванов", - "--phone", "123456789" - }; - CommandLine.populateCommand(addContact, args); + String[] args = { + "--name", "Иван Иванов", + "--phone", "123456789" + }; + CommandLine.populateCommand(addContact, args); - try { - addContact.call(); - } catch (RuntimeException e) { - assertEquals("java.lang.RuntimeException: Ошибка добавления", e.getMessage()); - } - - verify(phoneBookInterface, times(1)).add(any(ContactDto.class)); + try { + addContact.call(); + } catch (RuntimeException e) { + assertEquals("java.lang.RuntimeException: Ошибка добавления", e.getMessage()); } -} \ No newline at end of file + + verify(phoneBookInterface, times(1)).add(any(ContactDto.class)); + } +} diff --git a/src/test/java/ua/com/javarush/gnew/m2/cli/commands/DeleteContactTest.java b/src/test/java/ua/com/javarush/gnew/m2/cli/commands/DeleteContactTest.java index 94e7e2e..182fdfc 100644 --- a/src/test/java/ua/com/javarush/gnew/m2/cli/commands/DeleteContactTest.java +++ b/src/test/java/ua/com/javarush/gnew/m2/cli/commands/DeleteContactTest.java @@ -1,5 +1,14 @@ package ua.com.javarush.gnew.m2.cli.commands; +import static org.mockito.ArgumentMatchers.anyLong; +import static org.mockito.Mockito.doNothing; +import static org.mockito.Mockito.doThrow; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +import java.io.IOException; +import java.util.List; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.mockito.Mock; @@ -7,70 +16,58 @@ import picocli.CommandLine; import ua.com.javarush.gnew.m2.service.PhoneBookInterface; -import java.io.IOException; -import java.util.List; - -import static org.mockito.ArgumentMatchers.anyLong; -import static org.mockito.Mockito.doNothing; -import static org.mockito.Mockito.doThrow; -import static org.mockito.Mockito.when; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.times; - - class DeleteContactTest { - @Mock - private PhoneBookInterface phoneBookInterface; + @Mock private PhoneBookInterface phoneBookInterface; - private DeleteContact deleteContact; + private DeleteContact deleteContact; - @BeforeEach - void setUp() throws Exception { - MockitoAnnotations.openMocks(this); + @BeforeEach + void setUp() throws Exception { + MockitoAnnotations.openMocks(this); - deleteContact = new DeleteContact(); - var field = DeleteContact.class.getDeclaredField("phoneBookInterface"); - field.setAccessible(true); - field.set(deleteContact, phoneBookInterface); - } + deleteContact = new DeleteContact(); + var field = DeleteContact.class.getDeclaredField("phoneBookInterface"); + field.setAccessible(true); + field.set(deleteContact, phoneBookInterface); + } - @Test - void testCallSuccessfulDeletion() throws Exception { + @Test + void testCallSuccessfulDeletion() throws Exception { - doNothing().when(phoneBookInterface).delete(anyLong()); - when(phoneBookInterface.list()).thenReturn(List.of()); + doNothing().when(phoneBookInterface).delete(anyLong()); + when(phoneBookInterface.list()).thenReturn(List.of()); - String[] args = {"123", "456", "789"}; - CommandLine.populateCommand(deleteContact, args); + String[] args = {"123", "456", "789"}; + CommandLine.populateCommand(deleteContact, args); - Integer result = deleteContact.call(); + Integer result = deleteContact.call(); - verify(phoneBookInterface, times(1)).delete(123L); - verify(phoneBookInterface, times(1)).delete(456L); - verify(phoneBookInterface, times(1)).delete(789L); + verify(phoneBookInterface, times(1)).delete(123L); + verify(phoneBookInterface, times(1)).delete(456L); + verify(phoneBookInterface, times(1)).delete(789L); - verify(phoneBookInterface, times(1)).list(); + verify(phoneBookInterface, times(1)).list(); - assert result == 0; - } + assert result == 0; + } - @Test - void testCallDeletionWithException() throws Exception { + @Test + void testCallDeletionWithException() throws Exception { - doNothing().when(phoneBookInterface).delete(123L); - doThrow(new IOException("Ошибка удаления")).when(phoneBookInterface).delete(456L); + doNothing().when(phoneBookInterface).delete(123L); + doThrow(new IOException("Ошибка удаления")).when(phoneBookInterface).delete(456L); - String[] args = {"123", "456"}; - CommandLine.populateCommand(deleteContact, args); + String[] args = {"123", "456"}; + CommandLine.populateCommand(deleteContact, args); - Integer result = deleteContact.call(); + Integer result = deleteContact.call(); - verify(phoneBookInterface, times(1)).delete(123L); - verify(phoneBookInterface, times(1)).delete(456L); + verify(phoneBookInterface, times(1)).delete(123L); + verify(phoneBookInterface, times(1)).delete(456L); - verify(phoneBookInterface, times(1)).list(); + verify(phoneBookInterface, times(1)).list(); - assert result == 0; - } -} \ No newline at end of file + assert result == 0; + } +} diff --git a/src/test/java/ua/com/javarush/gnew/m2/cli/commands/EditContactTest.java b/src/test/java/ua/com/javarush/gnew/m2/cli/commands/EditContactTest.java new file mode 100644 index 0000000..83d833e --- /dev/null +++ b/src/test/java/ua/com/javarush/gnew/m2/cli/commands/EditContactTest.java @@ -0,0 +1,128 @@ +package ua.com.javarush.gnew.m2.cli.commands; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.mockito.MockedStatic; +import picocli.CommandLine; +import ua.com.javarush.gnew.m2.configuration.PhoneBookContext; +import ua.com.javarush.gnew.m2.dto.ContactDto; +import ua.com.javarush.gnew.m2.service.PhoneBookInterface; + +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.verifyNoInteractions; +import static org.mockito.Mockito.mockStatic; +import static org.mockito.ArgumentMatchers.any; +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.util.Optional; +import java.util.List; +import static org.junit.jupiter.api.Assertions.assertEquals; + + +class EditContactTest { + + private PhoneBookInterface phoneBookInterface; + private EditContactMenu editContactMenu; + + @BeforeEach + void setUp() { + phoneBookInterface = mock(PhoneBookInterface.class); + editContactMenu = mock(EditContactMenu.class); + } + + @Test + void testEditContactSuccessfulScenario() throws IOException { + + try (MockedStatic mockedStatic = mockStatic(PhoneBookContext.class)) { + mockedStatic.when(() -> PhoneBookContext.getBean(PhoneBookInterface.class)) + .thenReturn(phoneBookInterface); + mockedStatic.when(() -> PhoneBookContext.getBean(EditContactMenu.class)) + .thenReturn(editContactMenu); + + ContactDto mockContact = new ContactDto(); + mockContact.setId(1L); + mockContact.setFullName("John Doe"); + mockContact.setPhones(List.of("123456789")); + mockContact.setEmails(List.of("john.doe@example.com")); + mockContact.setGithubId("johndoe123"); + + when(phoneBookInterface.getById(1L)).thenReturn(Optional.of(mockContact)); + + String userInput = "5\n"; + System.setIn(new ByteArrayInputStream(userInput.getBytes())); + + EditContact editContact = new EditContact(); + + new CommandLine(editContact).parseArgs("1"); + + Integer result = editContact.call(); + + assertEquals(0, result); + verify(phoneBookInterface, times(1)).getById(1L); + verify(editContactMenu, never()).setContact(any(ContactDto.class)); + } + } + @Test + void testEditContactNotFound() throws IOException { + + try (MockedStatic mockedStatic = mockStatic(PhoneBookContext.class)) { + mockedStatic.when(() -> PhoneBookContext.getBean(PhoneBookInterface.class)) + .thenReturn(phoneBookInterface); + + when(phoneBookInterface.getById(1L)).thenReturn(Optional.empty()); + + String userInput = "5\n"; + System.setIn(new ByteArrayInputStream(userInput.getBytes())); + + EditContact editContact = new EditContact(); + + new CommandLine(editContact).parseArgs("1"); + + Integer result = editContact.call(); + + assertEquals(0, result); + + verify(phoneBookInterface, times(1)).getById(1L); + + verifyNoInteractions(editContactMenu); + } + } + @Test + void testEditContactValidEdit() throws IOException { + + try (MockedStatic mockedStatic = mockStatic(PhoneBookContext.class)) { + mockedStatic.when(() -> PhoneBookContext.getBean(PhoneBookInterface.class)) + .thenReturn(phoneBookInterface); + mockedStatic.when(() -> PhoneBookContext.getBean(EditContactMenu.class)) + .thenReturn(editContactMenu); + + ContactDto mockContact = new ContactDto(); + mockContact.setId(1L); + mockContact.setFullName("John Doe"); + mockContact.setPhones(List.of("123456789")); + mockContact.setEmails(List.of("john.doe@example.com")); + mockContact.setGithubId("johndoe123"); + + when(phoneBookInterface.getById(1L)).thenReturn(Optional.of(mockContact)); + + String userInput = "1\n5\n"; + System.setIn(new ByteArrayInputStream(userInput.getBytes())); + + EditContact editContact = new EditContact(); + + new CommandLine(editContact).parseArgs("1"); + + Integer result = editContact.call(); + + assertEquals(0, result); + + verify(phoneBookInterface, times(1)).getById(1L); + + verify(editContactMenu, times(1)).setContact(mockContact); + } + } +} \ No newline at end of file diff --git a/src/test/java/ua/com/javarush/gnew/m2/service/SimplePhoneBookTest.java b/src/test/java/ua/com/javarush/gnew/m2/service/SimplePhoneBookTest.java index bff2039..2861bf9 100644 --- a/src/test/java/ua/com/javarush/gnew/m2/service/SimplePhoneBookTest.java +++ b/src/test/java/ua/com/javarush/gnew/m2/service/SimplePhoneBookTest.java @@ -32,8 +32,7 @@ class SimplePhoneBookTest { void beforeEach() { try (MockedStatic phone = Mockito.mockStatic(PhoneBookContext.class)) { phone - .when( - () -> PhoneBookContext.getBean(ContactDtoRepository.class)) + .when(() -> PhoneBookContext.getBean(ContactDtoRepository.class)) .thenReturn(contactDtoRepository); phoneBook = new SimplePhoneBook(); } From 7826cc80e598798a75c26cec7a73f1a6f053bf58 Mon Sep 17 00:00:00 2001 From: Yaroslav <6i4bbb@gmail.com> Date: Wed, 25 Dec 2024 18:55:02 +0200 Subject: [PATCH 02/15] EditContact & EditContactMenu Testing --- .../ua/com/javarush/gnew/m2/cli/commands/EditContactTest.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/test/java/ua/com/javarush/gnew/m2/cli/commands/EditContactTest.java b/src/test/java/ua/com/javarush/gnew/m2/cli/commands/EditContactTest.java index 83d833e..3f27962 100644 --- a/src/test/java/ua/com/javarush/gnew/m2/cli/commands/EditContactTest.java +++ b/src/test/java/ua/com/javarush/gnew/m2/cli/commands/EditContactTest.java @@ -26,8 +26,10 @@ class EditContactTest { private PhoneBookInterface phoneBookInterface; + private EditContactMenu editContactMenu; + @BeforeEach void setUp() { phoneBookInterface = mock(PhoneBookInterface.class); @@ -66,6 +68,7 @@ void testEditContactSuccessfulScenario() throws IOException { verify(editContactMenu, never()).setContact(any(ContactDto.class)); } } + @Test void testEditContactNotFound() throws IOException { @@ -91,6 +94,7 @@ void testEditContactNotFound() throws IOException { verifyNoInteractions(editContactMenu); } } + @Test void testEditContactValidEdit() throws IOException { From e913c010c4413e5fb23c6c92de200ce1a3a90541 Mon Sep 17 00:00:00 2001 From: Yaroslav <6i4bbb@gmail.com> Date: Wed, 25 Dec 2024 19:54:41 +0200 Subject: [PATCH 03/15] EditContact & EditContactMenu Testing --- .../gnew/m2/cli/commands/EditContactTest.java | 30 +++++++++++-------- 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/src/test/java/ua/com/javarush/gnew/m2/cli/commands/EditContactTest.java b/src/test/java/ua/com/javarush/gnew/m2/cli/commands/EditContactTest.java index 3f27962..134b637 100644 --- a/src/test/java/ua/com/javarush/gnew/m2/cli/commands/EditContactTest.java +++ b/src/test/java/ua/com/javarush/gnew/m2/cli/commands/EditContactTest.java @@ -29,21 +29,29 @@ class EditContactTest { private EditContactMenu editContactMenu; + private boolean skipBeforeEach = false; + @BeforeEach void setUp() { + if (skipBeforeEach) { + return; + } phoneBookInterface = mock(PhoneBookInterface.class); editContactMenu = mock(EditContactMenu.class); - } - - @Test - void testEditContactSuccessfulScenario() throws IOException { - try (MockedStatic mockedStatic = mockStatic(PhoneBookContext.class)) { mockedStatic.when(() -> PhoneBookContext.getBean(PhoneBookInterface.class)) .thenReturn(phoneBookInterface); mockedStatic.when(() -> PhoneBookContext.getBean(EditContactMenu.class)) .thenReturn(editContactMenu); + } + + } + + @Test + void testEditContactSuccessfulScenario() throws IOException { + + skipBeforeEach = false; ContactDto mockContact = new ContactDto(); mockContact.setId(1L); @@ -66,12 +74,14 @@ void testEditContactSuccessfulScenario() throws IOException { assertEquals(0, result); verify(phoneBookInterface, times(1)).getById(1L); verify(editContactMenu, never()).setContact(any(ContactDto.class)); - } + } @Test void testEditContactNotFound() throws IOException { + skipBeforeEach = true; + try (MockedStatic mockedStatic = mockStatic(PhoneBookContext.class)) { mockedStatic.when(() -> PhoneBookContext.getBean(PhoneBookInterface.class)) .thenReturn(phoneBookInterface); @@ -98,11 +108,7 @@ void testEditContactNotFound() throws IOException { @Test void testEditContactValidEdit() throws IOException { - try (MockedStatic mockedStatic = mockStatic(PhoneBookContext.class)) { - mockedStatic.when(() -> PhoneBookContext.getBean(PhoneBookInterface.class)) - .thenReturn(phoneBookInterface); - mockedStatic.when(() -> PhoneBookContext.getBean(EditContactMenu.class)) - .thenReturn(editContactMenu); + skipBeforeEach = false; ContactDto mockContact = new ContactDto(); mockContact.setId(1L); @@ -127,6 +133,6 @@ void testEditContactValidEdit() throws IOException { verify(phoneBookInterface, times(1)).getById(1L); verify(editContactMenu, times(1)).setContact(mockContact); - } + } } \ No newline at end of file From 0970e66192736b4cebbc2d87338edd539d2b1542 Mon Sep 17 00:00:00 2001 From: Yaroslav <6i4bbb@gmail.com> Date: Wed, 25 Dec 2024 21:08:42 +0200 Subject: [PATCH 04/15] EditContact & EditContactMenu Testing --- .../gnew/m2/cli/commands/EditContactTest.java | 37 +++++++++---------- 1 file changed, 18 insertions(+), 19 deletions(-) diff --git a/src/test/java/ua/com/javarush/gnew/m2/cli/commands/EditContactTest.java b/src/test/java/ua/com/javarush/gnew/m2/cli/commands/EditContactTest.java index 134b637..8aaeb90 100644 --- a/src/test/java/ua/com/javarush/gnew/m2/cli/commands/EditContactTest.java +++ b/src/test/java/ua/com/javarush/gnew/m2/cli/commands/EditContactTest.java @@ -29,29 +29,22 @@ class EditContactTest { private EditContactMenu editContactMenu; - private boolean skipBeforeEach = false; - @BeforeEach void setUp() { - if (skipBeforeEach) { - return; - } + phoneBookInterface = mock(PhoneBookInterface.class); editContactMenu = mock(EditContactMenu.class); - try (MockedStatic mockedStatic = mockStatic(PhoneBookContext.class)) { - mockedStatic.when(() -> PhoneBookContext.getBean(PhoneBookInterface.class)) - .thenReturn(phoneBookInterface); - mockedStatic.when(() -> PhoneBookContext.getBean(EditContactMenu.class)) - .thenReturn(editContactMenu); - } - } @Test void testEditContactSuccessfulScenario() throws IOException { - skipBeforeEach = false; + try (MockedStatic mockedStatic = mockStatic(PhoneBookContext.class)) { + mockedStatic.when(() -> PhoneBookContext.getBean(PhoneBookInterface.class)) + .thenReturn(phoneBookInterface); + mockedStatic.when(() -> PhoneBookContext.getBean(EditContactMenu.class)) + .thenReturn(editContactMenu); ContactDto mockContact = new ContactDto(); mockContact.setId(1L); @@ -72,16 +65,16 @@ void testEditContactSuccessfulScenario() throws IOException { Integer result = editContact.call(); assertEquals(0, result); + verify(phoneBookInterface, times(1)).getById(1L); - verify(editContactMenu, never()).setContact(any(ContactDto.class)); + verify(editContactMenu, never()).setContact(any(ContactDto.class)); + } } @Test void testEditContactNotFound() throws IOException { - skipBeforeEach = true; - try (MockedStatic mockedStatic = mockStatic(PhoneBookContext.class)) { mockedStatic.when(() -> PhoneBookContext.getBean(PhoneBookInterface.class)) .thenReturn(phoneBookInterface); @@ -102,13 +95,18 @@ void testEditContactNotFound() throws IOException { verify(phoneBookInterface, times(1)).getById(1L); verifyNoInteractions(editContactMenu); + } } @Test - void testEditContactValidEdit() throws IOException { + void testEditContact_ValidEdit() throws IOException { - skipBeforeEach = false; + try (MockedStatic mockedStatic = mockStatic(PhoneBookContext.class)) { + mockedStatic.when(() -> PhoneBookContext.getBean(PhoneBookInterface.class)) + .thenReturn(phoneBookInterface); + mockedStatic.when(() -> PhoneBookContext.getBean(EditContactMenu.class)) + .thenReturn(editContactMenu); ContactDto mockContact = new ContactDto(); mockContact.setId(1L); @@ -133,6 +131,7 @@ void testEditContactValidEdit() throws IOException { verify(phoneBookInterface, times(1)).getById(1L); verify(editContactMenu, times(1)).setContact(mockContact); - + } } + } \ No newline at end of file From 360843750c9657021785eb78886e1d156d95f356 Mon Sep 17 00:00:00 2001 From: Yaroslav <6i4bbb@gmail.com> Date: Wed, 25 Dec 2024 21:28:06 +0200 Subject: [PATCH 05/15] EditContact & EditContactMenu Testing --- .idea/.gitignore | 3 ++ .idea/encodings.xml | 7 +++ .idea/google-java-format.xml | 6 +++ .idea/misc.xml | 12 +++++ .idea/vcs.xml | 6 +++ settings.st | 3 ++ .../gnew/m2/cli/commands/EditContactTest.java | 48 ++++--------------- testerbook.st | 25 ++++++++++ 8 files changed, 72 insertions(+), 38 deletions(-) create mode 100644 .idea/.gitignore create mode 100644 .idea/encodings.xml create mode 100644 .idea/google-java-format.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/vcs.xml create mode 100644 settings.st create mode 100644 testerbook.st diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..26d3352 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,3 @@ +# Default ignored files +/shelf/ +/workspace.xml diff --git a/.idea/encodings.xml b/.idea/encodings.xml new file mode 100644 index 0000000..aa00ffa --- /dev/null +++ b/.idea/encodings.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/.idea/google-java-format.xml b/.idea/google-java-format.xml new file mode 100644 index 0000000..2aa056d --- /dev/null +++ b/.idea/google-java-format.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..9e0563e --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,12 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..35eb1dd --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/settings.st b/settings.st new file mode 100644 index 0000000..2917e40 --- /dev/null +++ b/settings.st @@ -0,0 +1,3 @@ +{ + "user" : "tester" +} \ No newline at end of file diff --git a/src/test/java/ua/com/javarush/gnew/m2/cli/commands/EditContactTest.java b/src/test/java/ua/com/javarush/gnew/m2/cli/commands/EditContactTest.java index 8aaeb90..db411c7 100644 --- a/src/test/java/ua/com/javarush/gnew/m2/cli/commands/EditContactTest.java +++ b/src/test/java/ua/com/javarush/gnew/m2/cli/commands/EditContactTest.java @@ -2,6 +2,8 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ValueSource; import org.mockito.MockedStatic; import picocli.CommandLine; import ua.com.javarush.gnew.m2.configuration.PhoneBookContext; @@ -37,8 +39,9 @@ void setUp() { editContactMenu = mock(EditContactMenu.class); } - @Test - void testEditContactSuccessfulScenario() throws IOException { + @ParameterizedTest + @ValueSource(strings = {"1\n5\n", "5\n"}) + void testEditContact(String userInput) throws IOException { try (MockedStatic mockedStatic = mockStatic(PhoneBookContext.class)) { mockedStatic.when(() -> PhoneBookContext.getBean(PhoneBookInterface.class)) @@ -55,7 +58,6 @@ void testEditContactSuccessfulScenario() throws IOException { when(phoneBookInterface.getById(1L)).thenReturn(Optional.of(mockContact)); - String userInput = "5\n"; System.setIn(new ByteArrayInputStream(userInput.getBytes())); EditContact editContact = new EditContact(); @@ -68,7 +70,11 @@ void testEditContactSuccessfulScenario() throws IOException { verify(phoneBookInterface, times(1)).getById(1L); - verify(editContactMenu, never()).setContact(any(ContactDto.class)); + if (userInput.equals("1\n5\n")) { + verify(editContactMenu, times(1)).setContact(mockContact); + } else { + verify(editContactMenu, never()).setContact(any(ContactDto.class)); + } } } @@ -99,39 +105,5 @@ void testEditContactNotFound() throws IOException { } } - @Test - void testEditContact_ValidEdit() throws IOException { - - try (MockedStatic mockedStatic = mockStatic(PhoneBookContext.class)) { - mockedStatic.when(() -> PhoneBookContext.getBean(PhoneBookInterface.class)) - .thenReturn(phoneBookInterface); - mockedStatic.when(() -> PhoneBookContext.getBean(EditContactMenu.class)) - .thenReturn(editContactMenu); - - ContactDto mockContact = new ContactDto(); - mockContact.setId(1L); - mockContact.setFullName("John Doe"); - mockContact.setPhones(List.of("123456789")); - mockContact.setEmails(List.of("john.doe@example.com")); - mockContact.setGithubId("johndoe123"); - - when(phoneBookInterface.getById(1L)).thenReturn(Optional.of(mockContact)); - - String userInput = "1\n5\n"; - System.setIn(new ByteArrayInputStream(userInput.getBytes())); - - EditContact editContact = new EditContact(); - - new CommandLine(editContact).parseArgs("1"); - - Integer result = editContact.call(); - - assertEquals(0, result); - - verify(phoneBookInterface, times(1)).getById(1L); - - verify(editContactMenu, times(1)).setContact(mockContact); - } - } } \ No newline at end of file diff --git a/testerbook.st b/testerbook.st new file mode 100644 index 0000000..34c6175 --- /dev/null +++ b/testerbook.st @@ -0,0 +1,25 @@ +[ { + "id" : 74, + "fullName" : "Chris Hemsworth", + "phones" : [ "+380671111111", "+380672222222" ], + "emails" : [ "chris.h@m.ua", "chris.h@gmail.com" ], + "githubId" : "ChrisHemGit" +}, { + "id" : 5736, + "fullName" : "Chris Pratt", + "phones" : [ "+380673333333", "+380674444444" ], + "emails" : [ "chris.p@m.ua", "chris.p@gmail.com" ], + "githubId" : "ChrisPraGit" +}, { + "id" : 7070, + "fullName" : "Scarlett Johansson", + "phones" : [ "+380675555555", "+380676666666" ], + "emails" : [ "Scarlett.j@m.ua", "Scarlett.j@gmail.com" ], + "githubId" : "ScarlettJohGit" +}, { + "id" : 7160, + "fullName" : "Jeremy Renner", + "phones" : [ "+380677777777", "+380678888888" ], + "emails" : [ "Jeremy.r@m.ua", "Jeremy.r@gmail.com" ], + "githubId" : "JeremyRenGit" +} ] \ No newline at end of file From 1894859bd534f75b36ed6ed1a2c9ffeff6fa3eac Mon Sep 17 00:00:00 2001 From: Yaroslav <6i4bbb@gmail.com> Date: Thu, 26 Dec 2024 19:24:47 +0200 Subject: [PATCH 06/15] EditContact & EditContactMenu Testing --- .../m2/cli/commands/EditContactMenuTest.java | 78 +++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 src/test/java/ua/com/javarush/gnew/m2/cli/commands/EditContactMenuTest.java diff --git a/src/test/java/ua/com/javarush/gnew/m2/cli/commands/EditContactMenuTest.java b/src/test/java/ua/com/javarush/gnew/m2/cli/commands/EditContactMenuTest.java new file mode 100644 index 0000000..39bc841 --- /dev/null +++ b/src/test/java/ua/com/javarush/gnew/m2/cli/commands/EditContactMenuTest.java @@ -0,0 +1,78 @@ +package ua.com.javarush.gnew.m2.cli.commands; + +import static org.mockito.Mockito.*; +import static org.junit.jupiter.api.Assertions.*; +import java.io.IOException; +import java.util.List; +import java.util.Optional; +import java.util.Scanner; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.mockito.MockedStatic; +import ua.com.javarush.gnew.m2.configuration.PhoneBookContext; +import ua.com.javarush.gnew.m2.dto.ContactDto; +import ua.com.javarush.gnew.m2.service.PhoneBookInterface; + + +class EditContactMenuTest { + + private PhoneBookInterface phoneBookInterface; + private EditContactMenu editContactMenu; + + @BeforeEach + void setUp() { + + phoneBookInterface = mock(PhoneBookInterface.class); + editContactMenu = mock(EditContactMenu.class); + } + + @Test + void testEditContactMenuEditName() throws IOException { + try (MockedStatic mockedStatic = mockStatic(PhoneBookContext.class)) { + mockedStatic.when(() -> PhoneBookContext.getBean(PhoneBookInterface.class)) + .thenReturn(phoneBookInterface); + + ContactDto contact = new ContactDto(); + contact.setId(1L); + contact.setFullName("John Doe"); + contact.setPhones(List.of("123456789")); + contact.setEmails(List.of("john.doe@example.com")); + contact.setGithubId("johndoe123"); + + editContactMenu.setContact(contact); + + when(phoneBookInterface.getById(1L)).thenReturn(Optional.of(contact)); + + editContactMenu.setChoice("1"); + + editContactMenu.setScanner(new Scanner("New Name")); + + Integer result = editContactMenu.call(); + + assertEquals(0, result); + + ContactDto updatedContact = editContactMenu.getContact(); + assertEquals("New Name", updatedContact.getFullName()); + + verify(phoneBookInterface, times(1)).edit(updatedContact); + } + } + + + + @Test + void testEditContactMenuInvalidChoice() throws IOException { + try (MockedStatic mockedStatic = mockStatic(PhoneBookContext.class)) { + mockedStatic.when(() -> PhoneBookContext.getBean(PhoneBookInterface.class)) + .thenReturn(phoneBookInterface); + + editContactMenu.setChoice("invalid"); + + Integer result = editContactMenu.call(); + + assertEquals(0, result); + + verifyNoInteractions(phoneBookInterface); + } + } +} \ No newline at end of file From d588dfbb136960934351a6965c0640de173fefde Mon Sep 17 00:00:00 2001 From: Yaroslav <6i4bbb@gmail.com> Date: Thu, 26 Dec 2024 19:48:30 +0200 Subject: [PATCH 07/15] EditContact & EditContactMenu Testing --- .../javarush/gnew/m2/cli/commands/EditContactMenuTest.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/test/java/ua/com/javarush/gnew/m2/cli/commands/EditContactMenuTest.java b/src/test/java/ua/com/javarush/gnew/m2/cli/commands/EditContactMenuTest.java index 39bc841..8ae19ae 100644 --- a/src/test/java/ua/com/javarush/gnew/m2/cli/commands/EditContactMenuTest.java +++ b/src/test/java/ua/com/javarush/gnew/m2/cli/commands/EditContactMenuTest.java @@ -23,7 +23,7 @@ class EditContactMenuTest { void setUp() { phoneBookInterface = mock(PhoneBookInterface.class); - editContactMenu = mock(EditContactMenu.class); + } @Test @@ -32,6 +32,8 @@ void testEditContactMenuEditName() throws IOException { mockedStatic.when(() -> PhoneBookContext.getBean(PhoneBookInterface.class)) .thenReturn(phoneBookInterface); + editContactMenu = new EditContactMenu(); + ContactDto contact = new ContactDto(); contact.setId(1L); contact.setFullName("John Doe"); From 76912a3f11647dd3b7e7577c9b0554054e41f3d4 Mon Sep 17 00:00:00 2001 From: Yaroslav <6i4bbb@gmail.com> Date: Thu, 26 Dec 2024 19:52:40 +0200 Subject: [PATCH 08/15] EditContact & EditContactMenu Testing --- .../gnew/m2/cli/commands/EditContactMenuTest.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/test/java/ua/com/javarush/gnew/m2/cli/commands/EditContactMenuTest.java b/src/test/java/ua/com/javarush/gnew/m2/cli/commands/EditContactMenuTest.java index 8ae19ae..a666d0d 100644 --- a/src/test/java/ua/com/javarush/gnew/m2/cli/commands/EditContactMenuTest.java +++ b/src/test/java/ua/com/javarush/gnew/m2/cli/commands/EditContactMenuTest.java @@ -24,6 +24,7 @@ void setUp() { phoneBookInterface = mock(PhoneBookInterface.class); + } @Test @@ -32,6 +33,7 @@ void testEditContactMenuEditName() throws IOException { mockedStatic.when(() -> PhoneBookContext.getBean(PhoneBookInterface.class)) .thenReturn(phoneBookInterface); + editContactMenu = new EditContactMenu(); ContactDto contact = new ContactDto(); @@ -45,6 +47,7 @@ void testEditContactMenuEditName() throws IOException { when(phoneBookInterface.getById(1L)).thenReturn(Optional.of(contact)); + editContactMenu.setChoice("1"); editContactMenu.setScanner(new Scanner("New Name")); @@ -68,6 +71,18 @@ void testEditContactMenuInvalidChoice() throws IOException { mockedStatic.when(() -> PhoneBookContext.getBean(PhoneBookInterface.class)) .thenReturn(phoneBookInterface); + + editContactMenu = new EditContactMenu(); + + ContactDto contact = new ContactDto(); + contact.setId(1L); + contact.setFullName("John Doe"); + contact.setPhones(List.of("123456789")); + contact.setEmails(List.of("john.doe@example.com")); + contact.setGithubId("johndoe123"); + + editContactMenu.setContact(contact); + editContactMenu.setChoice("invalid"); Integer result = editContactMenu.call(); From b37654e2acd62ea94bd44046961049775564a986 Mon Sep 17 00:00:00 2001 From: Yaroslav <6i4bbb@gmail.com> Date: Thu, 26 Dec 2024 20:49:50 +0200 Subject: [PATCH 09/15] EditContact & EditContactMenu Testing --- .../m2/cli/commands/EditContactMenuTest.java | 105 +++++++++++++++++- 1 file changed, 100 insertions(+), 5 deletions(-) diff --git a/src/test/java/ua/com/javarush/gnew/m2/cli/commands/EditContactMenuTest.java b/src/test/java/ua/com/javarush/gnew/m2/cli/commands/EditContactMenuTest.java index a666d0d..911eaec 100644 --- a/src/test/java/ua/com/javarush/gnew/m2/cli/commands/EditContactMenuTest.java +++ b/src/test/java/ua/com/javarush/gnew/m2/cli/commands/EditContactMenuTest.java @@ -23,8 +23,6 @@ class EditContactMenuTest { void setUp() { phoneBookInterface = mock(PhoneBookInterface.class); - - } @Test @@ -33,7 +31,6 @@ void testEditContactMenuEditName() throws IOException { mockedStatic.when(() -> PhoneBookContext.getBean(PhoneBookInterface.class)) .thenReturn(phoneBookInterface); - editContactMenu = new EditContactMenu(); ContactDto contact = new ContactDto(); @@ -47,7 +44,6 @@ void testEditContactMenuEditName() throws IOException { when(phoneBookInterface.getById(1L)).thenReturn(Optional.of(contact)); - editContactMenu.setChoice("1"); editContactMenu.setScanner(new Scanner("New Name")); @@ -63,14 +59,113 @@ void testEditContactMenuEditName() throws IOException { } } + @Test + void testEditContactMenuEditPhones() throws IOException { + try (MockedStatic mockedStatic = mockStatic(PhoneBookContext.class)) { + mockedStatic.when(() -> PhoneBookContext.getBean(PhoneBookInterface.class)) + .thenReturn(phoneBookInterface); + + editContactMenu = new EditContactMenu(); + + ContactDto contact = new ContactDto(); + contact.setId(1L); + contact.setFullName("John Doe"); + contact.setPhones(List.of("123456789")); + contact.setEmails(List.of("john.doe@example.com")); + contact.setGithubId("johndoe123"); + + editContactMenu.setContact(contact); + + when(phoneBookInterface.getById(1L)).thenReturn(Optional.of(contact)); + editContactMenu.setChoice("2"); + + editContactMenu.setScanner(new Scanner("987654321")); + + Integer result = editContactMenu.call(); + + assertEquals(0, result); + + ContactDto updatedContact = editContactMenu.getContact(); + assertEquals(List.of("987654321"), updatedContact.getPhones()); + + verify(phoneBookInterface, times(1)).edit(updatedContact); + } + } @Test - void testEditContactMenuInvalidChoice() throws IOException { + void testEditContactMenuEditEmail() throws IOException { try (MockedStatic mockedStatic = mockStatic(PhoneBookContext.class)) { mockedStatic.when(() -> PhoneBookContext.getBean(PhoneBookInterface.class)) .thenReturn(phoneBookInterface); + editContactMenu = new EditContactMenu(); + + ContactDto contact = new ContactDto(); + contact.setId(1L); + contact.setFullName("John Doe"); + contact.setPhones(List.of("123456789")); + contact.setEmails(List.of("john.doe@example.com")); + contact.setGithubId("johndoe123"); + + editContactMenu.setContact(contact); + + when(phoneBookInterface.getById(1L)).thenReturn(Optional.of(contact)); + + editContactMenu.setChoice("3"); + + editContactMenu.setScanner(new Scanner("new.email@example.com")); + + Integer result = editContactMenu.call(); + + assertEquals(0, result); + + ContactDto updatedContact = editContactMenu.getContact(); + assertEquals(List.of("new.email@example.com"), updatedContact.getEmails()); + + verify(phoneBookInterface, times(1)).edit(updatedContact); + } + } + + @Test + void testEditContactMenuEditGithubId() throws IOException { + try (MockedStatic mockedStatic = mockStatic(PhoneBookContext.class)) { + mockedStatic.when(() -> PhoneBookContext.getBean(PhoneBookInterface.class)) + .thenReturn(phoneBookInterface); + + editContactMenu = new EditContactMenu(); + + ContactDto contact = new ContactDto(); + contact.setId(1L); + contact.setFullName("John Doe"); + contact.setPhones(List.of("123456789")); + contact.setEmails(List.of("john.doe@example.com")); + contact.setGithubId("johndoe123"); + + editContactMenu.setContact(contact); + + when(phoneBookInterface.getById(1L)).thenReturn(Optional.of(contact)); + + editContactMenu.setChoice("4"); + + editContactMenu.setScanner(new Scanner("newGithubID")); + + Integer result = editContactMenu.call(); + + assertEquals(0, result); + + ContactDto updatedContact = editContactMenu.getContact(); + assertEquals("newGithubID", updatedContact.getGithubId()); + + verify(phoneBookInterface, times(1)).edit(updatedContact); + } + } + + @Test + void testEditContactMenuInvalidChoice() throws IOException { + try (MockedStatic mockedStatic = mockStatic(PhoneBookContext.class)) { + mockedStatic.when(() -> PhoneBookContext.getBean(PhoneBookInterface.class)) + .thenReturn(phoneBookInterface); editContactMenu = new EditContactMenu(); From 29419136757d700efb7862407d3c9d34f408a370 Mon Sep 17 00:00:00 2001 From: Yaroslav <6i4bbb@gmail.com> Date: Thu, 26 Dec 2024 22:00:20 +0200 Subject: [PATCH 10/15] EditContact & EditContactMenu Testing --- .../m2/cli/commands/EditContactMenuTest.java | 155 +++--------------- 1 file changed, 22 insertions(+), 133 deletions(-) diff --git a/src/test/java/ua/com/javarush/gnew/m2/cli/commands/EditContactMenuTest.java b/src/test/java/ua/com/javarush/gnew/m2/cli/commands/EditContactMenuTest.java index 911eaec..8d63d12 100644 --- a/src/test/java/ua/com/javarush/gnew/m2/cli/commands/EditContactMenuTest.java +++ b/src/test/java/ua/com/javarush/gnew/m2/cli/commands/EditContactMenuTest.java @@ -6,8 +6,8 @@ import java.util.List; import java.util.Optional; import java.util.Scanner; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.CsvSource; import org.mockito.MockedStatic; import ua.com.javarush.gnew.m2.configuration.PhoneBookContext; import ua.com.javarush.gnew.m2.dto.ContactDto; @@ -19,14 +19,12 @@ class EditContactMenuTest { private PhoneBookInterface phoneBookInterface; private EditContactMenu editContactMenu; - @BeforeEach - void setUp() { + @ParameterizedTest + @CsvSource({"1, New Name", "2, 987654321", "3, new.email@example.com", "4, newGithubID", "5, invalid"}) + void testEditContactMenuEdit(String userChoice, String userInput) throws IOException { phoneBookInterface = mock(PhoneBookInterface.class); - } - @Test - void testEditContactMenuEditName() throws IOException { try (MockedStatic mockedStatic = mockStatic(PhoneBookContext.class)) { mockedStatic.when(() -> PhoneBookContext.getBean(PhoneBookInterface.class)) .thenReturn(phoneBookInterface); @@ -44,147 +42,38 @@ void testEditContactMenuEditName() throws IOException { when(phoneBookInterface.getById(1L)).thenReturn(Optional.of(contact)); - editContactMenu.setChoice("1"); + editContactMenu.setChoice(userChoice); - editContactMenu.setScanner(new Scanner("New Name")); + editContactMenu.setScanner(new Scanner(userInput)); Integer result = editContactMenu.call(); assertEquals(0, result); ContactDto updatedContact = editContactMenu.getContact(); - assertEquals("New Name", updatedContact.getFullName()); - - verify(phoneBookInterface, times(1)).edit(updatedContact); - } - } - - @Test - void testEditContactMenuEditPhones() throws IOException { - try (MockedStatic mockedStatic = mockStatic(PhoneBookContext.class)) { - mockedStatic.when(() -> PhoneBookContext.getBean(PhoneBookInterface.class)) - .thenReturn(phoneBookInterface); - - editContactMenu = new EditContactMenu(); - - ContactDto contact = new ContactDto(); - contact.setId(1L); - contact.setFullName("John Doe"); - contact.setPhones(List.of("123456789")); - contact.setEmails(List.of("john.doe@example.com")); - contact.setGithubId("johndoe123"); - editContactMenu.setContact(contact); + if (userChoice.equals("1") && userInput.equals("New Name")) { + assertEquals("New Name", updatedContact.getFullName()); + verify(phoneBookInterface, times(1)).edit(updatedContact); - when(phoneBookInterface.getById(1L)).thenReturn(Optional.of(contact)); + } else if (userChoice.equals("2") && userInput.equals("987654321")) { + assertEquals(List.of("987654321"), updatedContact.getPhones()); + verify(phoneBookInterface, times(1)).edit(updatedContact); - editContactMenu.setChoice("2"); + } else if (userChoice.equals("3") && userInput.equals("new.email@example.com")) { + assertEquals(List.of("new.email@example.com"), updatedContact.getEmails()); + verify(phoneBookInterface, times(1)).edit(updatedContact); - editContactMenu.setScanner(new Scanner("987654321")); + } else if (userChoice.equals("4") && userInput.equals("newGithubID")) { + assertEquals("newGithubID", updatedContact.getGithubId()); + verify(phoneBookInterface, times(1)).edit(updatedContact); - Integer result = editContactMenu.call(); + } else if (userChoice.equals("5") && userInput.equals("invalid")) { + verifyNoInteractions(phoneBookInterface); + } - assertEquals(0, result); - - ContactDto updatedContact = editContactMenu.getContact(); - assertEquals(List.of("987654321"), updatedContact.getPhones()); - - verify(phoneBookInterface, times(1)).edit(updatedContact); - } - } - - @Test - void testEditContactMenuEditEmail() throws IOException { - try (MockedStatic mockedStatic = mockStatic(PhoneBookContext.class)) { - mockedStatic.when(() -> PhoneBookContext.getBean(PhoneBookInterface.class)) - .thenReturn(phoneBookInterface); - - editContactMenu = new EditContactMenu(); - - ContactDto contact = new ContactDto(); - contact.setId(1L); - contact.setFullName("John Doe"); - contact.setPhones(List.of("123456789")); - contact.setEmails(List.of("john.doe@example.com")); - contact.setGithubId("johndoe123"); - - editContactMenu.setContact(contact); - - when(phoneBookInterface.getById(1L)).thenReturn(Optional.of(contact)); - - editContactMenu.setChoice("3"); - - editContactMenu.setScanner(new Scanner("new.email@example.com")); - - Integer result = editContactMenu.call(); - - assertEquals(0, result); - - ContactDto updatedContact = editContactMenu.getContact(); - assertEquals(List.of("new.email@example.com"), updatedContact.getEmails()); - verify(phoneBookInterface, times(1)).edit(updatedContact); } } - @Test - void testEditContactMenuEditGithubId() throws IOException { - try (MockedStatic mockedStatic = mockStatic(PhoneBookContext.class)) { - mockedStatic.when(() -> PhoneBookContext.getBean(PhoneBookInterface.class)) - .thenReturn(phoneBookInterface); - - editContactMenu = new EditContactMenu(); - - ContactDto contact = new ContactDto(); - contact.setId(1L); - contact.setFullName("John Doe"); - contact.setPhones(List.of("123456789")); - contact.setEmails(List.of("john.doe@example.com")); - contact.setGithubId("johndoe123"); - - editContactMenu.setContact(contact); - - when(phoneBookInterface.getById(1L)).thenReturn(Optional.of(contact)); - - editContactMenu.setChoice("4"); - - editContactMenu.setScanner(new Scanner("newGithubID")); - - Integer result = editContactMenu.call(); - - assertEquals(0, result); - - ContactDto updatedContact = editContactMenu.getContact(); - assertEquals("newGithubID", updatedContact.getGithubId()); - - verify(phoneBookInterface, times(1)).edit(updatedContact); - } - } - - @Test - void testEditContactMenuInvalidChoice() throws IOException { - try (MockedStatic mockedStatic = mockStatic(PhoneBookContext.class)) { - mockedStatic.when(() -> PhoneBookContext.getBean(PhoneBookInterface.class)) - .thenReturn(phoneBookInterface); - - editContactMenu = new EditContactMenu(); - - ContactDto contact = new ContactDto(); - contact.setId(1L); - contact.setFullName("John Doe"); - contact.setPhones(List.of("123456789")); - contact.setEmails(List.of("john.doe@example.com")); - contact.setGithubId("johndoe123"); - - editContactMenu.setContact(contact); - - editContactMenu.setChoice("invalid"); - - Integer result = editContactMenu.call(); - - assertEquals(0, result); - - verifyNoInteractions(phoneBookInterface); - } - } } \ No newline at end of file From 311c1aab8e964d41185f62640c08b245f59f6fbb Mon Sep 17 00:00:00 2001 From: Yaroslav <6i4bbb@gmail.com> Date: Thu, 2 Jan 2025 11:56:13 +0200 Subject: [PATCH 11/15] EditContact & EditContactMenu Testing --- .../m2/cli/commands/EditContactMenuTest.java | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/src/test/java/ua/com/javarush/gnew/m2/cli/commands/EditContactMenuTest.java b/src/test/java/ua/com/javarush/gnew/m2/cli/commands/EditContactMenuTest.java index 8d63d12..e4b305d 100644 --- a/src/test/java/ua/com/javarush/gnew/m2/cli/commands/EditContactMenuTest.java +++ b/src/test/java/ua/com/javarush/gnew/m2/cli/commands/EditContactMenuTest.java @@ -13,24 +13,21 @@ import ua.com.javarush.gnew.m2.dto.ContactDto; import ua.com.javarush.gnew.m2.service.PhoneBookInterface; - class EditContactMenuTest { - private PhoneBookInterface phoneBookInterface; - private EditContactMenu editContactMenu; - @ParameterizedTest @CsvSource({"1, New Name", "2, 987654321", "3, new.email@example.com", "4, newGithubID", "5, invalid"}) - void testEditContactMenuEdit(String userChoice, String userInput) throws IOException { + void testEditContactMenuValidAndInvalidInput(String userChoice, String userInput) throws IOException { + + + PhoneBookInterface phoneBookInterface = mock(PhoneBookInterface.class); - phoneBookInterface = mock(PhoneBookInterface.class); + EditContactMenu editContactMenu = new EditContactMenu(); try (MockedStatic mockedStatic = mockStatic(PhoneBookContext.class)) { mockedStatic.when(() -> PhoneBookContext.getBean(PhoneBookInterface.class)) .thenReturn(phoneBookInterface); - editContactMenu = new EditContactMenu(); - ContactDto contact = new ContactDto(); contact.setId(1L); contact.setFullName("John Doe"); @@ -71,8 +68,7 @@ void testEditContactMenuEdit(String userChoice, String userInput) throws IOExcep } else if (userChoice.equals("5") && userInput.equals("invalid")) { verifyNoInteractions(phoneBookInterface); } - - + } } From 7b253be7fe74d3d6401a32ed0f21bd7781de461c Mon Sep 17 00:00:00 2001 From: Yaroslav <6i4bbb@gmail.com> Date: Thu, 2 Jan 2025 14:59:24 +0200 Subject: [PATCH 12/15] EditContact & EditContactMenu Testing --- .../javarush/gnew/m2/cli/commands/EditContactMenuTest.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/test/java/ua/com/javarush/gnew/m2/cli/commands/EditContactMenuTest.java b/src/test/java/ua/com/javarush/gnew/m2/cli/commands/EditContactMenuTest.java index e4b305d..34c232f 100644 --- a/src/test/java/ua/com/javarush/gnew/m2/cli/commands/EditContactMenuTest.java +++ b/src/test/java/ua/com/javarush/gnew/m2/cli/commands/EditContactMenuTest.java @@ -22,7 +22,7 @@ void testEditContactMenuValidAndInvalidInput(String userChoice, String userInput PhoneBookInterface phoneBookInterface = mock(PhoneBookInterface.class); - EditContactMenu editContactMenu = new EditContactMenu(); + try (MockedStatic mockedStatic = mockStatic(PhoneBookContext.class)) { mockedStatic.when(() -> PhoneBookContext.getBean(PhoneBookInterface.class)) @@ -35,6 +35,8 @@ void testEditContactMenuValidAndInvalidInput(String userChoice, String userInput contact.setEmails(List.of("john.doe@example.com")); contact.setGithubId("johndoe123"); + EditContactMenu editContactMenu = new EditContactMenu(); + editContactMenu.setContact(contact); when(phoneBookInterface.getById(1L)).thenReturn(Optional.of(contact)); From be4e4a8961f505f272c0269bceaf7f1ed2919e25 Mon Sep 17 00:00:00 2001 From: Yaroslav <6i4bbb@gmail.com> Date: Thu, 2 Jan 2025 15:50:58 +0200 Subject: [PATCH 13/15] EditContact & EditContactMenu Testing --- .../m2/cli/commands/EditContactMenuTest.java | 32 +++++++++++++------ 1 file changed, 23 insertions(+), 9 deletions(-) diff --git a/src/test/java/ua/com/javarush/gnew/m2/cli/commands/EditContactMenuTest.java b/src/test/java/ua/com/javarush/gnew/m2/cli/commands/EditContactMenuTest.java index 34c232f..b09d7c3 100644 --- a/src/test/java/ua/com/javarush/gnew/m2/cli/commands/EditContactMenuTest.java +++ b/src/test/java/ua/com/javarush/gnew/m2/cli/commands/EditContactMenuTest.java @@ -15,6 +15,7 @@ class EditContactMenuTest { + @ParameterizedTest @CsvSource({"1, New Name", "2, 987654321", "3, new.email@example.com", "4, newGithubID", "5, invalid"}) void testEditContactMenuValidAndInvalidInput(String userChoice, String userInput) throws IOException { @@ -51,23 +52,36 @@ void testEditContactMenuValidAndInvalidInput(String userChoice, String userInput ContactDto updatedContact = editContactMenu.getContact(); - if (userChoice.equals("1") && userInput.equals("New Name")) { - assertEquals("New Name", updatedContact.getFullName()); + String ONE = "1"; + String TWO = "2"; + String THREE = "3"; + String FOUR = "4"; + String FIVE = "5"; + + String expectedName = "New Name"; + String expectedPhone = "987654321"; + String expectedEmail = "new.email@example.com"; + String expectedGitHubID = "newGitHubID"; + String expectedInput = "invalid"; + + + if (userChoice.equals(ONE) && userInput.equals(expectedName)) { + assertEquals(expectedName, updatedContact.getFullName()); verify(phoneBookInterface, times(1)).edit(updatedContact); - } else if (userChoice.equals("2") && userInput.equals("987654321")) { - assertEquals(List.of("987654321"), updatedContact.getPhones()); + } else if (userChoice.equals(TWO) && userInput.equals(expectedPhone)) { + assertEquals(List.of(expectedPhone), updatedContact.getPhones()); verify(phoneBookInterface, times(1)).edit(updatedContact); - } else if (userChoice.equals("3") && userInput.equals("new.email@example.com")) { - assertEquals(List.of("new.email@example.com"), updatedContact.getEmails()); + } else if (userChoice.equals(THREE) && userInput.equals(expectedEmail)) { + assertEquals(List.of(expectedEmail), updatedContact.getEmails()); verify(phoneBookInterface, times(1)).edit(updatedContact); - } else if (userChoice.equals("4") && userInput.equals("newGithubID")) { - assertEquals("newGithubID", updatedContact.getGithubId()); + } else if (userChoice.equals(FOUR) && userInput.equals(expectedGitHubID)) { + assertEquals(expectedGitHubID, updatedContact.getGithubId()); verify(phoneBookInterface, times(1)).edit(updatedContact); - } else if (userChoice.equals("5") && userInput.equals("invalid")) { + } else if (userChoice.equals(FIVE) && userInput.equals(expectedInput)) { verifyNoInteractions(phoneBookInterface); } From 09f153b365caa0c90296366ee67eb36aba6dbc6b Mon Sep 17 00:00:00 2001 From: Yaroslav <6i4bbb@gmail.com> Date: Wed, 8 Jan 2025 14:25:52 +0200 Subject: [PATCH 14/15] Group Contact Testing --- .../m2/cli/commands/EditContactMenuTest.java | 3 - .../m2/cli/commands/GroupContactTest.java | 130 ++++++++++++++++++ 2 files changed, 130 insertions(+), 3 deletions(-) create mode 100644 src/test/java/ua/com/javarush/gnew/m2/cli/commands/GroupContactTest.java diff --git a/src/test/java/ua/com/javarush/gnew/m2/cli/commands/EditContactMenuTest.java b/src/test/java/ua/com/javarush/gnew/m2/cli/commands/EditContactMenuTest.java index b09d7c3..b74d7c6 100644 --- a/src/test/java/ua/com/javarush/gnew/m2/cli/commands/EditContactMenuTest.java +++ b/src/test/java/ua/com/javarush/gnew/m2/cli/commands/EditContactMenuTest.java @@ -20,11 +20,8 @@ class EditContactMenuTest { @CsvSource({"1, New Name", "2, 987654321", "3, new.email@example.com", "4, newGithubID", "5, invalid"}) void testEditContactMenuValidAndInvalidInput(String userChoice, String userInput) throws IOException { - PhoneBookInterface phoneBookInterface = mock(PhoneBookInterface.class); - - try (MockedStatic mockedStatic = mockStatic(PhoneBookContext.class)) { mockedStatic.when(() -> PhoneBookContext.getBean(PhoneBookInterface.class)) .thenReturn(phoneBookInterface); diff --git a/src/test/java/ua/com/javarush/gnew/m2/cli/commands/GroupContactTest.java b/src/test/java/ua/com/javarush/gnew/m2/cli/commands/GroupContactTest.java new file mode 100644 index 0000000..6a8d38a --- /dev/null +++ b/src/test/java/ua/com/javarush/gnew/m2/cli/commands/GroupContactTest.java @@ -0,0 +1,130 @@ +package ua.com.javarush.gnew.m2.cli.commands; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import picocli.CommandLine; +import ua.com.javarush.gnew.m2.dto.ContactDto; +import ua.com.javarush.gnew.m2.repository.GroupContactsRepository; +import ua.com.javarush.gnew.m2.service.PhoneBookInterface; + +import java.lang.reflect.Field; +import java.util.List; +import java.util.Optional; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.mockito.Mockito.*; + +class GroupContactTest { + + @Mock + private GroupContactsRepository groupContactsRepository; + + @Mock + private PhoneBookInterface phoneBookInterface; + + private GroupContact groupContact; + + @BeforeEach + void setUp() throws Exception { + MockitoAnnotations.openMocks(this); + + groupContact = new GroupContact(); + + Field groupRepoField = GroupContact.class.getDeclaredField("groupContactsRepository"); + groupRepoField.setAccessible(true); + groupRepoField.set(groupContact, groupContactsRepository); + + Field phoneBookField = GroupContact.class.getDeclaredField("phoneBookInterface"); + phoneBookField.setAccessible(true); + phoneBookField.set(groupContact, phoneBookInterface); + } + + @Test + void testCreateGroup() throws Exception { + String[] args = {"--create", "Friends"}; + CommandLine.populateCommand(groupContact, args); + + Integer result = groupContact.call(); + + verify(groupContactsRepository, times(1)).create("Friends"); + verifyNoMoreInteractions(groupContactsRepository); + assertEquals(0, result); + } + + @Test + void testDeleteGroup() throws Exception { + String[] args = {"--delete", "OldFriends"}; + CommandLine.populateCommand(groupContact, args); + + Integer result = groupContact.call(); + + verify(groupContactsRepository, times(1)).delete("OldFriends"); + verifyNoMoreInteractions(groupContactsRepository); + assertEquals(0, result); + } + + @Test + void testAddContactsToGroup() throws Exception { + String[] args = {"--add", "Family", "1", "2", "3"}; + CommandLine.populateCommand(groupContact, args); + + Integer result = groupContact.call(); + + verify(groupContactsRepository, times(1)).addContact("Family", 1); + verify(groupContactsRepository, times(1)).addContact("Family", 2); + verify(groupContactsRepository, times(1)).addContact("Family", 3); + verifyNoMoreInteractions(groupContactsRepository); + assertEquals(0, result); + } + + @Test + void testRemoveContactsFromGroup() throws Exception { + String[] args = {"--remove", "Colleagues", "5", "6"}; + CommandLine.populateCommand(groupContact, args); + + Integer result = groupContact.call(); + + verify(groupContactsRepository, times(1)).deleteContact("Colleagues", 5); + verify(groupContactsRepository, times(1)).deleteContact("Colleagues", 6); + verifyNoMoreInteractions(groupContactsRepository); + assertEquals(0, result); + } + + @Test + void testListGroups() throws Exception { + + when(groupContactsRepository.getGroups()).thenReturn(List.of("Family", "Friends")); + when(groupContactsRepository.getContactsId("Family")).thenReturn(List.of(1L, 2L)); + when(groupContactsRepository.getContactsId("Friends")).thenReturn(List.of(3L, 4L)); + + when(phoneBookInterface.getById(1L)).thenReturn(Optional.of( + new ContactDto(1L, "John Doe", List.of("123456789"), List.of("john.doe@example.com"), null) + )); + when(phoneBookInterface.getById(2L)).thenReturn(Optional.of( + new ContactDto(2L, "Jane Doe", List.of("987654321"), List.of("jane.doe@example.com"), null) + )); + when(phoneBookInterface.getById(3L)).thenReturn(Optional.of( + new ContactDto(3L, "Alice Smith", List.of("111222333"), List.of("alice@example.com"), null) + )); + when(phoneBookInterface.getById(4L)).thenReturn(Optional.of( + new ContactDto(4L, "Bob Johnson", List.of("444555666"), List.of("bob@example.com"), null) + )); + + String[] args = {}; + CommandLine.populateCommand(groupContact, args); + + Integer result = groupContact.call(); + + verify(groupContactsRepository, times(1)).getGroups(); + verify(groupContactsRepository, times(1)).getContactsId("Family"); + verify(groupContactsRepository, times(1)).getContactsId("Friends"); + verify(phoneBookInterface, times(1)).getById(1L); + verify(phoneBookInterface, times(1)).getById(2L); + verify(phoneBookInterface, times(1)).getById(3L); + verify(phoneBookInterface, times(1)).getById(4L); + + assertEquals(0, result); + } +} \ No newline at end of file From 0dca97ea8644669be4e5fede7ef75943b20f2dc2 Mon Sep 17 00:00:00 2001 From: Yaroslav <6i4bbb@gmail.com> Date: Fri, 31 Jan 2025 16:25:58 +0200 Subject: [PATCH 15/15] CLI commands testing --- pom.xml | 1 + .../gnew/m2/cli/commands/GroupContact.java | 2 + .../m2/cli/commands/ListContactsTest.java | 57 +++++++++++++++++++ 3 files changed, 60 insertions(+) create mode 100644 src/test/java/ua/com/javarush/gnew/m2/cli/commands/ListContactsTest.java diff --git a/pom.xml b/pom.xml index cfd9e69..dac34ce 100644 --- a/pom.xml +++ b/pom.xml @@ -66,6 +66,7 @@ test + org.mockito diff --git a/src/main/java/ua/com/javarush/gnew/m2/cli/commands/GroupContact.java b/src/main/java/ua/com/javarush/gnew/m2/cli/commands/GroupContact.java index 09be4b4..d87c32f 100644 --- a/src/main/java/ua/com/javarush/gnew/m2/cli/commands/GroupContact.java +++ b/src/main/java/ua/com/javarush/gnew/m2/cli/commands/GroupContact.java @@ -8,6 +8,8 @@ import java.util.List; import java.util.Objects; import java.util.stream.Collectors; + + import ua.com.javarush.gnew.m2.cli.CliCommand; import ua.com.javarush.gnew.m2.configuration.PhoneBookContext; import ua.com.javarush.gnew.m2.repository.GroupContactsRepository; diff --git a/src/test/java/ua/com/javarush/gnew/m2/cli/commands/ListContactsTest.java b/src/test/java/ua/com/javarush/gnew/m2/cli/commands/ListContactsTest.java new file mode 100644 index 0000000..964615a --- /dev/null +++ b/src/test/java/ua/com/javarush/gnew/m2/cli/commands/ListContactsTest.java @@ -0,0 +1,57 @@ +package ua.com.javarush.gnew.m2.cli.commands; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import ua.com.javarush.gnew.m2.dto.ContactDto; +import ua.com.javarush.gnew.m2.service.PhoneBookInterface; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.PrintStream; +import java.util.List; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.mockito.Mockito.*; + +class ListContactsTest { + @Mock + private PhoneBookInterface phoneBookInterface; + + private ListContacts listContacts; + private final ByteArrayOutputStream outputStreamCaptor = new ByteArrayOutputStream(); + + @BeforeEach + void setUp() { + MockitoAnnotations.openMocks(this); + + listContacts = new ListContacts() { + @Override + public Integer call() throws IOException { + + phoneBookInterface.list().forEach(contact -> System.out.println(contact.getFullName())); + return 0; + } + }; + + System.setOut(new PrintStream(outputStreamCaptor)); + } + + @Test + void testListContacts() throws IOException { + + ContactDto contact = new ContactDto("John Doe", List.of("123-456-7890"), List.of(), ""); + List contacts = List.of(contact); + when(phoneBookInterface.list()).thenReturn(contacts); + + int result = listContacts.call(); + + verify(phoneBookInterface, times(1)).list(); + + String expectedOutput = "John Doe"; + assertEquals(expectedOutput.trim(), outputStreamCaptor.toString().trim()); + + assertEquals(0, result); + } +} \ No newline at end of file