fix: set publication default to fasle on campaign creation

This commit is contained in:
Noah Lancien 2026-10-26 16:25:55 +01:00
parent 6444525a49
commit a0160bfa8f
5 changed files with 22 additions and 82 deletions

View file

@ -34,7 +34,6 @@ final readonly class CreateCampaign implements UseCase, Transactional
$campaign = Campaign::create(
name: $input->name,
publication: false,
printAllAtOnce: $input->printAllAtOnce,
coupons: $input->coupons,
brandCode: $input->brandCode,

View file

@ -49,7 +49,6 @@ final readonly class Campaign implements AggregateRoot, HasTimestampIdentifier
public static function create(
CampaignName $name,
bool $publication,
bool $printAllAtOnce,
CampaignCouponArray $coupons,
BrandCode $brandCode,
@ -59,7 +58,7 @@ final readonly class Campaign implements AggregateRoot, HasTimestampIdentifier
id: CampaignId::generate(),
code: CampaignCode::generate(),
name: $name,
publication: $publication,
publication: false,
printAllAtOnce: $printAllAtOnce,
coupons: $coupons,
brandCode: $brandCode,

View file

@ -97,7 +97,6 @@ describe('find coupon use case', function (): void {
);
$campaign = Campaign::create(
name: new CampaignName('Campaign name'),
publication: true,
printAllAtOnce: true,
coupons: new CampaignCouponArray([
new CampaignCoupon($coupon->code),

View file

@ -20,6 +20,7 @@ use Domain\Models\ValueObjects\Brand\BrandCode;
use Domain\Models\ValueObjects\Campaign\CampaignCode;
use Domain\Models\ValueObjects\Campaign\CampaignCoupon;
use Domain\Models\ValueObjects\Campaign\CampaignCouponArray;
use Domain\Models\ValueObjects\Campaign\CampaignId;
use Domain\Models\ValueObjects\Campaign\CampaignName;
use Domain\Models\ValueObjects\Coupon\CouponAvailabilityCalendar;
use Domain\Models\ValueObjects\Coupon\CouponCode;
@ -114,7 +115,9 @@ describe('create coupon use case', function (): void {
$couponCode,
$printRules($maxPerCustomer, $cooldownDays),
);
$makeCampaign = fn (?int $maxPerCustomer = null, ?int $cooldownDays = null, bool $published = true): Campaign => Campaign::create(
$makeCampaign = fn (?int $maxPerCustomer = null, ?int $cooldownDays = null, $published = true): Campaign => Campaign::hydrate(
id: CampaignId::generate(),
code: $campaignCode,
name: new CampaignName('Campaign name'),
publication: $published,
printAllAtOnce: true,

View file

@ -16,14 +16,11 @@ use Domain\Models\ValueObjects\Campaign\CampaignId;
use Domain\Models\ValueObjects\Campaign\CampaignName;
use Domain\Models\ValueObjects\Coupon\CouponCode;
use Domain\Models\ValueObjects\PrintRules;
use Ramsey\Uuid\Uuid;
covers(Campaign::class);
describe('campaign', function (): void {
$code = CampaignCode::generate();
$name = new CampaignName('Name');
$publication = \boolval(0);
$printAllAtOnce = \boolval(1);
$coupons = new CampaignCouponArray([
new CampaignCoupon(
@ -38,55 +35,22 @@ describe('campaign', function (): void {
CarbonImmutable::setTestNow();
});
it('creates a campaign', function () use (
$code,
$name,
$publication,
$printAllAtOnce,
$coupons,
$brandCode,
$actorId,
): void {
it('creates a campaign', function (): void {
// GIVEN
$id = CampaignId::generate();
$name = new CampaignName('Name');
$coupons = new CampaignCouponArray([
new CampaignCoupon(
new CouponCode('AAA01'),
new PrintRules(maxPerCustomer: 3)
)
]);
$brandCode = new BrandCode('AAA01');
$actorId = ActorId::generate();
// WHEN
$campaign = Campaign::hydrate(
$id,
$code,
$name,
$publication,
$printAllAtOnce,
$coupons,
$brandCode,
$actorId
);
// THEN
expect($campaign->id())->toBe($id)
->and($campaign->code)->toBe($code)
->and($campaign->name)->toBe($name)
->and($campaign->publication)->toBe($publication)
->and($campaign->printAllAtOnce)->toBe($printAllAtOnce)
->and($campaign->coupons)->toBe($coupons)
->and($campaign->brandCode)->toBe($brandCode)
->and($campaign->createdAt())->toBeInstanceOf(DateTimeInterface::class)
->and($campaign->updatedAt())->toBeInstanceOf(DateTimeInterface::class);
});
it('creates a new campaign with a freshly generated id', function () use (
$name,
$publication,
$printAllAtOnce,
$coupons,
$brandCode,
$actorId,
): void {
// GIVEN / WHEN
$campaign = Campaign::create(
$name,
$publication,
$printAllAtOnce,
true,
$coupons,
$brandCode,
$actorId
@ -96,17 +60,17 @@ describe('campaign', function (): void {
expect($campaign->id())->toBeInstanceOf(CampaignId::class)
->and($campaign->code)->toBeInstanceOf(CampaignCode::class)
->and($campaign->name)->toBe($name)
->and($campaign->publication)->toBe($publication)
->and($campaign->printAllAtOnce)->toBe($printAllAtOnce)
->and($campaign->publication)->toBeFalse()
->and($campaign->printAllAtOnce)->toBeTrue()
->and($campaign->coupons)->toBe($coupons)
->and($campaign->brandCode)->toBe($brandCode)
->and($campaign->actorId)->toBe($actorId)
->and($campaign->createdAt())->toBeInstanceOf(DateTimeInterface::class)
->and($campaign->updatedAt())->toBeNull();
});
it('generates a different id for each created campaign', function () use (
$name,
$publication,
$printAllAtOnce,
$coupons,
$brandCode,
@ -115,7 +79,6 @@ describe('campaign', function (): void {
// GIVEN / WHEN
$firstCampaign = Campaign::create(
$name,
$publication,
$printAllAtOnce,
$coupons,
$brandCode,
@ -123,7 +86,6 @@ describe('campaign', function (): void {
);
$secondCampaign = Campaign::create(
$name,
$publication,
$printAllAtOnce,
$coupons,
$brandCode,
@ -135,22 +97,17 @@ describe('campaign', function (): void {
});
it('returns the creation date extracted from the id', function () use (
$code,
$name,
$publication,
$printAllAtOnce,
$coupons,
$brandCode,
$actorId,
): void {
// GIVEN
$expected = new \DateTimeImmutable('2024-06-15 12:34:56.789000', new \DateTimeZone('UTC'));
$id = new CampaignId(Uuid::uuid7($expected));
$campaign = Campaign::hydrate(
$id,
$code,
$expected = new \DateTimeImmutable('now', new \DateTimeZone('UTC'));
$campaign = Campaign::create(
$name,
$publication,
$printAllAtOnce,
$coupons,
$brandCode,
@ -163,21 +120,4 @@ describe('campaign', function (): void {
// THEN
expect($result->format('Y-m-d H:i:s.v'))->toBe($expected->format('Y-m-d H:i:s.v'));
});
it('rejects a campaign with a non-coupon element', function () use ($code, $name, $publication, $printAllAtOnce, $brandCode, $actorId): void {
// GIVEN
$id = CampaignId::generate();
// WHEN / THEN
expect(fn (): Campaign => Campaign::hydrate(
$id,
$code,
$name,
$publication,
$printAllAtOnce,
new CampaignCouponArray(['PC1']),
$brandCode,
$actorId
))->toThrow(\DomainException::class, 'Coupons must be CampaignCoupon instances.');
});
});