From b1b85f61b0e4f2abb07545d55905dc8d721e987d Mon Sep 17 00:00:00 2001 From: philipp lang Date: Sun, 6 Mar 2022 01:53:15 +0100 Subject: [PATCH] Add Membership StoreTest --- app/Membership/Requests/StoreRequest.php | 55 +++++++++++++++++++++ database/factories/ActivityFactory.php | 34 +++++++++++++ database/factories/SubactivityFactory.php | 34 +++++++++++++ tests/Feature/Membership/StoreTest.php | 59 +++++++++++++++++++++++ 4 files changed, 182 insertions(+) create mode 100644 app/Membership/Requests/StoreRequest.php create mode 100644 database/factories/ActivityFactory.php create mode 100644 database/factories/SubactivityFactory.php create mode 100644 tests/Feature/Membership/StoreTest.php diff --git a/app/Membership/Requests/StoreRequest.php b/app/Membership/Requests/StoreRequest.php new file mode 100644 index 00000000..2fca27d1 --- /dev/null +++ b/app/Membership/Requests/StoreRequest.php @@ -0,0 +1,55 @@ +startOfDay(); + $namiId = $settings->login()->putMembership($member->nami_id, Membership::fromArray([ + 'startsAt' => $from, + 'groupId' => $member->group->nami_id, + 'activityId' => Activity::find($this->input('activity_id'))->nami_id, + 'subactivityId' => optional(Subactivity::find($this->input('subactivity_id')))->nami_id, + ])); + + $member->memberships()->create([ + ...$this->input(), + ...['nami_id' => $namiId, 'group_id' => $member->group->id, 'from' => $from], + ]); + + $member->syncVersion(); + } + +} diff --git a/database/factories/ActivityFactory.php b/database/factories/ActivityFactory.php new file mode 100644 index 00000000..410da3e6 --- /dev/null +++ b/database/factories/ActivityFactory.php @@ -0,0 +1,34 @@ + + */ +class ActivityFactory extends Factory +{ + + protected $model = Activity::class; + + /** + * Define the model's default state. + * + * @return array + */ + public function definition() + { + return [ + 'name' => $this->faker->words(5, true), + 'nami_id' => $this->faker->randomNumber(), + ]; + } + + public function inNami(int $namiId): self + { + return $this->state(['nami_id' => $namiId]); + } + +} diff --git a/database/factories/SubactivityFactory.php b/database/factories/SubactivityFactory.php new file mode 100644 index 00000000..f94d7ba0 --- /dev/null +++ b/database/factories/SubactivityFactory.php @@ -0,0 +1,34 @@ + + */ +class SubactivityFactory extends Factory +{ + + protected $model = Subactivity::class; + + /** + * Define the model's default state. + * + * @return array + */ + public function definition() + { + return [ + 'name' => $this->faker->words(5, true), + 'nami_id' => $this->faker->randomNumber(), + ]; + } + + public function inNami(int $namiId): self + { + return $this->state(['nami_id' => $namiId]); + } + +} diff --git a/tests/Feature/Membership/StoreTest.php b/tests/Feature/Membership/StoreTest.php new file mode 100644 index 00000000..e9fadea4 --- /dev/null +++ b/tests/Feature/Membership/StoreTest.php @@ -0,0 +1,59 @@ +withoutExceptionHandling()->login()->loginNami(); + app(MembershipFake::class)->createsSuccessfully(6, 133); + app(MemberFake::class)->shows(1400, 6, ['version' => 1506]); + $member = Member::factory() + ->defaults() + ->for(Group::factory()->inNami(1400)) + ->inNami(6) + ->createOne(); + $activity = Activity::factory() + ->inNami(1) + ->hasAttached(Subactivity::factory()->inNami(2)) + ->createOne(); + + $this->post("/member/{$member->id}/membership", [ + 'activity_id' => $activity->id, + 'subactivity_id' => $activity->subactivities->first()->id, + ]); + + $this->assertEquals(1506, $member->fresh()->version); + $this->assertDatabaseHas('memberships', [ + 'member_id' => $member->id, + 'activity_id' => $activity->id, + 'subactivity_id' => $activity->subactivities->first()->id, + 'nami_id' => 133, + ]); + app(MembershipFake::class)->assertCreated(6, [ + 'untergliederungId' => 2, + 'taetigkeitId' => 1, + 'gruppierungId' => 1400, + 'aktivVon' => '2022-02-03T00:00:00', + 'aktivBis' => null, + ]); + } + +} +