PHP code example of noj / fabrica

1. Go to this page and download the library: Download noj/fabrica library. Choose the download type require.

2. Extract the ZIP file and open the index.php.

3. Add this code to the index.php.
    
        
<?php
require_once('vendor/autoload.php');

/* Start to develop here. Best regards https://php-download.com/ */

    

noj / fabrica example snippets



ca::loadFactories([__DIR__ . '/factories']);

Fabrica::define(User::class, fn() => [
    'username' => 'user123',
    'firstName' => 'Test',
    'lastName' => 'User',
]);

$user = Fabrica::create(User::class);

// Check properties have been set
assertEquals('user123', $user->username);
assertEquals('Test', $user->firstName);
assertEquals('User', $user->lastName);

Fabrica::define(User::class, fn() => [
    '@setUsername' => 'user123',
    '@setFirstName' => 'Test',
    '@setLastName' => 'User',
]);

'@addPermission*' => ['USER', 'ADMIN'],

/// UserFactory.php
Fabrica::define(User::class, fn() => [
    'username' => 'user123',
    'firstName' => 'Test',
    'lastName' => 'User',
    '@setAge' => 47,
]);

/// UserTest.php
$user = Fabrica::create(User::class, fn() => [
    'firstName' => 'Another',
    '@setAge' => 24,
]);

assertEquals('user1223', $user->username);
assertEquals('Another', $user->firstName);
assertEquals('User', $user->lastName);
assertEquals(24, $user->getAge());

$users = Fabrica::createMany(User::class, 3);

Fabrica::define(Comment::class, fn() => [
    'title' => 'A test comment',
    'body' => 'This is a test',
    'author' => Fabrica::create(User::class),
]);

$comment = Fabrica::create(Comment::class);

assertInstanceOf(User::class, $comment->user);
assertEquals('user123', $comment->user->username);

Fabrica::define(User::class, fn() => [
    '@setUsername' => 'user123',
    '@setFirstName' => 'Test',
    '@setLastName' => 'User',
    '@addComment' => Fabrica::create(Comment::class)
]);

Fabrica::define(User::class, fn() => [
    'comments' => Fabrica::createMany(Comment::class, 3),

    // or if you have a setter method, use the `*` suffix to call the method
    // once for each element of the array
    '@addComment*' => Fabrica::createMany(Comment::class, 3),
]);

Fabrica::define(Comment::class, fn() => [
    'user' => Fabrica::create(User::class),
    'userFirstName' => Fabrica::property('user.firstName'),
]);

$comment = Fabrica::create(Comment::class, fn() => [
    'author.firstName' => 'John'
]);

assertEquals('user123', $comment->user->username);
assertEquals('John', $comment->user->firstName);

$user = Fabrica::create(User::class, fn() => [
    'comments.1.title' => 'Only the 2nd comment has this title'
]);

assertEquals('A test comment', $user->comments[0]->title);
assertEquals('Only the 2nd comment has this title', $user->comments[1]->title);

$user = Fabrica::create(User::class, fn() => [
    'comments.*.title' => 'Each comment now has this title'
]);

foreach ($user->comments as $comment) {
    assertEquals('Each comment now has this title', $comment->title);
}

Fabrica::define(User::class, fn() => [
    'username' => 'bannedUser',
    'firstName' => 'Test',
    'lastName' => 'User',
])->type('banned');

$normalUser = Fabrica::create(User::class);
$bannedUser = Fabrica::create(User::class, 'banned');
$bannedUser2 = Fabrica::create(
    User::class,
    'banned',
    fn() => ['firstName' => 'banned'],
);

Fabrica::define(User::class, fn() => [
    'username' => 'bannedUser'
])->type('banned')->extends(User::class);

$bannedUser = Fabrica::create(User::class, 'banned');
assertEquals('bannedUser', $bannedUser->username);
assertEquals('Test', $bannedUser->firstName);
assertEquals('User', $bannedUser->lastName);

Fabrica::define(User::class, fn() => [
    'permanent' => true
])->type('permaBanned')->extends(User::class, 'banned');

Fabrica::setStore(new DoctrineStore($entityManager));

$entityManager = \Noj\Fabrica\Adapter\Doctrine\EntityManagerFactory::createSQLiteInMemory([__DIR__ . '/path/to/entities']);
Fabrica::setStore(new DoctrineStore($entityManager));

    class MyTest extends TestCase
    {
        use \Noj\Fabrica\Adapter\Doctrine\PHPUnit\NeedsDatabase;
    }
    

class MyTest extends TestCase
{
    use \Noj\Fabrica\Adapter\Doctrine\PHPUnit\DatabaseAssertions;
}

public function test_it_creates_a_user()
{
    (new UserCreator)->create('test');
    self::assertDatabaseContainsEntity(User::class, ['username' => 'test'])'
}

$faker = \Faker\Factory::create();
Fabrica::addDefineArgument($faker);

use Faker\Generator as Faker;

Fabrica::define(User::class, fn (Faker $faker) => [
    'firstName' => $faker->firstName,
    'lastName' => $faker->lastName,
    'email' => $faker->email,
]);