dynamic forms
This commit is contained in:
parent
8ed10ab503
commit
126384fe30
@ -2,6 +2,11 @@ package org.oneedtech.inspect.oneroster;
|
|||||||
|
|
||||||
import static org.oneedtech.inspect.util.net.HttpMethod.GET;
|
import static org.oneedtech.inspect.util.net.HttpMethod.GET;
|
||||||
|
|
||||||
|
import java.lang.reflect.Field;
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.Set;
|
||||||
|
import java.util.function.Predicate;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
import java.util.stream.IntStream;
|
import java.util.stream.IntStream;
|
||||||
|
|
||||||
import org.oneedtech.inspect.core.MappedJsonInspector;
|
import org.oneedtech.inspect.core.MappedJsonInspector;
|
||||||
@ -9,6 +14,8 @@ import org.oneedtech.inspect.core.schema.TransactionKey;
|
|||||||
import org.oneedtech.inspect.schema.SchemaKeys;
|
import org.oneedtech.inspect.schema.SchemaKeys;
|
||||||
import org.oneedtech.inspect.util.resource.ResourceType;
|
import org.oneedtech.inspect.util.resource.ResourceType;
|
||||||
|
|
||||||
|
import com.google.common.collect.ImmutableSet;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* An Inspector for OneRoster 1.1.
|
* An Inspector for OneRoster 1.1.
|
||||||
*
|
*
|
||||||
@ -17,7 +24,8 @@ import org.oneedtech.inspect.util.resource.ResourceType;
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* TODO - what would make the building of this faster? - Autogen of mapping
|
* TODO - what would make the building of this faster? - Autogen of mapping
|
||||||
* between endpoint/responseCode and schemas TODO - what would make maintenance
|
* between endpoint/responseCode and schemas
|
||||||
|
* TODO - what would make maintenance
|
||||||
* of this faster? - webhooks when schemas are updated
|
* of this faster? - webhooks when schemas are updated
|
||||||
*/
|
*/
|
||||||
public class OneRoster11Inspector extends MappedJsonInspector {
|
public class OneRoster11Inspector extends MappedJsonInspector {
|
||||||
@ -31,14 +39,15 @@ public class OneRoster11Inspector extends MappedJsonInspector {
|
|||||||
public Builder() {
|
public Builder() {
|
||||||
super();
|
super();
|
||||||
set(ResourceType.JSON) // ?refine needed?
|
set(ResourceType.JSON) // ?refine needed?
|
||||||
// add default tests
|
// add default tests
|
||||||
.add(TransactionKeys.ACADEMIC_SESSIONS_GET_200, SchemaKeys.OR_11_GETALLACADEMICSESSIONS_11_JSON)
|
//TODO autogen matter:
|
||||||
.add(TransactionKeys.CLASSES_GET_200, SchemaKeys.OR_11_GETALLCLASSES_11_JSON)
|
.add(TransactionKeys.GET_ALL_ACADEMIC_SESSIONS_200, SchemaKeys.OR_11_GETALLACADEMICSESSIONS_11_JSON)
|
||||||
.add(TransactionKeys.COURSES_GET_200, SchemaKeys.OR_11_GETALLCOURSES_11_JSON)
|
.add(TransactionKeys.GET_ALL_CLASSES_200, SchemaKeys.OR_11_GETALLCLASSES_11_JSON)
|
||||||
.add(TransactionKeys.DEMOGRAPHICS_GET_200, SchemaKeys.OR_11_GETALLDEMOGRAPHICS_11_JSON)
|
.add(TransactionKeys.GET_ALL_COURSES_200, SchemaKeys.OR_11_GETALLCOURSES_11_JSON)
|
||||||
.add(TransactionKeys.ENROLLMENTS_GET_200, SchemaKeys.OR_11_GETALLENROLLMENTS_11_JSON)
|
.add(TransactionKeys.GET_ALL_DEMOGRAPHICS_200, SchemaKeys.OR_11_GETALLDEMOGRAPHICS_11_JSON)
|
||||||
.add(TransactionKeys.ORGS_GET_200, SchemaKeys.OR_11_GETALLORGS_11_JSON)
|
.add(TransactionKeys.GET_ALL_ENROLLMENTS_200, SchemaKeys.OR_11_GETALLENROLLMENTS_11_JSON)
|
||||||
.add(TransactionKeys.USERS_GET_200, SchemaKeys.OR_11_GETALLUSERS_11_JSON);
|
.add(TransactionKeys.GET_ALL_ORGS_200, SchemaKeys.OR_11_GETALLORGS_11_JSON)
|
||||||
|
.add(TransactionKeys.GET_ALL_USERS_200, SchemaKeys.OR_11_GETALLUSERS_11_JSON);
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
@ -52,15 +61,16 @@ public class OneRoster11Inspector extends MappedJsonInspector {
|
|||||||
private static final int[] OK = new int[] { 200 };
|
private static final int[] OK = new int[] { 200 };
|
||||||
@SuppressWarnings("unused")
|
@SuppressWarnings("unused")
|
||||||
private static final int[] ERR = IntStream.range(400, 500).toArray();
|
private static final int[] ERR = IntStream.range(400, 500).toArray();
|
||||||
|
//TODO autogen matter:
|
||||||
|
public static final TransactionKey GET_ALL_ACADEMIC_SESSIONS_200 = new TransactionKey("getAllAcademicSessions", GET, "/academicSessions", OK);
|
||||||
|
public static final TransactionKey GET_ALL_CLASSES_200 = new TransactionKey("getAllClasses", GET, "/classes", OK);
|
||||||
|
public static final TransactionKey GET_ALL_COURSES_200 = new TransactionKey("getAllCourses", GET, "/courses", OK);
|
||||||
|
public static final TransactionKey GET_ALL_DEMOGRAPHICS_200 = new TransactionKey("getAllDemographics", GET, "/demographics", OK);
|
||||||
|
public static final TransactionKey GET_ALL_ENROLLMENTS_200 = new TransactionKey("getAllEnrollments", GET, "/enrollments", OK);
|
||||||
|
public static final TransactionKey GET_ALL_ORGS_200 = new TransactionKey("getAllOrgs", GET, "/orgs", OK);
|
||||||
|
public static final TransactionKey GET_ALL_USERS_200 = new TransactionKey("getAllUsers", GET, "/users", OK);
|
||||||
|
|
||||||
public static final TransactionKey ACADEMIC_SESSIONS_GET_200 = new TransactionKey(GET, "/academicSessions", OK);
|
|
||||||
public static final TransactionKey CLASSES_GET_200 = new TransactionKey(GET, "/classes", OK);
|
|
||||||
public static final TransactionKey COURSES_GET_200 = new TransactionKey(GET, "/courses", OK);
|
|
||||||
public static final TransactionKey DEMOGRAPHICS_GET_200 = new TransactionKey(GET, "/demographics", OK);
|
|
||||||
public static final TransactionKey ENROLLMENTS_GET_200 = new TransactionKey(GET, "/enrollments", OK);
|
|
||||||
public static final TransactionKey ORGS_GET_200 = new TransactionKey(GET, "/orgs", OK);
|
|
||||||
public static final TransactionKey USERS_GET_200 = new TransactionKey(GET, "/users", OK);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// private static final Logger logger = LogManager.getLogger();
|
// private static final Logger logger = LogManager.getLogger();
|
||||||
|
@ -5,11 +5,17 @@ import static org.junit.jupiter.api.Assertions.assertFalse;
|
|||||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||||
import static org.oneedtech.inspect.core.probe.Outcome.ERROR;
|
import static org.oneedtech.inspect.core.probe.Outcome.ERROR;
|
||||||
import static org.oneedtech.inspect.core.probe.Outcome.WARNING;
|
import static org.oneedtech.inspect.core.probe.Outcome.WARNING;
|
||||||
import static org.oneedtech.inspect.oneroster.OneRoster11Inspector.TransactionKeys.ACADEMIC_SESSIONS_GET_200;
|
import static org.oneedtech.inspect.oneroster.OneRoster11Inspector.TransactionKeys.GET_ALL_ACADEMIC_SESSIONS_200;
|
||||||
import static org.oneedtech.inspect.oneroster.Samples.OR11.AS678;
|
import static org.oneedtech.inspect.oneroster.Samples.OR11.AS678;
|
||||||
import static org.oneedtech.inspect.oneroster.Samples.OR11.AS678I;
|
import static org.oneedtech.inspect.oneroster.Samples.OR11.AS678I;
|
||||||
import static org.oneedtech.inspect.oneroster.Samples.OR11.D198;
|
import static org.oneedtech.inspect.oneroster.Samples.OR11.D198;
|
||||||
import static org.oneedtech.inspect.test.Assertions.*;
|
import static org.oneedtech.inspect.test.Assertions.assertErrorCount;
|
||||||
|
import static org.oneedtech.inspect.test.Assertions.assertFatalCount;
|
||||||
|
import static org.oneedtech.inspect.test.Assertions.assertHasOnlyErrors;
|
||||||
|
import static org.oneedtech.inspect.test.Assertions.assertInvalid;
|
||||||
|
import static org.oneedtech.inspect.test.Assertions.assertNotRun;
|
||||||
|
import static org.oneedtech.inspect.test.Assertions.assertNotRunCount;
|
||||||
|
import static org.oneedtech.inspect.test.Assertions.assertValid;
|
||||||
import static org.oneedtech.inspect.test.Sample.fieldsToList;
|
import static org.oneedtech.inspect.test.Sample.fieldsToList;
|
||||||
import static org.oneedtech.inspect.util.net.HttpMethod.GET;
|
import static org.oneedtech.inspect.util.net.HttpMethod.GET;
|
||||||
|
|
||||||
@ -17,6 +23,7 @@ import java.util.Collection;
|
|||||||
import java.util.LinkedHashMap;
|
import java.util.LinkedHashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.Set;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
@ -31,6 +38,7 @@ import org.oneedtech.inspect.core.probe.json.JsonPropertyPredicateProbe;
|
|||||||
import org.oneedtech.inspect.core.probe.json.JsonPropertyPresentProbe;
|
import org.oneedtech.inspect.core.probe.json.JsonPropertyPresentProbe;
|
||||||
import org.oneedtech.inspect.core.report.Report;
|
import org.oneedtech.inspect.core.report.Report;
|
||||||
import org.oneedtech.inspect.core.report.ReportItems;
|
import org.oneedtech.inspect.core.report.ReportItems;
|
||||||
|
import org.oneedtech.inspect.core.schema.TransactionKey;
|
||||||
import org.oneedtech.inspect.test.Sample;
|
import org.oneedtech.inspect.test.Sample;
|
||||||
import org.oneedtech.inspect.util.resource.Resource;
|
import org.oneedtech.inspect.util.resource.Resource;
|
||||||
import org.oneedtech.inspect.util.resource.StringResource;
|
import org.oneedtech.inspect.util.resource.StringResource;
|
||||||
@ -104,11 +112,20 @@ class OneRoster11Tests {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testTransactionKeys() throws Exception {
|
||||||
|
Collection<TransactionKey> coll = TransactionKey.toMap( OneRoster11Inspector.TransactionKeys.class).values();
|
||||||
|
assertTrue(coll.size() > 0);
|
||||||
|
|
||||||
|
List<String> strings = TransactionKey.toMap(OneRoster11Inspector.TransactionKeys.class).values().stream().map(k->k.toString()).toList();
|
||||||
|
assertTrue(strings.size() > 0);
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void testAllSamples() throws Exception {
|
void testAllSamples() throws Exception {
|
||||||
List<Sample> input = fieldsToList(Samples.OR11.class.getFields());
|
List<Sample> input = fieldsToList(Samples.OR11.class.getFields());
|
||||||
|
|
||||||
for(Sample sample : input) {
|
for(Sample sample : input) {
|
||||||
String body = sample.asString();
|
String body = sample.asString();
|
||||||
String endPoint = sample.getTransactionKey().orElseThrow().getEndpoint();
|
String endPoint = sample.getTransactionKey().orElseThrow().getEndpoint();
|
||||||
int code = sample.getTransactionKey().orElseThrow().getStatusCodes()[0];
|
int code = sample.getTransactionKey().orElseThrow().getStatusCodes()[0];
|
||||||
@ -137,21 +154,21 @@ class OneRoster11Tests {
|
|||||||
//.set(OneRoster11Inspector.TransactionKeys.ACADEMIC_SESSIONS_GET_200)
|
//.set(OneRoster11Inspector.TransactionKeys.ACADEMIC_SESSIONS_GET_200)
|
||||||
|
|
||||||
//this one succeeds
|
//this one succeeds
|
||||||
.add(ACADEMIC_SESSIONS_GET_200, new JsonPropertyPresentProbe("$.academicSessions[*]", "status",
|
.add(GET_ALL_ACADEMIC_SESSIONS_200, new JsonPropertyPresentProbe("$.academicSessions[*]", "status",
|
||||||
"You really should include status", WARNING))
|
"You really should include status", WARNING))
|
||||||
//this one warns
|
//this one warns
|
||||||
.add(ACADEMIC_SESSIONS_GET_200, new JsonPropertyPresentProbe("$.academicSessions[*]", "foo",
|
.add(GET_ALL_ACADEMIC_SESSIONS_200, new JsonPropertyPresentProbe("$.academicSessions[*]", "foo",
|
||||||
"Think again about including foo", WARNING))
|
"Think again about including foo", WARNING))
|
||||||
//this one errors
|
//this one errors
|
||||||
.add(ACADEMIC_SESSIONS_GET_200, new JsonPropertyPredicateProbe("$.academicSessions[*].status",
|
.add(GET_ALL_ACADEMIC_SESSIONS_200, new JsonPropertyPredicateProbe("$.academicSessions[*].status",
|
||||||
JsonPredicates.valueEquals("foo"),
|
JsonPredicates.valueEquals("foo"),
|
||||||
"The status field does not have expected value 'foo'", ERROR))
|
"The status field does not have expected value 'foo'", ERROR))
|
||||||
//this one warns
|
//this one warns
|
||||||
.add(ACADEMIC_SESSIONS_GET_200, new JsonPropertyPredicateProbe("$.academicSessions[*].type",
|
.add(GET_ALL_ACADEMIC_SESSIONS_200, new JsonPropertyPredicateProbe("$.academicSessions[*].type",
|
||||||
JsonPredicates.valueMatches(Pattern.compile("(foo|bar)")),
|
JsonPredicates.valueMatches(Pattern.compile("(foo|bar)")),
|
||||||
"The type field should have either of the values 'foo' or 'bar'", WARNING))
|
"The type field should have either of the values 'foo' or 'bar'", WARNING))
|
||||||
//this one succeeds
|
//this one succeeds
|
||||||
.add(ACADEMIC_SESSIONS_GET_200, new MyCustomTest())
|
.add(GET_ALL_ACADEMIC_SESSIONS_200, new MyCustomTest())
|
||||||
|
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
|
@ -1,12 +1,6 @@
|
|||||||
package org.oneedtech.inspect.oneroster;
|
package org.oneedtech.inspect.oneroster;
|
||||||
|
|
||||||
import static org.oneedtech.inspect.oneroster.OneRoster11Inspector.TransactionKeys.ACADEMIC_SESSIONS_GET_200;
|
import static org.oneedtech.inspect.oneroster.OneRoster11Inspector.TransactionKeys.*;
|
||||||
import static org.oneedtech.inspect.oneroster.OneRoster11Inspector.TransactionKeys.CLASSES_GET_200;
|
|
||||||
import static org.oneedtech.inspect.oneroster.OneRoster11Inspector.TransactionKeys.COURSES_GET_200;
|
|
||||||
import static org.oneedtech.inspect.oneroster.OneRoster11Inspector.TransactionKeys.DEMOGRAPHICS_GET_200;
|
|
||||||
import static org.oneedtech.inspect.oneroster.OneRoster11Inspector.TransactionKeys.ENROLLMENTS_GET_200;
|
|
||||||
import static org.oneedtech.inspect.oneroster.OneRoster11Inspector.TransactionKeys.ORGS_GET_200;
|
|
||||||
import static org.oneedtech.inspect.oneroster.OneRoster11Inspector.TransactionKeys.USERS_GET_200;
|
|
||||||
|
|
||||||
import org.oneedtech.inspect.test.Sample;
|
import org.oneedtech.inspect.test.Sample;
|
||||||
|
|
||||||
@ -14,23 +8,23 @@ public class Samples {
|
|||||||
|
|
||||||
public static final class OR11 {
|
public static final class OR11 {
|
||||||
//valid
|
//valid
|
||||||
public static final Sample AS678 = new Sample("or11/1574845678/academicSessions.json", true, ACADEMIC_SESSIONS_GET_200);
|
public static final Sample AS678 = new Sample("or11/1574845678/academicSessions.json", true, GET_ALL_ACADEMIC_SESSIONS_200);
|
||||||
public static final Sample CL678 = new Sample("or11/1574845678/classes.json", true, CLASSES_GET_200);
|
public static final Sample CL678 = new Sample("or11/1574845678/classes.json", true, GET_ALL_CLASSES_200);
|
||||||
public static final Sample CO678 = new Sample("or11/1574845678/courses.json", true, COURSES_GET_200);
|
public static final Sample CO678 = new Sample("or11/1574845678/courses.json", true, GET_ALL_COURSES_200);
|
||||||
public static final Sample EN678 = new Sample("or11/1574845678/enrollments.json", true, ENROLLMENTS_GET_200);
|
public static final Sample EN678 = new Sample("or11/1574845678/enrollments.json", true, GET_ALL_ENROLLMENTS_200);
|
||||||
public static final Sample OR678 = new Sample("or11/1574845678/orgs.json", true, ORGS_GET_200);
|
public static final Sample OR678 = new Sample("or11/1574845678/orgs.json", true, GET_ALL_ORGS_200);
|
||||||
public static final Sample US678 = new Sample("or11/1574845678/users.json", true, USERS_GET_200);
|
public static final Sample US678 = new Sample("or11/1574845678/users.json", true, GET_ALL_USERS_200);
|
||||||
public static final Sample AS198 = new Sample("or11/1598444198/academicSessions.json",true, ACADEMIC_SESSIONS_GET_200);
|
public static final Sample AS198 = new Sample("or11/1598444198/academicSessions.json",true, GET_ALL_ACADEMIC_SESSIONS_200);
|
||||||
public static final Sample CL198 = new Sample("or11/1598444198/classes.json", true, CLASSES_GET_200);
|
public static final Sample CL198 = new Sample("or11/1598444198/classes.json", true, GET_ALL_CLASSES_200);
|
||||||
public static final Sample CO198 = new Sample("or11/1598444198/courses.json", true, COURSES_GET_200);
|
public static final Sample CO198 = new Sample("or11/1598444198/courses.json", true, GET_ALL_COURSES_200);
|
||||||
public static final Sample OR198 = new Sample("or11/1598444198/orgs.json", true, ORGS_GET_200);
|
public static final Sample OR198 = new Sample("or11/1598444198/orgs.json", true, GET_ALL_ORGS_200);
|
||||||
public static final Sample US198 = new Sample("or11/1598444198/users.json", true, USERS_GET_200);
|
public static final Sample US198 = new Sample("or11/1598444198/users.json", true, GET_ALL_USERS_200);
|
||||||
|
|
||||||
//invalid
|
//invalid
|
||||||
public static final Sample AS678I = new Sample("or11/1574845678/academicSessions-invalid.json", false, ACADEMIC_SESSIONS_GET_200);
|
public static final Sample AS678I = new Sample("or11/1574845678/academicSessions-invalid.json", false, GET_ALL_ACADEMIC_SESSIONS_200);
|
||||||
//TODO which is correct, schema or sample? demographics "true" vs boolean
|
//TODO which is correct, schema or sample? demographics "true" vs boolean
|
||||||
public static final Sample D678I = new Sample("or11/1574845678/demographics.json", false, DEMOGRAPHICS_GET_200);
|
public static final Sample D678I = new Sample("or11/1574845678/demographics.json", false, GET_ALL_DEMOGRAPHICS_200);
|
||||||
public static final Sample D198 = new Sample("or11/1598444198/demographics.json", false, DEMOGRAPHICS_GET_200);
|
public static final Sample D198 = new Sample("or11/1598444198/demographics.json", false, GET_ALL_DEMOGRAPHICS_200);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user