final int minOccurrences = rule.getMinOccurrences(); final int maxOccurrences = rule.getMaxOccurrences(); final int candidatesCount = context.getCandidateCount(); final Optional<CardinalityContext.Operation> operation = context.getOperation(); final EdgeCardinalityContext.Direction direction = rule.getDirection(); final Violation.Type type = operation ); if (_count < minOccurrences) { results.addViolation(new EdgeCardinalityMinRuleViolation(context.getRoles().toString(), context.getEdgeRole(), minOccurrences, candidatesCount, type)); } else if (maxOccurrences > -1 && _count > maxOccurrences) { results.addViolation(new EdgeCardinalityMaxRuleViolation(context.getRoles().toString(), context.getEdgeRole(), maxOccurrences, candidatesCount,
@Override public boolean accepts(final EdgeOccurrences rule, final EdgeCardinalityContext context) { final EdgeCardinalityContext.Direction direction = rule.getDirection(); return context.getEdgeRole().equals(rule.getConnectorRole()) && direction.equals(context.getDirection()) && context.getRoles().contains(rule.getRole()); }
@Before public void setup() throws Exception { when(context.getEdgeRole()).thenReturn(EDGE_ID); when(context.getRoles()).thenReturn(ROLES); tested = new EdgeCardinalityEvaluationHandler(); }
@Test public void testEvaluateInMaxOneFailed() { when(context.getCandidateCount()).thenReturn(1); when(context.getDirection()).thenReturn(EdgeCardinalityContext.Direction.INCOMING); when(context.getOperation()).thenReturn(Optional.of(CardinalityContext.Operation.ADD)); RuleViolations violations = tested.evaluate(RULE_IN_MAX_1, context); assertNotNull(violations); assertTrue(violations.violations(RuleViolation.Type.ERROR).iterator().hasNext()); }
@Test public void testEvaluateInMinOneFailed() { when(context.getCandidateCount()).thenReturn(1); when(context.getDirection()).thenReturn(EdgeCardinalityContext.Direction.INCOMING); when(context.getOperation()).thenReturn(Optional.of(CardinalityContext.Operation.DELETE)); RuleViolations violations = tested.evaluate(RULE_IN_MIN_1, context); assertNotNull(violations); assertTrue(violations.violations(RuleViolation.Type.WARNING).iterator().hasNext()); } }
@Test @SuppressWarnings("unchecked") public void testFilterConnectionTargetDefinitions() { FilterConnectionTargetDefinitions function = new FilterConnectionTargetDefinitions(DEF_ID2, Collections.singleton(DEF_ID1)); Set<String> result = function.execute(context); assertTrue(result.contains(DEF_ID1)); ArgumentCaptor<RuleEvaluationContext> ruleEvaluationContextCaptor = ArgumentCaptor.forClass(RuleEvaluationContext.class); verify(ruleManager, times(1)).evaluate(eq(RULE_SET), ruleEvaluationContextCaptor.capture()); RuleEvaluationContext evaluationContext = ruleEvaluationContextCaptor.getValue(); assertTrue(evaluationContext instanceof EdgeCardinalityContext); EdgeCardinalityContext cardinalityContext = (EdgeCardinalityContext) evaluationContext; assertEquals(DEF_ID2, cardinalityContext.getEdgeRole()); assertEquals(0, cardinalityContext.getCandidateCount()); assertTrue(cardinalityContext.getRoles().contains(ROLE1)); assertEquals(EdgeCardinalityContext.Direction.INCOMING, cardinalityContext.getDirection()); assertEquals(CardinalityContext.Operation.ADD, cardinalityContext.getOperation().get()); } }
@Test public void testEvaluateInMinOneSucess() { when(context.getCandidateCount()).thenReturn(0); when(context.getDirection()).thenReturn(EdgeCardinalityContext.Direction.INCOMING); when(context.getOperation()).thenReturn(Optional.of(CardinalityContext.Operation.ADD)); RuleViolations violations = tested.evaluate(RULE_IN_MIN_1, context); assertNotNull(violations); assertFalse(violations.violations(RuleViolation.Type.ERROR).iterator().hasNext()); }
@Test public void testAccept() { when(context.getDirection()).thenReturn(EdgeCardinalityContext.Direction.OUTGOING); assertFalse(tested.accepts(RULE_IN_MAX_1, context)); when(context.getDirection()).thenReturn(EdgeCardinalityContext.Direction.INCOMING); assertTrue(tested.accepts(RULE_IN_MAX_1, context)); when(context.getEdgeRole()).thenReturn("some-edge"); assertFalse(tested.accepts(RULE_IN_MAX_1, context)); when(context.getEdgeRole()).thenReturn(EDGE_ID); assertTrue(tested.accepts(RULE_IN_MAX_1, context)); when(context.getRoles()).thenReturn(Collections.singleton("some-role")); assertFalse(tested.accepts(RULE_IN_MAX_1, context)); }
@Test public void testEvaluateInMaxOneSucess() { when(context.getCandidateCount()).thenReturn(0); when(context.getDirection()).thenReturn(EdgeCardinalityContext.Direction.INCOMING); when(context.getOperation()).thenReturn(Optional.of(CardinalityContext.Operation.ADD)); RuleViolations violations = tested.evaluate(RULE_IN_MAX_1, context); assertNotNull(violations); assertFalse(violations.violations(RuleViolation.Type.ERROR).iterator().hasNext()); }
@Test public void testEvaluateInNoLimit() { when(context.getCandidateCount()).thenReturn(0); when(context.getDirection()).thenReturn(EdgeCardinalityContext.Direction.INCOMING); when(context.getOperation()).thenReturn(Optional.of(CardinalityContext.Operation.ADD)); RuleViolations violations = tested.evaluate(RULE_IN_NO_LIMIT, context); assertNotNull(violations); assertFalse(violations.violations(RuleViolation.Type.ERROR).iterator().hasNext()); when(context.getCandidateCount()).thenReturn(100); violations = tested.evaluate(RULE_IN_NO_LIMIT, context); assertNotNull(violations); assertFalse(violations.violations(RuleViolation.Type.ERROR).iterator().hasNext()); }