85 lines
2.4 KiB
PHP
85 lines
2.4 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
use Domain\Builders\OrderBuilder;
|
|
use Illuminate\Contracts\Session\Session;
|
|
use Infrastructure\Adapters\Services\SessionOrderBuilderManager;
|
|
|
|
it('throws exception if session key is empty', function () {
|
|
// GIVEN
|
|
$session = \Mockery::mock(Session::class);
|
|
|
|
// WHEN
|
|
$action = fn () => new SessionOrderBuilderManager($session, ' ');
|
|
|
|
// THEN
|
|
expect($action)->toThrow(\InvalidArgumentException::class, 'Session key cannot be empty');
|
|
});
|
|
|
|
it('gets order builder from session', function () {
|
|
// GIVEN
|
|
$session = \Mockery::mock(Session::class);
|
|
$builder = \Mockery::mock(OrderBuilder::class);
|
|
$session->shouldReceive('get')->with('builder_key')->andReturn($builder);
|
|
$repo = new SessionOrderBuilderManager($session, 'builder_key');
|
|
|
|
// WHEN
|
|
$result = $repo->get();
|
|
|
|
// THEN
|
|
expect($result)->toBe($builder);
|
|
});
|
|
|
|
it('returns null if order builder not in session', function () {
|
|
// GIVEN
|
|
$session = \Mockery::mock(Session::class);
|
|
$session->shouldReceive('get')->with('builder_key')->andReturn(null);
|
|
$repo = new SessionOrderBuilderManager($session, 'builder_key');
|
|
|
|
// WHEN
|
|
$result = $repo->get();
|
|
|
|
// THEN
|
|
expect($result)->toBeNull();
|
|
});
|
|
|
|
it('throws exception if invalid session data for order builder', function () {
|
|
// GIVEN
|
|
$session = \Mockery::mock(Session::class);
|
|
$session->shouldReceive('get')->with('builder_key')->andReturn('invalid-data');
|
|
$repo = new SessionOrderBuilderManager($session, 'builder_key');
|
|
|
|
// WHEN
|
|
$action = fn () => $repo->get();
|
|
|
|
// THEN
|
|
expect($action)->toThrow(\UnexpectedValueException::class, 'Invalid session data for order builder');
|
|
});
|
|
|
|
it('saves order builder to session', function () {
|
|
// GIVEN
|
|
$session = \Mockery::mock(Session::class);
|
|
$builder = \Mockery::mock(OrderBuilder::class);
|
|
$session->shouldReceive('put')->with('builder_key', $builder)->once();
|
|
$repo = new SessionOrderBuilderManager($session, 'builder_key');
|
|
|
|
// WHEN
|
|
$repo->save($builder);
|
|
|
|
// THEN
|
|
expect(true)->toBeTrue();
|
|
});
|
|
|
|
it('clears order builder from session', function () {
|
|
// GIVEN
|
|
$session = \Mockery::mock(Session::class);
|
|
$session->shouldReceive('forget')->with('builder_key')->once();
|
|
$repo = new SessionOrderBuilderManager($session, 'builder_key');
|
|
|
|
// WHEN
|
|
$repo->clear();
|
|
|
|
// THEN
|
|
expect(true)->toBeTrue();
|
|
});
|