agentskills.codes
SE

semoss-testing-ci

Use when the user wants to add JUnit/Mockito tests for Java reactors, set up pre-commit hooks (husky + the pre-commit framework), or wire GitHub Actions CI (lint + unit-test workflows) to a SEMOSS app. The base template ships none of this to stay lean — this skill carries the full, working setup as

Install

mkdir -p .claude/skills/semoss-testing-ci && curl -L -o skill.zip "https://agentskills.codes/api/skills/download/13257" && unzip -o skill.zip -d .claude/skills/semoss-testing-ci && rm skill.zip

Installs to .claude/skills/semoss-testing-ci

Activation

This is the description your AI agent reads to decide when to run this skill — the better it matches your request, the more reliably it fires.

Use when the user wants to add JUnit/Mockito tests for Java reactors, set up pre-commit hooks (husky + the pre-commit framework), or wire GitHub Actions CI (lint + unit-test workflows) to a SEMOSS app. The base template ships none of this to stay lean — this skill carries the full, working setup as reference files under reference/ that you copy back in and adapt. Do not use for the deploy flow (see semoss-deploy) or routine linting, which is just `pnpm fix` (Biome) at the repo root.
487 chars✓ has a “when” triggerlonger than Claude Code's old 250-char listing cap (fine on current versions)

About this skill

Testing & CI Setup

The base template intentionally ships no test suite, pre-commit hooks, or CI workflows — most apps don't need them, and they add noise. This skill holds a complete, working setup harvested from the template, ready to reintroduce when a user asks for "tests for my reactor," "a pre-commit hook," or "CI."

Everything below lives verbatim under reference/ in this skill directory. The workflow is: copy the relevant reference files into the project at the paths shown, then make the matching pom.xml / package.json edits, then install tooling.

Routine linting is not this skill. Day-to-day formatting/linting is just pnpm fix (Biome) at the repo root — that stays in the base template. This skill is only for the heavier testing/hook/CI scaffolding.

1. Java reactor unit tests (JUnit 5 + Mockito)

Files (copy reference/test/ → project test/):

  • test/reactors/BaseReactorTest.java — base class with the common mocks: Insight, User, NounStore, PyTranslator, a static AssetUtility mock, and a @TempDir. Provides setReactorParameter(...) (sets the reactor's keyValue map via reflection), setupPyTranslatorMocks(...), createPythonFile(...), and a configureProjectProperties override hook. All reactor tests extend this.
  • test/reactors/GetWeatherReactorTest.java — worked example: valid input, missing param (error path), values with spaces, and the description-method assertions. Mirror this shape (Arrange-Act-Assert, @DisplayName) for new reactors.
  • test/reactors/ReactorTestSuite.java@Suite + @SelectClasses({...}). Add each new test class here so mvn test -Dtest=ReactorTestSuite runs them all.
  • test/resources/log4j2-test.xml — silences logging during tests.

pom.xml edits — under <build> add the test source/output/resource wiring:

<testSourceDirectory>test</testSourceDirectory>
<testOutputDirectory>test-classes</testOutputDirectory>
<testResources>
  <testResource>
    <directory>test/resources</directory>
  </testResource>
</testResources>

Under <dependencies> add the test-scope deps (byte-buddy/objenesis excluded from Mockito because SEMOSS already provides them at runtime):

<dependency>
  <groupId>org.junit.jupiter</groupId>
  <artifactId>junit-jupiter</artifactId>
  <version>6.0.0</version>
  <scope>test</scope>
</dependency>
<dependency>
  <groupId>org.junit.platform</groupId>
  <artifactId>junit-platform-suite</artifactId>
  <version>6.0.0</version>
  <scope>test</scope>
</dependency>
<dependency>
  <groupId>org.mockito</groupId>
  <artifactId>mockito-core</artifactId>
  <version>5.18.0</version>
  <scope>test</scope>
  <exclusions>
    <exclusion><groupId>net.bytebuddy</groupId><artifactId>byte-buddy</artifactId></exclusion>
    <exclusion><groupId>org.objenesis</groupId><artifactId>objenesis</artifactId></exclusion>
  </exclusions>
</dependency>

Run: mvn test (all), mvn test -Dtest=ReactorTestSuite, or mvn test -Dtest=GetWeatherReactorTest#testGetWeather_validCity (single method).

2. Pre-commit hooks (husky + pre-commit framework)

Two layers run on git commit:

  • Husky (reference/husky/.husky/) — pre-commit runs lint-staged (Biome on staged FE files) then the Python pre-commit framework on staged BE files; commit-msg runs commitizen for conventional-commit linting.
  • pre-commit framework (reference/.pre-commit-config.yaml → repo root) — Java (pretty-format-java/google-java-format), Python (black, isort, mypy), plus YAML/XML/whitespace/merge-conflict hooks.

package.json edits — restore the devDeps, the lint-staged block, and the fuller fix script (the lean template's fix is Biome-only):

"scripts": {
  "fix": "biome check --write && pre-commit run --all-files || pre-commit run --all-files"
},
"devDependencies": {
  "husky": "^9.1.7",
  "lint-staged": "^16.4.0"
},
"lint-staged": {
  "**/*.{js,jsx,ts,tsx,json,html,css}": ["biome check --write --no-errors-on-unmatched"]
}

Install: pnpm install, then pnpm exec husky (initializes .husky/_), and pip install pre-commit (or uv tool install pre-commit) for the Python framework. The pretty-format-java hook needs a JDK on PATH.

3. GitHub Actions CI

Copy reference/workflows/.github/workflows/. Both trigger on pull_request + workflow_dispatch.

  • pre-commit.yml — installs pnpm/Node, runs Biome on client/, then runs the pre-commit framework across all files (caches hook envs, uv, and a JDK).
  • unit-test.yml — Maven container; caches ~/.m2, runs mvn install -DskipTests then mvn test. Has workflow_dispatch inputs for the SNAPSHOT version and a clean-install toggle.

Adapt before use. These came from the platform's own CI: they target a self-hosted runner (codebuild-semoss-github-runner-...) and a 5.3.0-SNAPSHOT SEMOSS version. For an app repo on GitHub-hosted runners, swap runs-on to e.g. ubuntu-latest and set the snapshot to your instance's SEMOSS version. The template also kept disabled copies under .github/workflows/.disabled/ as a parking spot — replicate that pattern if you want a workflow staged but not firing.

Search skills

Search the agent skills registry