Refactor ticket validity handling and improve tests
- Updated tests for Accommodation, Entry, Food, Merchandise, and Sale controllers to use soft deletes for variants and ensure proper inventory counts. - Enhanced ticket generation logic to resolve validity from soft-deleted catalog sources. - Introduced a new TicketValidityResolver service to manage ticket validity based on event dates and variant definitions. - Removed unnecessary database assertions and improved the clarity of validity checks in tests. - Added comprehensive tests for the new TicketValidityResolver service, ensuring correct handling of event dates and multi-select options. - Cleaned up unused code and assertions in existing tests for better maintainability.
This commit is contained in:
@@ -8,9 +8,10 @@ use App\Domains\Catalog\Models\Variant;
|
||||
use App\Domains\Tenant\Models\Tenant;
|
||||
use App\Domains\Ticket\Enums\ValidityTimeType;
|
||||
use App\Domains\Ticket\Models\Ticket;
|
||||
use App\Domains\Ticket\Models\TicketValidityGroup;
|
||||
use App\Domains\Ticket\Models\ValidityTime;
|
||||
use Illuminate\Database\Eloquent\Collection as EloquentCollection;
|
||||
use App\Domains\Ticket\Services\ResolvedTicketValidity;
|
||||
use App\Domains\Ticket\Services\ResolvedValidityGroup;
|
||||
use App\Domains\Ticket\Services\TicketValidityResolver;
|
||||
use Illuminate\Support\Carbon;
|
||||
use Tests\TestCase;
|
||||
|
||||
@@ -46,8 +47,6 @@ class TicketTest extends TestCase
|
||||
$this->assertInstanceOf(User::class, $ticket->scannerUser()->getRelated());
|
||||
$this->assertInstanceOf(CatalogItem::class, $ticket->sourceCatalogItem()->getRelated());
|
||||
$this->assertInstanceOf(Variant::class, $ticket->sourceVariant()->getRelated());
|
||||
$this->assertInstanceOf(TicketValidityGroup::class, $ticket->validityGroups()->getRelated());
|
||||
$this->assertInstanceOf(ValidityTime::class, (new TicketValidityGroup)->validityTimes()->getRelated());
|
||||
}
|
||||
|
||||
public function test_unused_ticket_without_validity_time_is_valid(): void
|
||||
@@ -190,13 +189,23 @@ class TicketTest extends TestCase
|
||||
private function ticketWithValidityGroups(array $validityGroups): Ticket
|
||||
{
|
||||
$ticket = new Ticket;
|
||||
$groups = collect($validityGroups)->map(function (array $validityTimes): TicketValidityGroup {
|
||||
$group = new TicketValidityGroup;
|
||||
$group->setRelation('validityTimes', new EloquentCollection($validityTimes));
|
||||
$resolved = new ResolvedTicketValidity(
|
||||
collect($validityGroups)->map(
|
||||
fn (array $validityTimes): ResolvedValidityGroup => new ResolvedValidityGroup(collect($validityTimes))
|
||||
)
|
||||
);
|
||||
$this->app->instance(
|
||||
TicketValidityResolver::class,
|
||||
new class($resolved) extends TicketValidityResolver
|
||||
{
|
||||
public function __construct(private readonly ResolvedTicketValidity $resolved) {}
|
||||
|
||||
return $group;
|
||||
});
|
||||
$ticket->setRelation('validityGroups', new EloquentCollection($groups->all()));
|
||||
public function resolveTicket(Ticket $ticket): ResolvedTicketValidity
|
||||
{
|
||||
return $this->resolved;
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
return $ticket;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user