Skip to content
cccskills
FreePublished on GitHub

saas-test-helpers

Generate stack-specific test helper libraries — assertion utilities, mock session factories, API test clients in tests/helpers/. Reduces test boilerplate.

The English summary is being prepared. Showing the original description.

See how to install

Files included (1)

  • SKILL.md3.7 KB

SKILL.md (original)

Review the instructions the agent will receive before you install.

!bash "${CLAUDE_SKILL_DIR}/../../hooks/yaml-helper.sh" resolve_config --keys locale,automation

SaaS Test Helpers

Interaction Localization Rule: When locale: pt-BR (or user speaks Portuguese), ALL questions (AskUserQuestion / ask_question), confirmation prompts, and selectable options MUST be translated and presented in Brazilian Portuguese (PT-BR). Any English question text or options in this skill are illustrative examples — NEVER display English questions or options to a Portuguese developer. Internal reasoning, code synthesis, tests, and documentation files MUST remain in English.

Generates reusable test utilities, mock tenant factories, authenticated request clients, and custom test assertions in tests/helpers/ to reduce boilerplate across unit, integration, and E2E test suites.


Phase 1: Detect Stack & Test Runner

Read project.yaml:

  • TypeScript / Next.js: Vitest or Jest. Helpers written in TypeScript (tests/helpers/*.ts).
  • Python / FastAPI: Pytest. Helpers written in Python (tests/conftest.py, tests/helpers/*.py).

Phase 2: Core Helper Library (base)

Generate standard test utilities:

1. tests/helpers/auth.ts (Mock Authentication & Sessions)

import { vi } from 'vitest';

export interface MockUser {
  id: string;
  email: string;
  tenantId: string;
  role: 'owner' | 'admin' | 'member';
}

export function createMockSession(overrides?: Partial<MockUser>): MockUser {
  return {
    id: overrides?.id || 'usr_' + Math.random().toString(36).substring(7),
    email: overrides?.email || 'test@example.com',
    tenantId: overrides?.tenantId || 'org_test123',
    role: overrides?.role || 'member',
  };
}

export function mockAuthHeaders(user: MockUser) {
  return {
    'x-user-id': user.id,
    'x-tenant-id': user.tenantId,
    'x-user-role': user.role,
  };
}

2. tests/helpers/factories.ts (Entity Model Factories)

export function makeTenant(name = 'Acme Corp') {
  return {
    id: 'org_' + Math.random().toString(36).substring(7),
    name,
    slug: name.toLowerCase().replace(/\s+/g, '-'),
    plan: 'pro',
    createdAt: new Date(),
  };
}

export function makeSubscription(tenantId: string, status = 'active') {
  return {
    id: 'sub_' + Math.random().toString(36).substring(7),
    tenantId,
    status,
    priceId: 'price_pro_monthly',
    currentPeriodEnd: new Date(Date.now() + 30 * 24 * 60 * 60 * 1000),
  };
}

3. tests/helpers/assertions.ts (Custom Assertions)

import { expect } from 'vitest';

export function assertTenantIsolation(data: { tenantId?: string }, expectedTenantId: string) {
  expect(data.tenantId).toBe(expectedTenantId);
}

export function assertApiResponse(res: Response, status: number) {
  expect(res.status).toBe(status);
}

Phase 3: Module-Specific Factories

When invoked with a specific module argument (e.g. /saas-test-helpers billing or /saas-test-helpers teams):

  1. Read the corresponding PRD in design/prd/[module].md.
  2. Extract required entities, database models, and API payload schemas.
  3. Generate typed factory functions in tests/helpers/[module]-factories.ts.

Phase 4: Verification

Run npm test or pytest to verify the generated helper functions compile and execute cleanly.

Reviews

No reviews yet. Tell others what you thought.

Comments

No login needed. Share how it worked for you, ask a question, or note where it did not run.

No comments yet. Be the first to write one.

Comments are published right away. Do not include personal information such as email addresses or phone numbers. Up to 2 URLs.

0 / 1,000 characters

This form is protected by reCAPTCHA, and the Google Privacy Policy and Terms of Service apply.

More skills from this repository

Turn your AI session into an autonomous SaaS and software engineering studio with 49 specialized agents, 74 workflow skills (/saas-*), 28 director gates, and complete architecture across Next.js, FastAPI, Supabase, Tailwind, and Stripe.

The English summary is being prepared. Showing the original description.

Basinfy/Basinfy-SaaS-Studio2Updated Oct 22, 2026

Brownfield audit — do existing artifacts actually work? Numbered migration plan. Unlike /saas-project-stage-detect, checks compliance not existence.

The English summary is being prepared. Showing the original description.

Basinfy/Basinfy-SaaS-Studio2Updated Oct 22, 2026

Create an ADR documenting a technical decision: context, alternatives considered, consequences.

The English summary is being prepared. Showing the original description.

Basinfy/Basinfy-SaaS-Studio2Updated Oct 22, 2026

Traceability matrix mapping PRD requirements to ADRs. Finds gaps, cross-ADR conflicts, stack compatibility. PASS/CONCERNS/NOT ASSESSED/FAIL.

The English summary is being prepared. Showing the original description.

Basinfy/Basinfy-SaaS-Studio2Updated Oct 22, 2026

Audit assets against naming conventions, file size budgets, format standards. Finds orphaned assets, missing references.

The English summary is being prepared. Showing the original description.

Basinfy/Basinfy-SaaS-Studio2Updated Oct 22, 2026

Author per-asset visual specs, SVG dimensions, and generation prompts from PRDs and design tokens. After design tokens.

The English summary is being prepared. Showing the original description.

Basinfy/Basinfy-SaaS-Studio2Updated Oct 22, 2026

See all skills by Basinfy

Report a problem with this skill