package org.apereo.cas.services;
import org.apereo.cas.config.JpaServiceRegistryConfiguration;
import org.apereo.cas.support.oauth.services.OAuthRegisteredService;
import org.apereo.cas.support.saml.services.SamlRegisteredService;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.cloud.autoconfigure.RefreshAutoConfiguration;
import org.springframework.test.context.junit4.SpringRunner;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import static org.junit.Assert.*;
/**
* Handles tests for {@link JpaServiceRegistryDaoImpl}
*
* @author battags
* @since 3.1.0
*/
@RunWith(SpringRunner.class)
@SpringBootTest(classes = {RefreshAutoConfiguration.class, JpaServiceRegistryConfiguration.class})
public class JpaServiceRegistryDaoImplTests {
@Autowired
@Qualifier("serviceRegistryDao")
private ServiceRegistryDao dao;
@Before
public void setUp() {
final List<RegisteredService> services = this.dao.load();
services.forEach(service -> this.dao.delete(service));
}
@Test
public void verifySaveMethodWithNonExistentServiceAndNoAttributes() {
final RegexRegisteredService r = new RegexRegisteredService();
r.setName("test");
r.setServiceId("testId");
r.setTheme("theme");
r.setDescription("description");
r.setPublicKey(new RegisteredServicePublicKeyImpl("classpath:/test.pub", "RSA"));
final RegisteredService r2 = this.dao.save(r);
final RegisteredService r3 = this.dao.findServiceById(r2.getId());
assertEquals(r, r2);
assertEquals(r2, r3);
}
@Test
public void verifySaveAttributeReleasePolicy() {
final RegexRegisteredService r = new RegexRegisteredService();
r.setName("test");
r.setServiceId("testId");
r.setTheme("theme");
r.setDescription("description");
r.setAttributeReleasePolicy(new ReturnAllAttributeReleasePolicy());
final RegisteredService r2 = this.dao.save(r);
final RegisteredService r3 = this.dao.findServiceById(r2.getId());
assertEquals(r, r2);
assertEquals(r2, r3);
assertNotNull(r3.getAttributeReleasePolicy());
assertEquals(r2.getAttributeReleasePolicy(), r3.getAttributeReleasePolicy());
}
@Test
public void verifySaveMethodWithExistingServiceNoAttribute() {
final RegexRegisteredService r = new RegexRegisteredService();
r.setName("test");
r.setServiceId("testId");
r.setTheme("theme");
r.setDescription("description");
this.dao.save(r);
final List<RegisteredService> services = this.dao.load();
final RegisteredService r2 = services.get(0);
r.setId(r2.getId());
this.dao.save(r);
final RegisteredService r3 = this.dao.findServiceById(r.getId());
assertEquals(r, r2);
assertEquals(r.getTheme(), r3.getTheme());
}
@Test
public void verifyRegisteredServiceProperties() {
final RegexRegisteredService r = new RegexRegisteredService();
r.setName("test");
r.setServiceId("testId");
r.setTheme("theme");
r.setDescription("description");
final Map<String, RegisteredServiceProperty> propertyMap = new HashMap<>();
final DefaultRegisteredServiceProperty property = new DefaultRegisteredServiceProperty();
final Set<String> values = new HashSet<>();
values.add("value1");
values.add("value2");
property.setValues(values);
propertyMap.put("field1", property);
final DefaultRegisteredServiceProperty property2 = new DefaultRegisteredServiceProperty();
final Set<String> values2 = new HashSet<>();
values2.add("value1");
values2.add("value2");
property2.setValues(values2);
propertyMap.put("field2", property2);
r.setProperties(propertyMap);
this.dao.save(r);
final RegisteredService r2 = this.dao.load().get(0);
assertEquals(r2.getProperties().size(), 2);
}
@Test
public void verifyOAuthServices() {
final OAuthRegisteredService r = new OAuthRegisteredService();
r.setName("test456");
r.setServiceId("testId");
r.setTheme("theme");
r.setDescription("description");
r.setAttributeReleasePolicy(new ReturnAllAttributeReleasePolicy());
r.setClientId("testoauthservice");
r.setClientSecret("anothertest");
r.setBypassApprovalPrompt(true);
final RegisteredService r2 = this.dao.save(r);
assertEquals(r, r2);
}
@Test
public void verifySamlService() {
final SamlRegisteredService r = new SamlRegisteredService();
r.setName("test345");
r.setServiceId("Testing");
r.setDescription("description");
r.setAttributeReleasePolicy(new ReturnAllAttributeReleasePolicy());
final Map fmt = new HashMap();
fmt.put("key", "value");
r.setAttributeNameFormats(fmt);
r.setMetadataCriteriaDirection("INCLUDE");
r.setMetadataCriteriaRemoveEmptyEntitiesDescriptors(true);
r.setMetadataSignatureLocation("location");
r.setRequiredAuthenticationContextClass("Testing");
final SamlRegisteredService r2 = (SamlRegisteredService) this.dao.save(r);
assertEquals(r, r2);
}
}