108 lines
4.0 KiB
PHP
108 lines
4.0 KiB
PHP
<?php
|
|
|
|
namespace Tests\Feature\Invoice;
|
|
|
|
use App\Invoice\BillKind;
|
|
use App\Invoice\Models\Invoice;
|
|
use App\Member\Member;
|
|
use App\Payment\Subscription;
|
|
use Illuminate\Foundation\Testing\DatabaseTransactions;
|
|
use Tests\RequestFactories\Child;
|
|
use Tests\TestCase;
|
|
|
|
class MassStoreActionTest extends TestCase
|
|
{
|
|
use DatabaseTransactions;
|
|
|
|
public function setUp(): void
|
|
{
|
|
parent::setUp();
|
|
|
|
$this->login()->loginNami()->withoutExceptionHandling();
|
|
}
|
|
|
|
public function testItDoesntCreatePaymentsWithoutSubscription(): void
|
|
{
|
|
Member::factory()->defaults()->emailBillKind()->create(['subscription_id' => null]);
|
|
|
|
$this->postJson(route('invoice.mass-store'), [
|
|
'year' => now()->addYear()->year,
|
|
])->assertOk();
|
|
|
|
$this->assertDatabaseEmpty('invoices');
|
|
}
|
|
|
|
public function testItDoesntCreatePaymentWithoutBillKind(): void
|
|
{
|
|
Member::factory()->defaults()->create();
|
|
|
|
$this->postJson(route('invoice.mass-store'), [
|
|
'year' => now()->addYear()->year,
|
|
])->assertOk();
|
|
|
|
$this->assertDatabaseEmpty('invoices');
|
|
}
|
|
|
|
public function testItCreatesPayments(): void
|
|
{
|
|
$member = Member::factory()->defaults()
|
|
->for(Subscription::factory()->children([
|
|
new Child('beitrag {name}', 4466),
|
|
new Child('beitrag2 für {name} für {year}', 2290),
|
|
]))->emailBillKind()->create(['firstname' => 'Max', 'lastname' => 'Muster', 'address' => 'Maxstr 4', 'zip' => '33445', 'location' => 'Solingen']);
|
|
|
|
$this->postJson(route('invoice.mass-store'), [
|
|
'year' => now()->addYear()->year,
|
|
])->assertOk();
|
|
|
|
$invoice = Invoice::first();
|
|
$this->assertNotNull($invoice);
|
|
$this->assertEquals([
|
|
'name' => 'Familie Muster',
|
|
'address' => 'Maxstr 4',
|
|
'zip' => '33445',
|
|
'location' => 'Solingen',
|
|
], $invoice->to);
|
|
$this->assertEquals('Mitgliedsbeitrag für Familie Muster', $invoice->usage);
|
|
$this->assertEquals(BillKind::EMAIL, $invoice->via);
|
|
$this->assertDatabaseHas('invoice_positions', [
|
|
'invoice_id' => $invoice->id,
|
|
'member_id' => $member->id,
|
|
'price' => 4466,
|
|
'description' => 'beitrag Max Muster'
|
|
]);
|
|
$this->assertDatabaseHas('invoice_positions', [
|
|
'invoice_id' => $invoice->id,
|
|
'member_id' => $member->id,
|
|
'price' => 2290,
|
|
'description' => 'beitrag2 für Max Muster für ' . now()->addYear()->year
|
|
]);
|
|
}
|
|
|
|
public function testItCreatesOneInvoiceForFamilyMember(): void
|
|
{
|
|
$subscription = Subscription::factory()->children([new Child('beitrag {name}', 4466)])->create();
|
|
$member = Member::factory()->defaults()->for($subscription)->emailBillKind()->create(['firstname' => 'Max', 'lastname' => 'Muster']);
|
|
Member::factory()->defaults()->for($subscription)->sameFamilyAs($member)->emailBillKind()->create(['firstname' => 'Jane']);
|
|
|
|
$this->postJson(route('invoice.mass-store'), ['year' => now()->addYear()->year])->assertOk();
|
|
|
|
$this->assertDatabaseCount('invoices', 1);
|
|
$this->assertDatabaseCount('invoice_positions', 2);
|
|
$this->assertDatabaseHas('invoice_positions', ['description' => 'beitrag Max Muster']);
|
|
$this->assertDatabaseHas('invoice_positions', ['description' => 'beitrag Jane Muster']);
|
|
}
|
|
|
|
public function testItSeparatesBillKinds(): void
|
|
{
|
|
$subscription = Subscription::factory()->children([new Child('beitrag {name]', 4466)])->create();
|
|
$member = Member::factory()->defaults()->for($subscription)->emailBillKind()->create();
|
|
Member::factory()->defaults()->for($subscription)->sameFamilyAs($member)->postBillKind()->create();
|
|
|
|
$this->postJson(route('invoice.mass-store'), ['year' => now()->addYear()->year])->assertOk();
|
|
|
|
$this->assertDatabaseCount('invoices', 2);
|
|
$this->assertDatabaseCount('invoice_positions', 2);
|
|
}
|
|
}
|