test that carrier email is unique
This commit is contained in:
parent
908baee2a7
commit
2d8bca1a07
4 changed files with 60 additions and 0 deletions
|
|
@ -5,6 +5,7 @@ namespace FreightQuote\Carrier;
|
||||||
interface CarrierRepository
|
interface CarrierRepository
|
||||||
{
|
{
|
||||||
public function find(int $id): ?Carrier;
|
public function find(int $id): ?Carrier;
|
||||||
|
public function findByEmail(string $email): ?Carrier;
|
||||||
public function save(Carrier $carrier): Carrier;
|
public function save(Carrier $carrier): Carrier;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,7 @@ namespace FreightQuote\Carrier\UseCases;
|
||||||
|
|
||||||
use FreightQuote\Carrier\Carrier;
|
use FreightQuote\Carrier\Carrier;
|
||||||
use FreightQuote\Carrier\CarrierRepository;
|
use FreightQuote\Carrier\CarrierRepository;
|
||||||
|
use InvalidArgumentException;
|
||||||
|
|
||||||
class CreateCarrier
|
class CreateCarrier
|
||||||
{
|
{
|
||||||
|
|
@ -13,6 +14,9 @@ class CreateCarrier
|
||||||
|
|
||||||
public function execute(CreateCarrierRequest $dto): Carrier
|
public function execute(CreateCarrierRequest $dto): Carrier
|
||||||
{
|
{
|
||||||
|
if ($this->carrierRepo->findByEmail($dto->email) !== null) {
|
||||||
|
throw new InvalidArgumentException();
|
||||||
|
}
|
||||||
$carrier = new Carrier(
|
$carrier = new Carrier(
|
||||||
null,
|
null,
|
||||||
$dto->email,
|
$dto->email,
|
||||||
|
|
|
||||||
|
|
@ -73,4 +73,24 @@ class FakeCarrierRepository implements CarrierRepository
|
||||||
);
|
);
|
||||||
}, $this->existingCarriers);
|
}, $this->existingCarriers);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function findByEmail(string $email): ?Carrier
|
||||||
|
{
|
||||||
|
foreach ($this->existingCarriers as $carrier) {
|
||||||
|
if ($carrier->getEmail() === $email) {
|
||||||
|
return new Carrier(
|
||||||
|
$carrier->getId(),
|
||||||
|
$email,
|
||||||
|
$carrier->getCompanyName(),
|
||||||
|
$carrier->getContactPerson(),
|
||||||
|
$carrier->getPhoneNumber(),
|
||||||
|
$carrier->getNotes(),
|
||||||
|
$carrier->getLoadProfile(),
|
||||||
|
$carrier->getCountriesServing(),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,7 @@
|
||||||
namespace Tests\Unit\Carrier\UseCases;
|
namespace Tests\Unit\Carrier\UseCases;
|
||||||
|
|
||||||
use PHPUnit\Framework\TestCase;
|
use PHPUnit\Framework\TestCase;
|
||||||
|
use InvalidArgumentException;
|
||||||
use Tests\Fakes\Carrier\FakeCarrierRepository;
|
use Tests\Fakes\Carrier\FakeCarrierRepository;
|
||||||
use FreightQuote\Carrier\UseCases\CreateCarrier;
|
use FreightQuote\Carrier\UseCases\CreateCarrier;
|
||||||
use FreightQuote\Carrier\UseCases\CreateCarrierRequest;
|
use FreightQuote\Carrier\UseCases\CreateCarrierRequest;
|
||||||
|
|
@ -39,4 +40,38 @@ class CreateCarrierTest extends TestCase
|
||||||
$this->assertEquals($loadProfile, $foundCarrier->getLoadProfile());
|
$this->assertEquals($loadProfile, $foundCarrier->getLoadProfile());
|
||||||
$this->assertEquals($countriesServing, $foundCarrier->getCountriesServing());
|
$this->assertEquals($countriesServing, $foundCarrier->getCountriesServing());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function test_email_is_unique(): void
|
||||||
|
{
|
||||||
|
$this->expectException(InvalidArgumentException::class);
|
||||||
|
$email = 'joe@shmoe.com';
|
||||||
|
$company = 'test company';
|
||||||
|
$contactPerson = 'Joe Shmoe';
|
||||||
|
$phoneNumber = '132456798';
|
||||||
|
$notes = 'some notes';
|
||||||
|
$loadProfile = 'LTL/FTL'; // Less than full trailer load and full trailer load
|
||||||
|
$countriesServing = ['USA', 'FRA', 'UK'];
|
||||||
|
$carrierRepo = new FakeCarrierRepository();
|
||||||
|
$dto1 = new CreateCarrierRequest(
|
||||||
|
$email,
|
||||||
|
$company,
|
||||||
|
$contactPerson,
|
||||||
|
$phoneNumber,
|
||||||
|
$notes,
|
||||||
|
$loadProfile,
|
||||||
|
$countriesServing,
|
||||||
|
);
|
||||||
|
$dto2 = new CreateCarrierRequest(
|
||||||
|
$email,
|
||||||
|
$company,
|
||||||
|
$contactPerson,
|
||||||
|
$phoneNumber,
|
||||||
|
$notes,
|
||||||
|
$loadProfile,
|
||||||
|
$countriesServing,
|
||||||
|
);
|
||||||
|
$useCase = new CreateCarrier($carrierRepo);
|
||||||
|
$useCase->execute($dto1);
|
||||||
|
$useCase->execute($dto2);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue