163 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			PHP
		
	
	
	
			
		
		
	
	
			163 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\Member\Member;
 | 
						|
use App\Nationality;
 | 
						|
use App\Payment\Subscription;
 | 
						|
use App\Region;
 | 
						|
use Illuminate\Foundation\Testing\DatabaseTransactions;
 | 
						|
use Zoomyboy\LaravelNami\Fakes\MemberFake;
 | 
						|
 | 
						|
uses(DatabaseTransactions::class);
 | 
						|
 | 
						|
beforeEach(function () {
 | 
						|
    Subscription::factory()->name('test')->forFee(300)->create();
 | 
						|
    Gender::factory()->inNami(303)->create();
 | 
						|
    Country::factory()->inNami(302)->create();
 | 
						|
    Nationality::factory()->inNami(1054)->create();
 | 
						|
});
 | 
						|
 | 
						|
it('testFetchNormalMember', function () {
 | 
						|
    $this->loginNami();
 | 
						|
    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);
 | 
						|
 | 
						|
    $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,
 | 
						|
        'inner_name' => 'SG Wald',
 | 
						|
    ]);
 | 
						|
    $this->assertEquals(1001, $member->nami_id);
 | 
						|
});
 | 
						|
 | 
						|
it('testFetchWiederverwendenFlag', function (array $memberAttributes, array $storedAttributes) {
 | 
						|
    $this->loginNami();
 | 
						|
    Region::factory()->inNami(999)->name('nicht-de')->create(['is_null' => true]);
 | 
						|
    app(MemberFake::class)->shows(1000, 1001, $memberAttributes);
 | 
						|
 | 
						|
    app(PullMemberAction::class)->handle(1000, 1001);
 | 
						|
 | 
						|
    $this->assertDatabaseHas('members', $storedAttributes);
 | 
						|
})->with([
 | 
						|
    [['wiederverwendenFlag' => false], ['keepdata' => false]],
 | 
						|
    [['wiederverwendenFlag' => true], ['keepdata' => true]],
 | 
						|
    [['regionId' => 999], ['region_id' => null]]
 | 
						|
]);
 | 
						|
 | 
						|
it('testItSetsFirstSubscriptionFromFee', function () {
 | 
						|
    $this->loginNami();
 | 
						|
    Region::factory()->inNami(999)->name('nicht-de')->create(['is_null' => true]);
 | 
						|
    $should = Subscription::factory()->forFee(55)->create();
 | 
						|
    app(MemberFake::class)->shows(1000, 1001, [
 | 
						|
        'beitragsartId' => 55,
 | 
						|
    ]);
 | 
						|
 | 
						|
    app(PullMemberAction::class)->handle(1000, 1001);
 | 
						|
 | 
						|
    $this->assertDatabaseHas('members', [
 | 
						|
        'subscription_id' => $should->id,
 | 
						|
    ]);
 | 
						|
});
 | 
						|
 | 
						|
it('testItCreatesSubscriptionOnTheFly', function () {
 | 
						|
    $this->loginNami();
 | 
						|
    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',
 | 
						|
    ]);
 | 
						|
    $this->assertDatabaseHas('subscription_children', [
 | 
						|
        'name' => 'Lala',
 | 
						|
        'amount' => 1000,
 | 
						|
        'parent_id' => $subscription->id,
 | 
						|
    ]);
 | 
						|
    $this->assertDatabaseHas('members', [
 | 
						|
        'subscription_id' => $subscription->id,
 | 
						|
    ]);
 | 
						|
});
 | 
						|
 | 
						|
it('testItPullsMemberWithNoSubscription', function () {
 | 
						|
    $this->loginNami();
 | 
						|
    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,
 | 
						|
    ]);
 | 
						|
});
 | 
						|
 | 
						|
it('doesnt set first subscription if fee matches', function () {
 | 
						|
    $this->loginNami();
 | 
						|
    Subscription::factory()->forFee(55)->create();
 | 
						|
    $otherSubscription = Subscription::factory()->forFee(55)->create();
 | 
						|
    $member = Member::factory()->defaults()->inNami(1001)->create(['subscription_id' => $otherSubscription->id]);
 | 
						|
    app(MemberFake::class)->shows(1000, 1001, [
 | 
						|
        'beitragsartId' => 55,
 | 
						|
    ]);
 | 
						|
 | 
						|
    app(PullMemberAction::class)->handle(1000, 1001);
 | 
						|
 | 
						|
    $this->assertDatabaseHas('members', [
 | 
						|
        'subscription_id' => $otherSubscription->id,
 | 
						|
        'id' => $member->id,
 | 
						|
    ]);
 | 
						|
});
 |