Retrieve the SchemaSet resources for an Anchor
[cps.git] / cps-ri / src / test / java / org / onap / cps / spi / impl / CpsAdminPersistenceServiceTest.java
1 /*
2  *  ============LICENSE_START=======================================================
3  *  Copyright (C) 2020 Pantheon.tech
4  *  ================================================================================
5  *  Licensed under the Apache License, Version 2.0 (the "License");
6  *  you may not use this file except in compliance with the License.
7  *  You may obtain a copy of the License at
8  *
9  *        http://www.apache.org/licenses/LICENSE-2.0
10  *  Unless required by applicable law or agreed to in writing, software
11  *  distributed under the License is distributed on an "AS IS" BASIS,
12  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  *  See the License for the specific language governing permissions and
14  *  limitations under the License.
15  *
16  *  SPDX-License-Identifier: Apache-2.0
17  *  ============LICENSE_END=========================================================
18  */
19
20 package org.onap.cps.spi.impl;
21
22 import static org.junit.Assert.assertEquals;
23 import static org.junit.Assert.assertNotNull;
24 import static org.junit.Assert.assertTrue;
25
26 import java.util.Collection;
27 import org.junit.ClassRule;
28 import org.junit.Test;
29 import org.junit.runner.RunWith;
30 import org.onap.cps.DatabaseTestContainer;
31 import org.onap.cps.spi.CpsAdminPersistenceService;
32 import org.onap.cps.spi.entities.AnchorEntity;
33 import org.onap.cps.spi.entities.DataspaceEntity;
34 import org.onap.cps.spi.exceptions.AnchorAlreadyDefinedException;
35 import org.onap.cps.spi.exceptions.AnchorNotFoundException;
36 import org.onap.cps.spi.exceptions.DataspaceAlreadyDefinedException;
37 import org.onap.cps.spi.exceptions.DataspaceNotFoundException;
38 import org.onap.cps.spi.exceptions.SchemaSetNotFoundException;
39 import org.onap.cps.spi.model.Anchor;
40 import org.onap.cps.spi.repository.AnchorRepository;
41 import org.onap.cps.spi.repository.DataspaceRepository;
42 import org.springframework.beans.factory.annotation.Autowired;
43 import org.springframework.boot.test.context.SpringBootTest;
44 import org.springframework.test.context.jdbc.Sql;
45 import org.springframework.test.context.jdbc.SqlGroup;
46 import org.springframework.test.context.junit4.SpringRunner;
47
48 @RunWith(SpringRunner.class)
49 @SpringBootTest
50 public class CpsAdminPersistenceServiceTest {
51
52     private static final String CLEAR_DATA = "/data/clear-all.sql";
53     private static final String SET_DATA = "/data/anchor.sql";
54
55     private static final String DATASPACE_NAME = "DATASPACE-001";
56     private static final String EMPTY_DATASPACE_NAME = "DATASPACE-002";
57     private static final String NON_EXISTING_DATASPACE_NAME = "NON EXISTING DATASPACE";
58     private static final String NON_EXISTING_SCHEMA_SET_NAME = "NON EXISTING SCHEMA SET";
59     private static final String SCHEMA_SET_NAME1 = "SCHEMA-SET-001";
60     private static final String SCHEMA_SET_NAME2 = "SCHEMA-SET-002";
61     private static final String ANCHOR_NAME1 = "ANCHOR-001";
62     private static final String ANCHOR_NAME2 = "ANCHOR-002";
63     private static final String ANCHOR_NAME_NEW = "ANCHOR-NEW";
64     private static final String NON_EXISTING_ANCHOR_NAME = "NON EXISTING ANCHOR";
65
66     @ClassRule
67     public static DatabaseTestContainer databaseTestContainer = DatabaseTestContainer.getInstance();
68
69     @Autowired
70     private CpsAdminPersistenceService cpsAdminPersistenceService;
71
72     @Autowired
73     private AnchorRepository anchorRepository;
74
75     @Autowired
76     private DataspaceRepository dataspaceRepository;
77
78     @Test
79     @SqlGroup({@Sql(CLEAR_DATA), @Sql(SET_DATA)})
80     public void testCreateDataspace() {
81         final String dataspaceName = "DATASPACE-NEW";
82         cpsAdminPersistenceService.createDataspace(dataspaceName);
83
84         final DataspaceEntity dataspaceEntity = dataspaceRepository.findByName(dataspaceName).orElseThrow();
85         assertNotNull(dataspaceEntity);
86         assertNotNull(dataspaceEntity.getId());
87         assertEquals(dataspaceName, dataspaceEntity.getName());
88     }
89
90     @Test(expected = DataspaceAlreadyDefinedException.class)
91     @SqlGroup({@Sql(CLEAR_DATA), @Sql(SET_DATA)})
92     public void testCreateDataspaceWithNameAlreadyDefined() {
93         cpsAdminPersistenceService.createDataspace(DATASPACE_NAME);
94     }
95
96     @Test
97     @SqlGroup({@Sql(CLEAR_DATA), @Sql(SET_DATA)})
98     public void testCreateAnchor() {
99         cpsAdminPersistenceService.createAnchor(DATASPACE_NAME, SCHEMA_SET_NAME2, ANCHOR_NAME_NEW);
100
101         // validate anchor persisted
102         final DataspaceEntity dataspaceEntity = dataspaceRepository.findByName(DATASPACE_NAME).orElseThrow();
103         final AnchorEntity anchorEntity =
104             anchorRepository.findByDataspaceAndName(dataspaceEntity, ANCHOR_NAME_NEW).orElseThrow();
105
106         assertNotNull(anchorEntity.getId());
107         assertEquals(ANCHOR_NAME_NEW, anchorEntity.getName());
108         assertEquals(DATASPACE_NAME, anchorEntity.getDataspace().getName());
109         assertEquals(SCHEMA_SET_NAME2, anchorEntity.getSchemaSet().getName());
110     }
111
112     @Test(expected = DataspaceNotFoundException.class)
113     @SqlGroup({@Sql(CLEAR_DATA), @Sql(SET_DATA)})
114     public void testCreateAnchorAtNonExistingDataspace() {
115         cpsAdminPersistenceService.createAnchor(NON_EXISTING_DATASPACE_NAME, SCHEMA_SET_NAME2, ANCHOR_NAME_NEW);
116     }
117
118     @Test(expected = SchemaSetNotFoundException.class)
119     @SqlGroup({@Sql(CLEAR_DATA), @Sql(SET_DATA)})
120     public void testCreateAnchorWithNonExistingSchemaSet() {
121         cpsAdminPersistenceService.createAnchor(DATASPACE_NAME, NON_EXISTING_SCHEMA_SET_NAME, ANCHOR_NAME_NEW);
122     }
123
124     @Test(expected = AnchorAlreadyDefinedException.class)
125     @SqlGroup({@Sql(CLEAR_DATA), @Sql(SET_DATA)})
126     public void testCreateAnchorWithNameAlreadyDefined() {
127         cpsAdminPersistenceService.createAnchor(DATASPACE_NAME, SCHEMA_SET_NAME2, ANCHOR_NAME1);
128     }
129
130     @Test
131     @SqlGroup({@Sql(CLEAR_DATA), @Sql(SET_DATA)})
132     public void testGetAnchorsByDataspace() {
133         final Collection<Anchor> anchors = cpsAdminPersistenceService.getAnchors(DATASPACE_NAME);
134
135         assertNotNull(anchors);
136         assertEquals(2, anchors.size());
137         assertTrue(anchors.contains(
138             Anchor.builder().name(ANCHOR_NAME1).schemaSetName(SCHEMA_SET_NAME1).dataspaceName(DATASPACE_NAME).build()
139             ));
140         assertTrue(anchors.contains(
141             Anchor.builder().name(ANCHOR_NAME2).schemaSetName(SCHEMA_SET_NAME2).dataspaceName(DATASPACE_NAME).build()
142             ));
143     }
144
145     @Test(expected = DataspaceNotFoundException.class)
146     @SqlGroup({@Sql(CLEAR_DATA), @Sql(SET_DATA)})
147     public void testGetAnchorsByNonExistingDataspace() {
148         cpsAdminPersistenceService.getAnchors(NON_EXISTING_DATASPACE_NAME);
149     }
150
151     @Test
152     @SqlGroup({@Sql(CLEAR_DATA), @Sql(SET_DATA)})
153     public void testGetAnchorsFromEmptyDataspace() {
154         final Collection<Anchor> anchors = cpsAdminPersistenceService.getAnchors(EMPTY_DATASPACE_NAME);
155
156         assertNotNull(anchors);
157         assertTrue(anchors.isEmpty());
158     }
159
160     @Test
161     @SqlGroup({@Sql(CLEAR_DATA), @Sql(SET_DATA)})
162     public void testGetAnchorByDataspaceAndAnchorName() {
163         final Anchor anchor = cpsAdminPersistenceService.getAnchor(DATASPACE_NAME, ANCHOR_NAME1);
164
165         assertNotNull(anchor);
166         assertEquals(ANCHOR_NAME1, anchor.getName());
167         assertEquals(DATASPACE_NAME, anchor.getDataspaceName());
168     }
169
170     @Test(expected = DataspaceNotFoundException.class)
171     @SqlGroup({@Sql(CLEAR_DATA), @Sql(SET_DATA)})
172     public void testGetAnchorFromNonExistingDataspace() {
173         cpsAdminPersistenceService.getAnchor(NON_EXISTING_DATASPACE_NAME, ANCHOR_NAME1);
174     }
175
176     @Test(expected = AnchorNotFoundException.class)
177     @SqlGroup({@Sql(CLEAR_DATA), @Sql(SET_DATA)})
178     public void testGetAnchorByNonExistingAnchorName() {
179         cpsAdminPersistenceService.getAnchor(DATASPACE_NAME, NON_EXISTING_ANCHOR_NAME);
180     }
181
182 }