Migrate restconf/restconf-nb tests to JUnit5
[netconf.git] / restconf / restconf-nb / src / test / java / org / opendaylight / restconf / server / spi / NormalizedNodeWriterParametersTest.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.restconf.api.query.DepthParam;
20 import org.opendaylight.yangtools.yang.common.QName;
21 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier;
22 import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode;
23 import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriter;
24 import org.opendaylight.yangtools.yang.data.spi.node.ImmutableNodes;
25 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
26
27 /**
28  * Unit test for {@link NormalizedNodeWriter} used with all parameters.
29  */
30 @ExtendWith(MockitoExtension.class)
31 class NormalizedNodeWriterParametersTest extends AbstractNormalizedNodeWriterTest {
32     @Mock
33     private NormalizedNodeStreamWriter writer;
34
35     /**
36      * Test write {@link ContainerNode} when all its children are selected to be written by fields parameter.
37      * Depth parameter is also used and limits output to depth 1.
38      * Fields parameter has effect limiting depth parameter in the way that selected nodes and its ancestors are
39      * written regardless of their depth (some of container children have depth > 1).
40      * Fields parameter selects all container children to be written and also all children of those children.
41      */
42     @Test
43     void writeContainerParameterPrioritiesTest() throws Exception {
44         final var parameterWriter = NormalizedNodeWriter.forStreamWriter(writer, DepthParam.min(),
45             List.of(
46                 Set.of(LEAF_SET_NID.getNodeType()),
47                 Set.of(leafSetEntryNodeIdentifier.getNodeType())));
48
49         parameterWriter.write(containerNodeData);
50
51         final var inOrder = inOrder(writer);
52         inOrder.verify(writer).startContainerNode(CONTAINER_NID, 1);
53         inOrder.verify(writer).startLeafSet(LEAF_SET_NID, 1);
54         inOrder.verify(writer).startLeafSetEntryNode(leafSetEntryNodeIdentifier);
55         inOrder.verify(writer).scalarValue(leafSetEntryNodeValue);
56         inOrder.verify(writer, times(3)).endNode();
57     }
58
59     /**
60      * Test write {@link ContainerNode} which represents data at restconf/data root.
61      * No parameters are used.
62      */
63     @Test
64     void writeRootDataTest() throws Exception {
65         final var parameterWriter = NormalizedNodeWriter.forStreamWriter(writer, null);
66
67         parameterWriter.write(ImmutableNodes.newContainerBuilder()
68             .withNodeIdentifier(NodeIdentifier.create(
69                 QName.create("urn:ietf:params:xml:ns:netconf:base:1.0", "data")))
70             .withChild(leafSetNodeData)
71             .build());
72
73         final var inOrder = inOrder(writer);
74         inOrder.verify(writer).startLeafSet(LEAF_SET_NID, 1);
75         inOrder.verify(writer).startLeafSetEntryNode(leafSetEntryNodeIdentifier);
76         inOrder.verify(writer).scalarValue(leafSetEntryNodeValue);
77         inOrder.verify(writer, times(2)).endNode();
78     }
79
80     @Test
81     void writeEmptyRootContainerTest() throws Exception {
82         final var parameterWriter = NormalizedNodeWriter.forStreamWriter(writer, null);
83
84         parameterWriter.write(ImmutableNodes.newContainerBuilder()
85             .withNodeIdentifier(new NodeIdentifier(SchemaContext.NAME))
86             .build());
87     }
88 }