150 lines
		
	
	
		
			5.5 KiB
		
	
	
	
		
			PHP
		
	
	
	
			
		
		
	
	
			150 lines
		
	
	
		
			5.5 KiB
		
	
	
	
		
			PHP
		
	
	
	
| <?php
 | |
| 
 | |
| namespace Tests\Feature\Member;
 | |
| 
 | |
| use App\Actions\PullMemberAction;
 | |
| use App\Actions\PullMembershipsAction;
 | |
| use App\Activity;
 | |
| use App\Confession;
 | |
| use App\Country;
 | |
| use App\Gender;
 | |
| use App\Group;
 | |
| use App\Member\Actions\NamiPutMemberAction;
 | |
| use App\Member\BankAccount;
 | |
| use App\Member\Member;
 | |
| use App\Payment\Subscription;
 | |
| use App\Region;
 | |
| use App\Subactivity;
 | |
| use Illuminate\Foundation\Testing\DatabaseTransactions;
 | |
| use Phake;
 | |
| use Zoomyboy\LaravelNami\Fakes\MemberFake;
 | |
| 
 | |
| uses(DatabaseTransactions::class);
 | |
| covers(NamiPutMemberAction::class);
 | |
| 
 | |
| beforeEach(function () {
 | |
|     $this->stubIo(PullMemberAction::class, fn ($mock) => $mock);
 | |
|     $this->stubIo(PullMembershipsAction::class, fn ($mock) => $mock);
 | |
|     Group::factory()->inNami(55)->create();
 | |
|     $this->withoutExceptionHandling()->login()->loginNami();
 | |
|     app(MemberFake::class)->stores(55, 993);
 | |
|     Confession::factory()->inNami(567)->create(['is_null' => true]);
 | |
|     $activity = Activity::factory()->inNami(6)->create();
 | |
|     Subactivity::factory()->hasAttached($activity)->inNami(55)->create();
 | |
| });
 | |
| 
 | |
| it('pulls member and memberships befre pushing', function () {
 | |
|     $member = Member::factory()->defaults()->create();
 | |
| 
 | |
|     NamiPutMemberAction::run($member, Activity::first(), Subactivity::first());
 | |
| 
 | |
|     Phake::verify(app(PullMemberAction::class))->handle(55, 993);
 | |
|     Phake::verify(app(PullMembershipsAction::class))->handle($member);
 | |
| });
 | |
| 
 | |
| it('sets nami id of member', function () {
 | |
|     $member = Member::factory()->defaults()->create();
 | |
| 
 | |
|     NamiPutMemberAction::run($member, Activity::first(), Subactivity::first());
 | |
| 
 | |
|     $this->assertDatabaseHas('members', ['nami_id' => 993]);
 | |
| });
 | |
| 
 | |
| it('stores member attributes', function (array $memberAttributes, array $storedAttributes) {
 | |
|     $member = Member::factory()->defaults()->create($memberAttributes);
 | |
| 
 | |
|     NamiPutMemberAction::run($member, Activity::first(), Subactivity::first());
 | |
| 
 | |
|     app(MemberFake::class)->assertStored(55, $storedAttributes);
 | |
| })->with([
 | |
|     [['firstname' => 'Phi'], ['vorname' => 'Phi']],
 | |
|     [['lastname' => 'Phi'], ['nachname' => 'Phi']],
 | |
|     [['nickname' => 'Nick'], ['spitzname' => 'Nick']],
 | |
|     [['email' => 'a@b.de'], ['email' => 'a@b.de']],
 | |
|     [['zip' => '5566'], ['plz' => '5566']],
 | |
|     [['location' => 'SG'], ['ort' => 'SG']],
 | |
|     [['further_address' => 'SG'], ['nameZusatz' => 'SG']],
 | |
|     [['other_country' => 'SG'], ['staatsangehoerigkeitText' => 'SG']],
 | |
|     [['address' => 'Add'], ['strasse' => 'Add']],
 | |
|     [['main_phone' => '+49 212 5566234'], ['telefon1' => '+49 212 5566234']],
 | |
|     [['mobile_phone' => '+49 212 5566234'], ['telefon2' => '+49 212 5566234']],
 | |
|     [['work_phone' => '+49 212 5566234'], ['telefon3' => '+49 212 5566234']],
 | |
|     [['email_parents' => 'a@b.de'], ['emailVertretungsberechtigter' => 'a@b.de']],
 | |
|     [['keepdata' => true], ['wiederverwendenFlag' => true]],
 | |
|     [['keepdata' => false], ['wiederverwendenFlag' => false]],
 | |
|     fn () => [['joined_at' => now()], ['eintrittsdatum' => now()->format('Y-m-d') . ' 00:00:00']],
 | |
|     [['fax' => '555'], ['telefax' => '555']],
 | |
|     [[], ['konfessionId' => 567]],
 | |
|     [[], ['ersteTaetigkeitId' => 6]],
 | |
|     [[], ['ersteUntergliederungId' => 55]],
 | |
| ]);
 | |
