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.

147 lines
4.8 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. System.out.println(pm.outputStream.toString());
  68. pm.inputStream = new ByteArrayInputStream("o 0\n".getBytes(StandardCharsets.UTF_8));
  69. pm.outputStream = outputStream;
  70. pm.vaults.get(0).inputS = new ByteArrayInputStream("e\n".getBytes(StandardCharsets.UTF_8));
  71. pm.showMenu();
  72. assertTrue(outputStream.toString().contains("Run selected operation"));
  73. outputStream = new ByteArrayOutputStream();
  74. pm.inputStream = new ByteArrayInputStream("o foobert\n".getBytes(StandardCharsets.UTF_8));
  75. pm.outputStream = outputStream;
  76. pm.showMenu();
  77. assertTrue(outputStream.toString().endsWith("-- please enter a valid operation id\n"));
  78. outputStream = new ByteArrayOutputStream();
  79. pm.inputStream = new ByteArrayInputStream("o 1000\n".getBytes(StandardCharsets.UTF_8));
  80. pm.outputStream = outputStream;
  81. pm.showMenu();
  82. System.out.println(outputStream);
  83. assertTrue(outputStream.toString().endsWith("-- please enter a valid operation id\n"));
  84. }
  85. @Test
  86. void showMenu() {
  87. ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
  88. pm.inputStream = getEmptyStringInputStream();
  89. pm.outputStream = outputStream;
  90. assertThrowsExactly(NoSuchElementException.class, () -> pm.showMenu());
  91. assertTrue(outputStream.toString().startsWith("\nciip Gruppe 8"));
  92. }
  93. @Test
  94. void exitMenu() {
  95. pm.inputStream = new ByteArrayInputStream("e\n".getBytes(StandardCharsets.UTF_8));
  96. pm.showMenu();
  97. assertFalse(pm.running);
  98. }
  99. @Test
  100. void doNotExitMenuAfterWrongInput() {
  101. pm.inputStream = new ByteArrayInputStream("__\n".getBytes(StandardCharsets.UTF_8));
  102. pm.showMenu();
  103. assertTrue(pm.running);
  104. ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
  105. pm.inputStream = getEmptyStringInputStream();
  106. pm.outputStream = outputStream;
  107. assertThrowsExactly(NoSuchElementException.class, () -> pm.showMenu());
  108. assertTrue(outputStream.toString().startsWith("\nciip Gruppe 8"));
  109. }
  110. @Test
  111. void createNewVault() {
  112. int vaultCount = pm.vaults.size();
  113. pm.createNewVault();
  114. assertEquals(vaultCount + 1, pm.vaults.size());
  115. }
  116. private ByteArrayInputStream getEmptyStringInputStream() {
  117. return new ByteArrayInputStream("".getBytes(StandardCharsets.UTF_8));
  118. }
  119. }