impulsephp/fixtures

Fixtures provider for ImpulsePHP with Faker integration, CLI scaffolding and story-based dataset scenarios.

Maintainers

Package info

github.com/ImpulsePHP/fixtures

pkg:composer/impulsephp/fixtures

Statistics

Installs: 0

Dependents: 0

Suggesters: 0

Stars: 0

Open Issues: 0

dev-main 2026-04-11 16:56 UTC

This package is auto-updated.

Last update: 2026-04-11 16:56:13 UTC


README

impulsephp/fixtures fournit un provider de fixtures pour ImpulsePHP, pensé pour rester proche des conventions réelles du dépôt : services simples dans le conteneur, exécution via db, commandes Symfony Console explicites, et scénarios métier composables avec des stories.

Ce que fait le package

  • enregistre un gestionnaire de fixtures dans le conteneur ;
  • scanne les fixtures applicatives dans src/Fixture et tests/Fixtures ;
  • scanne les stories de fixtures dans src/Fixture/Story et tests/Fixtures/Story ;
  • exécute les fixtures avec Cycle\ORM\ORMInterface via impulsephp/db ;
  • fournit un contexte d’exécution avec références, seed déterministe et accès simple à Faker ;
  • propose une commande make:fixture pour générer un squelette ;
  • propose une commande fixtures:run pour exécuter toutes les fixtures, une fixture précise ou une story nommée.

Prérequis

  • PHP 8.2 ou supérieur ;
  • une application ImpulsePHP avec impulsephp/core ;
  • impulsephp/db chargé dans les providers de l’application ;
  • un fichier impulse.php à la racine de l’application.

Installation

composer require impulsephp/fixtures

Le package déclare son provider via extra.impulse-provider. Si votre application n’utilise pas l’auto-découverte, ajoutez Impulse\Fixtures\FixturesProvider à la configuration providers de impulse.php.

Configuration minimale

<?php

use Impulse\Db\DbProvider;
use Impulse\Fixtures\FixturesProvider;

return [
    'env' => 'dev',
    'providers' => [
        DbProvider::class,
        FixturesProvider::class,
    ],
    'database' => [
        'name' => 'app',
        'driver' => 'sqlite',
        'database' => __DIR__ . '/var/storage/database.sqlite',
    ],
];

Options disponibles :

  • fixtures.paths : chemins additionnels de fixtures.
  • fixtures.story_paths : chemins additionnels de stories.
  • fixtures.locale : locale Faker par défaut. Défaut en_US.
  • fixtures.seed : seed par défaut utilisée si la commande n’en reçoit pas.

Exemple rapide

use App\Entity\User;
use Impulse\Fixtures\AbstractFixture;
use Impulse\Fixtures\FixtureContext;

final class UserFixture extends AbstractFixture
{
    public function load(FixtureContext $context): void
    {
        for ($i = 0; $i < 5; $i++) {
            $user = new User();
            $user->email = $context->faker()->unique()->safeEmail();

            $context->persist($user);
        }
    }
}

Story associée :

use App\Fixture\PostFixture;
use App\Fixture\UserFixture;
use Impulse\Fixtures\AbstractStory;

final class DemoStory extends AbstractStory
{
    public function fixtures(): array
    {
        return [
            UserFixture::class,
            PostFixture::class,
        ];
    }
}

Exécution :

php ./bin/impulse fixtures:run --story=Demo --seed=42

CLI

Le dépôt de référence n’auto-enregistre pas les commandes des packages dans bin/impulse. Comme pour les autres commandes Symfony Console d’ImpulsePHP, ajoutez explicitement celles du package dans le binaire de votre application :

use Impulse\Fixtures\Console\MakeFixtureCommand;
use Impulse\Fixtures\Console\RunFixturesCommand;

$app->addCommand(new MakeFixtureCommand());
$app->addCommand(new RunFixturesCommand());

Documentation

  • docs/installation.md
  • docs/usage.md
  • docs/cli.md

Tests

composer test

Licence

MIT