You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ofbiz.apache.org by as...@apache.org on 2026/08/20 13:38:41 UTC
(ofbiz-plugins) branch trunk updated: Fix ExampleJupiterTests CodeNarc violations and invalid status transition (#371)
This is an automated email from the ASF dual-hosted git repository.
ashishvijaywargiya pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/ofbiz-plugins.git
The following commit(s) were added to refs/heads/trunk by this push:
new d8d453efc Fix ExampleJupiterTests CodeNarc violations and invalid status transition (#371)
d8d453efc is described below
commit d8d453efc97d21df8963f2be9019aa3ccc59c3bc
Author: Ashish Vijaywargiya <as...@apache.org>
AuthorDate: Thu Aug 20 19:08:35 2026 +0530
Fix ExampleJupiterTests CodeNarc violations and invalid status transition (#371)
### Problem
Trunk CI (`ofbizTrunkFrameworkPlugins` builder, [build
1756](https://ci2.apache.org/#/builders/46/builds/1756)) started failing
right after the REST API test-cases-api-support merge (#370), on two
independent issues in `ExampleJupiterTests.groovy`:
1. **`check` step** — `codenarcTest` failed with 4 violations (2
priority-2, 2 priority-3), exceeding the allowed threshold:
- `shouldCreateExample()` / `shouldCreateExampleWithParams()` — flagged
by `JUnitTestMethodWithoutAssert` because they only assert indirectly,
through the private `createAndAssertExample()` helper
- `createAndAssertExample(...)` — wrong indentation (`Indentation` rule)
- `exampleCreationCases()` — private static method declared after a
private instance method (`StaticMethodsBeforeInstanceMethods` rule)
2. **`testIntegration` step** — `shouldUpdateExample()` asserted a
direct `EXST_IN_DESIGN -> EXST_APPROVED` status update, which isn't a
valid transition per `ExampleDemoData.xml`'s `StatusValidChange` rows
(the valid path is `IN_DESIGN -> DEFINED -> APPROVED`), so
`updateExample` correctly errored and the assertion failed.
### Fix
- Added a direct assert in `shouldCreateExample()` /
`shouldCreateExampleWithParams()` on the returned `Example`
- Fixed `createAndAssertExample`'s indentation
- Reordered `exampleCreationCases()` before `createAndAssertExample()`
- Changed `shouldUpdateExample()`'s default `updatedStatusId` from
`EXST_APPROVED` to `EXST_DEFINED`, a transition that's actually
reachable from the default initial `EXST_IN_DESIGN` status in one call
### Verification
- `./gradlew codenarcTest` passes (previously failed with the exact
violations CI reported)
- `./gradlew compileTestGroovy` compiles clean
- Confirmed `EXST_IN_DESIGN -> EXST_DEFINED` is a valid transition by
inspecting `StatusValidChange` seed data in `ExampleDemoData.xml`
---
.../test/jupiter/ExampleJupiterTests.groovy | 38 +++++++++++++---------
1 file changed, 22 insertions(+), 16 deletions(-)
diff --git a/example/src/test/groovy/org/apache/ofbiz/example/test/jupiter/ExampleJupiterTests.groovy b/example/src/test/groovy/org/apache/ofbiz/example/test/jupiter/ExampleJupiterTests.groovy
index 315546b19..cbd812638 100644
--- a/example/src/test/groovy/org/apache/ofbiz/example/test/jupiter/ExampleJupiterTests.groovy
+++ b/example/src/test/groovy/org/apache/ofbiz/example/test/jupiter/ExampleJupiterTests.groovy
@@ -51,7 +51,8 @@ class ExampleJupiterTests implements JupiterTestHelper {
@Test
@Order(1)
void shouldCreateExample() {
- createAndAssertExample('Test Example - Integration')
+ GenericValue example = createAndAssertExample('Test Example - Integration')
+ assert example != null
}
@ParameterizedTest(name = '[{index}] exampleTypeId={0}')
@@ -118,7 +119,8 @@ class ExampleJupiterTests implements JupiterTestHelper {
@Test
@Order(5)
void shouldCreateExampleWithParams() {
- createAndAssertExample('Test Example - Default')
+ GenericValue example = createAndAssertExample('Test Example - Default')
+ assert example != null
}
@Test
@@ -144,8 +146,12 @@ class ExampleJupiterTests implements JupiterTestHelper {
assert ServiceUtil.isSuccess(createResult)
String exampleId = createResult.exampleId
+ // EXST_APPROVED isn't reachable directly from EXST_IN_DESIGN per ExampleDemoData.xml's
+ // StatusValidChange rows (IN_DESIGN -> DEFINED -> APPROVED) - EXST_DEFINED is the default
+ // here because it's the one status updateExample can always reach from the default initial
+ // statusId above in a single call.
String updatedExampleName = testParams.updatedExampleName ?: 'Test Example - After Update'
- String updatedStatusId = testParams.updatedStatusId ?: 'EXST_APPROVED'
+ String updatedStatusId = testParams.updatedStatusId ?: 'EXST_DEFINED'
Map<String, Object> updateResult = dispatcher.runSync('updateExample', [
exampleId: exampleId,
@@ -163,6 +169,18 @@ class ExampleJupiterTests implements JupiterTestHelper {
assert example.statusId == updatedStatusId
}
+ @SuppressWarnings('UnusedPrivateMethod')
+ private static List<Arguments> exampleCreationCases() {
+ [
+ Arguments.of('real-world-in-design', 'REAL_WORLD', 'EXST_IN_DESIGN', 'Test Example - Real World', true),
+ Arguments.of('made-up-defined', 'MADE_UP', 'EXST_DEFINED', 'Test Example - Made Up', true),
+ Arguments.of('contrived-approved', 'CONTRIVED', 'EXST_APPROVED', 'Test Example - Contrived', true),
+ Arguments.of('inspired-implemented', 'INSPIRED', 'EXST_IMPLEMENTED', 'Test Example - Inspired', true),
+ Arguments.of('missing-example-type-fails', null, 'EXST_IN_DESIGN', 'Test Example - Missing Type', false),
+ Arguments.of('missing-example-name-fails', 'REAL_WORLD', 'EXST_IN_DESIGN', null, false),
+ ]
+ }
+
/**
* Creates an Example from testParams-driven exampleTypeId/exampleName/statusId (each falling
* back to a default) and asserts the createExample service succeeded and that the persisted
@@ -172,7 +190,7 @@ class ExampleJupiterTests implements JupiterTestHelper {
* @param defaultExampleName the exampleName to use when testParams doesn't override it
* @return the created, already-asserted Example
*/
- private GenericValue createAndAssertExample(String defaultExampleName) {
+ private GenericValue createAndAssertExample(String defaultExampleName) {
GenericValue userLogin = delegator.findOne('UserLogin', [userLoginId: 'system'], false)
String exampleTypeId = testParams.exampleTypeId ?: 'CONTRIVED'
String exampleName = testParams.exampleName ?: defaultExampleName
@@ -194,16 +212,4 @@ class ExampleJupiterTests implements JupiterTestHelper {
example
}
- @SuppressWarnings('UnusedPrivateMethod')
- private static List<Arguments> exampleCreationCases() {
- [
- Arguments.of('real-world-in-design', 'REAL_WORLD', 'EXST_IN_DESIGN', 'Test Example - Real World', true),
- Arguments.of('made-up-defined', 'MADE_UP', 'EXST_DEFINED', 'Test Example - Made Up', true),
- Arguments.of('contrived-approved', 'CONTRIVED', 'EXST_APPROVED', 'Test Example - Contrived', true),
- Arguments.of('inspired-implemented', 'INSPIRED', 'EXST_IMPLEMENTED', 'Test Example - Inspired', true),
- Arguments.of('missing-example-type-fails', null, 'EXST_IN_DESIGN', 'Test Example - Missing Type', false),
- Arguments.of('missing-example-name-fails', 'REAL_WORLD', 'EXST_IN_DESIGN', null, false),
- ]
- }
-
}