| 
 | |
| it('stores related models', function () {
 | |
|     Subscription::factory()->forFee(3)->create();
 | |
|     $member = Member::factory()->defaults()
 | |
|         ->for(Country::factory()->inNami(1)->create())
 | |
|         ->for(Region::factory()->inNami(2)->create())
 | |
|         ->for(Gender::factory()->inNami(4)->create())
 | |
|         ->create();
 | |
| 
 | |
|     NamiPutMemberAction::run($member, Activity::first(), Subactivity::first());
 | |
| 
 | |
|     app(MemberFake::class)->assertStored(55, ['regionId' => 2, 'landId' => 1, 'beitragsartId' => 3, 'geschlechtId' => 4]);
 | |
| });
 | |
| 
 | |
| it('stores bank account with empty values', function () {
 | |
|     $member = Member::factory()->defaults()->create(['mitgliedsnr' => 56]);
 | |
| 
 | |
|     NamiPutMemberAction::run($member, Activity::first(), Subactivity::first());
 | |
| 
 | |
|     app(MemberFake::class)->assertStored(55, ['kontoverbindung' => json_encode([
 | |
|         'id' => '',
 | |
|         'zahlungsKonditionId' => null,
 | |
|         'mitgliedsNummer' => 56,
 | |
|         'institut' => '',
 | |
|         'kontoinhaber' => '',
 | |
|         'kontonummer' => '',
 | |
|         'bankleitzahl' => '',
 | |
|         'iban' => '',
 | |
|         'bic' => ''
 | |
|     ])]);
 | |
| });
 | |
| 
 | |
| it('updates existing member', function () {
 | |
|     app(MemberFake::class)->updatesSuccessfully(55, 103)->shows(55, 103);
 | |
|     $member = Member::factory()->defaults()->inNami(103)->create(['version' => 50]);
 | |
| 
 | |
|     NamiPutMemberAction::run($member, Activity::first(), Subactivity::first());
 | |
| 
 | |
|     app(MemberFake::class)->assertUpdated(55, 103, ['id' => 103, 'version' => 50]);
 | |
| });
 | |
| 
 | |
| it('updates bank account with filled values', function () {
 | |
|     app(MemberFake::class)->updatesSuccessfully(55, 103)->shows(55, 103);
 | |
|     $member = Member::factory()->defaults()
 | |
|         ->withBankAccount(BankAccount::factory()->inNami(30)->state([
 | |
|             'bank_name' => 'Stadt',
 | |
|             'bic' => 'SOLSDE33',
 | |
|             'iban' => 'DE50',
 | |
|             'blz' => 'ssss',
 | |
|             'person' => 'Pill',
 | |
|             'account_number' => 'ddf',
 | |
|         ]))
 | |
|         ->inNami(103)
 | |
|         ->create(['mitgliedsnr' => 56]);
 | |
| 
 | |
|     NamiPutMemberAction::run($member, Activity::first(), Subactivity::first());
 | |
| 
 | |
|     app(MemberFake::class)->assertUpdated(55, 103, ['kontoverbindung' => json_encode([
 | |
|         'id' => 30,
 | |
|         'zahlungsKonditionId' => null,
 | |
|         'mitgliedsNummer' => 56,
 | |
|         'institut' => 'Stadt',
 | |
|         'kontoinhaber' => 'Pill',
 | |
|         'kontonummer' => 'ddf',
 | |
|         'bankleitzahl' => 'ssss',
 | |
|         'iban' => 'DE50',
 | |
|         'bic' => 'SOLSDE33'
 | |
|     ])]);
 | |
| });
 |