Clean up NormalizedNodeWriter tests
[netconf.git] / restconf / restconf-nb / src / test / java / org / opendaylight / restconf / server / spi / NormalizedNodeWriterFieldsTest.java
1 /*
2  * Copyright (c) 2016 Cisco Systems, Inc. and others.  All rights reserved.
3  *
4  * This program and the accompanying materials are made available under the
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6  * and is available at http://www.eclipse.org/legal/epl-v10.html
7  */
8 package org.opendaylight.restconf.server.spi;
9
10 import static org.mockito.Mockito.inOrder;
11 import static org.mockito.Mockito.times;
12
13 import java.util.List;
14 import java.util.Set;
15 import org.junit.jupiter.api.Test;
16 import org.junit.jupiter.api.extension.ExtendWith;
17 import org.mockito.Mock;
18 import org.mockito.junit.jupiter.MockitoExtension;
19 import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode;
20 import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode;
21 import org.opendaylight.yangtools.yang.data.api.schema.MapNode;
22 import org.opendaylight.yangtools.yang.data.api.schema.SystemMapNode;
23 import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriter;
24 import org.opendaylight.yangtools.yang.data.spi.node.ImmutableNodes;
25
26 /**
27  * Unit test for {@link NormalizedNodeWriter} used with fields parameter.
28  */
29 @ExtendWith(MockitoExtension.class)
30 class NormalizedNodeWriterFieldsTest extends AbstractNormalizedNodeWriterTest {
31     private final SystemMapNode mapNodeData = ImmutableNodes.newSystemMapBuilder()
32         .withNodeIdentifier(LIST_NID)
33         .withChild(ImmutableNodes.newMapEntryBuilder()
34             .withNodeIdentifier(mapEntryNodeIdentifier)
35             .withChild(keyLeafNodeData)
36             .build())
37         .build();
38
39     @Mock
40     private NormalizedNodeStreamWriter writer;
41
42     /**
43      * Test write {@link ContainerNode} when children which will be written are limited.
44      * Fields parameter selects 0/1 of container children to be written.
45      */
46     @Test
47     void writeContainerWithLimitedFieldsTest() throws Exception {
48         final var parameterWriter = NormalizedNodeWriter.forStreamWriter(writer, null, List.of(Set.of()));
49
50         parameterWriter.write(containerNodeData);
51
52         final var inOrder = inOrder(writer);
53         inOrder.verify(writer).startContainerNode(CONTAINER_NID, 1);
54         inOrder.verify(writer).endNode();
55     }
56
57     /**
58      * Test write {@link ContainerNode} when all its children are selected to be written.
59      * Fields parameter selects 1/1 of container children to be written.
60      */
61     @Test
62     void writeContainerAllFieldsTest() throws Exception {
63         final var parameterWriter = NormalizedNodeWriter.forStreamWriter(writer, null,
64             List.of(Set.of(LEAF_SET_NID.getNodeType())));
65
66         parameterWriter.write(containerNodeData);
67
68         final var inOrder = inOrder(writer);
69         inOrder.verify(writer).startContainerNode(CONTAINER_NID, 1);
70         inOrder.verify(writer).startLeafSet(LEAF_SET_NID, 1);
71         inOrder.verify(writer).startLeafSetEntryNode(leafSetEntryNodeIdentifier);
72         inOrder.verify(writer).scalarValue(leafSetEntryNodeValue);
73         inOrder.verify(writer, times(3)).endNode();
74     }
75
76     /**
77      * Test write {@link MapEntryNode} as child of {@link MapNode} when children which will be written are limited.
78      * Fields parameter selects 0/1 of map entry node children to be written.
79      */
80     @Test
81     void writeMapEntryNodeWithLimitedFieldsTest() throws Exception {
82         final var parameterWriter = NormalizedNodeWriter.forStreamWriter(writer, null, List.of(Set.of()));
83
84         parameterWriter.write(mapNodeData);
85
86         final var inOrder = inOrder(writer);
87         inOrder.verify(writer).startMapNode(LIST_NID, 1);
88         inOrder.verify(writer).startMapEntryNode(mapEntryNodeIdentifier, 1);
89         inOrder.verify(writer, times(2)).endNode();
90     }
91
92     /**
93      * Test write {@link MapEntryNode} as child of {@link MapNode} when all its children will be written.
94      * Fields parameter selects 1/1 of map entry node children to be written.
95      */
96     @Test
97     void writeMapNodeAllFieldsTest() throws Exception {
98         final var parameterWriter = NormalizedNodeWriter.forStreamWriter(writer, null,
99             List.of(Set.of(keyLeafNodeData.name().getNodeType())));
100
101         parameterWriter.write(mapNodeData);
102
103         final var inOrder = inOrder(writer);
104         inOrder.verify(writer).startMapNode(LIST_NID, 1);
105         inOrder.verify(writer).startMapEntryNode(mapEntryNodeIdentifier, 1);
106         inOrder.verify(writer).startLeafNode(KEY_FIELD_NID);
107         inOrder.verify(writer).scalarValue(keyLeafNodeValue);
108         inOrder.verify(writer, times(3)).endNode();
109     }
110 }