/**
* =============================================================================
*
* ORCID (R) Open Source
* http://orcid.org
*
* Copyright (c) 2012-2014 ORCID, Inc.
* Licensed under an MIT-Style License (MIT)
* http://orcid.org/open-source-license
*
* This copyright and license information (including a link to the full license)
* shall be included in its entirety in all copies or substantial portion of
* the software.
*
* =============================================================================
*/
package org.orcid.core.manager;
import static org.junit.Assert.*;
import java.io.IOException;
import java.util.List;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.junit.Test;
import org.orcid.core.manager.impl.IdentityProviderManagerImpl;
import org.orcid.persistence.jpa.entities.IdentityProviderEntity;
import org.orcid.persistence.jpa.entities.IdentityProviderNameEntity;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.xml.sax.SAXException;
/**
*
* @author Will Simpson
*
*/
public class IdentityProviderManagerTest {
private IdentityProviderManager identityProviderManager = new IdentityProviderManagerImpl();
@Test
public void testCreateEntityFromXml() throws SAXException, IOException, ParserConfigurationException {
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
dbFactory.setNamespaceAware(true);
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(getClass().getResourceAsStream("example_idp.xml"));
Element idpElement = doc.getDocumentElement();
IdentityProviderEntity result = identityProviderManager.createEntityFromXml(idpElement);
assertNotNull(result);
assertEquals("https://idp.example.ch/idp/shibboleth", result.getProviderid());
List<IdentityProviderNameEntity> names = result.getNames();
assertNotNull(names);
assertEquals(4, names.size());
Map<String, IdentityProviderNameEntity> mapByLang = names.stream().collect(Collectors.toMap(IdentityProviderNameEntity::getLang, Function.identity()));
assertEquals("Universität Example Display", mapByLang.get("de").getDisplayName());
assertEquals("University of Example Display", mapByLang.get("en").getDisplayName());
assertEquals("Université de Example Display", mapByLang.get("fr").getDisplayName());
assertEquals("Università di Example Display", mapByLang.get("it").getDisplayName());
assertEquals("Universität Example Display", result.getDisplayName());
assertEquals("support@example.ch", result.getSupportEmail());
assertNull(result.getAdminEmail());
assertEquals("technical@example.ch", result.getTechEmail());
}
@Test
public void testCreateEntityFromXmlWithLegacyNames() throws SAXException, IOException, ParserConfigurationException {
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
dbFactory.setNamespaceAware(true);
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(getClass().getResourceAsStream("example_idp_legacy.xml"));
Element idpElement = doc.getDocumentElement();
IdentityProviderEntity result = identityProviderManager.createEntityFromXml(idpElement);
assertNotNull(result);
assertEquals("https://registry.shibboleth.example.ac.uk/idp", result.getProviderid());
List<IdentityProviderNameEntity> names = result.getNames();
assertNotNull(names);
assertEquals(1, names.size());
IdentityProviderNameEntity name = names.get(0);
assertEquals("University of Example Display", name.getDisplayName());
assertEquals("en", name.getLang());
assertEquals("University of Example Display", result.getDisplayName());
assertEquals("help@it.example.ac.uk", result.getSupportEmail());
assertEquals("admin@it.example.ac.uk", result.getAdminEmail());
assertEquals("sysdev@it.example.ac.uk", result.getTechEmail());
}
}