Skip to content

Repository files navigation

TestGenerateTester

Laravel 12 testproject met een herbruikbare Blueprint setup voor API-projecten.

Setup

1. Blueprint installeren in een project

composer require --dev laravel-shift/blueprint
php artisan vendor:publish --tag=blueprint-config
php artisan vendor:publish --tag=blueprint-stubs

2. In dit project (eerste keer)

composer install
cp .env.example .env
php artisan key:generate
php artisan migrate

Commands

Composer commands

composer bp:snapshot -- drafts/<feature>.yaml
composer bp:delta -- drafts/<feature>.yaml
composer bp:smart -- drafts/<feature>.yaml
composer bp:smart:full -- drafts/<feature>.yaml
composer bp:routes -- drafts/<feature>.yaml
composer bp:test -- drafts/<feature>.yaml

Uitleg

  • bp:snapshot: maakt of ververst de snapshot voor een draft (storage/app/blueprint-delta).
  • bp:delta: vergelijkt draft met snapshot en maakt alleen add-column migraties waar nodig.
  • bp:smart: veilige standaardflow.
    • draait eerst delta-check
    • genereert daarna model/factory/request/resource
    • slaat routes over om dubbele route-regels te voorkomen
  • bp:smart:full: als bp:smart, maar inclusief controller + tests.
  • bp:routes: voegt alleen ontbrekende Route::apiResource(...) regels toe in routes/api.php.
  • bp:test: genereert alleen tests vanuit de draft.

Aanbevolen workflow

  1. Start per nieuwe draft met snapshot:
composer bp:snapshot -- drafts/<feature>.yaml
  1. Dagelijks werken met:
composer bp:smart -- drafts/<feature>.yaml
  1. Alleen als je controllers/tests bewust wilt regenereren (eerste run):
composer bp:smart:full -- drafts/<feature>.yaml
  1. Routes synchroniseren:
composer bp:routes -- drafts/<feature>.yaml

Drafts structuur

Gebruik kleine, losse drafts per feature/model zodat builds voorspelbaar blijven.

Voorbeeld:

drafts/
  post.yaml
  member.yaml
  team.yaml
  skill.yaml
  time_entry.yaml

Voor demo's kun je een submap gebruiken:

drafts/
  examples/
    Project.yaml
    Member.yaml
    Team.yaml
    Skill.yaml
    TimeEntry.yaml
    Pricing.yaml

Praktische regels:

  • Houd 1 hoofdonderwerp per draft aan.
  • Zet alleen modellen in de draft die je in die run wilt genereren/updaten.
  • Gebruik bp:snapshot voordat je delta-gedrag verwacht op die draft.

Pivot model in drafts

Als je een belongsToMany met eigen pivot model wilt (handig voor extra velden, casts, linter/phpstan generics), gebruik dan :&PivotModel.

Voorbeeld (zoals in drafts/examples/Member.yaml):

Member

models:
  Member:
    team_id: id foreign:teams
    name: string
    relationships:
      belongsTo: Team
      belongsToMany: Skill:&MemberSkill

  MemberSkill:
    member_id: id foreign:members
    skill_id: id foreign:skills
    level: enum:junior,medior,senior,lead
    hourly_price: decimal:10,2
    certified_at: datetime nullable
    relationships:
      belongsTo: Member, Skill

Skill

models:
  Skill:
    name: string unique
    category: enum:backend,frontend,devops,design,qa
    default_rate: decimal:10,2 nullable
    active_from: datetime nullable
    relationships:
      belongsToMany: Member:&MemberSkill

controllers:
  Skill:
    resource: api

Wat dit doet:

  • Member krijgt belongsToMany naar Skill met pivot model MemberSkill.
  • MemberSkill wordt als eigen model gegenereerd voor de pivot tabel.
  • Je kunt in het pivot model eigen velden zoals decimal, datetime zetten.

Blueprint setup overnemen in je eigen project

Basis (vendor publish)

composer require --dev laravel-shift/blueprint
php artisan vendor:publish --tag=blueprint-config
php artisan vendor:publish --tag=blueprint-stubs

Deze projectsetup kopieren

Kopieer deze onderdelen uit TestGenerateTester naar je doelproject:

cp /pad/naar/TestGenerateTester/config/blueprint.php config/blueprint.php
mkdir -p stubs/blueprint
cp -R /pad/naar/TestGenerateTester/stubs/blueprint/. stubs/blueprint/

mkdir -p app/Blueprint/Generators
cp -R /pad/naar/TestGenerateTester/app/Blueprint/Generators/. app/Blueprint/Generators/

cp /pad/naar/TestGenerateTester/app/Support/BlueprintWorkflow.php app/Support/BlueprintWorkflow.php
cp /pad/naar/TestGenerateTester/routes/console.php routes/console.php

Composer scripts overnemen

Voeg dit toe aan composer.json onder scripts:

"bp:delta": [
  "@php artisan bp:delta"
],
"bp:snapshot": [
  "@php artisan bp:snapshot"
],
"bp:routes": [
  "@php artisan bp:routes:sync"
],
"bp:smart": [
  "@php artisan bp:smart"
],
"bp:smart:full": [
  "@php artisan bp:smart --full"
],
"bp:test": [
"@php artisan blueprint:build --skip=routes --only=tests"
],

Demo drafts

Voor demo/presentatie staan voorbeelden in:

  • drafts/examples/Member.yaml
  • drafts/examples/Team.yaml
  • drafts/examples/Skill.yaml
  • drafts/examples/TimeEntry.yaml

Belangrijk

  • Gebruik bp:smart als default command.
  • Gebruik bp:smart:full als 1ste keer ipv bp:smart.
  • Gebruik bp:snapshot minimaal 1 keer per draft voordat je delta-gedrag verwacht.
  • Vermijd volledige route-regeneratie; gebruik bp:routes om alleen ontbrekende routes toe te voegen.

Meer info

Voor overige Blueprint-vragen: https://blueprint.laravelshift.com/docs/getting-started/

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages