[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M7CSFBA8BPZD2KAMR8GPD3ZA":3,"skill-same:01M7CSFBA8BPZD2KAMR8GPD3ZA":48},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":19,"linkOnly":20,"markdownContent":21,"markdownBody":22,"frontMatter":23,"refName":25,"commitSha":26,"skillDirectory":27,"forksCount":28,"repositoryHtmlUrl":29,"repositoryHomepageUrl":30,"ownerHtmlUrl":31,"ownerBlogUrl":6,"ownerDescription":32,"updatedAt":33,"install":34,"resources":47},"01M7CSFBA8BPZD2KAMR8GPD3ZA","test-database-seeding",null,"Use when a test needs a database - spin up a dedicated, disposable test database (Testcontainers) seeded with known data, never a shared or production database","makifbaysal\u002Ftasktrooper","makifbaysal","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F25031940?v=4","01M7CRG3ZCSYZSSEVDMW3DEYC8","Mehmet Akif Baysal","01M7CRG401FJ8YAXH5ER730XYV",122,"Apache-2.0","https:\u002F\u002Fgithub.com\u002Fmakifbaysal\u002Ftasktrooper\u002Fblob\u002Fmain\u002Fcatalog\u002Fagents\u002Fqa-agent\u002Fskills\u002Ftest-database-seeding\u002FSKILL.md",[],[],"2026-11-15 14:19:17",false,"---\nname: test-database-seeding\ncategory: testing\ndescription: Use when a test needs a database - spin up a dedicated, disposable test database (Testcontainers) seeded with known data, never a shared or production database\nenabled: false\n---\n# Test Database Seeding\n\n## Overview\n\nAutomated tests need a database that is real (same engine as production), isolated (no shared state), and seeded with known data. The answer is a disposable, per-run database — Testcontainers spins up a real Postgres in a container, migrated and seeded, torn down after.\n\n**Core principle:** Real engine, disposable instance, known seed. Never point tests at a shared dev or production database, and never use an in-memory substitute whose SQL differs from production.\n\n## Why not the alternatives\n\n| Approach | Problem |\n|----------|---------|\n| Shared dev\u002Fstaging DB | Flaky: other work mutates it; tests collide and depend on order |\n| Production DB | Never — data risk, and tests would mutate real records |\n| In-memory (H2\u002FSQLite) | Dialect gaps: queries pass in H2, fail on Postgres → bugs ship |\n| Disposable real DB (Testcontainers) | ✅ real engine, isolated, reproducible |\n\n## The Pattern\n\n1. **Start a real DB container** for the suite (Testcontainers): `postgres:\u003Csame-major-as-prod>`.\n2. **Run the real migrations** against it — the same migration files the app uses, so the schema is production-accurate.\n3. **Seed known fixtures**: insert the exact rows the scenario needs (a project, N tasks, a user with a role). Keep fixtures small and explicit — a test asserting \"3 tasks\" seeds exactly 3.\n4. **Isolate per test:** each test either runs in a transaction rolled back at the end, or truncates\u002Freseeds between tests. No test sees another's data.\n5. **Point the app\u002Fconfig** at the container's connection string for the run.\n6. **Tear down** automatically when the suite ends.\n\n## Worked Example\n\n```java\n@Testcontainers\nclass TaskExportIT {\n    @Container static PostgreSQLContainer\u003C?> db =\n        new PostgreSQLContainer\u003C>(\"postgres:16\");\n\n    @BeforeAll static void migrate() { Flyway.configure().dataSource(db.getJdbcUrl(),\n        db.getUsername(), db.getPassword()).load().migrate(); }   \u002F\u002F real migrations\n\n    @BeforeEach void seed() {\n        \u002F\u002F exactly the rows this scenario needs\n        insertProject(\"p1\", \"Demo\");\n        insertTasks(\"p1\", 3);\n    }\n\n    @Test void export_returns_all_tasks() {\n        var csv = export(\"p1\");\n        assertEquals(3, csvRows(csv));   \u002F\u002F asserts against the known seed\n    }\n}\n```\n\nSame idea in Go (Testcontainers-Go), Node (testcontainers), etc. — a real Postgres, real migrations, explicit seed.\n\n## Rules\n\n- The container's engine and MAJOR version match production. No dialect gambling.\n- Migrations come from the app, not a hand-written schema — a stale test schema hides real migration bugs.\n- Seeds are explicit and minimal; assertions reference the seeded values.\n- Each test is independent (transaction rollback or reseed) and order-independent.\n- Combine with test-doubles-wiremock: real DB, stubbed external HTTP.\n\n## Common Mistakes\n\n- Pointing tests at a shared dev database → collisions and flakiness.\n- H2\u002FSQLite instead of the real engine → dialect bugs ship green.\n- Hand-maintained test schema that drifts from the real migrations.\n- Tests that leave data behind and only pass in a specific order.\n\n## Red Flags\n\n- A test fails when run alone but passes in the suite (or vice versa) → shared\u002Fleftover state.\n- The test DB schema was created by a script other than the app's migrations.\n- Query passes in tests but fails in production → you tested a different engine.\n","# Test Database Seeding\n\n## Overview\n\nAutomated tests need a database that is real (same engine as production), isolated (no shared state), and seeded with known data. The answer is a disposable, per-run database — Testcontainers spins up a real Postgres in a container, migrated and seeded, torn down after.\n\n**Core principle:** Real engine, disposable instance, known seed. Never point tests at a shared dev or production database, and never use an in-memory substitute whose SQL differs from production.\n\n## Why not the alternatives\n\n| Approach | Problem |\n|----------|---------|\n| Shared dev\u002Fstaging DB | Flaky: other work mutates it; tests collide and depend on order |\n| Production DB | Never — data risk, and tests would mutate real records |\n| In-memory (H2\u002FSQLite) | Dialect gaps: queries pass in H2, fail on Postgres → bugs ship |\n| Disposable real DB (Testcontainers) | ✅ real engine, isolated, reproducible |\n\n## The Pattern\n\n1. **Start a real DB container** for the suite (Testcontainers): `postgres:\u003Csame-major-as-prod>`.\n2. **Run the real migrations** against it — the same migration files the app uses, so the schema is production-accurate.\n3. **Seed known fixtures**: insert the exact rows the scenario needs (a project, N tasks, a user with a role). Keep fixtures small and explicit — a test asserting \"3 tasks\" seeds exactly 3.\n4. **Isolate per test:** each test either runs in a transaction rolled back at the end, or truncates\u002Freseeds between tests. No test sees another's data.\n5. **Point the app\u002Fconfig** at the container's connection string for the run.\n6. **Tear down** automatically when the suite ends.\n\n## Worked Example\n\n```java\n@Testcontainers\nclass TaskExportIT {\n    @Container static PostgreSQLContainer\u003C?> db =\n        new PostgreSQLContainer\u003C>(\"postgres:16\");\n\n    @BeforeAll static void migrate() { Flyway.configure().dataSource(db.getJdbcUrl(),\n        db.getUsername(), db.getPassword()).load().migrate(); }   \u002F\u002F real migrations\n\n    @BeforeEach void seed() {\n        \u002F\u002F exactly the rows this scenario needs\n        insertProject(\"p1\", \"Demo\");\n        insertTasks(\"p1\", 3);\n    }\n\n    @Test void export_returns_all_tasks() {\n        var csv = export(\"p1\");\n        assertEquals(3, csvRows(csv));   \u002F\u002F asserts against the known seed\n    }\n}\n```\n\nSame idea in Go (Testcontainers-Go), Node (testcontainers), etc. — a real Postgres, real migrations, explicit seed.\n\n## Rules\n\n- The container's engine and MAJOR version match production. No dialect gambling.\n- Migrations come from the app, not a hand-written schema — a stale test schema hides real migration bugs.\n- Seeds are explicit and minimal; assertions reference the seeded values.\n- Each test is independent (transaction rollback or reseed) and order-independent.\n- Combine with test-doubles-wiremock: real DB, stubbed external HTTP.\n\n## Common Mistakes\n\n- Pointing tests at a shared dev database → collisions and flakiness.\n- H2\u002FSQLite instead of the real engine → dialect bugs ship green.\n- Hand-maintained test schema that drifts from the real migrations.\n- Tests that leave data behind and only pass in a specific order.\n\n## Red Flags\n\n- A test fails when run alone but passes in the suite (or vice versa) → shared\u002Fleftover state.\n- The test DB schema was created by a script other than the app's migrations.\n- Query passes in tests but fails in production → you tested a different engine.\n",{"name":5,"enabled":20,"category":24,"description":7},"testing","main","910394a0b6db9fc8c9a8f36328ec421d3ebd8b38","catalog\u002Fagents\u002Fqa-agent\u002Fskills\u002Ftest-database-seeding",18,"https:\u002F\u002Fgithub.com\u002Fmakifbaysal\u002Ftasktrooper","https:\u002F\u002Ftasktrooper.ai","https:\u002F\u002Fgithub.com\u002Fmakifbaysal","Senior Software Developer","2026-11-15 04:50:29",{"source":8,"skillName":5,"commands":35,"prompt":45,"zipAvailable":46},[36,39,42],{"tool":37,"command":38},"npx","npx skills add makifbaysal\u002Ftasktrooper --skill test-database-seeding",{"tool":40,"command":41},"bunx","bunx skills add makifbaysal\u002Ftasktrooper --skill test-database-seeding",{"tool":43,"command":44},"pnpm","pnpm dlx skills add makifbaysal\u002Ftasktrooper --skill test-database-seeding","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fmakifbaysal\u002Ftasktrooper\u002Fblob\u002Fmain\u002Fcatalog\u002Fagents\u002Fqa-agent\u002Fskills\u002Ftest-database-seeding\u002FSKILL.md",true,[],[49,55,62,69,76,83],{"skillNo":50,"name":51,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":52,"categories":53,"keywords":54,"publishedAt":19},"01M7CSVEPQW6J6TD6CS2T5FPNZ","visual-craft","https:\u002F\u002Fgithub.com\u002Fmakifbaysal\u002Ftasktrooper\u002Fblob\u002Fmain\u002Fcatalog\u002Fagents\u002Fui-designer\u002Fskills\u002Fvisual-craft\u002FSKILL.md",[],[],{"skillNo":56,"name":57,"nameZh":6,"description":58,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":59,"categories":60,"keywords":61,"publishedAt":19},"01M7CSVAQG91ETHQ0HBNZDG5FR","ux-copy","Use when you write any words a user reads in a mockup or a hand-off - content language and voice, buttons, labels, errors, empty states, confirmations, numbers and dates, and the longest-string check","https:\u002F\u002Fgithub.com\u002Fmakifbaysal\u002Ftasktrooper\u002Fblob\u002Fmain\u002Fcatalog\u002Fagents\u002Fui-designer\u002Fskills\u002Fux-copy\u002FSKILL.md",[],[],{"skillNo":63,"name":64,"nameZh":6,"description":65,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":66,"categories":67,"keywords":68,"publishedAt":19},"01M7CSV6H0J38659NDXHJQ8396","screen-mockup-html","Use when you draw screens as the design task's HTML mockup - ONE canvas document holding every screen and every variant side by side, the sanitizer-safe recipe, phone and wide frames, the states grid, static control states, and the loopback self-check with screenshots at 375, 768 and 1440 attached to the task","https:\u002F\u002Fgithub.com\u002Fmakifbaysal\u002Ftasktrooper\u002Fblob\u002Fmain\u002Fcatalog\u002Fagents\u002Fui-designer\u002Fskills\u002Fscreen-mockup-html\u002FSKILL.md",[],[],{"skillNo":70,"name":71,"nameZh":6,"description":72,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":73,"categories":74,"keywords":75,"publishedAt":19},"01M7CSV3JFRF3BM3XK52M7YEYR","performance-awareness","How the performance score moves for your role. Use when the score context shows a declining trend, or before handing off work you have not self-checked against every criterion.","https:\u002F\u002Fgithub.com\u002Fmakifbaysal\u002Ftasktrooper\u002Fblob\u002Fmain\u002Fcatalog\u002Fagents\u002Fui-designer\u002Fskills\u002Fperformance-awareness\u002FSKILL.md",[],[],{"skillNo":77,"name":78,"nameZh":6,"description":79,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":80,"categories":81,"keywords":82,"publishedAt":19},"01M7CSTZDH00YRF5SCT7BRT9QD","design-variants","Use when a screen design needs variants - how many, variants as side-by-side rows on the one canvas, what makes two variants genuinely different, recommending one, how the human's choice is read, and narrowing to the chosen one in revision","https:\u002F\u002Fgithub.com\u002Fmakifbaysal\u002Ftasktrooper\u002Fblob\u002Fmain\u002Fcatalog\u002Fagents\u002Fui-designer\u002Fskills\u002Fdesign-variants\u002FSKILL.md",[],[],{"skillNo":84,"name":85,"nameZh":6,"description":86,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":87,"categories":88,"keywords":89,"publishedAt":19},"01M7CSTV6P3SM3PAE28DB0RF77","design-system-authoring","Use when you derive, change or extend a design system - where tokens live per stack, the DTCG token tree, role-based names for both themes, base vs layer vs drift, the DESIGN.md section order, the inventory format, the contrast check and the lint every proposal returns","https:\u002F\u002Fgithub.com\u002Fmakifbaysal\u002Ftasktrooper\u002Fblob\u002Fmain\u002Fcatalog\u002Fagents\u002Fui-designer\u002Fskills\u002Fdesign-system-authoring\u002FSKILL.md",[],[]]