diff --git a/shared/src/main/java/gov/hhs/cdc/trustedintermediary/context/ApplicationContext.java b/shared/src/main/java/gov/hhs/cdc/trustedintermediary/context/ApplicationContext.java index 809f6108a..740bc66e3 100644 --- a/shared/src/main/java/gov/hhs/cdc/trustedintermediary/context/ApplicationContext.java +++ b/shared/src/main/java/gov/hhs/cdc/trustedintermediary/context/ApplicationContext.java @@ -108,9 +108,6 @@ private static void injectIntoField(Field field) { Object declaringClassImplementation = getDeclaringClassImplementation(declaringClassesToTry); - if (declaringClassImplementation == null) { - return; - } field.trySetAccessible(); diff --git a/shared/src/test/groovy/gov/hhs/cdc/trustedintermediary/context/ApplicationContextTest.groovy b/shared/src/test/groovy/gov/hhs/cdc/trustedintermediary/context/ApplicationContextTest.groovy index 8d8c767f6..4bb8f349c 100644 --- a/shared/src/test/groovy/gov/hhs/cdc/trustedintermediary/context/ApplicationContextTest.groovy +++ b/shared/src/test/groovy/gov/hhs/cdc/trustedintermediary/context/ApplicationContextTest.groovy @@ -1,5 +1,6 @@ package gov.hhs.cdc.trustedintermediary.context +import gov.hhs.cdc.trustedintermediary.wrappers.Logger import spock.lang.Specification import javax.inject.Inject @@ -12,6 +13,12 @@ class ApplicationContextTest extends Specification { void test() } + class NonSingletonClazz { + @Inject + Logger logger + void test() {} + } + static class DogCow implements TestingInterface { @Override @@ -55,6 +62,36 @@ class ApplicationContextTest extends Specification { implementors == ApplicationContext.getImplementors(TestingInterface) } + def "injectIntoNonSingleton unhappy path"() { + given: + def nonSingletonClass = new NonSingletonClazz() + def object = new Object() + ApplicationContext.register(Logger, object) + when: + ApplicationContext.injectIntoNonSingleton(nonSingletonClass) + then: + thrown(IllegalArgumentException) + } + + def "injectIntoNonSingleton unhappy path when fieldImplementation runs into an error"() { + given: + def nonSingletonClass = new NonSingletonClazz() + when: + ApplicationContext.injectIntoNonSingleton(nonSingletonClass) + then: + thrown(IllegalArgumentException) + } + + def "injectIntoNonSingleton unhappy path when fieldImplementation is null"() { + given: + def nonSingletonClass = new NonSingletonClazz() + when: + ApplicationContext.skipMissingImplementations = true + ApplicationContext.injectIntoNonSingleton(nonSingletonClass) + then: + noExceptionThrown() + } + def "implementation injection test"() { given: def injectedValue = "DogCow" @@ -167,6 +204,25 @@ class ApplicationContextTest extends Specification { Files.deleteIfExists(directoryPath) } + def "registering an unsupported injection class"() { + given: + def injectedValue = "DogCow" + def injectionInstantiation = new InjectionDeclaringClass() + + TestApplicationContext.register(List.class, injectionInstantiation) + // notice above that I'm registering the injectionInstantiation object as a List class. + // injectionInstantiation is of class InjectionDeclaringClass, + // and InjectionDeclaringClass doesn't implement List (it only implements AFieldInterface). + TestApplicationContext.register(String.class, injectedValue) + + when: + TestApplicationContext.injectRegisteredImplementations() + injectionInstantiation.getAField() + + then: + thrown(NullPointerException) + } + class InjectionDeclaringClass { @Inject private String aField diff --git a/shared/src/testFixtures/groovy/gov/hhs/cdc/trustedintermediary/context/TestApplicationContext.groovy b/shared/src/testFixtures/groovy/gov/hhs/cdc/trustedintermediary/context/TestApplicationContext.groovy index ac036be5a..735e78fc7 100644 --- a/shared/src/testFixtures/groovy/gov/hhs/cdc/trustedintermediary/context/TestApplicationContext.groovy +++ b/shared/src/testFixtures/groovy/gov/hhs/cdc/trustedintermediary/context/TestApplicationContext.groovy @@ -19,9 +19,9 @@ class TestApplicationContext extends ApplicationContext { TEST_ENV_VARS.clear() } - def static injectRegisteredImplementations(def skip = true) { - skipMissingImplementations = skip - doInjectRegisteredImplementations() + def static injectRegisteredImplementations() { + skipMissingImplementations = true + ApplicationContext.injectRegisteredImplementations() } def static addEnvironmentVariable(String key, String value) {