adrema/tests/Feature/Invoice/InvoiceRequestFactory.php

56 lines
1.4 KiB
PHP

<?php
namespace Tests\Feature\Invoice;
use App\Invoice\BillKind;
use App\Invoice\Enums\InvoiceStatus;
use Worksome\RequestFactories\RequestFactory;
class InvoiceRequestFactory extends RequestFactory
{
/** @var array<int, InvoicePositionRequestFactory> */
public $positions = [];
public function definition(): array
{
return [
'to' => ReceiverRequestFactory::new(),
'greeting' => 'Hallo Familie',
'status' => InvoiceStatus::NEW->value,
'via' => BillKind::EMAIL->value,
'positions' => [],
'usage' => $this->faker->words(4, true),
];
}
public function to(ReceiverRequestFactory $to): self
{
return $this->state(['to' => $to]);
}
public function status(InvoiceStatus $status): self
{
return $this->state(['status' => $status->value]);
}
public function position(InvoicePositionRequestFactory $factory): self
{
$this->positions[] = $factory;
return $this;
}
public function create(array $attributes = []): array
{
return parent::create([
'positions' => array_map(fn ($position) => $position->create(), $this->positions),
...$attributes,
]);
}
public function via(BillKind $via): self
{
return $this->state(['via' => $via->value]);
}
}