agentsclimarketplace

Uw analyze unit tests

Skill nearform/unwind/skills/uw-analyze-unit-tests

Use when analyzing unit test coverage, patterns, and test code for isolated component testingFrom its SKILL.md

Install
npx -y skills add nearform/unwind --skill uw-analyze-unit-tests

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

One thing to look at

  • 9 stars9 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

SKILL.md

5.5 KB, as published. Nobody here has run it

Analyzing Unit Tests

Output: docs/unwind/layers/unit-tests/ (folder with index.md + section files)

Principles: See analysis-principles.md - completeness, machine-readable, link to source, no commentary, incremental writes.

Output Structure

docs/unwind/layers/unit-tests/
├── index.md           # Test summary, coverage overview
├── service-tests.md   # Service layer tests
├── domain-tests.md    # Domain/entity tests
├── utilities.md       # Test utilities, factories
└── coverage-gaps.md   # Classes without tests

For large codebases (50+ test files), split by domain:

docs/unwind/layers/unit-tests/
├── index.md
├── users-tests.md
├── orders-tests.md
└── ...

Process (Incremental Writes)

Step 1: Setup

mkdir -p docs/unwind/layers/unit-tests/

Write initial index.md:

# Unit Tests

## Sections
- [Service Tests](service-tests.md) - _pending_
- [Domain Tests](domain-tests.md) - _pending_
- [Test Utilities](utilities.md) - _pending_
- [Coverage Gaps](coverage-gaps.md) - _pending_

## Summary
_Analysis in progress..._

Step 2: Analyze and write service-tests.md

  1. Find all service layer tests
  2. Include actual test code showing what is tested
  3. Write service-tests.md immediately
  4. Update index.md

Step 3: Analyze and write domain-tests.md

  1. Find all domain/entity tests
  2. Write domain-tests.md immediately
  3. Update index.md

Step 4: Analyze and write utilities.md

  1. Find test utilities, factories, mocks
  2. Write utilities.md immediately
  3. Update index.md

Step 5: Analyze and write coverage-gaps.md

  1. Identify classes without tests
  2. Write coverage-gaps.md immediately
  3. Update index.md

Step 6: Finalize index.md Add coverage summary table

Output Format

# Unit Tests

## Configuration

[pom.xml test dependencies](https://github.com/owner/repo/blob/main/pom.xml#L50-L70)

```xml
<dependency>
    <groupId>org.junit.jupiter</groupId>
    <artifactId>junit-jupiter</artifactId>
    <version>5.9.0</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>org.mockito</groupId>
    <artifactId>mockito-core</artifactId>
    <version>5.0.0</version>
    <scope>test</scope>
</dependency>

Test Summary

LayerClassesTestedCoverage
Service121083%
Domain88100%
Repository6467%

Service Tests

UserServiceTest

UserServiceTest.java

@ExtendWith(MockitoExtension.class)
class UserServiceTest {

    @Mock
    private UserRepository userRepository;

    @Mock
    private PasswordEncoder passwordEncoder;

    @InjectMocks
    private UserService userService;

    @Test
    void createUser_success() {
        CreateUserRequest request = new CreateUserRequest("[email protected]", "password", "Test");
        when(userRepository.existsByEmail(request.email())).thenReturn(false);
        when(passwordEncoder.encode(request.password())).thenReturn("encoded");
        when(userRepository.save(any())).thenAnswer(inv -> inv.getArgument(0));

        User result = userService.createUser(request);

        assertThat(result.getEmail()).isEqualTo("[email protected]");
        verify(userRepository).save(any());
    }

    @Test
    void createUser_duplicateEmail_throws() {
        CreateUserRequest request = new CreateUserRequest("[email protected]", "password", "Test");
        when(userRepository.existsByEmail(request.email())).thenReturn(true);

        assertThrows(DuplicateEmailException.class, () -> userService.createUser(request));
    }
}

Tests: createUser_success, createUser_duplicateEmail_throws, getUser_success, getUser_notFound_throws

[Continue for ALL test classes...]

Domain Tests

UserTest

UserTest.java

class UserTest {

    @Test
    void suspend_activeUser_setsSuspended() {
        User user = new User("[email protected]", "hash");
        user.setStatus(UserStatus.ACTIVE);

        user.suspend();

        assertThat(user.getStatus()).isEqualTo(UserStatus.SUSPENDED);
    }

    @Test
    void suspend_deletedUser_throws() {
        User user = new User("[email protected]", "hash");
        user.setStatus(UserStatus.DELETED);

        assertThrows(IllegalStateException.class, () -> user.suspend());
    }
}

Test Utilities

TestDataFactory

TestDataFactory.java

public class TestDataFactory {
    public static User createUser() {
        return new User("[email protected]", "encodedPassword");
    }

    public static Order createOrder(User user) {
        Order order = new Order(user);
        order.addItem(createProduct(), 2);
        return order;
    }
}

Coverage Gaps

Classes without unit tests:

  • PaymentService
  • NotificationService
  • LegacyOrderAdapter

Unknowns

  • [List anything unclear]

## Refresh Mode

If `docs/unwind/layers/unit-tests/` exists, compare current state and add `## Changes Since Last Review` section to `index.md`.

Keep looking

Skills are one crate of 627,801. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.