JsonSchemaFilter { public List<SimpleJsonSchema> filter(List<JsonSchemaRepository> schemaRepositories, JsonMessageValidationContext jsonMessageValidationContext, ReferenceResolver referenceResolver) { if (isSchemaRepositorySpecified(jsonMessageValidationContext)) { return filterByRepositoryName(schemaRepositories, jsonMessageValidationContext); } else if (isSchemaSpecified(jsonMessageValidationContext)) { return getSchemaFromContext(jsonMessageValidationContext, referenceResolver); } else { return mergeRepositories(schemaRepositories); } }  List<SimpleJsonSchema> filter(List<JsonSchemaRepository> schemaRepositories,
                                         JsonMessageValidationContext jsonMessageValidationContext,
                                         ReferenceResolver referenceResolver);  }
@Test public void testFilterOnSchemaRepositoryName() { JsonSchemaRepository firstJsonSchemaRepository = new JsonSchemaRepository(); firstJsonSchemaRepository.setBeanName("schemaRepository1"); SimpleJsonSchema firstSimpleJsonSchema = mock(SimpleJsonSchema.class); firstJsonSchemaRepository.getSchemas().add(firstSimpleJsonSchema); JsonSchemaRepository secondJsonSchemaRepository = new JsonSchemaRepository(); secondJsonSchemaRepository.setBeanName("schemaRepository2"); SimpleJsonSchema secondSimpleJsonSchema = mock(SimpleJsonSchema.class); secondJsonSchemaRepository.getSchemas().add(secondSimpleJsonSchema); SimpleJsonSchema thirdSimpleJsonSchema = mock(SimpleJsonSchema.class); secondJsonSchemaRepository.getSchemas().add(thirdSimpleJsonSchema); List<JsonSchemaRepository> schemaRepositories = Arrays.asList(firstJsonSchemaRepository, secondJsonSchemaRepository); JsonMessageValidationContext validationContext = new JsonMessageValidationContext.Builder() .schemaValidation(true) .schemaRepository("schemaRepository2") .build(); List<SimpleJsonSchema> simpleJsonSchemas = jsonSchemaFilter.filter(schemaRepositories, validationContext, referenceResolverMock); Assert.assertEquals(simpleJsonSchemas.size(), 2); Assert.assertTrue(simpleJsonSchemas.contains(secondSimpleJsonSchema)); Assert.assertTrue(simpleJsonSchemas.contains(thirdSimpleJsonSchema)); }
@Test public void testFilterOnSchemaNameUsesApplicationContext() { JsonSchemaRepository jsonSchemaRepository = new JsonSchemaRepository(); jsonSchemaRepository.setBeanName("schemaRepository"); SimpleJsonSchema jsonSchema = mock(SimpleJsonSchema.class); jsonSchemaRepository.getSchemas().add(jsonSchema); List<JsonSchemaRepository> schemaRepositories = Collections.singletonList(jsonSchemaRepository); JsonMessageValidationContext validationContext = new JsonMessageValidationContext.Builder() .schemaValidation(true) .schema("mySchema") .build(); when(referenceResolverMock.resolve("mySchema", SimpleJsonSchema.class)) .thenReturn(mock(SimpleJsonSchema.class)); jsonSchemaFilter.filter(schemaRepositories, validationContext, referenceResolverMock); verify(referenceResolverMock).resolve(validationContext.getSchema(), SimpleJsonSchema.class); }
@Test public void testFilterOnSchemaNameReturnsCorrectSchema() { JsonSchemaRepository jsonSchemaRepository = new JsonSchemaRepository(); jsonSchemaRepository.setBeanName("schemaRepository"); SimpleJsonSchema jsonSchema = mock(SimpleJsonSchema.class); jsonSchemaRepository.getSchemas().add(jsonSchema); List<JsonSchemaRepository> schemaRepositories = Collections.singletonList(jsonSchemaRepository); JsonMessageValidationContext validationContext = new JsonMessageValidationContext.Builder() .schemaValidation(true) .schema("mySchema") .build(); SimpleJsonSchema expectedSimpleJsonSchema = mock(SimpleJsonSchema.class); when(referenceResolverMock.resolve(validationContext.getSchema(), SimpleJsonSchema.class)) .thenReturn(expectedSimpleJsonSchema); List<SimpleJsonSchema> simpleJsonSchemas = jsonSchemaFilter.filter(schemaRepositories, validationContext, referenceResolverMock); Assert.assertEquals(simpleJsonSchemas.size(),1); Assert.assertEquals(expectedSimpleJsonSchema, simpleJsonSchemas.get(0)); }
@Test(expectedExceptions = CitrusRuntimeException.class) public void testNoSchemaRepositoryFoundThrowsException() { JsonSchemaRepository firstJsonSchemaRepository = new JsonSchemaRepository(); firstJsonSchemaRepository.setBeanName("schemaRepository1"); SimpleJsonSchema firstSimpleJsonSchema = mock(SimpleJsonSchema.class); firstJsonSchemaRepository.getSchemas().add(firstSimpleJsonSchema); List<JsonSchemaRepository> schemaRepositories = Collections.singletonList(firstJsonSchemaRepository); JsonMessageValidationContext validationContext = new JsonMessageValidationContext.Builder() .schemaValidation(true) .schemaRepository("schemaRepository2") .build(); jsonSchemaFilter.filter(schemaRepositories, validationContext, referenceResolverMock); }
@Test(expectedExceptions = CitrusRuntimeException.class) public void testNoSchemaFoundThrowsException() { JsonSchemaRepository firstJsonSchemaRepository = new JsonSchemaRepository(); firstJsonSchemaRepository.setBeanName("schemaRepository1"); SimpleJsonSchema firstSimpleJsonSchema = mock(SimpleJsonSchema.class); firstJsonSchemaRepository.getSchemas().add(firstSimpleJsonSchema); List<JsonSchemaRepository> schemaRepositories = Collections.singletonList(firstJsonSchemaRepository); JsonMessageValidationContext validationContext = new JsonMessageValidationContext.Builder() .schemaValidation(true) .schema("foo") .build(); when(referenceResolverMock.resolve(validationContext.getSchema(), SimpleJsonSchema.class)) .thenThrow(NoSuchBeanDefinitionException.class); jsonSchemaFilter.filter(schemaRepositories, validationContext, referenceResolverMock); }
@Test public void testNoFilterReturnAllSchemas() { JsonSchemaRepository firstJsonSchemaRepository = new JsonSchemaRepository(); firstJsonSchemaRepository.setBeanName("schemaRepository1"); SimpleJsonSchema firstSimpleJsonSchema = mock(SimpleJsonSchema.class); firstJsonSchemaRepository.getSchemas().add(firstSimpleJsonSchema); JsonSchemaRepository secondJsonSchemaRepository = new JsonSchemaRepository(); secondJsonSchemaRepository.setBeanName("schemaRepository2"); SimpleJsonSchema secondSimpleJsonSchema = mock(SimpleJsonSchema.class); secondJsonSchemaRepository.getSchemas().add(secondSimpleJsonSchema); SimpleJsonSchema thirdSimpleJsonSchema = mock(SimpleJsonSchema.class); secondJsonSchemaRepository.getSchemas().add(thirdSimpleJsonSchema); List<JsonSchemaRepository> schemaRepositories = Arrays.asList(firstJsonSchemaRepository, secondJsonSchemaRepository); JsonMessageValidationContext validationContext = new JsonMessageValidationContext.Builder() .schemaValidation(true) .build(); List<SimpleJsonSchema> simpleJsonSchemas = jsonSchemaFilter.filter(schemaRepositories, validationContext, referenceResolverMock); Assert.assertEquals(simpleJsonSchemas.size(), 3); Assert.assertTrue(simpleJsonSchemas.contains(firstSimpleJsonSchema)); Assert.assertTrue(simpleJsonSchemas.contains(secondSimpleJsonSchema)); Assert.assertTrue(simpleJsonSchemas.contains(thirdSimpleJsonSchema)); }