Skip to content

[Experimental] Database Mocking Library which mocks PDO underlying Laravel Connection classes

License

Notifications You must be signed in to change notification settings

mpyw/laravel-database-mock

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

16 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Laravel Database Mock Build Status Coverage Status

Warning

Experimental

Database Mocking Library which mocks PDO underlying Laravel Connection classes.

Requirements

Installing

composer require mpyw/laravel-database-mock:VERSION@alpha

Example

SELECT

$pdo = DBMock::mockPdo();
$pdo->shouldSelect('select * from `users`')
    ->shouldFetchAllReturns([[
        'id' => 1,
        'name' => 'John',
        'email' => '[email protected]',
        'created_at' => '2020-01-01 00:00:00',
        'updated_at' => '2020-01-01 00:00:00',
    ]]);

$this->assertEquals([[
    'id' => 1,
    'name' => 'John',
    'email' => '[email protected]',
    'created_at' => '2020-01-01T00:00:00.000000Z',
    'updated_at' => '2020-01-01T00:00:00.000000Z',
]], User::all()->toArray());

INSERT

Carbon::setTestNow('2020-01-01 00:00:00');

$pdo = DBMock::mockPdo();
$pdo->shouldInsert(
    'insert into `users` (`name`, `email`, `updated_at`, `created_at`) values (?, ?, ?, ?)',
    ['John', '[email protected]', '2020-01-01 00:00:00', '2020-01-01 00:00:00']
);
$pdo->expects('lastInsertId')->andReturn(2);

$user = new User();
$user->forceFill(['name' => 'John', 'email' => '[email protected]'])->save();
$this->assertEquals([
    'id' => 2,
    'name' => 'John',
    'email' => '[email protected]',
    'created_at' => '2020-01-01T00:00:00.000000Z',
    'updated_at' => '2020-01-01T00:00:00.000000Z',
], $user->toArray());

UPDATE

Basic

Carbon::setTestNow('2020-01-02 00:00:00');

$pdo = DBMock::mockPdo();
$pdo->shouldSelect('select * from `users` where `email` = ? limit 1', ['[email protected]'])
    ->shouldFetchAllReturns([[
        'id' => 2,
        'name' => 'John',
        'email' => '[email protected]',
        'created_at' => '2020-01-01 00:00:00',
        'updated_at' => '2020-01-01 00:00:00',
    ]]);
$pdo->shouldUpdateOne(
    'update `users` set `email` = ?, `users`.`updated_at` = ? where `id` = ?',
    ['[email protected]', '2020-01-02 00:00:00', 2]
);

$user = User::query()->where('email', '[email protected]')->first();
$user->forceFill(['email' => '[email protected]'])->save();
$this->assertEquals([
    'id' => 2,
    'name' => 'John',
    'email' => '[email protected]',
    'created_at' => '2020-01-01T00:00:00.000000Z',
    'updated_at' => '2020-01-02T00:00:00.000000Z',
], $user->toArray());

Using Read Replica

Carbon::setTestNow('2020-01-02 00:00:00');

$pdos = DBMock::mockEachPdo();
$pdos->reader()
    ->shouldSelect('select * from `users` where `email` = ? limit 1', ['[email protected]'])
    ->shouldFetchAllReturns([[
        'id' => 2,
        'name' => 'John',
        'email' => '[email protected]',
        'created_at' => '2020-01-01 00:00:00',
        'updated_at' => '2020-01-01 00:00:00',
    ]]);
$pdos->writer()
    ->shouldUpdateOne(
        'update `users` set `email` = ?, `users`.`updated_at` = ? where `id` = ?',
        ['[email protected]', '2020-01-02 00:00:00', 2]
    );

$user = User::query()->where('email', '[email protected]')->first();
$user->forceFill(['email' => '[email protected]'])->save();
$this->assertEquals([
    'id' => 2,
    'name' => 'John',
    'email' => '[email protected]',
    'created_at' => '2020-01-01T00:00:00.000000Z',
    'updated_at' => '2020-01-02T00:00:00.000000Z',
], $user->toArray());

About

[Experimental] Database Mocking Library which mocks PDO underlying Laravel Connection classes

Topics

Resources

License

Stars

Watchers

Forks

Languages