55import edu .harvard .iq .dataverse .engine .command .CommandContext ;
66import edu .harvard .iq .dataverse .engine .command .DataverseRequest ;
77import edu .harvard .iq .dataverse .engine .command .exception .CommandException ;
8+ import edu .harvard .iq .dataverse .util .template .TemplateBuilder ;
89import org .junit .jupiter .api .BeforeEach ;
910import org .junit .jupiter .api .Test ;
1011import org .mockito .Mockito ;
1112
13+ import java .util .Arrays ;
1214import java .util .Collections ;
1315import java .util .List ;
1416
1517import static org .junit .jupiter .api .Assertions .assertEquals ;
18+ import static org .junit .jupiter .api .Assertions .assertFalse ;
19+ import static org .junit .jupiter .api .Assertions .assertNotNull ;
1620import static org .junit .jupiter .api .Assertions .assertTrue ;
1721
1822public class ListDataverseTemplatesCommandTest {
@@ -28,52 +32,138 @@ public void setUp() {
2832
2933 @ Test
3034 public void execute_shouldReturnTemplates_noParent () throws CommandException {
35+ // Arrange
3136 Dataverse dataverseMock = Mockito .mock (Dataverse .class );
32-
3337 Mockito .when (dataverseMock .getTemplates ()).thenReturn (Collections .singletonList (testTemplate ));
3438
3539 ListDataverseTemplatesCommand sut = new ListDataverseTemplatesCommand (dataverseRequestStub , dataverseMock );
3640
41+ // Act
3742 List <Template > result = sut .execute (Mockito .mock (CommandContext .class ));
3843
44+ // Assert
3945 assertEquals (1 , result .size ());
4046 assertEquals (testTemplate , result .get (0 ));
4147 }
4248
4349 @ Test
4450 public void execute_shouldReturnTemplates_parentHasTemplates () throws CommandException {
51+ // Arrange
4552 Template parentTemplate = new Template ();
46-
4753 Dataverse dataverseMock = Mockito .mock (Dataverse .class );
4854 Dataverse parentDataverseMock = Mockito .mock (Dataverse .class );
49-
5055 Mockito .when (dataverseMock .getTemplates ()).thenReturn (Collections .singletonList (testTemplate ));
5156 Mockito .when (dataverseMock .getParentTemplates ()).thenReturn (Collections .singletonList (parentTemplate ));
5257 Mockito .when (dataverseMock .getOwner ()).thenReturn (parentDataverseMock );
5358
5459 ListDataverseTemplatesCommand sut = new ListDataverseTemplatesCommand (dataverseRequestStub , dataverseMock );
5560
61+ // Act
5662 List <Template > result = sut .execute (Mockito .mock (CommandContext .class ));
5763
64+ // Assert
5865 assertEquals (2 , result .size ());
5966 assertTrue (result .contains (testTemplate ));
6067 assertTrue (result .contains (parentTemplate ));
6168 }
6269
70+ @ Test
71+ public void execute_shouldNotIncludeParentTemplates_whenDataverseIsRoot () throws CommandException {
72+ // Arrange
73+ String parentTemplateName = "parentTemplate" ;
74+ Template parentTemplate = TemplateBuilder .aTemplate ().withName (parentTemplateName ).build ();
75+ String childTemplateName = "childTemplateName" ;
76+ Template childTemplate = TemplateBuilder .aTemplate ().withName (childTemplateName ).build ();
77+ Dataverse dataverseMock = Mockito .mock (Dataverse .class );
78+ Dataverse parentDataverseMock = Mockito .mock (Dataverse .class );
79+ Mockito .when (dataverseMock .getTemplates ()).thenReturn (Collections .singletonList (childTemplate ));
80+ Mockito .when (dataverseMock .getParentTemplates ()).thenReturn (Collections .singletonList (parentTemplate ));
81+ Mockito .when (dataverseMock .getOwner ()).thenReturn (parentDataverseMock );
82+ Mockito .when (dataverseMock .isTemplateRoot ()).thenReturn (true );
83+
84+ ListDataverseTemplatesCommand sut = new ListDataverseTemplatesCommand (dataverseRequestStub , dataverseMock );
85+
86+ // Act
87+ List <Template > result = sut .execute (Mockito .mock (CommandContext .class ));
88+
89+ // Assert
90+ assertEquals (1 , result .size ());
91+ assertTrue (result .get (0 ).getName ().equals (childTemplateName ));
92+ }
93+
94+
6395 @ Test
6496 public void execute_shouldReturnTemplates_parentHasNoTemplates () throws CommandException {
97+ // Arrange
6598 Dataverse dataverseMock = Mockito .mock (Dataverse .class );
6699 Dataverse parentDataverseStub = Mockito .mock (Dataverse .class );
67-
68100 Mockito .when (dataverseMock .getTemplates ()).thenReturn (Collections .singletonList (testTemplate ));
69101 Mockito .when (dataverseMock .getOwner ()).thenReturn (parentDataverseStub );
70102 Mockito .when (dataverseMock .getParentTemplates ()).thenReturn (Collections .emptyList ());
71103
72104 ListDataverseTemplatesCommand sut = new ListDataverseTemplatesCommand (dataverseRequestStub , dataverseMock );
73105
106+ // Act
74107 List <Template > result = sut .execute (Mockito .mock (CommandContext .class ));
75108
109+ // Assert
76110 assertEquals (1 , result .size ());
77111 assertTrue (result .contains (testTemplate ));
78112 }
113+
114+
115+ @ Test
116+ public void execute_shouldSetDefaultTemplate_whenDefaultIsPresent () throws CommandException {
117+ // Arrange
118+ String defaultTplName = "defaultTplName" ;
119+ String otherTplName = "otherTplName" ;
120+
121+ Template defaultTpl = TemplateBuilder .aTemplate ().withName (defaultTplName ).isDefault (true ).build ();
122+ Template otherTpl = TemplateBuilder .aTemplate ().withName (otherTplName ).isDefault (false ).build ();
123+
124+ Dataverse dataverseMock = Mockito .mock (Dataverse .class );
125+ Mockito .when (dataverseMock .getTemplates ()).thenReturn (Arrays .asList (defaultTpl , otherTpl ));
126+ Mockito .when (dataverseMock .getDefaultTemplate ()).thenReturn (defaultTpl );
127+
128+ ListDataverseTemplatesCommand sut = new ListDataverseTemplatesCommand (dataverseRequestStub , dataverseMock );
129+
130+ // Act
131+ List <Template > result = sut .execute (Mockito .mock (CommandContext .class ));
132+
133+ // Assert
134+ assertEquals (2 , result .size ());
135+
136+ Template resultDefault = findTemplateByName (result , defaultTplName );
137+ assertNotNull (resultDefault , "Default template should be in the list" );
138+ assertTrue (resultDefault .isIsDefaultForDataverse (), "The template with name " + defaultTplName + " should be marked as default" );
139+
140+ Template resultOther = findTemplateByName (result , otherTplName );
141+ assertNotNull (resultOther , "Other template should be in the list" );
142+ assertFalse (resultOther .isIsDefaultForDataverse (), "The template with name " + otherTplName + " should NOT be marked as default" );
143+ }
144+
145+ @ Test
146+ public void execute_shouldNotSetDefault_whenNoDefaultTemplateExists () throws CommandException {
147+ // Arrange
148+ testTemplate = TemplateBuilder .aTemplate ().isDefault (false ).build ();
149+ Dataverse dataverseMock = Mockito .mock (Dataverse .class );
150+ Mockito .when (dataverseMock .getTemplates ()).thenReturn (Collections .singletonList (testTemplate ));
151+ Mockito .when (dataverseMock .getDefaultTemplate ()).thenReturn (null );
152+
153+ ListDataverseTemplatesCommand sut = new ListDataverseTemplatesCommand (dataverseRequestStub , dataverseMock );
154+
155+ // Act
156+ List <Template > result = sut .execute (Mockito .mock (CommandContext .class ));
157+
158+ // Assert
159+ assertEquals (1 , result .size ());
160+ assertFalse (result .get (0 ).isIsDefaultForDataverse (), "No template should be marked as default" );
161+ }
162+
163+ private Template findTemplateByName (List <Template > templates , String name ) {
164+ return templates .stream ()
165+ .filter (t -> name .equals (t .getName ()))
166+ .findFirst ()
167+ .orElse (null );
168+ }
79169}
0 commit comments