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