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;
public function handle(int $groupId, int $memberId): ?Member
public function handle(int $groupId, int $memberId): Member
{
$member = $this->api()->member($groupId, $memberId);

View File

@ -7,6 +7,7 @@ use App\Actions\PullMemberAction;
use App\Actions\PullMembershipsAction;
use DB;
use Zoomyboy\LaravelNami\Api;
use Zoomyboy\LaravelNami\Exceptions\Skippable;
class InitializeMembers
{
@ -22,7 +23,12 @@ class InitializeMembers
$allMembers = collect([]);
$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(PullCoursesAction::class)->handle($localMember);
});

View File

@ -11,6 +11,7 @@ use App\Setting\NamiSettings;
use Illuminate\Foundation\Testing\DatabaseTransactions;
use Tests\TestCase;
use Zoomyboy\LaravelNami\Data\MemberEntry;
use Zoomyboy\LaravelNami\Exceptions\MemberDataCorruptedException;
use Zoomyboy\LaravelNami\Fakes\SearchFake;
class InitializeMembersTest extends TestCase
@ -31,4 +32,20 @@ class InitializeMembersTest extends TestCase
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);
}
}