001    /**
002     * Copyright 2004-2013 The Kuali Foundation
003     *
004     * Licensed under the Educational Community License, Version 2.0 (the "License");
005     * you may not use this file except in compliance with the License.
006     * You may obtain a copy of the License at
007     *
008     * http://www.opensource.org/licenses/ecl2.php
009     *
010     * Unless required by applicable law or agreed to in writing, software
011     * distributed under the License is distributed on an "AS IS" BASIS,
012     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013     * See the License for the specific language governing permissions and
014     * limitations under the License.
015     */
016    /*
017     * To change this template, choose Tools | Templates
018     * and open the template in the editor.
019     */
020    package org.kuali.student.contract.model.impl;
021    
022    import org.kuali.student.contract.model.MessageStructure;
023    import org.kuali.student.contract.model.Service;
024    import org.kuali.student.contract.model.ServiceContractModel;
025    import org.kuali.student.contract.model.ServiceMethod;
026    import org.kuali.student.contract.model.ServiceMethodParameter;
027    import org.kuali.student.contract.model.XmlType;
028    import org.kuali.student.contract.model.util.MessageStructureDumper;
029    import org.kuali.student.contract.model.validation.ServiceContractModelValidator;
030    import org.kuali.student.validation.decorator.mojo.ValidationDecoratorWriterForOneService;
031    import org.slf4j.Logger;
032    import org.slf4j.LoggerFactory;
033    
034    import java.util.ArrayList;
035    import java.util.Collection;
036    import java.util.List;
037    
038    import org.junit.After;
039    import org.junit.AfterClass;
040    import org.junit.Before;
041    import org.junit.BeforeClass;
042    import org.junit.Test;
043    
044    import static org.junit.Assert.*;
045    
046    /**
047     *
048     * @author nwright
049     */
050    public class ServiceContractModelPescXsdLoaderTest {
051        
052        private static Logger log = LoggerFactory.getLogger(ServiceContractModelPescXsdLoaderTest.class);
053        
054    
055        public ServiceContractModelPescXsdLoaderTest() {
056        }
057    
058        @BeforeClass
059        public static void setUpClass() throws Exception {
060        }
061    
062        @AfterClass
063        public static void tearDownClass() throws Exception {
064        }
065    
066        @Before
067        public void setUp() {
068        }
069    
070        @After
071        public void tearDown() {
072        }
073        private static final String RESOURCES_DIRECTORY =
074                //                             "C:/svn/student/ks-core/ks-core-api/src/main/java";
075                "src/main/resources";
076        private static final String PESC_DIRECTORY =
077                RESOURCES_DIRECTORY + "/pesc";
078        private static final String PESC_CORE_MAIN = PESC_DIRECTORY + "/CoreMain.xsd";
079        private static final String PESC_ACAD_REC = PESC_DIRECTORY + "/AcademicRecord_v1.5.0.xsd";
080        private static final String PESC_COLL_TRANS = PESC_DIRECTORY + "/CollegeTranscript_v1.2.0.xsd";
081    
082        private ServiceContractModel getModel() {
083            List<String> xsdFileNames = new ArrayList();
084    //        xsdFileNames.add(PESC_CORE_MAIN);
085    //        xsdFileNames.add(PESC_ACAD_REC);
086            xsdFileNames.add(PESC_COLL_TRANS);
087            ServiceContractModel instance = new ServiceContractModelPescXsdLoader(xsdFileNames);
088            instance = new ServiceContractModelCache(instance);
089            validate(instance);
090            return instance;
091        }
092    
093        private String dump(ServiceMethod method) {
094            StringBuilder bldr = new StringBuilder();
095            bldr.append(method.getName());
096            String comma = "";
097            bldr.append("(");
098            for (ServiceMethodParameter param : method.getParameters()) {
099                bldr.append(comma);
100                comma = ", ";
101                bldr.append(param.getType());
102                bldr.append(" ");
103                bldr.append(param.getName());
104            }
105            bldr.append(")");
106            return bldr.toString();
107        }
108    
109        private void validate(ServiceContractModel model) {
110            Collection<String> errors =
111                    new ServiceContractModelValidator(model).validate();
112            if (errors.size() > 0) {
113                StringBuilder buf = new StringBuilder();
114                buf.append(errors.size()).append(" errors found while validating the data.");
115                int cnt = 0;
116                for (String msg : errors) {
117                    cnt++;
118                    buf.append("\n");
119                    buf.append("*error*").append(cnt).append(":").append(msg);
120                }
121    
122                fail(buf.toString());
123            }
124        }
125    
126        /**
127         * Test of getServiceMethods method, of class ServiceContractModelQDoxLoader.
128         */
129        @Test
130        public void testGetServiceMethods() {
131            log.info("getServiceMethods");
132            ServiceContractModel model = getModel();
133            List<ServiceMethod> result = model.getServiceMethods();
134            log.info("Number of methods=" + result.size());
135            for (ServiceMethod method : result) {
136                log.info(dump(method));
137            }
138            if (result.size() < 1) {
139                fail("too few: " + result.size());
140            }
141        }
142    
143        /**
144         * Test of getSourceNames method, of class ServiceContractModelQDoxLoader.
145         */
146        @Test
147        public void testGetSourceNames() {
148            log.info("getSourceNames");
149            ServiceContractModel model = getModel();
150            List<String> expResult = new ArrayList();
151            expResult.add(PESC_COLL_TRANS);
152            List result = model.getSourceNames();
153            assertEquals(expResult, result);
154        }
155    
156        /**
157         * Test of getServices method, of class ServiceContractModelQDoxLoader.
158         */
159        @Test
160        public void testGetServices() {
161            log.info("getServices");
162            ServiceContractModel model = getModel();
163            List<Service> result = model.getServices();
164            assertEquals(1, result.size());
165            for (Service service : result) {
166                log.info(service.getKey() + " " + service.getName() + " "
167                        + service.getVersion() + " " + service.getStatus()
168                        + " " + service.getComments()
169                        + " " + service.getUrl());
170            }
171        }
172    
173        /**
174         * Test of getXmlTypes method, of class ServiceContractModelQDoxLoader.
175         */
176        @Test
177        public void testGetXmlTypes() {
178            log.info("getXmlTypes");
179            ServiceContractModel model = getModel();
180            List<XmlType> result = model.getXmlTypes();
181            if (result.size() < 10) {
182                fail("too few: " + result.size());
183            }
184        }
185    
186        /**
187         * Test of getMessageStructures method, of class ServiceContractModelQDoxLoader.
188         */
189        @Test
190        public void testGetMessageStructures() {
191            log.info("getMessageStructures");
192            ServiceContractModel model = getModel();
193            List<MessageStructure> result = model.getMessageStructures();
194            if (result.size() < 10) {
195                fail("too few: " + result.size());
196            }
197            for (MessageStructure ms : result) {
198                new MessageStructureDumper(ms, System.out).dump();
199            }
200        }
201    }