akaunting/tests/Feature/Commands/RecurringCheckTest.php
2021-10-09 18:34:37 +03:00

61 lines
1.6 KiB
PHP

<?php
namespace Tests\Feature\Commands;
use App\Jobs\Document\CreateDocument;
use App\Models\Document\Document;
use App\Notifications\Sale\Invoice as InvoiceNotification;
use App\Utilities\Date;
use Illuminate\Support\Facades\Notification;
use Tests\Feature\FeatureTestCase;
class RecurringCheckTest extends FeatureTestCase
{
public $recurring_count;
protected function setUp(): void
{
parent::setUp();
$this->recurring_count = 7;
}
public function testItShouldCreateCorrectNumberOfRecurringInvoices(): void
{
Notification::fake();
$this->dispatch(new CreateDocument($this->getRequest()));
Date::setTestNow(Date::now());
$this->artisan('recurring:check');
$this->assertDatabaseCount('documents', $this->recurring_count + 1);
Notification::assertSentToTimes($this->user, InvoiceNotification::class, $this->recurring_count);
}
public function testItShouldNotCreateAnyRecurringInvoice(): void
{
Notification::fake();
$this->dispatch(new CreateDocument($this->getRequest()));
Date::setTestNow(Date::now()->subDays($this->recurring_count + 1));
$this->artisan('recurring:check');
$this->assertDatabaseCount('documents', 1);
Notification::assertNotSentTo($this->user, InvoiceNotification::class);
}
public function getRequest(): array
{
return Document::factory()->invoice()->items()->recurring()->sent()->raw([
'issued_at' => Date::now()->subDays($this->recurring_count + 1),
'recurring_count' => '20',
]);
}
}