ldc-boutique-cnc-sable/tests/Unit/Infra/Adapters/Services/SessionOrderBuilderManagerTest.php
2026-10-27 09:58:12 +01:00

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();
});