import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.nio.charset.StandardCharsets; import java.util.NoSuchElementException; import static org.junit.jupiter.api.Assertions.*; class PasswordManagerTest { static PasswordManager pm; @BeforeAll static void init() { pm = new PasswordManager(); } @BeforeEach void reset() { pm.outputStream = System.out; pm.inputStream = System.in; } @Test void constructor() { assertInstanceOf(PasswordManager.class, pm); } @Test void listVaults() { pm.listVaults(); } @Test void openVault() { pm.openVault(); } @Test void menuNavigationListVaults() { ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); pm.inputStream = new ByteArrayInputStream("l\n".getBytes(StandardCharsets.UTF_8)); pm.outputStream = outputStream; pm.showMenu(); pm.createNewVault(); assertTrue(outputStream.toString().contains("Vaults:\n- vault id: 0\n")); } @Test void menuNavigationCreateNewVault() { ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); pm.inputStream = new ByteArrayInputStream("v\n".getBytes(StandardCharsets.UTF_8)); pm.outputStream = outputStream; int vaultCount = pm.vaults.size(); pm.showMenu(); assertEquals(vaultCount + 1, pm.vaults.size()); } @Test void menuNavigationOpenVault() { ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); pm.inputStream = new ByteArrayInputStream("v 0\n".getBytes(StandardCharsets.UTF_8)); pm.outputStream = outputStream; pm.showMenu(); assertFalse(outputStream.toString().endsWith("-- vaults not implemented yet\n")); } @Test void menuNavigationSelectVaultOperation() { ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); pm.inputStream = new ByteArrayInputStream("v\n".getBytes(StandardCharsets.UTF_8)); pm.outputStream = new ByteArrayOutputStream(); pm.showMenu(); pm.inputStream = new ByteArrayInputStream("v 0\n".getBytes(StandardCharsets.UTF_8)); pm.outputStream = new ByteArrayOutputStream(); pm.showMenu(); System.out.println(pm.outputStream.toString()); pm.inputStream = new ByteArrayInputStream("o 0\n".getBytes(StandardCharsets.UTF_8)); pm.outputStream = outputStream; pm.vaults.get(0).inputS = new ByteArrayInputStream("e\n".getBytes(StandardCharsets.UTF_8)); pm.showMenu(); assertTrue(outputStream.toString().contains("Run selected operation")); outputStream = new ByteArrayOutputStream(); pm.inputStream = new ByteArrayInputStream("o foobert\n".getBytes(StandardCharsets.UTF_8)); pm.outputStream = outputStream; pm.showMenu(); assertTrue(outputStream.toString().endsWith("-- please enter a valid operation id\n")); outputStream = new ByteArrayOutputStream(); pm.inputStream = new ByteArrayInputStream("o 1000\n".getBytes(StandardCharsets.UTF_8)); pm.outputStream = outputStream; pm.showMenu(); System.out.println(outputStream); assertTrue(outputStream.toString().endsWith("-- please enter a valid operation id\n")); } @Test void showMenu() { ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); pm.inputStream = getEmptyStringInputStream(); pm.outputStream = outputStream; assertThrowsExactly(NoSuchElementException.class, () -> pm.showMenu()); assertTrue(outputStream.toString().startsWith("\nciip Gruppe 8")); } @Test void exitMenu() { pm.inputStream = new ByteArrayInputStream("e\n".getBytes(StandardCharsets.UTF_8)); pm.showMenu(); assertFalse(pm.running); } @Test void doNotExitMenuAfterWrongInput() { pm.inputStream = new ByteArrayInputStream("__\n".getBytes(StandardCharsets.UTF_8)); pm.showMenu(); assertTrue(pm.running); ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); pm.inputStream = getEmptyStringInputStream(); pm.outputStream = outputStream; assertThrowsExactly(NoSuchElementException.class, () -> pm.showMenu()); assertTrue(outputStream.toString().startsWith("\nciip Gruppe 8")); } @Test void createNewVault() { int vaultCount = pm.vaults.size(); pm.createNewVault(); assertEquals(vaultCount + 1, pm.vaults.size()); } private ByteArrayInputStream getEmptyStringInputStream() { return new ByteArrayInputStream("".getBytes(StandardCharsets.UTF_8)); } }