diff --git a/app/Membership/Actions/MassStoreAction.php b/app/Membership/Actions/MassStoreAction.php index d4773e24..b35ee86e 100644 --- a/app/Membership/Actions/MassStoreAction.php +++ b/app/Membership/Actions/MassStoreAction.php @@ -54,9 +54,7 @@ class MassStoreAction Membership::where($attributes)->active()->whereNotIn('member_id', $members)->get() ->each(fn ($membership) => MembershipDestroyAction::run($membership->id)); - collect($members) - ->except(Membership::where($attributes)->active()->pluck('member_id')) - ->map(fn ($memberId) => Member::findOrFail($memberId)) + Member::whereIn('id', $members)->whereDoesntHave('memberships', fn ($q) => $q->where($attributes))->get() ->each(fn ($member) => MembershipStoreAction::run( $member, $activity, @@ -65,7 +63,6 @@ class MassStoreAction null, )); - ResyncAction::dispatch(); }); } diff --git a/tests/EndToEnd/MassstoreActionTest.php b/tests/EndToEnd/MassstoreActionTest.php index 3066327d..a958cf29 100644 --- a/tests/EndToEnd/MassstoreActionTest.php +++ b/tests/EndToEnd/MassstoreActionTest.php @@ -48,6 +48,16 @@ it('testItCreatesAMembership', function() { MassStoreAction::run($group, $activity, $subactivity, [$member->id]); }); +it('doesnt create a membership that already exists', function() { + MembershipDestroyAction::partialMock()->shouldReceive('handle')->never(); + MembershipStoreAction::partialMock()->shouldReceive('handle')->never(); + $member = Member::factory()->defaults() + ->has(Membership::factory()->in('Leiter*in', 10, 'Rover', 11)->inNami(55)) + ->create(); + + MassStoreAction::run($member->memberships->first()->group, $member->memberships->first()->activity, $member->memberships->first()->subactivity, [$member->id]); +}); + it('cannot create membership when activity and subactivity doesnt belong together', function() { $this->login()->loginNami(); $member = Member::factory()->defaults()->create();