001 package org.kuali.student.lum.course.service.impl; 002 003 import java.util.LinkedHashSet; 004 import java.util.List; 005 import java.util.Set; 006 import org.junit.Test; 007 import org.kuali.student.common.dictionary.dto.ObjectStructureDefinition; 008 import org.kuali.student.common.dictionary.service.impl.DictionaryTesterHelper; 009 import org.kuali.student.common.dto.AmountInfo; 010 import org.kuali.student.common.dto.TimeAmountInfo; 011 import org.kuali.student.common.exceptions.OperationFailedException; 012 import org.kuali.student.common.validation.dto.ValidationResultInfo; 013 import org.kuali.student.common.validator.DefaultValidatorImpl; 014 import org.kuali.student.common.validator.ServerDateParser; 015 import org.kuali.student.lum.lu.dto.CluIdentifierInfo; 016 import org.kuali.student.lum.lu.dto.CluInfo; 017 import org.springframework.context.ApplicationContext; 018 import org.springframework.context.support.ClassPathXmlApplicationContext; 019 import static org.junit.Assert.*; 020 021 public class TestCluInfoDictionary 022 { 023 024 @Test 025 public void testLoadCluInfoDictionary () 026 { 027 Set<String> startingClasses = new LinkedHashSet (); 028 startingClasses.add (CluInfo.class.getName ()); 029 // startingClasses.add (CluCluRelationInfo.class.getName ()); 030 String contextFile = "ks-cluInfo-dictionary-context"; 031 String outFile = "target/" + contextFile + ".txt"; 032 DictionaryTesterHelper helper = new DictionaryTesterHelper (outFile, 033 startingClasses, 034 contextFile 035 + ".xml", 036 false); 037 List<String> errors = helper.doTest (); 038 if (errors.size () > 0) 039 { 040 fail ("failed dictionary validation:\n" + formatAsString (errors)); 041 } 042 } 043 044 private String formatAsString (List<String> errors) 045 { 046 int i = 0; 047 StringBuilder builder = new StringBuilder (); 048 for (String error : errors) 049 { 050 i ++; 051 builder.append (i + ". " + error + "\n"); 052 } 053 return builder.toString (); 054 } 055 056 057 @Test 058 public void testCluInfoValidation () throws OperationFailedException 059 { 060 ApplicationContext ac = new ClassPathXmlApplicationContext ( 061 "classpath:ks-cluInfo-dictionary-context.xml"); 062 System.out.println ("h2. Validation Test"); 063 DefaultValidatorImpl val = new DefaultValidatorImpl (); 064 val.setDateParser (new ServerDateParser ()); 065 val.setSearchDispatcher (new MockSearchDispatcher ()); 066 CluInfo info = new CluInfo (); 067 ObjectStructureDefinition os = (ObjectStructureDefinition) ac.getBean ( 068 info.getClass ().getName ()); 069 List<ValidationResultInfo> validationResults = val.validateObject (info, os); 070 System.out.println ("h3. With just a blank CluInfo"); 071 // for (ValidationResultInfo vr : validationResults) 072 // { 073 // System.out.println (vr.getElement () + " " + vr.getMessage ()); 074 // } 075 assertEquals (2, validationResults.size ()); 076 077 // test that we validate substructures 078 info.setOfficialIdentifier (new CluIdentifierInfo ()); 079 validationResults = val.validateObject (info, os); 080 // for (ValidationResultInfo vr : validationResults) 081 // { 082 // System.out.println (vr.getElement () + " " + vr.getMessage ()); 083 // } 084 // should now require type and state of the identifier structure too 085 assertEquals (4, validationResults.size ()); 086 087 088 // test that we can put completely blank timeAmountInfo structures 089 info.setStdDuration (new TimeAmountInfo ()); 090 validationResults = val.validateObject (info, os); 091 // for (ValidationResultInfo vr : validationResults) 092 // { 093 // System.out.println (vr.getElement () + " " + vr.getMessage ()); 094 // } 095 assertEquals (4, validationResults.size ()); 096 097 // test the requires constraint 098 // that requires a durationType if we have a timeQuantity 099 info.getStdDuration ().setTimeQuantity (1); 100 validationResults = val.validateObject (info, os); 101 // for (ValidationResultInfo vr : validationResults) 102 // { 103 // System.out.println (vr.getElement () + " " + vr.getMessage ()); 104 // } 105 assertEquals (6, validationResults.size ()); 106 107 // test that we can put completely blank timeAmountInfo structures 108 info.setIntensity (new AmountInfo ()); 109 validationResults = val.validateObject (info, os); 110 // System.out.println ("validation results adding a blank CluIdentifierInfo"); 111 // for (ValidationResultInfo vr : validationResults) 112 // { 113 // System.out.println (vr.getElement () + " " + vr.getMessage ()); 114 // } 115 assertEquals (6, validationResults.size ()); 116 117 // test the requires constraint 118 // that requires a unity if we have a unitQuantity 119 info.getIntensity ().setUnitQuantity ("1"); 120 validationResults = val.validateObject (info, os); 121 // System.out.println ("validation results adding a blank CluIdentifierInfo"); 122 // for (ValidationResultInfo vr : validationResults) 123 // { 124 // System.out.println (vr.getElement () + " " + vr.getMessage ()); 125 // } 126 assertEquals (8, validationResults.size ()); 127 128 129 } 130 }