test_class.declarator: idCache
test_class.modifier: @Mock
      private
test_class.original_string: @Mock
      private Cache<EntityIdWithResourceType, Entry<EntityIdWithResourceType>> idCache;
test_class.type: Cache<EntityIdWithResourceType, Entry<EntityIdWithResourceType>>
test_class.var_name: idCache
test_class.declarator: enforcerCache
test_class.modifier: @Mock
      private
test_class.original_string: @Mock
      private Cache<EntityIdWithResourceType, Entry<Enforcer>> enforcerCache;
test_class.type: Cache<EntityIdWithResourceType, Entry<Enforcer>>
test_class.var_name: enforcerCache
test_class.declarator: retriever
test_class.modifier: private
test_class.original_string: private EnforcerRetriever retriever;
test_class.type: EnforcerRetriever
test_class.var_name: retriever
test_class.file: services/concierge/enforcement/src/test/java/org/eclipse/ditto/services/concierge/enforcement/EnforcerRetrieverTest.java
test_class.identifier: EnforcerRetrieverTest
test_case.body: @Test
      public void verifyLookupEnforcerRevealsException() throws ExecutionException, InterruptedException {
          final DittoRuntimeException expectedException =
                  DittoRuntimeException.newBuilder("this should be happening", HttpStatusCode.HTTPVERSION_NOT_SUPPORTED)
                          .build();
          final EntityIdWithResourceType entityId = EntityIdWithResourceType.of("any", DefaultEntityId.of("id"));
          when(enforcerCache.get(any(EntityIdWithResourceType.class))).thenReturn(
                  CompletableFuture.completedFuture(Optional.of(Entry.nonexistent())));
  
          final CompletionStage<Contextual<WithDittoHeaders>> result = retriever.retrieveByEnforcerKey(entityId, enforcerEntry -> {
              throw expectedException;
          });
  
          verify(enforcerCache).get(entityId);
          verifyException(result, expectedException);
      }
test_case.class_method_signature: EnforcerRetrieverTest.verifyLookupEnforcerRevealsException()
test_case.full_signature: @Test public void verifyLookupEnforcerRevealsException()
test_case.identifier: verifyLookupEnforcerRevealsException
test_case.invocations: build newBuilder of of thenReturn when get any completedFuture of nonexistent retrieveByEnforcerKey get verify verifyException
test_case.modifiers: @Test public
test_case.parameters: ()
test_case.return: void
test_case.signature: void verifyLookupEnforcerRevealsException()
focal_class.declarator: LOGGER = LoggerFactory.getLogger(EnforcerRetriever.class)
focal_class.modifier: private static final
focal_class.original_string: private static final Logger LOGGER = LoggerFactory.getLogger(EnforcerRetriever.class);
focal_class.type: Logger
focal_class.var_name: LOGGER
focal_class.declarator: idCache
focal_class.modifier: private final
focal_class.original_string: private final Cache<EntityIdWithResourceType, Entry<EntityIdWithResourceType>> idCache;
focal_class.type: Cache<EntityIdWithResourceType, Entry<EntityIdWithResourceType>>
focal_class.var_name: idCache
focal_class.declarator: enforcerCacheFunction
focal_class.modifier: private final
focal_class.original_string: private final Function<String, Cache<EntityIdWithResourceType, Entry<Enforcer>>> enforcerCacheFunction;
focal_class.type: Function<String, Cache<EntityIdWithResourceType, Entry<Enforcer>>>
focal_class.var_name: enforcerCacheFunction
focal_class.file: services/concierge/enforcement/src/main/java/org/eclipse/ditto/services/concierge/enforcement/EnforcerRetriever.java
focal_class.identifier: EnforcerRetriever
focal_class.class_method_signature: EnforcerRetriever.EnforcerRetriever(
              final Cache<EntityIdWithResourceType, Entry<EntityIdWithResourceType>> idCache,
              final Cache<EntityIdWithResourceType, Entry<Enforcer>> enforcerCache)
