View Javadoc
1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one
3    * or more contributor license agreements.  See the NOTICE file
4    * distributed with this work for additional information
5    * regarding copyright ownership.  The ASF licenses this file
6    * to you under the Apache License, Version 2.0 (the
7    * "License"); you may not use this file except in compliance
8    * with the License.  You may obtain a copy of the License at
9    *
10   *   http://www.apache.org/licenses/LICENSE-2.0
11   *
12   * Unless required by applicable law or agreed to in writing,
13   * software distributed under the License is distributed on an
14   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15   * KIND, either express or implied.  See the License for the
16   * specific language governing permissions and limitations
17   * under the License.
18   */
19  package org.apache.syncope.core.persistence.jpa.inner;
20  
21  import static org.junit.jupiter.api.Assertions.assertEquals;
22  import static org.junit.jupiter.api.Assertions.assertNotNull;
23  import static org.junit.jupiter.api.Assertions.assertNull;
24  import static org.junit.jupiter.api.Assertions.assertTrue;
25  import static org.junit.jupiter.api.Assertions.fail;
26  
27  import java.time.OffsetDateTime;
28  import java.util.List;
29  import java.util.Set;
30  import java.util.UUID;
31  import org.apache.syncope.common.lib.types.EntityViolationType;
32  import org.apache.syncope.common.lib.types.ResourceOperation;
33  import org.apache.syncope.common.lib.types.TaskType;
34  import org.apache.syncope.core.persistence.api.attrvalue.validation.InvalidEntityException;
35  import org.apache.syncope.core.persistence.api.dao.AnyTypeDAO;
36  import org.apache.syncope.core.persistence.api.dao.RemediationDAO;
37  import org.apache.syncope.core.persistence.api.dao.TaskDAO;
38  import org.apache.syncope.core.persistence.api.entity.Remediation;
39  import org.apache.syncope.core.persistence.api.entity.task.PullTask;
40  import org.apache.syncope.core.persistence.jpa.AbstractTest;
41  import org.junit.jupiter.api.Test;
42  import org.springframework.beans.factory.annotation.Autowired;
43  import org.springframework.transaction.annotation.Transactional;
44  
45  @Transactional("Master")
46  public class RemediationTest extends AbstractTest {
47  
48      @Autowired
49      private RemediationDAO remediationDAO;
50  
51      @Autowired
52      private AnyTypeDAO anyTypeDAO;
53  
54      @Autowired
55      private TaskDAO taskDAO;
56  
57      @Test
58      public void findAll() {
59          List<Remediation> remediations = remediationDAO.findAll(null, null, 1, 1, List.of());
60          assertTrue(remediations.isEmpty());
61      }
62  
63      @Test
64      public void createMissingPayload() {
65          Remediation remediation = entityFactory.newEntity(Remediation.class);
66          remediation.setAnyType(anyTypeDAO.find("PRINTER"));
67          remediation.setOperation(ResourceOperation.CREATE);
68          remediation.setError("Error");
69          remediation.setInstant(OffsetDateTime.now());
70          remediation.setRemoteName("remote");
71          remediation.setPullTask((PullTask) taskDAO.find(TaskType.PULL, "38abbf9e-a1a3-40a1-a15f-7d0ac02f47f1"));
72  
73          // missing payload
74          try {
75              remediationDAO.save(remediation);
76              fail("This should not happen");
77          } catch (InvalidEntityException e) {
78              Set<EntityViolationType> violations = e.getViolations().values().iterator().next();
79              assertEquals(2, violations.size());
80              assertTrue(violations.stream().allMatch(violation -> violation.getPropertyPath().equals("payload")));
81          }
82      }
83  
84      @Test
85      public void createWrongPayload() {
86          Remediation remediation = entityFactory.newEntity(Remediation.class);
87          remediation.setAnyType(anyTypeDAO.find("PRINTER"));
88          remediation.setOperation(ResourceOperation.CREATE);
89          remediation.setError("Error");
90          remediation.setInstant(OffsetDateTime.now());
91          remediation.setRemoteName("remote");
92          remediation.setPullTask((PullTask) taskDAO.find(TaskType.PULL, "38abbf9e-a1a3-40a1-a15f-7d0ac02f47f1"));
93          remediation.setPayload(UUID.randomUUID().toString());
94  
95          // wrong payload for operation
96          try {
97              remediationDAO.save(remediation);
98              fail("This should not happen");
99          } catch (InvalidEntityException e) {
100             Set<EntityViolationType> violations = e.getViolations().values().iterator().next();
101             assertEquals(1, violations.size());
102             assertTrue(violations.stream().anyMatch(violation -> violation.getPropertyPath().equals("payload")));
103         }
104     }
105 
106     @Test
107     public void create() {
108         Remediation remediation = entityFactory.newEntity(Remediation.class);
109         remediation.setAnyType(anyTypeDAO.find("PRINTER"));
110         remediation.setOperation(ResourceOperation.CREATE);
111         remediation.setError("Error");
112         remediation.setInstant(OffsetDateTime.now());
113         remediation.setRemoteName("remote");
114         remediation.setPullTask((PullTask) taskDAO.find(TaskType.PULL, "38abbf9e-a1a3-40a1-a15f-7d0ac02f47f1"));
115         remediation.setPayload(UUID.randomUUID().toString());
116         remediation.setOperation(ResourceOperation.DELETE);
117 
118         remediation = remediationDAO.save(remediation);
119         assertNotNull(remediation.getKey());
120         assertNotNull(remediation.getPullTask());
121 
122         taskDAO.delete(remediation.getPullTask());
123 
124         entityManager().flush();
125 
126         remediation = remediationDAO.find(remediation.getKey());
127         assertNull(remediation.getPullTask());
128     }
129 }