Add update for bank account

This commit is contained in:
philipp lang 2025-04-03 02:40:51 +02:00
parent b541d246e0
commit 0c90f66a66
4 changed files with 145 additions and 41 deletions
app/Member/Actions
database/factories/Member
tests/Feature/Member

View File

@ -48,7 +48,16 @@ class NamiPutMemberAction
'id' => $member->nami_id,
'version' => $member->version,
'keepdata' => $member->keepdata,
'bankAccount' => BankAccount::from([]),
'bankAccount' => BankAccount::from([
'bankName' => $member->bankAccount->bank_name,
'id' => $member->bankAccount->nami_id,
'memberId' => $member->mitgliedsnr,
'iban' => $member->bankAccount->iban,
'bic' => $member->bankAccount->bic,
'blz' => $member->bankAccount->blz,
'person' => $member->bankAccount->person,
'accountNumber' => $member->bankAccount->account_number,
]),
]);
$response = $api->putMember($namiMember, $activity ? $activity->nami_id : null, $subactivity ? $subactivity->nami_id : null);
Member::withoutEvents(function () use ($response, $member) {

View File

@ -27,7 +27,17 @@ class BankAccountFactory extends Factory
public function definition(): array
{
return [
//
'bank_name' => $this->faker->name(),
'bic' => $this->faker->swiftBicNumber(),
'iban' => $this->faker->iban('DE'),
'blz' => $this->faker->name(),
'person' => $this->faker->name(),
'account_number' => $this->faker->name(),
];
}
public function inNami(int $namiId): self
{
return $this->state(['nami_id' => $namiId]);
}
}

View File

@ -93,6 +93,13 @@ class MemberFactory extends Factory
return $this->state(['nami_id' => $namiId]);
}
public function withBankAccount(BankAccountFactory $factory): self
{
return $this->afterCreating(function ($member) use ($factory) {
$member->bankAccount->update($factory->make()->toArray());
});
}
public function sameFamilyAs(Member $member): self
{
return $this->state([

View File

@ -7,11 +7,11 @@ use App\Actions\PullMembershipsAction;
use App\Activity;
use App\Confession;
use App\Country;
use App\Fee;
use App\Gender;
use App\Group;
use App\Member\Actions\NamiPutMemberAction;
use App\Member\BankAccount;
use App\Member\Member;
use App\Nationality;
use App\Payment\Subscription;
use App\Region;
use App\Subactivity;
@ -20,52 +20,130 @@ use Phake;
use Zoomyboy\LaravelNami\Fakes\MemberFake;
uses(DatabaseTransactions::class);
covers(NamiPutMemberAction::class);
it('testItPutsAMember', function (array $memberAttributes, array $storedAttributes) {
Fee::factory()->create();
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();
$country = Country::factory()->create();
$region = Region::factory()->create();
$nationality = Nationality::factory()->inNami(565)->create();
$subscription = Subscription::factory()->forFee()->create();
$group = Group::factory()->inNami(55)->create();
$confession = Confession::factory()->inNami(567)->create(['is_null' => true]);
app(MemberFake::class)->stores(55, 993);
$activity = Activity::factory()->hasAttached(Subactivity::factory()->name('Biber')->inNami(55))->name('Leiter')->inNami(6)->create();
$subactivity = $activity->subactivities->first();
Confession::factory()->inNami(567)->create(['is_null' => true]);
$activity = Activity::factory()->inNami(6)->create();
Subactivity::factory()->hasAttached($activity)->inNami(55)->create();
});
$member = Member::factory()
->for($country)
->for($subscription)
->for($region)
->for($nationality)
->for($group)
->emailBillKind()
->create($memberAttributes);
it('pulls member and memberships befre pushing', function () {
$member = Member::factory()->defaults()->create();
NamiPutMemberAction::run($member, $activity, $subactivity);
NamiPutMemberAction::run($member, Activity::first(), Subactivity::first());
app(MemberFake::class)->assertStored(55, [
'ersteTaetigkeitId' => 6,
'ersteUntergliederungId' => 55,
'konfessionId' => 567,
...$storedAttributes,
]);
$this->assertDatabaseHas('members', [
'nami_id' => 993,
]);
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([
[
['email_parents' => 'a@b.de'], ['emailVertretungsberechtigter' => 'a@b.de'],
],
[
['keepdata' => true], ['wiederverwendenFlag' => true],
],
[
['keepdata' => false], ['wiederverwendenFlag' => false],
],
[['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'
])]);
});