2.2 KiB
Writing Fixtures
Hand-crafted JSON fixtures for Bitwarden Seeder test data. Add a $schema line for editor validation.
Fixtures are independent building blocks — they never reference each other. The preset is the only layer that composes fixtures together and defines cross-cutting relationships (folder assignments, favorites, etc.). See architecture.md for the full picture.
Organizations
Just a name and domain. Domains must use .example (RFC 2606 — guaranteed unresolvable, safe for email pipelines). Plan type and seats are defined in presets, not here.
See: fixtures/organizations/redwood-analytics.json
Rosters
Users, groups, and collections for an org.
- Users have a
firstName,lastName, androle(owner,admin,user,custom) - The Seeder builds emails as
firstName.lastName@domain, so"Family"+"Mom"at domainacme.examplebecomesfamily.mom@acme.exampleora1b2c3d4+family.mom@acme.examplewith mangling - Groups reference users by that same email prefix (e.g.
"family.mom") - Collections assign permissions to groups or individual users (
readOnly,hidePasswords,manage— all default false) - Users can optionally declare
"folders": ["Banking", "Work"]— each name becomes an encrypted Folder entity for that user
See: starter-team.json (minimal), family.json (groups + collections), dunder-mifflin.json (58-user enterprise)
Ciphers
Vault items. Each item needs a type and name.
See: fixtures/ciphers/enterprise-basic.json
Naming Conventions
| Element | Pattern | Example |
|---|---|---|
| File names | kebab-case | banking-logins.json |
| Item names | Title case, unique | Chase Bank Login |
| User refs | firstName.lastName | jane.doe |
| Org domains | .example | acme.example |
Validation
Your editor validates against $schema automatically. Build also catches schema violations:
dotnet build util/Seeder/Seeder.csproj
Security
- Use fictional names/addresses
- Never commit real passwords or PII
- Never seed production databases