focal_class.full_signature: public  EnforcerRetriever(
              final Cache<EntityIdWithResourceType, Entry<EntityIdWithResourceType>> idCache,
              final Cache<EntityIdWithResourceType, Entry<Enforcer>> enforcerCache)
focal_class.identifier: EnforcerRetriever
focal_class.modifiers: public
focal_class.parameters: (
              final Cache<EntityIdWithResourceType, Entry<EntityIdWithResourceType>> idCache,
              final Cache<EntityIdWithResourceType, Entry<Enforcer>> enforcerCache)
focal_class.signature:  EnforcerRetriever(
              final Cache<EntityIdWithResourceType, Entry<EntityIdWithResourceType>> idCache,
              final Cache<EntityIdWithResourceType, Entry<Enforcer>> enforcerCache)
focal_class.class_method_signature: EnforcerRetriever.EnforcerRetriever(
              final Cache<EntityIdWithResourceType, Entry<EntityIdWithResourceType>> idCache,
              final Function<String, Cache<EntityIdWithResourceType, Entry<Enforcer>>> enforcerCacheFunction)
focal_class.full_signature: private  EnforcerRetriever(
              final Cache<EntityIdWithResourceType, Entry<EntityIdWithResourceType>> idCache,
              final Function<String, Cache<EntityIdWithResourceType, Entry<Enforcer>>> enforcerCacheFunction)
focal_class.identifier: EnforcerRetriever
focal_class.modifiers: private
focal_class.parameters: (
              final Cache<EntityIdWithResourceType, Entry<EntityIdWithResourceType>> idCache,
              final Function<String, Cache<EntityIdWithResourceType, Entry<Enforcer>>> enforcerCacheFunction)
focal_class.signature:  EnforcerRetriever(
              final Cache<EntityIdWithResourceType, Entry<EntityIdWithResourceType>> idCache,
              final Function<String, Cache<EntityIdWithResourceType, Entry<Enforcer>>> enforcerCacheFunction)
focal_class.class_method_signature: EnforcerRetriever.EnforcerRetriever(
              final Cache<EntityIdWithResourceType, Entry<EntityIdWithResourceType>> idCache,
              final Map<String, Cache<EntityIdWithResourceType, Entry<Enforcer>>> enforcerCaches)
focal_class.full_signature: public  EnforcerRetriever(
              final Cache<EntityIdWithResourceType, Entry<EntityIdWithResourceType>> idCache,
              final Map<String, Cache<EntityIdWithResourceType, Entry<Enforcer>>> enforcerCaches)
focal_class.identifier: EnforcerRetriever
focal_class.modifiers: public
focal_class.parameters: (
              final Cache<EntityIdWithResourceType, Entry<EntityIdWithResourceType>> idCache,
              final Map<String, Cache<EntityIdWithResourceType, Entry<Enforcer>>> enforcerCaches)
focal_class.signature:  EnforcerRetriever(
              final Cache<EntityIdWithResourceType, Entry<EntityIdWithResourceType>> idCache,
              final Map<String, Cache<EntityIdWithResourceType, Entry<Enforcer>>> enforcerCaches)
focal_class.class_method_signature: EnforcerRetriever.retrieve(final EntityIdWithResourceType entityKey,
              final BiFunction<Entry<EntityIdWithResourceType>, Entry<Enforcer>, CompletionStage<Contextual<WithDittoHeaders>>> handler)
focal_class.full_signature: public CompletionStage<Contextual<WithDittoHeaders>> retrieve(final EntityIdWithResourceType entityKey,
              final BiFunction<Entry<EntityIdWithResourceType>, Entry<Enforcer>, CompletionStage<Contextual<WithDittoHeaders>>> handler)
focal_class.identifier: retrieve
focal_class.modifiers: public
focal_class.parameters: (final EntityIdWithResourceType entityKey,
              final BiFunction<Entry<EntityIdWithResourceType>, Entry<Enforcer>, CompletionStage<Contextual<WithDittoHeaders>>> handler)
