Add Resync test
This commit is contained in:
parent
ecffc258df
commit
50bfa59c11
|
@ -28,7 +28,7 @@ class PullMemberAction
|
|||
return Member::updateOrCreate(['nami_id' => $member->id], [
|
||||
'firstname' => $member->firstname,
|
||||
'lastname' => $member->lastname,
|
||||
'joined_at' => $member->joinedAt ?: now(),
|
||||
'joined_at' => $member->joinedAt,
|
||||
'birthday' => $member->birthday,
|
||||
'send_newspaper' => $member->sendNewspaper,
|
||||
'address' => $member->address,
|
||||
|
|
|
@ -0,0 +1,10 @@
|
|||
<?php
|
||||
|
||||
namespace App\Exceptions;
|
||||
|
||||
use Exception;
|
||||
|
||||
class MemberNotInNamiException extends Exception
|
||||
{
|
||||
//
|
||||
}
|
|
@ -15,7 +15,7 @@ class InitializeAction
|
|||
{
|
||||
use AsAction;
|
||||
|
||||
public $commandSignature = 'initialize {--mglnr=} {--password=} {--group=}';
|
||||
public string $commandSignature = 'initialize {--mglnr=} {--password=} {--group=}';
|
||||
|
||||
public function handle(int $mglnr, string $password, int $groupId): void
|
||||
{
|
||||
|
|
|
@ -16,7 +16,7 @@ class InitializeMembers
|
|||
{
|
||||
use AsAction;
|
||||
|
||||
public $commandSignature = 'member:pull';
|
||||
public string $commandSignature = 'member:pull';
|
||||
|
||||
public function handle(Api $api): void
|
||||
{
|
||||
|
|
|
@ -0,0 +1,45 @@
|
|||
<?php
|
||||
|
||||
namespace App\Member\Actions;
|
||||
|
||||
use App\Actions\PullMemberAction;
|
||||
use App\Actions\PullMembershipsAction;
|
||||
use App\Member\Member;
|
||||
use App\Setting\NamiSettings;
|
||||
use Illuminate\Http\RedirectResponse;
|
||||
use Illuminate\Http\Response;
|
||||
use Lorisleiva\Actions\ActionRequest;
|
||||
use Lorisleiva\Actions\Concerns\AsAction;
|
||||
use Zoomyboy\LaravelNami\Exceptions\Skippable;
|
||||
|
||||
class MemberResyncAction
|
||||
{
|
||||
use AsAction;
|
||||
|
||||
public function handle(Member $member, NamiSettings $settings): void
|
||||
{
|
||||
$api = $settings->login();
|
||||
|
||||
if (!$member->hasNami || !$member->group->hasNami) {
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
$localMember = app(PullMemberAction::class)->handle($member->group->nami_id, $member->nami_id);
|
||||
} catch (Skippable $e) {
|
||||
return;
|
||||
}
|
||||
|
||||
app(PullMembershipsAction::class)->handle($localMember);
|
||||
}
|
||||
|
||||
public function asController(ActionRequest $request, Member $member): RedirectResponse|Response
|
||||
{
|
||||
$this->handle(
|
||||
$member,
|
||||
app(NamiSettings::class),
|
||||
);
|
||||
|
||||
return redirect()->back();
|
||||
}
|
||||
}
|
|
@ -1,21 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace App\Member\Controllers;
|
||||
|
||||
use App\Actions\PullMemberAction;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Member\Member;
|
||||
use App\Setting\NamiSettings;
|
||||
use Illuminate\Http\RedirectResponse;
|
||||
|
||||
class MemberResyncController extends Controller
|
||||
{
|
||||
public function __invoke(Member $member, NamiSettings $settings): RedirectResponse
|
||||
{
|
||||
if ($member->hasNami) {
|
||||
app(PullMemberAction::class)->api($settings->login())->member($member->group->nami_id, $member->nami_id)->execute();
|
||||
}
|
||||
|
||||
return redirect()->route('member.edit', ['member' => $member])->success('Mitglied aktualisiert');
|
||||
}
|
||||
}
|
|
@ -7,8 +7,8 @@ use App\Efz\ShowEfzDocumentAction;
|
|||
use App\Home\Actions\IndexAction as HomeIndexAction;
|
||||
use App\Initialize\Actions\InitializeAction;
|
||||
use App\Initialize\Actions\InitializeFormAction;
|
||||
use App\Member\Actions\MemberResyncAction;
|
||||
use App\Member\Actions\MemberShowAction;
|
||||
use App\Member\Controllers\MemberResyncController;
|
||||
use App\Member\MemberController;
|
||||
use App\Membership\Actions\MembershipDestroyAction;
|
||||
use App\Membership\Actions\MembershipStoreAction;
|
||||
|
@ -43,7 +43,7 @@ Route::group(['middleware' => 'auth:web'], function (): void {
|
|||
Route::delete('/member/{member}/membership/{membership}', MembershipDestroyAction::class)->name('membership.destroy');
|
||||
Route::resource('member.course', CourseController::class);
|
||||
Route::get('/member/{member}/efz', ShowEfzDocumentAction::class)->name('efz');
|
||||
Route::get('/member/{member}/resync', MemberResyncController::class)->name('member.resync');
|
||||
Route::get('/member/{member}/resync', MemberResyncAction::class)->name('member.resync');
|
||||
Route::get('/contribution', ContributionFormAction::class)->name('contribution.form');
|
||||
Route::get('/contribution/generate', [ContributionController::class, 'generate'])->name('contribution.generate');
|
||||
});
|
||||
|
|
|
@ -0,0 +1,43 @@
|
|||
<?php
|
||||
|
||||
namespace Tests\Feature\Member;
|
||||
|
||||
use App\Actions\PullCoursesAction;
|
||||
use App\Actions\PullMemberAction;
|
||||
use App\Actions\PullMembershipsAction;
|
||||
use App\Group;
|
||||
use App\Member\Member;
|
||||
use Illuminate\Foundation\Testing\DatabaseTransactions;
|
||||
use Tests\TestCase;
|
||||
|
||||
class ResyncTest extends TestCase
|
||||
{
|
||||
use DatabaseTransactions;
|
||||
|
||||
public function testItCanResyncAMember(): void
|
||||
{
|
||||
$this->login()->loginNami();
|
||||
$member = Member::factory()->defaults()->for(Group::factory()->inNami(32))->inNami(33)->create();
|
||||
PullMemberAction::shouldRun()->once()->with(32, 33)->andReturn($member);
|
||||
PullMembershipsAction::shouldRun()->once()->with($member);
|
||||
PullCoursesAction::shouldRun()->never();
|
||||
|
||||
$response = $this->from('/member')->get(route('member.resync', ['member' => $member]));
|
||||
|
||||
$response->assertRedirect('/member');
|
||||
}
|
||||
|
||||
public function testItReturnsErrorWhenMemberIsNotInNami(): void
|
||||
{
|
||||
$this->login()->loginNami();
|
||||
$member = Member::factory()->defaults()->create();
|
||||
|
||||
PullMemberAction::shouldRun()->never();
|
||||
PullMembershipsAction::shouldRun()->never();
|
||||
PullCoursesAction::shouldRun()->never();
|
||||
|
||||
$response = $this->from('/member')->get(route('member.resync', ['member' => $member]));
|
||||
|
||||
$response->assertRedirect('/member');
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue