/** * Licensed to Apereo under one or more contributor license agreements. See the NOTICE file * distributed with this work for additional information regarding copyright ownership. Apereo * licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use * this file except in compliance with the License. You may obtain a copy of the License at the * following location: * * <p>http://www.apache.org/licenses/LICENSE-2.0 * * <p>Unless required by applicable law or agreed to in writing, software distributed under the * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing permissions and * limitations under the License. */ package org.apereo.portal.io; import java.util.HashMap; import java.util.Map; import junit.framework.TestCase; import org.danann.cernunnos.Attributes; import org.danann.cernunnos.Task; import org.danann.cernunnos.runtime.ScriptRunner; import org.dom4j.Node; import org.dom4j.io.SAXReader; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.core.io.Resource; public class ImportTest extends TestCase { // Instance Members. private ApplicationContext ctx; private final ScriptRunner runner = new ScriptRunner(); private Map<String, Task> importTasks; private final SAXReader sax = new SAXReader(); @Override public void setUp() throws Exception { // We're going to use this app context in many ways... ctx = new ClassPathXmlApplicationContext("org/apereo/portal/io/applicationContext.xml"); // The tasks... this.importTasks = (Map<String, Task>) ctx.getBean("importTasks"); } public void testImportEntityTypes() throws Exception { final MockEntityTypesSingleton mock = (MockEntityTypesSingleton) ctx.getBean("mockEntityTypesSingleton"); Resource[] entityTypes = ctx.getResources("classpath:/org/apereo/portal/io/resources/**/*.entity-type"); for (Resource et : entityTypes) { // Parse the Element and retrieve the associated Task... final Node n = sax.read(et.getInputStream()).getRootElement(); final String importScript = n.valueOf("@script"); final Task k = importTasks.get(importScript); // Figure out what the type/description should be... final Class<?> type = Class.forName(n.valueOf("name")); final String desc = n.valueOf("desc-name"); if (k == null) { fail( "There is no importTask defined for this entity:" + "\n\tscriptLocation=" + importScript + "\n\tentityDocument=" + et.getURL().toExternalForm()); } else { final Map<String, Object> req = new HashMap<String, Object>(); req.put(Attributes.NODE, n); runner.run(k, req); if (!mock.wasLast(type, desc)) { final StringBuilder bldr = new StringBuilder(); bldr.append("Test of import file '") .append(et.getURL().toExternalForm()) .append("' failed; type='") .append(type.getName()) .append("' desc='") .append(desc) .append("'"); fail(bldr.toString()); } } } } /* * Nested Types. */ public static final class MockEntityTypesSingleton { private Class<?> lastType; private String lastDescription; public void addEntityTypeIfNecessary(final Class<?> clazz, final String description) { this.lastType = clazz; this.lastDescription = description; } public boolean wasLast(final Class<?> clazz, final String description) { return clazz.equals(lastType) && description.equals(lastDescription); } } }