You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

145 lines
4.6 KiB

  1. import org.junit.jupiter.api.BeforeAll;
  2. import org.junit.jupiter.api.BeforeEach;
  3. import org.junit.jupiter.api.Test;
  4. import java.io.ByteArrayInputStream;
  5. import java.io.ByteArrayOutputStream;
  6. import java.nio.charset.StandardCharsets;
  7. import java.util.NoSuchElementException;
  8. import static org.junit.jupiter.api.Assertions.*;
  9. class PasswordManagerTest {
  10. static PasswordManager pm;
  11. @BeforeAll
  12. static void init() {
  13. pm = new PasswordManager();
  14. }
  15. @BeforeEach
  16. void reset() {
  17. pm.outputStream = System.out;
  18. pm.inputStream = System.in;
  19. }
  20. @Test
  21. void constructor() {
  22. assertInstanceOf(PasswordManager.class, pm);
  23. }
  24. @Test
  25. void listVaults() {
  26. pm.listVaults();
  27. }
  28. @Test
  29. void openVault() {
  30. pm.openVault();
  31. }
  32. @Test
  33. void menuNavigationListVaults() {
  34. ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
  35. pm.inputStream = new ByteArrayInputStream("l\n".getBytes(StandardCharsets.UTF_8));
  36. pm.outputStream = outputStream;
  37. pm.showMenu();
  38. pm.createNewVault();
  39. assertTrue(outputStream.toString().contains("Vaults:\n- vault id: 0\n"));
  40. }
  41. @Test
  42. void menuNavigationCreateNewVault() {
  43. ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
  44. pm.inputStream = new ByteArrayInputStream("v\n".getBytes(StandardCharsets.UTF_8));
  45. pm.outputStream = outputStream;
  46. int vaultCount = pm.vaults.size();
  47. pm.showMenu();
  48. assertEquals(vaultCount + 1, pm.vaults.size());
  49. }
  50. @Test
  51. void menuNavigationOpenVault() {
  52. ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
  53. pm.inputStream = new ByteArrayInputStream("v 0\n".getBytes(StandardCharsets.UTF_8));
  54. pm.outputStream = outputStream;
  55. pm.showMenu();
  56. assertFalse(outputStream.toString().endsWith("-- vaults not implemented yet\n"));
  57. }
  58. @Test
  59. void menuNavigationSelectVaultOperation() {
  60. ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
  61. pm.inputStream = new ByteArrayInputStream("v\n".getBytes(StandardCharsets.UTF_8));
  62. pm.outputStream = new ByteArrayOutputStream();
  63. pm.showMenu();
  64. pm.inputStream = new ByteArrayInputStream("v 0\n".getBytes(StandardCharsets.UTF_8));
  65. pm.outputStream = new ByteArrayOutputStream();
  66. pm.showMenu();
  67. pm.inputStream = new ByteArrayInputStream("o 0\n".getBytes(StandardCharsets.UTF_8));
  68. pm.outputStream = outputStream;
  69. pm.showMenu();
  70. assertTrue(outputStream.toString().contains("Run selected operation"));
  71. outputStream = new ByteArrayOutputStream();
  72. pm.inputStream = new ByteArrayInputStream("o foobert\n".getBytes(StandardCharsets.UTF_8));
  73. pm.outputStream = outputStream;
  74. pm.showMenu();
  75. assertTrue(outputStream.toString().endsWith("-- please enter a valid operation id\n"));
  76. outputStream = new ByteArrayOutputStream();
  77. pm.inputStream = new ByteArrayInputStream("o 1000\n".getBytes(StandardCharsets.UTF_8));
  78. pm.outputStream = outputStream;
  79. pm.showMenu();
  80. System.out.println(outputStream);
  81. assertTrue(outputStream.toString().endsWith("-- please enter a valid operation id\n"));
  82. }
  83. @Test
  84. void showMenu() {
  85. ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
  86. pm.inputStream = getEmptyStringInputStream();
  87. pm.outputStream = outputStream;
  88. assertThrowsExactly(NoSuchElementException.class, () -> pm.showMenu());
  89. assertTrue(outputStream.toString().startsWith("\nciip Gruppe 8"));
  90. }
  91. @Test
  92. void exitMenu() {
  93. pm.inputStream = new ByteArrayInputStream("e\n".getBytes(StandardCharsets.UTF_8));
  94. pm.showMenu();
  95. assertFalse(pm.running);
  96. }
  97. @Test
  98. void doNotExitMenuAfterWrongInput() {
  99. pm.inputStream = new ByteArrayInputStream("__\n".getBytes(StandardCharsets.UTF_8));
  100. pm.showMenu();
  101. assertTrue(pm.running);
  102. ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
  103. pm.inputStream = getEmptyStringInputStream();
  104. pm.outputStream = outputStream;
  105. assertThrowsExactly(NoSuchElementException.class, () -> pm.showMenu());
  106. assertTrue(outputStream.toString().startsWith("\nciip Gruppe 8"));
  107. }
  108. @Test
  109. void createNewVault() {
  110. int vaultCount = pm.vaults.size();
  111. pm.createNewVault();
  112. assertEquals(vaultCount + 1, pm.vaults.size());
  113. }
  114. private ByteArrayInputStream getEmptyStringInputStream() {
  115. return new ByteArrayInputStream("".getBytes(StandardCharsets.UTF_8));
  116. }
  117. }