55
66using Finos . Fdc3 . Context ;
77using Finos . Fdc3 . NewtonsoftJson . Serialization ;
8+ using Json . Schema ;
89using Newtonsoft . Json ;
9- using Newtonsoft . Json . Linq ;
10- using Newtonsoft . Json . Schema ;
1110using System . Reflection ;
11+ using System . Text . Json . Nodes ;
1212
1313namespace Finos . Fdc3 . NewtonsoftJson . Tests . Context ;
1414
1515public abstract class ContextSchemaTest
1616{
17- protected JSchema ? Schema { get ; private set ; }
17+ protected JsonSchema ? Schema { get ; private set ; }
1818 protected string SchemaUrl { get ; private set ; }
1919 protected JsonSerializerSettings SerializerSettings { get ; }
2020
@@ -26,13 +26,31 @@ public ContextSchemaTest(string schemaUrl)
2626
2727 protected async Task < string > ValidateSchema ( IContext context )
2828 {
29- this . Schema = JSchema . Parse ( await ( await new HttpClient ( ) . GetAsync ( this . SchemaUrl ) ) . Content . ReadAsStringAsync ( ) , new JSchemaUrlResolver ( ) ) ;
29+ SchemaRegistry . Global . Fetch = uri =>
30+ {
31+ using var client = new HttpClient ( ) ;
32+ var text = client . GetStringAsync ( uri ) . GetAwaiter ( ) . GetResult ( ) ;
33+ return JsonSchema . FromText ( text ) ;
34+ } ;
35+
36+ string schemaText = await ( await new HttpClient ( ) . GetAsync ( this . SchemaUrl ) ) . Content . ReadAsStringAsync ( ) ;
37+ this . Schema = JsonSchema . FromText ( schemaText ) ;
3038
3139 string serializedContext = JsonConvert . SerializeObject ( context , this . SerializerSettings ) ;
32- JToken json = JToken . Parse ( serializedContext ) ;
33- IList < string > errorMessages ;
34- bool isValid = json . IsValid ( this . Schema , out errorMessages ) ;
35- Assert . True ( isValid , String . Join ( "," , errorMessages . ToArray < string > ( ) ) ) ;
40+ var instanceJson = JsonNode . Parse ( serializedContext ) ;
41+
42+ var options = new EvaluationOptions { OutputFormat = OutputFormat . List } ;
43+ var results = this . Schema . Evaluate ( instanceJson , options ) ;
44+
45+ if ( ! results . IsValid )
46+ {
47+ var errorMessages = results . Details ?
48+ . Where ( d => d . Errors != null )
49+ . SelectMany ( d => d . Errors ! . Values )
50+ . ToArray ( ) ?? Array . Empty < string > ( ) ;
51+ Assert . True ( results . IsValid , String . Join ( "," , errorMessages ) ) ;
52+ }
53+
3654 return serializedContext ;
3755 }
3856
0 commit comments