get($model, 'employee', null, []); // THEN expect($employee)->toBeNull(); }); it('throws exception when getting invalid value type', function () { // GIVEN $cast = new OrderEmployeeCast(); $model = \Mockery::mock(Model::class); // WHEN $cast->get($model, 'employee', 123, []); // THEN })->throws( \InvalidArgumentException::class, 'The value must be a string.' ); it('gets an order employee from json string', function () { // GIVEN $cast = new OrderEmployeeCast(); $model = \Mockery::mock(Model::class); $json = json_encode([ 'matricule' => '1234567', 'firstname' => 'John', 'lastname' => 'Doe', 'facility' => 'Fac', 'site' => 'Site', 'service' => 'Service', ]); // WHEN $employee = $cast->get($model, 'employee', $json, []); // THEN expect($employee)->toBeInstanceOf(OrderEmployee::class) ->and($employee->matricule)->toBeInstanceOf(Matricule::class) ->and($employee->matricule->value)->toBe('1234567') ->and($employee->firstname)->toBe('John') ->and($employee->lastname)->toBe('Doe') ->and($employee->facility)->toBe('Fac') ->and($employee->site)->toBe('Site') ->and($employee->service)->toBe('Service'); }); it('sets null when value is null', function () { // GIVEN $cast = new OrderEmployeeCast(); $model = \Mockery::mock(Model::class); // WHEN $value = $cast->set($model, 'employee', null, []); // THEN expect($value)->toBeNull(); }); it('throws exception when setting invalid type', function () { // GIVEN $cast = new OrderEmployeeCast(); $model = \Mockery::mock(Model::class); // WHEN $cast->set($model, 'employee', 'invalid', []); // THEN })->throws( \InvalidArgumentException::class, 'The given value is not an instance of OrderEmployee.' ); it('sets an order employee', function () { // GIVEN $cast = new OrderEmployeeCast(); $model = \Mockery::mock(Model::class); $employee = new OrderEmployee( matricule: new Matricule('1234567'), firstname: 'John', lastname: 'Doe', facility: 'Fac', site: 'Site', service: 'Service' ); // WHEN $value = $cast->set($model, 'employee', $employee, []); // THEN expect($value)->toBeJson() ->and(json_decode($value, true))->toMatchArray([ 'matricule' => '1234567', 'firstname' => 'John', 'lastname' => 'Doe', 'facility' => 'Fac', 'site' => 'Site', 'service' => 'Service', ]); });