code-review
Use to review code changes with a two-stage process - first checking spec/requirements…
Use after implementing any feature or fix to ensure comprehensive test coverage. Enforces 90% line coverage in openmetadata-service, integration tests for all API endpoints in openmetadata-integration-tests, and Playwright E2E tests for UI changes.
$ npx -y skills add open-metadata/OpenMetadata --skill test-enforcement --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/test-enforcementContext preview
The summary Claude sees to decide when to auto-load this skill.
Use after implementing any feature or fix to ensure comprehensive test coverage. Enforces 90% line coverage in openmetadata-service, integration tests for all API endpoints in openmetadata-integration-tests, and Playwright E2E tests for UI changes.
name: test-enforcement description: Use after implementing any feature or fix to ensure comprehensive test coverage. Enforces 90% line coverage in openmetadata-service, integration tests for all API endpoints in openmetadata-integration-tests, and Playwright E2E tests for UI changes. user-invocable: true argument-hint: "[PR number, branch name, or file paths]"
Ensure every code change has comprehensive tests — 90% line coverage for service code, integration tests for APIs, and Playwright E2E tests for UI changes.
Determine what changed and classify by layer:
# Branch changes git diff main...HEAD --name-only # Or staged changes git diff --cached --name-only # Or PR changes gh pr diff <number> --name-only
Classify each changed file:
| File path pattern | Layer | Required tests | |---|---|---| | `openmetadata-service/src/main/` | Java backend | Unit tests (90% coverage) + integration tests | | `openmetadata-spec/src/main/resources/json/schema/` | Schema | Regeneration verification + downstream tests | | `openmetadata-integration-tests/` | Integration tests | Self — verify they pass | | `ingestion/src/metadata/` | Python ingestion | pytest unit tests (90% coverage) | | `openmetadata-ui/.../ui/src/` | React frontend | Jest unit tests + Playwright E2E | | `bootstrap/sql/migrations/` | Database | Integration tests verifying migration |
For any changes under `openmetadata-service/src/main/`:
# For a changed class Foo.java, find its test
CHANGED_CLASS="Foo"
find openmetadata-service/src/test -name "${CHANGED_CLASS}Test.java" -o -name "${CHANGED_CLASS}Tests.java"
# Also check integration tests
find openmetadata-integration-tests/src/test -name "*${CHANGED_CLASS}*IT.java"mvn test -pl openmetadata-service -P static-code-analysis -Dtest=<TestClass> # Coverage report: openmetadata-service/target/site/jacoco/index.html
After running tests, check the JaCoCo report for the specific classes you changed:
# Parse the JaCoCo XML report for specific classes REPORT="openmetadata-service/target/site/jacoco/jacoco.xml" # Look for coverage of your specific packages/classes grep -A5 "name=\"YourClassName\"" "$REPORT"
**Target: 90% line coverage on all changed/new classes.**
If coverage is below 90%, create tests following these patterns:
**Unit tests** (`openmetadata-service/src/test/`):
**Do NOT:**
For any changes to REST resources or entity logic:
# Find resource classes that changed git diff main...HEAD --name-only | grep -E "Resource\.java$" # Find the @Path annotations to identify endpoints grep -n "@Path" <resource-file>
# Integration test naming convention: <Entity>IT.java find openmetadata-integration-tests/src/test -name "*IT.java" | sort
Every REST resource should have a corresponding `*IT.java` that tests:
| Operation | What to test | |---|---| | **Create** | Valid creation, duplicate handling, missing required fields | | **Get** | By ID, by name, with fields parameter, not found | | **List** | Pagination, filtering, sorting, limit | | **Update (PUT)** | Full update, partial update, version increment | | **Patch** | JSON patch operations, concurrent modification | | **Delete** | Soft delete, hard delete, cascade behavior | | **Custom endpoints** | Any non-CRUD endpoints specific to the entity |
Tests must follow these patterns:
// Extend BaseEntityIT for entity resources
class MyEntityIT extends BaseEntityIT<MyEntity, CreateMyEntity> {
@Override
protected CreateMyEntity createMinimalRequest(TestNamespace testNamespace) {
// Return minimal valid create request
}
@Test
void testCustomBehavior(TestNamespace testNamespace) {
// Test entity-specific behavior
}
}**Key patterns:**
If an API endpoint lacks integration test coverage:
1. Read the existing `BaseEntityIT` to understand the contract 2. Read a similar entity's IT class as a reference pattern 3. Create the IT class with all CRUD operations tested 4. Add entity-specific endpoint tests 5. Run and verify:
mvn verify -pl openmetadata-integration-tests -Dtest=MyEntityIT
For any changes under `openmetadata-ui/src/main/resources/ui/src/`:
Map changed components to user-facing features:
# What components changed? git diff main...HEAD --name-only | grep -E '\.(tsx?|component\.tsx)$' # What pages/features do they belong to? # Check the component's imports and route usage
# Fin
The Open Context Layer for Data and AI , OpenMetadata is the open platform for building trusted data context and business semantics for humans, AI assistants, and agents.
Repo: open-metadata/OpenMetadata
Use to review code changes with a two-stage process - first checking spec/requirements…
Deep reliability audit for OpenMetadata connectors — runs 7 investigation prompts (metadata,…
Build a new OpenMetadata connector from scratch — scaffold JSON Schema, Python boilerplate,…
Review an OpenMetadata connector against golden standards. Runs multi-agent analysis covering…
Load all OpenMetadata connector development standards into context. Use before building or…
Set up, verify, or repair a local OpenMetadata development environment on macOS or Linux.…