From ff4781a09e83a51011bc529b4464aa195e90f9eb Mon Sep 17 00:00:00 2001 From: Luis Pabon Date: Tue, 3 Dec 2024 11:00:41 -0500 Subject: [PATCH 1/5] Update ApplicationContext.java Remove unreachable if statement --- .../cdc/trustedintermediary/context/ApplicationContext.java | 3 --- 1 file changed, 3 deletions(-) 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(); From e5d184db86a33934bd88afc1ddedb3f52143d9a3 Mon Sep 17 00:00:00 2001 From: Luis Pabon Date: Tue, 3 Dec 2024 11:01:28 -0500 Subject: [PATCH 2/5] Update TestApplicationContext.groovy Add additional line in coverage --- .../trustedintermediary/context/TestApplicationContext.groovy | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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..3c038413b 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 @@ -21,7 +21,7 @@ class TestApplicationContext extends ApplicationContext { def static injectRegisteredImplementations(def skip = true) { skipMissingImplementations = skip - doInjectRegisteredImplementations() + ApplicationContext.injectRegisteredImplementations() } def static addEnvironmentVariable(String key, String value) { From 083ddb4e53d06674f04f1ff263d73ab47f126a91 Mon Sep 17 00:00:00 2001 From: Luis Pabon Date: Tue, 3 Dec 2024 12:24:10 -0500 Subject: [PATCH 3/5] Update TestApplicationContext.groovy Remove parameter from injectRegisteredImplementations --- .../trustedintermediary/context/TestApplicationContext.groovy | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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 3c038413b..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,8 +19,8 @@ class TestApplicationContext extends ApplicationContext { TEST_ENV_VARS.clear() } - def static injectRegisteredImplementations(def skip = true) { - skipMissingImplementations = skip + def static injectRegisteredImplementations() { + skipMissingImplementations = true ApplicationContext.injectRegisteredImplementations() } From 0ac729e3fabe57f01f92dcff87efc77fa2c1e855 Mon Sep 17 00:00:00 2001 From: jorge Lopez Date: Wed, 4 Dec 2024 09:40:50 -0800 Subject: [PATCH 4/5] added unit tests to cover new code --- .../context/ApplicationContextTest.groovy | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) 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..cf3a3e889 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,7 @@ package gov.hhs.cdc.trustedintermediary.context +import gov.hhs.cdc.trustedintermediary.ruleengine.RuleEngine +import gov.hhs.cdc.trustedintermediary.wrappers.Logger import spock.lang.Specification import javax.inject.Inject @@ -12,6 +14,12 @@ class ApplicationContextTest extends Specification { void test() } + class NonSingletonClazz { + @Inject + Logger logger + void test() {} + } + static class DogCow implements TestingInterface { @Override @@ -55,6 +63,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" From 18c2f48d96737e57454a99b33666e185e8c8e560 Mon Sep 17 00:00:00 2001 From: Luis Pabon Date: Thu, 5 Dec 2024 13:00:43 -0500 Subject: [PATCH 5/5] Update ApplicationContextTest.groovy Added test case for unsupported injection classes --- .../context/ApplicationContextTest.groovy | 20 ++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) 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 cf3a3e889..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,6 +1,5 @@ package gov.hhs.cdc.trustedintermediary.context -import gov.hhs.cdc.trustedintermediary.ruleengine.RuleEngine import gov.hhs.cdc.trustedintermediary.wrappers.Logger import spock.lang.Specification @@ -205,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