### Question:
Neo4jMappingContext extends AbstractMappingContext<Neo4jPersistentEntity<?>, Neo4jPersistentProperty> implements Schema { @Override @Nullable public NodeDescription<?> getNodeDescription(String primaryLabel) { return this.nodeDescriptionStore.get(primaryLabel); } Neo4jMappingContext();  Neo4jMappingContext(Neo4jConversions neo4jConversions); Neo4jConverter getConverter(); @Override @Nullable NodeDescription<?> getNodeDescription(String primaryLabel); @Override NodeDescription<?> getNodeDescription(Class<?> underlyingClass); @Override Optional<Neo4jPersistentEntity<?>> addPersistentEntity(Class<?> type); @Override T getOrCreateIdGeneratorOfType(Class<T> idGeneratorType); @Override Optional<T> getIdGenerator(String reference); @Override void setApplicationContext(ApplicationContext applicationContext);  }### Answer:
@Test void initializationOfSchemaShouldWork() { Neo4jMappingContext schema = new Neo4jMappingContext(); schema.setInitialEntitySet(new HashSet<>(Arrays.asList(BikeNode.class, UserNode.class, TripNode.class))); schema.initialize(); NodeDescription<?> optionalUserNodeDescription = schema.getNodeDescription("User"); assertThat(optionalUserNodeDescription) .isNotNull() .satisfies(description -> { assertThat(description.getUnderlyingClass()).isEqualTo(UserNode.class); assertThat(description.getIdDescription().isInternallyGeneratedId()).isTrue(); assertThat(description.getGraphProperties()) .extracting(GraphPropertyDescription::getFieldName) .containsExactlyInAnyOrder("id", "name", "first_name"); assertThat(description.getGraphProperties()) .extracting(GraphPropertyDescription::getPropertyName) .containsExactlyInAnyOrder("id", "name", "firstName"); Collection<String> expectedRelationships = Arrays.asList("[:OWNS] -> (:BikeNode)"); Collection<RelationshipDescription> relationships = description.getRelationships(); assertThat(relationships.stream().filter(r -> !r.isDynamic())) .allMatch(d -> expectedRelationships .contains(String.format("[:%s] -> (:%s)", d.getType(), d.getTarget().getPrimaryLabel()))); }); NodeDescription<?> optionalBikeNodeDescription = schema.getNodeDescription("BikeNode"); assertThat(optionalBikeNodeDescription) .isNotNull() .satisfies(description -> { assertThat(description.getUnderlyingClass()).isEqualTo(BikeNode.class); assertThat(description.getIdDescription().isAssignedId()).isTrue(); Collection<String> expectedRelationships = Arrays.asList("[:OWNER] -> (:User)", "[:RENTER] -> (:User)"); Collection<RelationshipDescription> relationships = description.getRelationships(); assertThat(relationships.stream().filter(r -> !r.isDynamic())) .allMatch(d -> expectedRelationships .contains(String.format("[:%s] -> (:%s)", d.getType(), d.getTarget().getPrimaryLabel()))); }); Neo4jPersistentEntity<?> bikeNodeEntity = schema.getPersistentEntity(BikeNode.class); assertThat(bikeNodeEntity.getPersistentProperty("owner").isAssociation()).isTrue(); assertThat(bikeNodeEntity.getPersistentProperty("renter").isAssociation()).isTrue(); assertThat(bikeNodeEntity.getPersistentProperty("dynamicRelationships").isAssociation()).isTrue(); assertThat(bikeNodeEntity.getPersistentProperty("someValues").isAssociation()).isFalse(); assertThat(bikeNodeEntity.getPersistentProperty("someMoreValues").isAssociation()).isFalse(); assertThat(bikeNodeEntity.getPersistentProperty("evenMoreValues").isAssociation()).isFalse(); assertThat(bikeNodeEntity.getPersistentProperty("funnyDynamicProperties").isAssociation()).isFalse(); }