001 /**
002 * Copyright 2004-2014 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 }