up
This commit is contained in:
@@ -408,4 +408,83 @@ class TransitionLinkerEnricherTest {
|
||||
assertThat(resComp.getMetadata().getCallChains().get(2).getMatchedTransitions()).isNullOrEmpty(); // Groc
|
||||
}
|
||||
|
||||
@Test
|
||||
void shouldHandleMultipleNegations() {
|
||||
Transition t1 = new Transition();
|
||||
t1.setSourceStates(List.of(State.of("NEW", "NEW")));
|
||||
t1.setTargetStates(List.of(State.of("PAID", "PAID")));
|
||||
t1.setEvent(Event.of("PAY", "PAY"));
|
||||
|
||||
// Case 1: Double Negation on ORDER -> !(!(ORDER)) -> Should act as POSITIVE (meaning order is required).
|
||||
// Since we are running OrderStateMachineConfiguration, it should match!
|
||||
CallChain chain1 = CallChain.builder()
|
||||
.triggerPoint(TriggerPoint.builder()
|
||||
.event("PAY")
|
||||
.constraint("!(!(ORDER.equals(type)))")
|
||||
.build())
|
||||
.build();
|
||||
|
||||
AnalysisResult resultOrder = AnalysisResult.builder()
|
||||
.name("com.example.OrderStateMachineConfiguration")
|
||||
.transitions(List.of(t1))
|
||||
.metadata(CodebaseMetadata.builder().callChains(List.of(chain1)).build())
|
||||
.build();
|
||||
|
||||
enricher.enrich(resultOrder, null, null);
|
||||
assertThat(resultOrder.getMetadata().getCallChains().get(0).getMatchedTransitions()).hasSize(1);
|
||||
|
||||
// Case 2: Triple Negation on ORDER -> !(!(!(ORDER))) -> Should act as NEGATIVE (meaning order is rejected/forbidden).
|
||||
// Under OrderStateMachineConfiguration, this chain should be rejected!
|
||||
CallChain chain2 = CallChain.builder()
|
||||
.triggerPoint(TriggerPoint.builder()
|
||||
.event("PAY")
|
||||
.constraint("!(!(!(ORDER.equals(type))))")
|
||||
.build())
|
||||
.build();
|
||||
|
||||
AnalysisResult resultOrder2 = AnalysisResult.builder()
|
||||
.name("com.example.OrderStateMachineConfiguration")
|
||||
.transitions(List.of(t1))
|
||||
.metadata(CodebaseMetadata.builder().callChains(List.of(chain2)).build())
|
||||
.build();
|
||||
|
||||
enricher.enrich(resultOrder2, null, null);
|
||||
assertThat(resultOrder2.getMetadata().getCallChains().get(0).getMatchedTransitions()).isNullOrEmpty();
|
||||
}
|
||||
|
||||
@Test
|
||||
void shouldHandleComplexBooleanLogic() {
|
||||
Transition t1 = new Transition();
|
||||
t1.setSourceStates(List.of(State.of("NEW", "NEW")));
|
||||
t1.setTargetStates(List.of(State.of("PAID", "PAID")));
|
||||
t1.setEvent(Event.of("PAY", "PAY"));
|
||||
|
||||
// Case 1: OR expression -> "ORDER".equals(type) || "DOCUMENT".equals(type)
|
||||
// Under OrderStateMachineConfiguration, it should match!
|
||||
CallChain chain1 = CallChain.builder()
|
||||
.triggerPoint(TriggerPoint.builder()
|
||||
.event("PAY")
|
||||
.constraint("\"ORDER\".equalsIgnoreCase(type) || \"DOCUMENT\".equalsIgnoreCase(type)")
|
||||
.build())
|
||||
.build();
|
||||
|
||||
AnalysisResult resultOrder = AnalysisResult.builder()
|
||||
.name("com.example.OrderStateMachineConfiguration")
|
||||
.transitions(List.of(t1))
|
||||
.metadata(CodebaseMetadata.builder().callChains(List.of(chain1)).build())
|
||||
.build();
|
||||
|
||||
enricher.enrich(resultOrder, null, null);
|
||||
assertThat(resultOrder.getMetadata().getCallChains().get(0).getMatchedTransitions()).hasSize(1);
|
||||
|
||||
// Case 2: Under UserStateMachineConfiguration, it should be rejected!
|
||||
AnalysisResult resultUser = AnalysisResult.builder()
|
||||
.name("com.example.UserStateMachineConfiguration")
|
||||
.transitions(List.of(t1))
|
||||
.metadata(CodebaseMetadata.builder().callChains(List.of(chain1)).build())
|
||||
.build();
|
||||
|
||||
enricher.enrich(resultUser, null, null);
|
||||
assertThat(resultUser.getMetadata().getCallChains().get(0).getMatchedTransitions()).isNullOrEmpty();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user