adrema/tests/Feature/Member/PullMemberActionTest.php

157 lines
5.0 KiB
PHP

<?php
namespace Tests\Feature\Member;
use App\Actions\PullMemberAction;
use App\Country;
use App\Fee;
use App\Gender;
use App\Group;
use App\Nationality;
use App\Payment\Subscription;
use App\Region;
use Illuminate\Foundation\Testing\DatabaseTransactions;
use Tests\TestCase;
use Zoomyboy\LaravelNami\Fakes\MemberFake;
class PullMemberActionTest extends TestCase
{
use DatabaseTransactions;
public function setUp(): void
{
parent::setUp();
Subscription::factory()->name('test')->for(Fee::factory()->inNami(300))->create();
Gender::factory()->inNami(303)->create();
Country::factory()->inNami(302)->create();
Nationality::factory()->inNami(1054)->create();
$this->loginNami();
}
public function testFetchNormalMember(): void
{
app(MemberFake::class)->shows(1000, 1001, [
'vorname' => '::firstname::',
'nachname' => '::lastname::',
'beitragsartId' => 300,
'geburtsDatum' => '2014-07-11 00:00:00',
'gruppierungId' => 1000,
'geschlechtId' => 303,
'id' => 1001,
'eintrittsdatum' => '2020-11-17 00:00:00',
'landId' => 302,
'staatsangehoerigkeitId' => 1054,
'zeitschriftenversand' => true,
'strasse' => '::street::',
'plz' => '12346',
'ort' => '::location::',
'version' => 40,
'gruppierung' => 'SG Wald',
'mitgliedsNummer' => 53,
]);
$member = app(PullMemberAction::class)->handle(1000, 1001);
Group::firstWhere('nami_id', 1000);
$this->assertDatabaseHas('members', [
'firstname' => '::firstname::',
'lastname' => '::lastname::',
'subscription_id' => Subscription::firstWhere('name', 'test')->id,
'birthday' => '2014-07-11',
'group_id' => Group::nami(1000)->id,
'gender_id' => Gender::nami(303)->id,
'nami_id' => 1001,
'joined_at' => '2020-11-17',
'country_id' => Country::nami(302)->id,
'nationality_id' => Nationality::nami(1054)->id,
'send_newspaper' => 1,
'address' => '::street::',
'zip' => '12346',
'location' => '::location::',
'version' => '40',
'mitgliedsnr' => 53,
]);
$this->assertDatabaseHas('groups', [
'name' => 'SG Wald',
'nami_id' => 1000,
]);
$this->assertEquals(1001, $member->nami_id);
}
public function testRegionIdIsSetToNull(): void
{
Region::factory()->inNami(999)->name('nicht-de')->create(['is_null' => true]);
app(MemberFake::class)->shows(1000, 1001, [
'regionId' => 999,
]);
app(PullMemberAction::class)->handle(1000, 1001);
$this->assertDatabaseHas('members', [
'region_id' => null,
]);
}
public function testItSetsFirstSubscriptionFromFee(): void
{
Region::factory()->inNami(999)->name('nicht-de')->create(['is_null' => true]);
Subscription::factory()->for(Fee::factory()->inNami(54))->create();
$should = Subscription::factory()->for(Fee::factory()->inNami(55))->create();
Subscription::factory()->for(Fee::factory()->inNami(56))->create();
app(MemberFake::class)->shows(1000, 1001, [
'beitragsartId' => 55,
]);
app(PullMemberAction::class)->handle(1000, 1001);
$this->assertDatabaseHas('members', [
'subscription_id' => $should->id,
]);
}
public function testItCreatesSubscriptionOnTheFly(): void
{
Region::factory()->inNami(999)->name('nicht-de')->create(['is_null' => true]);
app(MemberFake::class)->shows(1000, 1001, [
'beitragsartId' => 55,
'beitragsart' => 'Lala',
]);
app(PullMemberAction::class)->handle(1000, 1001);
$fee = Fee::where('nami_id', 55)->firstOrFail();
$subscription = Subscription::where('fee_id', $fee->id)->firstOrFail();
$this->assertDatabaseHas('subscriptions', [
'fee_id' => $fee->id,
'name' => 'Lala',
'split' => false,
'for_promise' => false,
]);
$this->assertDatabaseHas('subscription_children', [
'name' => 'Lala',
'amount' => 1000,
'parent_id' => $subscription->id,
]);
$this->assertDatabaseHas('members', [
'subscription_id' => $subscription->id,
]);
}
public function testItPullsMemberWithNoSubscription(): void
{
Region::factory()->inNami(999)->name('nicht-de')->create(['is_null' => true]);
app(MemberFake::class)->shows(1000, 1001, [
'beitragsartId' => null,
'beitragsart' => null,
]);
app(PullMemberAction::class)->handle(1000, 1001);
$this->assertDatabaseHas('members', [
'subscription_id' => null,
]);
}
}