Skip member when member data is corrupted

This commit is contained in:
philipp lang 2023-02-07 23:23:15 +01:00
parent 35a707dd66
commit 7448a09e5b
3 changed files with 25 additions and 2 deletions

View File

@ -19,7 +19,7 @@ class PullMemberAction
{ {
use AsAction; use AsAction;
public function handle(int $groupId, int $memberId): ?Member public function handle(int $groupId, int $memberId): Member
{ {
$member = $this->api()->member($groupId, $memberId); $member = $this->api()->member($groupId, $memberId);

View File

@ -7,6 +7,7 @@ use App\Actions\PullMemberAction;
use App\Actions\PullMembershipsAction; use App\Actions\PullMembershipsAction;
use DB; use DB;
use Zoomyboy\LaravelNami\Api; use Zoomyboy\LaravelNami\Api;
use Zoomyboy\LaravelNami\Exceptions\Skippable;
class InitializeMembers class InitializeMembers
{ {
@ -22,7 +23,12 @@ class InitializeMembers
$allMembers = collect([]); $allMembers = collect([]);
$this->api->search([])->each(function ($member) { $this->api->search([])->each(function ($member) {
$localMember = app(PullMemberAction::class)->handle($member->groupId, $member->id); try {
$localMember = app(PullMemberAction::class)->handle($member->groupId, $member->id);
} catch (Skippable $e) {
return;
}
app(PullMembershipsAction::class)->handle($localMember); app(PullMembershipsAction::class)->handle($localMember);
app(PullCoursesAction::class)->handle($localMember); app(PullCoursesAction::class)->handle($localMember);
}); });

View File

@ -11,6 +11,7 @@ use App\Setting\NamiSettings;
use Illuminate\Foundation\Testing\DatabaseTransactions; use Illuminate\Foundation\Testing\DatabaseTransactions;
use Tests\TestCase; use Tests\TestCase;
use Zoomyboy\LaravelNami\Data\MemberEntry; use Zoomyboy\LaravelNami\Data\MemberEntry;
use Zoomyboy\LaravelNami\Exceptions\MemberDataCorruptedException;
use Zoomyboy\LaravelNami\Fakes\SearchFake; use Zoomyboy\LaravelNami\Fakes\SearchFake;
class InitializeMembersTest extends TestCase class InitializeMembersTest extends TestCase
@ -31,4 +32,20 @@ class InitializeMembersTest extends TestCase
app(InitializeMembers::class)->handle($api); app(InitializeMembers::class)->handle($api);
} }
public function testFetchesMembersWhenJoinedAtDateIsNull(): void
{
$this->loginNami();
$api = app(NamiSettings::class)->login();
app(SearchFake::class)->fetches(1, 0, [
MemberEntry::factory()->toMember(['groupId' => 100, 'id' => 20]),
MemberEntry::factory()->toMember(['groupId' => 100, 'id' => 21]),
]);
PullMemberAction::shouldRun()->once()->with(100, 20)->andThrow(MemberDataCorruptedException::class, []);
PullMemberAction::shouldRun()->once()->with(100, 21);
PullMembershipsAction::shouldRun()->once();
PullCoursesAction::shouldRun()->once();
app(InitializeMembers::class)->handle($api);
}
} }