Skip to content

Commit

Permalink
Broke out test version of ExternalReference from InMemory repo in order
Browse files Browse the repository at this point in the history
to have more control over Bean wiring.  Had to make the stub @primary
for now.
  • Loading branch information
earl.nolan committed Dec 12, 2017
1 parent c5c8581 commit cebba97
Show file tree
Hide file tree
Showing 3 changed files with 66 additions and 45 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,6 @@
import com.nfl.dm.shield.dynamic.domain.schema.InMemorySchemaDescriptionHolder;
import com.nfl.dm.shield.dynamic.domain.schema.SchemaDescription;
import com.nfl.dm.shield.dynamic.domain.schema.SchemaKey;
import com.nfl.graphql.mediator.GraphQLMediator;
import graphql.language.SelectionSet;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.*;
Expand All @@ -20,30 +17,20 @@

import static com.google.common.collect.Lists.transform;
import static com.nfl.dm.shield.dynamic.domain.instance.SchemaInstance.UPDATE_DATE_FIELD;
import static com.nfl.dm.shield.dynamic.domain.schema.instancefield.AbstractReferenceType.REFERENCE_ID;
import static com.nfl.dm.shield.dynamic.domain.schema.instancefield.AbstractReferenceType.REFERENCE_TYPE;
import static java.util.Collections.emptyList;
import static java.util.Collections.emptyMap;
import static java.util.stream.Collectors.toList;

@Service
public class InMemorySchemaRepository extends BaseRepositoryImpl
implements SchemaRepository, SchemaInstanceRepository, ExternalReferenceRepository {

private final GraphQLMediator mediator;
implements SchemaRepository, SchemaInstanceRepository {

private final Map<SchemaKey, InMemorySchemaDescriptionHolder> allTheSchemas = new ConcurrentHashMap<>(89);

private final Map<SchemaInstanceKey, Map<String, InMemorySchemaInstanceHolder>> instances
= new ConcurrentHashMap<>(89);

private final Map<String, Map<String, Map<String, Object>>> externalInstances
= new ConcurrentHashMap<>(89);

@SuppressWarnings("SpringJavaAutowiringInspection")
@Autowired
public InMemorySchemaRepository(GraphQLMediator mediator) {
this.mediator = mediator;
public InMemorySchemaRepository() {
}

@Override
Expand Down Expand Up @@ -204,31 +191,4 @@ public Stream<InMemorySchemaInstanceHolder> findInstancesBySchemaKeyAndStringInC
return instanceHoldersForRelatedSchemas.stream().filter(instanceHolder ->
instanceHolder.getInstanceClob().contains(searchString));
}

@Override
public GraphQLMediator buildMediator(String authHeader) {
return mediator;
}

@Override
public Map<String, Object> findById(SelectionSet selections, Map<String, String> id, String authHeader) {

String typeName = id.get(REFERENCE_TYPE);
if (!externalInstances.containsKey(typeName)) {
return null;
}

return externalInstances.get(typeName).get(id.get(REFERENCE_ID));
}

public void loadExternalInstance(String typeName, String id, Map<String, Object> instance) {
if (!externalInstances.containsKey(typeName)) {
externalInstances.put(typeName, new HashMap<>(89));
}
externalInstances.get(typeName).put(id, instance);
}

public void clearForExternalTesting() {
externalInstances.clear();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
package com.nfl.dm.shield.dynamic.repository;

import com.nfl.graphql.mediator.GraphQLMediator;
import graphql.language.SelectionSet;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Primary;
import org.springframework.stereotype.Service;

import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

import static com.nfl.dm.shield.dynamic.domain.schema.instancefield.AbstractReferenceType.REFERENCE_ID;
import static com.nfl.dm.shield.dynamic.domain.schema.instancefield.AbstractReferenceType.REFERENCE_TYPE;

@SuppressWarnings("unused")
@Service("stubbedExternal")
@Primary
public class StubbedExternalReferenceRepository implements ExternalReferenceRepository {

private final GraphQLMediator mediator;

private final Map<String, Map<String, Map<String, Object>>> externalInstances
= new ConcurrentHashMap<>(89);

@Autowired
public StubbedExternalReferenceRepository(GraphQLMediator mediator) {
this.mediator = mediator;
}

@Override
public GraphQLMediator buildMediator(String authHeader) {
return mediator;
}

@Override
public Map<String, Object> findById(SelectionSet selections, Map<String, String> id, String authHeader) {

String typeName = id.get(REFERENCE_TYPE);
if (!externalInstances.containsKey(typeName)) {
return null;
}

return externalInstances.get(typeName).get(id.get(REFERENCE_ID));
}

public void loadExternalInstance(String typeName, String id, Map<String, Object> instance) {
if (!externalInstances.containsKey(typeName)) {
externalInstances.put(typeName, new HashMap<>(89));
}
externalInstances.get(typeName).put(id, instance);
}

public void clearForExternalTesting() {
externalInstances.clear();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import com.nfl.dm.shield.dynamic.BaseBeanTest;
import com.nfl.dm.shield.dynamic.repository.InMemorySchemaRepository;
import com.nfl.dm.shield.dynamic.repository.StubbedExternalReferenceRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.testng.Assert;
import org.testng.annotations.AfterMethod;
Expand All @@ -22,6 +23,9 @@ public abstract class BaseExternalReferenceTest extends BaseBeanTest {
@Autowired
private InMemorySchemaRepository inMemorySchemaRepository;

@Autowired
private StubbedExternalReferenceRepository externalReferenceRepository;

void loadSchema(String simonSchema, String simonSchemaResults) {
// Set up the schema
assertFalse(simonSchema.isEmpty());
Expand All @@ -46,14 +50,14 @@ public void loadExternalData() {
Map<String, Object> imageMap = new HashMap<>();
imageMap.put("id", IMAGE_ID);
imageMap.put("title", "Hitchhikers Guide");
inMemorySchemaRepository.loadExternalInstance("Image", IMAGE_ID, imageMap);
externalReferenceRepository.loadExternalInstance("Image", IMAGE_ID, imageMap);

Map<String, Object> videoMap = new HashMap<>();
videoMap.put("id", VIDEO_ID);
videoMap.put("title", "Casablanca");
videoMap.put("caption", "The greatest movie ever.");

inMemorySchemaRepository.loadExternalInstance("Video", VIDEO_ID, videoMap);
externalReferenceRepository.loadExternalInstance("Video", VIDEO_ID, videoMap);
}


Expand All @@ -69,6 +73,6 @@ GraphQLResult upsert(String key, String query) {
public void cleanup() {
inMemorySchemaRepository.clearForInstanceTesting();
inMemorySchemaRepository.clearForSchemaTesting();
inMemorySchemaRepository.clearForExternalTesting();
externalReferenceRepository.clearForExternalTesting();
}
}

0 comments on commit cebba97

Please sign in to comment.