135 lines
5.1 KiB
PHP
135 lines
5.1 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
use App\Models\Customer;
|
|
use App\Models\Employee;
|
|
use App\Models\Order;
|
|
use App\Services\OrderService;
|
|
use Carbon\CarbonImmutable;
|
|
use Domain\Enums\OrderStatus;
|
|
use Domain\Models\ValueObjects\Code;
|
|
use Domain\Models\ValueObjects\DeliveryAddress;
|
|
use Domain\Models\ValueObjects\Email;
|
|
use Domain\Models\ValueObjects\Matricule;
|
|
use Domain\Models\ValueObjects\OrderEmployee;
|
|
use Domain\Models\ValueObjects\OrderReference;
|
|
use Domain\Models\ValueObjects\ShopperEstablishmentCode;
|
|
use Domain\Models\ValueObjects\ShopperServiceCode;
|
|
use Domain\Models\ValueObjects\ShopperSiteCode;
|
|
use Illuminate\Foundation\Testing\RefreshDatabase;
|
|
use Money\Currency;
|
|
use Money\Money;
|
|
use Ramsey\Uuid\Uuid;
|
|
|
|
uses(RefreshDatabase::class);
|
|
|
|
covers(OrderService::class);
|
|
|
|
describe('OrderService', function () {
|
|
it('returns true if order is owned by customer', function () {
|
|
// GIVEN
|
|
$customer = Customer::forceCreate([
|
|
'id' => Uuid::uuid7()->toString(),
|
|
'hashcode' => Uuid::uuid4()->toString(),
|
|
'email' => new Email('owner@example.com'),
|
|
]);
|
|
|
|
Employee::forceCreate([
|
|
'id' => 301,
|
|
'customer_id' => $customer->id,
|
|
'matricule' => new Matricule('1000301'),
|
|
'nom' => 'Doe',
|
|
'prenom' => 'John',
|
|
'code' => new Code('ABCDEF31'),
|
|
'etablissement' => 'ETAB',
|
|
'site' => 'SITE',
|
|
'service' => '101',
|
|
'created_at' => CarbonImmutable::now(),
|
|
'updated_at' => CarbonImmutable::now(),
|
|
]);
|
|
|
|
$order = Order::forceCreate([
|
|
'id' => Uuid::uuid7()->toString(),
|
|
'reference' => new OrderReference(Uuid::uuid7()),
|
|
'status' => OrderStatus::VALIDATED->value,
|
|
'total' => new Money(1000, new Currency('EUR')),
|
|
'employee' => new OrderEmployee(new Matricule('1000301'), 'John', 'Doe', new ShopperEstablishmentCode('FAC01'), new ShopperSiteCode('SITE'), new ShopperServiceCode('101')),
|
|
'delivery_address' => new DeliveryAddress('Name', 'Addr', '00000', 'City'),
|
|
]);
|
|
|
|
$service = new OrderService();
|
|
|
|
// WHEN
|
|
$result = $service->isOrderOwnedBy($order, $customer);
|
|
|
|
// THEN
|
|
expect($result)->toBeTrue();
|
|
});
|
|
|
|
it('returns false if order is not owned by customer', function () {
|
|
// GIVEN
|
|
$customer = Customer::forceCreate([
|
|
'id' => Uuid::uuid7()->toString(),
|
|
'hashcode' => Uuid::uuid4()->toString(),
|
|
'email' => new Email('notowner@example.com'),
|
|
]);
|
|
|
|
Employee::forceCreate([
|
|
'id' => 302,
|
|
'customer_id' => $customer->id,
|
|
'matricule' => new Matricule('1000302'),
|
|
'nom' => 'Doe',
|
|
'prenom' => 'John',
|
|
'code' => new Code('ABCDEF32'),
|
|
'etablissement' => 'ETAB',
|
|
'site' => 'SITE',
|
|
'service' => '101',
|
|
'created_at' => CarbonImmutable::now(),
|
|
'updated_at' => CarbonImmutable::now(),
|
|
]);
|
|
|
|
$order = Order::forceCreate([
|
|
'id' => Uuid::uuid7()->toString(),
|
|
'reference' => new OrderReference(Uuid::uuid7()),
|
|
'status' => OrderStatus::VALIDATED->value,
|
|
'total' => new Money(1000, new Currency('EUR')),
|
|
'employee' => new OrderEmployee(new Matricule('1000999'), 'Other', 'Person', new ShopperEstablishmentCode('FAC01'), new ShopperSiteCode('SITE'), new ShopperServiceCode('101')),
|
|
'delivery_address' => new DeliveryAddress('Name', 'Addr', '00000', 'City'),
|
|
]);
|
|
|
|
$service = new OrderService();
|
|
|
|
// WHEN
|
|
$result = $service->isOrderOwnedBy($order, $customer);
|
|
|
|
// THEN
|
|
expect($result)->toBeFalse();
|
|
});
|
|
|
|
it('returns false if customer has no employee', function () {
|
|
// GIVEN
|
|
$customer = Customer::forceCreate([
|
|
'id' => Uuid::uuid7()->toString(),
|
|
'hashcode' => Uuid::uuid4()->toString(),
|
|
'email' => new Email('noemp@example.com'),
|
|
]);
|
|
|
|
$order = Order::forceCreate([
|
|
'id' => Uuid::uuid7()->toString(),
|
|
'reference' => new OrderReference(Uuid::uuid7()),
|
|
'status' => OrderStatus::VALIDATED->value,
|
|
'total' => new Money(1000, new Currency('EUR')),
|
|
'employee' => new OrderEmployee(new Matricule('1000999'), 'Other', 'Person', new ShopperEstablishmentCode('FAC01'), new ShopperSiteCode('SITE'), new ShopperServiceCode('101')),
|
|
'delivery_address' => new DeliveryAddress('Name', 'Addr', '00000', 'City'),
|
|
]);
|
|
|
|
$service = new OrderService();
|
|
|
|
// WHEN
|
|
$result = $service->isOrderOwnedBy($order, $customer);
|
|
|
|
// THEN
|
|
expect($result)->toBeFalse();
|
|
});
|
|
});
|