@Override public Set<String> execute(final DomainLookupContext context) { final DomainLookupsCache cache = context.getCache(); return labels.stream() .flatMap(label -> cache.getDefinitions(label).stream()) .filter(definitionIdsAllowedFilter::test) .collect(Collectors.toSet()); } }
@Test public void testGetDefinitionsByLabel() { assertEquals(Collections.emptySet(), tested.getDefinitions("SOMETHING_NOT_EXISTING")); Set<String> defs1 = tested.getDefinitions(ROLE1); assertEquals(1, defs1.size()); assertEquals(DEF_ID1, defs1.iterator().next()); Set<String> defs2 = tested.getDefinitions(ROLE2); assertEquals(1, defs2.size()); assertEquals(DEF_ID2, defs2.iterator().next()); }
@Test public void testCleanUp() { DefinitionsCacheRegistry definitionsRegistry = mock(DefinitionsCacheRegistry.class); when(definitionsRegistry.getLabels(eq(DEF_ID1))).thenReturn(Collections.singleton(ROLE1)); when(definitionsRegistry.getLabels(eq(DEF_ID2))).thenReturn(Collections.singleton(ROLE2)); DomainLookupsCache tested = new DomainLookupsCache(definitionManager, definitionsRegistry, DEF_SET_ID); assertEquals(1, tested.getDefinitions(ROLE1).size()); assertEquals(1, tested.getDefinitions(ROLE2).size()); tested.clear(); assertEquals(Collections.emptySet(), tested.getDefinitions(ROLE1)); assertEquals(Collections.emptySet(), tested.getDefinitions(ROLE2)); assertEquals(0, tested.getConnectionRules().size()); } }
@Before public void setup() throws Exception { final TestingGraphMockHandler graphTestHandler = new TestingGraphMockHandler(); graph = TestingGraphInstanceBuilder.newGraph1(graphTestHandler); TestingGraphInstanceBuilder.createDefaultRulesForGraph1(graphTestHandler.ruleSet); when(cacheBuilder.apply(anyString())).thenReturn(cache); when(cache.getRuleSet()).thenReturn(graphTestHandler.ruleSet); CanConnect connectionRule = (CanConnect) ((List<Rule>) graphTestHandler.ruleSet.getRules()).get(0); when(cache.getConnectionRules()).thenReturn(Collections.singletonList(connectionRule)); when(cache.getDefinitions(contains("label1"))).thenReturn(Stream.of(TestingGraphInstanceBuilder.DEF1_ID).collect(Collectors.toSet())); when(cache.getDefinitions(contains("label2"))).thenReturn(Stream.of(TestingGraphInstanceBuilder.DEF2_ID).collect(Collectors.toSet())); when(definitionsRegistry.getLabels(eq(TestingGraphInstanceBuilder.DEF1_ID))).thenReturn(TestingGraphInstanceBuilder.DEF1_LABELS); when(definitionsRegistry.getLabels(eq(TestingGraphInstanceBuilder.DEF2_ID))).thenReturn(TestingGraphInstanceBuilder.DEF2_LABELS); tested = new CommonDomainLookups(graphTestHandler.definitionUtils, definitionsRegistry, graphTestHandler.ruleManager, cacheBuilder) .setDomain("ds1"); }
@Test @SuppressWarnings("unchecked") public void testLookupAllowedDefinitionsByLabelsWithFiltering() { when(cache.getDefinitions(eq("label1"))).thenReturn(Collections.singleton(TestingGraphInstanceBuilder.DEF1_ID)); when(definitionsCache.getLabels(eq(TestingGraphInstanceBuilder.DEF1_ID))) .thenReturn(TestingGraphInstanceBuilder.DEF1_LABELS); LookupAllowedDefinitionsByLabels function = new LookupAllowedDefinitionsByLabels(graph1Instance.graph, new HashSet<String>(1) {{ add("label1"); }}, DEF_ID2::equals); Set<String> result = function.execute(context); assertTrue(result.isEmpty()); }
@Test @SuppressWarnings("unchecked") public void testLookupDefinitionsByLabelsWithFiltering() { Set<String> expected = new HashSet<String>(1) {{ add(DEF_ID1); }}; when(cache.getDefinitions(eq(ROLE2))).thenReturn(expected); LookupDefinitionsByLabels function = new LookupDefinitionsByLabels(new HashSet<String>(1) {{ add(ROLE2); }}, DEF_ID2::equals); assertFalse(function.execute(context).contains(DEF_ID1)); }
@Test @SuppressWarnings("unchecked") public void testLookupDefinitionsByLabels() { Set<String> expected = new HashSet<String>(1) {{ add(DEF_ID1); }}; when(cache.getDefinitions(eq(ROLE2))).thenReturn(expected); LookupDefinitionsByLabels function = new LookupDefinitionsByLabels(new HashSet<String>(1) {{ add(ROLE2); }}, id -> true); assertTrue(function.execute(context).contains(DEF_ID1)); }
@Test @SuppressWarnings("unchecked") public void testLookupAllowedDefinitionsByLabels() { when(cache.getDefinitions(eq("label1"))).thenReturn(Collections.singleton(TestingGraphInstanceBuilder.DEF1_ID)); when(definitionsCache.getLabels(eq(TestingGraphInstanceBuilder.DEF1_ID))) .thenReturn(TestingGraphInstanceBuilder.DEF1_LABELS); LookupAllowedDefinitionsByLabels function = new LookupAllowedDefinitionsByLabels(graph1Instance.graph, new HashSet<String>(1) {{ add("label1"); }}, id -> true); Set<String> result = function.execute(context); assertTrue(result.contains(TestingGraphInstanceBuilder.DEF1_ID)); ArgumentCaptor<RuleEvaluationContext> ruleEvaluationContextCaptor = ArgumentCaptor.forClass(RuleEvaluationContext.class); verify(ruleManager, times(1)).evaluate(eq(RULE_SET), ruleEvaluationContextCaptor.capture()); RuleEvaluationContext evaluationContext = ruleEvaluationContextCaptor.getValue(); assertTrue(evaluationContext instanceof CardinalityContext); CardinalityContext cardinalityContext = (CardinalityContext) evaluationContext; assertEquals(1, cardinalityContext.getCandidateCount()); assertEquals(CardinalityContext.Operation.ADD, cardinalityContext.getOperation().get()); }