FileControllerTest.java 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. package org.leumasjaffe.recipe.controller;
  2. import static org.junit.jupiter.api.Assertions.*;
  3. import static org.mockito.Mockito.*;
  4. import java.io.IOException;
  5. import java.io.StringReader;
  6. import java.io.StringWriter;
  7. import java.io.Writer;
  8. import java.util.Optional;
  9. import org.junit.jupiter.api.Test;
  10. import org.junit.jupiter.api.extension.ExtendWith;
  11. import org.junit.platform.runner.JUnitPlatform;
  12. import org.junit.runner.RunWith;
  13. import org.leumasjaffe.recipe.model.RecipeCard;
  14. import org.mockito.ArgumentCaptor;
  15. import org.mockito.InOrder;
  16. import org.mockito.InjectMocks;
  17. import org.mockito.Mock;
  18. import org.mockito.junit.jupiter.MockitoExtension;
  19. @ExtendWith(MockitoExtension.class)
  20. @RunWith(JUnitPlatform.class)
  21. class FileControllerTest {
  22. @Mock SaveLoadHandle handle;
  23. @Mock FileController.ViewModel viewmodel;
  24. @InjectMocks FileController controller;
  25. @Test
  26. void testCanCreateNewModel() {
  27. controller.create();
  28. verify(viewmodel).setModel(any(RecipeCard.class));
  29. }
  30. @Test
  31. void testRepeatedCreatesProvideNewObjects() {
  32. InOrder inOrder = inOrder(viewmodel);
  33. final ArgumentCaptor<RecipeCard> first = ArgumentCaptor.forClass(RecipeCard.class);
  34. final ArgumentCaptor<RecipeCard> second = ArgumentCaptor.forClass(RecipeCard.class);
  35. controller.create();
  36. inOrder.verify(viewmodel).setModel(first.capture());
  37. controller.create();
  38. inOrder.verify(viewmodel).setModel(second.capture());
  39. assertNotSame(first.getValue(), second.getValue());
  40. }
  41. @Test
  42. void testOpensContentIntoRecipe() {
  43. final String data = "{ \"title\": \"Example\" }";
  44. doReturn(Optional.of(new StringReader(data))).when(handle).reader();
  45. controller.open();
  46. verify(viewmodel).setModel(argThat(r -> r.getTitle().equals("Example")));
  47. }
  48. @Test
  49. void testEmitsErrorWithMalformedData() {
  50. final String data = "{ \"name\": \"Example\" }";
  51. doReturn(Optional.of(new StringReader(data))).when(handle).reader();
  52. doNothing().when(handle).error(any());
  53. controller.open();
  54. verify(handle).error(any());
  55. }
  56. @Test
  57. void testCanWriteRecipeToStream() {
  58. StringWriter writer = new StringWriter();
  59. doReturn(Optional.of(writer)).when(handle).writer();
  60. controller.create();
  61. controller.save();
  62. assertNotEquals("", writer.toString());
  63. }
  64. @Test
  65. void testCreateClearsHandle() {
  66. controller.create();
  67. verify(handle, times(1)).clear();
  68. }
  69. @Test
  70. void testSaveAsClearsHandle() {
  71. StringWriter writer = new StringWriter();
  72. doReturn(Optional.of(writer)).when(handle).writer();
  73. controller.create();
  74. controller.saveAs();
  75. verify(handle, times(2)).clear();
  76. assertNotEquals("", writer.toString());
  77. }
  78. @Test
  79. void testWriteErrorCallsHandle() {
  80. Writer writer = mock(Writer.class, inv -> { throw new IOException(); });
  81. doReturn(Optional.of(writer)).when(handle).writer();
  82. doNothing().when(handle).error(any());
  83. controller.create();
  84. controller.save();
  85. verify(handle).error(any());
  86. }
  87. @Test
  88. void testDoesNothingIfHandleReturnsMissingReader() {
  89. doReturn(Optional.empty()).when(handle).reader();
  90. controller.open();
  91. verify(viewmodel, never()).setModel(any());
  92. verify(handle, never()).error(any());
  93. }
  94. @Test
  95. void testDoesNothingIfHandleReturnsMissingWriter() {
  96. doReturn(Optional.empty()).when(handle).writer();
  97. controller.create();
  98. controller.save();
  99. verify(handle, never()).error(any());
  100. }
  101. }