focal_class.return: CompletionStage<Contextual<WithDittoHeaders>>
focal_class.signature: CompletionStage<Contextual<WithDittoHeaders>> retrieve(final EntityIdWithResourceType entityKey,
              final BiFunction<Entry<EntityIdWithResourceType>, Entry<Enforcer>, CompletionStage<Contextual<WithDittoHeaders>>> handler)
focal_class.class_method_signature: EnforcerRetriever.retrieveByEnforcerKey(
              final EntityIdWithResourceType enforcerKey,
              final Function<Entry<Enforcer>, CompletionStage<Contextual<WithDittoHeaders>>> handler)
focal_class.full_signature: public CompletionStage<Contextual<WithDittoHeaders>> retrieveByEnforcerKey(
              final EntityIdWithResourceType enforcerKey,
              final Function<Entry<Enforcer>, CompletionStage<Contextual<WithDittoHeaders>>> handler)
focal_class.identifier: retrieveByEnforcerKey
focal_class.modifiers: public
focal_class.parameters: (
              final EntityIdWithResourceType enforcerKey,
              final Function<Entry<Enforcer>, CompletionStage<Contextual<WithDittoHeaders>>> handler)
focal_class.return: CompletionStage<Contextual<WithDittoHeaders>>
focal_class.signature: CompletionStage<Contextual<WithDittoHeaders>> retrieveByEnforcerKey(
              final EntityIdWithResourceType enforcerKey,
              final Function<Entry<Enforcer>, CompletionStage<Contextual<WithDittoHeaders>>> handler)
focal_method.body: public CompletionStage<Contextual<WithDittoHeaders>> retrieveByEnforcerKey(
              final EntityIdWithResourceType enforcerKey,
              final Function<Entry<Enforcer>, CompletionStage<Contextual<WithDittoHeaders>>> handler) {
          final String resourceType = enforcerKey.getResourceType();
          final Cache<EntityIdWithResourceType, Entry<Enforcer>> enforcerCache =
                  enforcerCacheFunction.apply(resourceType);
          if (enforcerCache == null) {
              throw new IllegalStateException("No enforcerCache for resource type: " + resourceType);
          }
          return enforcerCache.get(enforcerKey)
                  .thenCompose(enforcerEntryOptional -> {
                      if (enforcerEntryOptional.isEmpty()) {
                          // may happen due to namespace blocking
                          LOGGER.info("Did not get enforcer-cache value for entityKey <{}>.", enforcerKey);
                          return handler.apply(Entry.nonexistent());
                      } else {
                          final Entry<Enforcer> enforcerEntry = enforcerEntryOptional.get();
                          return handler.apply(enforcerEntry);
                      }
                  });
  
      }
focal_method.class_method_signature: EnforcerRetriever.retrieveByEnforcerKey(
              final EntityIdWithResourceType enforcerKey,
              final Function<Entry<Enforcer>, CompletionStage<Contextual<WithDittoHeaders>>> handler)
focal_method.full_signature: public CompletionStage<Contextual<WithDittoHeaders>> retrieveByEnforcerKey(
              final EntityIdWithResourceType enforcerKey,
              final Function<Entry<Enforcer>, CompletionStage<Contextual<WithDittoHeaders>>> handler)
focal_method.identifier: retrieveByEnforcerKey
focal_method.invocations: getResourceType apply thenCompose get isEmpty info apply nonexistent get apply
focal_method.modifiers: public
focal_method.parameters: (
              final EntityIdWithResourceType enforcerKey,
              final Function<Entry<Enforcer>, CompletionStage<Contextual<WithDittoHeaders>>> handler)
focal_method.return: CompletionStage<Contextual<WithDittoHeaders>>
focal_method.signature: CompletionStage<Contextual<WithDittoHeaders>> retrieveByEnforcerKey(
              final EntityIdWithResourceType enforcerKey,
              final Function<Entry<Enforcer>, CompletionStage<Contextual<WithDittoHeaders>>> handler)