121 lines
5.8 KiB
PHP
121 lines
5.8 KiB
PHP
<?php
|
|
|
|
namespace Tests\Feature\Membership;
|
|
|
|
use App\Activity;
|
|
use App\Group;
|
|
use App\Member\Data\MembershipData;
|
|
use App\Member\Member;
|
|
use App\Member\Membership;
|
|
use App\Subactivity;
|
|
use Illuminate\Foundation\Testing\DatabaseTransactions;
|
|
use Inertia\Testing\AssertableInertia as Assert;
|
|
|
|
uses(DatabaseTransactions::class);
|
|
|
|
mutates(MembershipData::class);
|
|
|
|
it('lists memberships of users', function () {
|
|
$this->login()->loginNami()->withoutExceptionHandling();
|
|
$activity = Activity::factory()
|
|
->hasAttached(Subactivity::factory()->name('SubAct'))
|
|
->name('Act')
|
|
->create();
|
|
$group = Group::factory()->name('GG')->create();
|
|
$member = Member::factory()->defaults()
|
|
->for($group)
|
|
->has(Membership::factory()->for($activity)->for($activity->subactivities->first())->for($group))
|
|
->male()
|
|
->name('Max Muster')
|
|
->create();
|
|
|
|
$activity->subactivities()->first();
|
|
$this->callFilter('membership.index', [])
|
|
->assertInertia(fn(Assert $page) => $page
|
|
->has('data', 1)
|
|
->has('data.0', fn(Assert $page) => $page
|
|
->where('activity.name', 'Act')
|
|
->where('subactivity.name', 'SubAct')
|
|
->where('member.fullname', 'Max Muster')
|
|
->where('group.name', 'GG')
|
|
->where('promisedAt', null)
|
|
->where('links.update', route('membership.update', $member->memberships->first()))
|
|
->where('links.destroy', route('membership.destroy', $member->memberships->first()))
|
|
->etc()
|
|
)->has('meta', fn (Assert $page) => $page
|
|
->where('current_page', 1)
|
|
->where('activities.0.name', 'Act')
|
|
->where('subactivities.0.name', 'SubAct')
|
|
->where('groups.1.name', 'GG')
|
|
->where('filter.active', true)
|
|
->where('filter.groups', [])
|
|
->where('filter.activities', [])
|
|
->where('filter.subactivities', [])
|
|
->etc()
|
|
)
|
|
);
|
|
});
|
|
|
|
it('lists end date', function () {
|
|
$this->login()->loginNami()->withoutExceptionHandling();
|
|
$member = Member::factory()->defaults()
|
|
->has(Membership::factory()->for(Activity::factory())->for(Subactivity::factory())->for(Group::factory())->ended())
|
|
->male()
|
|
->name('Max Muster')
|
|
->create();
|
|
|
|
$this->callFilter('membership.index', ['active' => null])
|
|
->assertInertia(fn(Assert $page) => $page
|
|
->has('data.0', fn(Assert $page) => $page
|
|
->where('to.human', now()->subDays(2)->format('d.m.Y'))
|
|
->where('links.update', route('membership.update', $member->memberships->first()))
|
|
->where('links.destroy', route('membership.destroy', $member->memberships->first()))
|
|
->etc()
|
|
)->has('meta', fn (Assert $page) => $page
|
|
->where('current_page', 1)
|
|
->etc()
|
|
)
|
|
);
|
|
});
|
|
|
|
it('filters for active', function () {
|
|
$this->login()->loginNami()->withoutExceptionHandling();
|
|
Membership::factory()->defaults()->ended()->create();
|
|
Membership::factory()->defaults()->count(2)->create();
|
|
|
|
$this->callFilter('membership.index', [])->assertInertia(fn(Assert $page) => $page->has('data', 2));
|
|
$this->callFilter('membership.index', ['active' => null])->assertInertia(fn(Assert $page) => $page->has('data', 3));
|
|
$this->callFilter('membership.index', ['active' => false])->assertInertia(fn(Assert $page) => $page->has('data', 1));
|
|
$this->callFilter('membership.index', ['active' => true])->assertInertia(fn(Assert $page) => $page->has('data', 2));
|
|
});
|
|
|
|
it('filters for group', function () {
|
|
$this->login()->loginNami()->withoutExceptionHandling();
|
|
$m1 = Membership::factory()->defaults()->count(2)->create();
|
|
$m2 = Membership::factory()->defaults()->create();
|
|
|
|
$this->callFilter('membership.index', [])->assertInertia(fn(Assert $page) => $page->has('data', 3));
|
|
$this->callFilter('membership.index', ['groups' => [$m1->first()->group_id]])->assertInertia(fn(Assert $page) => $page->has('data', 2)->where('meta.filter.groups', [$m1->first()->group_id]));
|
|
$this->callFilter('membership.index', ['groups' => [$m2->group_id]])->assertInertia(fn(Assert $page) => $page->has('data', 1)->where('meta.filter.groups', [$m2->group_id]));
|
|
});
|
|
|
|
it('filters for activity', function () {
|
|
$this->login()->loginNami()->withoutExceptionHandling();
|
|
$m1 = Membership::factory()->defaults()->count(2)->create();
|
|
$m2 = Membership::factory()->defaults()->create();
|
|
|
|
$this->callFilter('membership.index', [])->assertInertia(fn(Assert $page) => $page->has('data', 3));
|
|
$this->callFilter('membership.index', ['activities' => [$m1->first()->activity_id]])->assertInertia(fn(Assert $page) => $page->has('data', 2)->where('meta.filter.activities', [$m1->first()->activity_id]));
|
|
$this->callFilter('membership.index', ['activities' => [$m2->activity_id]])->assertInertia(fn(Assert $page) => $page->has('data', 1)->where('meta.filter.activities', [$m2->activity_id]));
|
|
});
|
|
|
|
it('filters for subactivity', function () {
|
|
$this->login()->loginNami()->withoutExceptionHandling();
|
|
$m1 = Membership::factory()->defaults()->count(2)->create();
|
|
$m2 = Membership::factory()->defaults()->create();
|
|
|
|
$this->callFilter('membership.index', [])->assertInertia(fn(Assert $page) => $page->has('data', 3));
|
|
$this->callFilter('membership.index', ['subactivities' => [$m1->first()->subactivity_id]])->assertInertia(fn(Assert $page) => $page->has('data', 2)->where('meta.filter.subactivities', [$m1->first()->subactivity_id]));
|
|
$this->callFilter('membership.index', ['subactivities' => [$m2->subactivity_id]])->assertInertia(fn(Assert $page) => $page->has('data', 1)->where('meta.filter.subactivities', [$m2->subactivity_id]));
|
|
});
|