diff --git a/app/Contribution/Contracts/HasContributionData.php b/app/Contribution/Contracts/HasContributionData.php index 2f3039a7..96ee3309 100644 --- a/app/Contribution/Contracts/HasContributionData.php +++ b/app/Contribution/Contracts/HasContributionData.php @@ -26,5 +26,8 @@ interface HasContributionData { public function country(): ?Country; + /** + * @return array + */ public function payload(): array; } diff --git a/app/Contribution/ContributionFactory.php b/app/Contribution/ContributionFactory.php index 5a0f4d89..163b897b 100644 --- a/app/Contribution/ContributionFactory.php +++ b/app/Contribution/ContributionFactory.php @@ -62,11 +62,11 @@ class ContributionFactory ]; } - public function validateType(HasContributionData $request) { + public function validateType(HasContributionData $request): void { Validator::make(['type' => $request->type()], $this->typeRule())->validate(); } - public function validatePayload(HasContributionData $request) { + public function validatePayload(HasContributionData $request): void { Validator::make($request->payload(), $this->rules($request->type()))->validate(); } } diff --git a/app/Initialize/Actions/InitializeAction.php b/app/Initialize/Actions/InitializeAction.php index b2e44510..dfe261ae 100644 --- a/app/Initialize/Actions/InitializeAction.php +++ b/app/Initialize/Actions/InitializeAction.php @@ -71,7 +71,7 @@ class InitializeAction public function asController(ActionRequest $request, NamiSettings $settings): RedirectResponse { - $settings->mglnr = (int) $request->input('mglnr'); + $settings->mglnr = $request->input('mglnr'); $settings->password = $request->input('password'); $settings->default_group_id = (int) $request->input('group_id'); $settings->search_params = $request->input('params'); diff --git a/app/Initialize/Actions/NamiGetSearchLayerAction.php b/app/Initialize/Actions/NamiGetSearchLayerAction.php index ec0c3c00..951f7176 100644 --- a/app/Initialize/Actions/NamiGetSearchLayerAction.php +++ b/app/Initialize/Actions/NamiGetSearchLayerAction.php @@ -21,7 +21,7 @@ class NamiGetSearchLayerAction */ public function handle(array $input): Collection { - return Nami::login((int) $input['mglnr'], $input['password'])->searchLayerOptions( + return Nami::login($input['mglnr'], $input['password'])->searchLayerOptions( SearchLayer::from($input['layer'] ?: 0), $input['parent'] ?: null ); diff --git a/app/Initialize/Actions/NamiLoginCheckAction.php b/app/Initialize/Actions/NamiLoginCheckAction.php index 38fe0429..8b1aa687 100644 --- a/app/Initialize/Actions/NamiLoginCheckAction.php +++ b/app/Initialize/Actions/NamiLoginCheckAction.php @@ -16,7 +16,7 @@ class NamiLoginCheckAction */ public function handle(array $input): void { - Nami::freshLogin((int) $input['mglnr'], $input['password']); + Nami::freshLogin($input['mglnr'], $input['password']); } /** diff --git a/app/Setting/NamiSettings.php b/app/Setting/NamiSettings.php index 12dbd1d1..8314ccb0 100644 --- a/app/Setting/NamiSettings.php +++ b/app/Setting/NamiSettings.php @@ -4,7 +4,6 @@ namespace App\Setting; use App\Group; use App\Initialize\Actions\NamiLoginCheckAction; -use App\Nami\Actions\SettingSaveAction; use App\Setting\Contracts\Storeable; use Lorisleiva\Actions\ActionRequest; use Zoomyboy\LaravelNami\Api; @@ -12,7 +11,7 @@ use Zoomyboy\LaravelNami\Nami; class NamiSettings extends LocalSettings implements Storeable { - public int $mglnr; + public string $mglnr; public string $password; diff --git a/packages/laravel-nami b/packages/laravel-nami index 35bed018..47f01b3c 160000 --- a/packages/laravel-nami +++ b/packages/laravel-nami @@ -1 +1 @@ -Subproject commit 35bed01848492471d6e4141f303f74ab19d1fc09 +Subproject commit 47f01b3c3c98821603f3612511d713cf51a6a14c diff --git a/tests/Feature/Member/PsPendingBlockTest.php b/tests/Feature/Member/PsPendingBlockTest.php index aef909d6..47e876b3 100644 --- a/tests/Feature/Member/PsPendingBlockTest.php +++ b/tests/Feature/Member/PsPendingBlockTest.php @@ -15,7 +15,7 @@ class PsPendingBlockTest extends TestCase public function testItRendersContent(): void { - $this->withoutExceptionHandling()->withNamiSettings(12345, 'password', 101); + $this->withoutExceptionHandling()->withNamiSettings('12345', 'password', 101); $group = Group::factory()->inNami(101)->create(); $noPsAtAll = Member::factory() @@ -72,7 +72,7 @@ class PsPendingBlockTest extends TestCase public function testItExcludesForeignGroups(): void { - $this->withoutExceptionHandling()->withNamiSettings(12345, 'password', 101); + $this->withoutExceptionHandling()->withNamiSettings('12345', 'password', 101); Group::factory()->inNami(101)->create(); $otherGroup = Group::factory()->inNami(55)->create(); diff --git a/tests/Feature/Nami/SettingTest.php b/tests/Feature/Nami/SettingTest.php new file mode 100644 index 00000000..374d13f5 --- /dev/null +++ b/tests/Feature/Nami/SettingTest.php @@ -0,0 +1,84 @@ +withoutExceptionHandling()->login()->loginNami(); + + $this->get(route('setting.view', ['settingGroup' => 'nami'])) + ->assertOk() + ->assertComponent('setting/Nami'); +}); + +it('testDisplaySettings', function () { + $this->withoutExceptionHandling()->login()->loginNami(); + app(NamiSettings::class)->fill([ + 'mglnr' => '0111', + 'password' => 'secret', + 'default_group_id' => '12345', + 'search_params' => [], + ])->save(); + + $this->get(route('setting.data', ['settingGroup' => 'nami'])) + ->assertOk() + ->assertComponent('setting/Nami') + ->assertInertiaPath('data.mglnr', '0111') + ->assertInertiaPath('data.password', '') + ->assertInertiaPath('data.default_group_id', 12345); +}); + +it('testItCanChangeSettings', function () { + $this->login()->loginNami(); + Auth::success(90100, 'secret'); + + $response = $this->from('/setting/nami')->post('/setting/nami', [ + 'mglnr' => 90100, + 'password' => 'secret', + 'default_group_id' => '12345', + 'search_params' => [], + ]); + + $response->assertRedirect('/setting/nami'); + $settings = app(NamiSettings::class); + $this->assertEquals(90100, $settings->mglnr); + $this->assertEquals('secret', $settings->password); + $this->assertEquals('12345', $settings->default_group_id); +}); + +it('validates settings', function () { + $this->login()->loginNami(); + + $this->from('/setting/nami')->post('/setting/nami', [ + 'mglnr' => 90100, + 'password' => 'fdsfsdfdsf', + 'default_group_id' => '12345', + 'search_params' => [], + ])->assertSessionHasErrors(['nami' => 'NaMi Login fehlgeschlagen.']); +}); + +it('can set mglnr to a string', function () { + $this->login()->loginNami(); + Auth::success('090100', 'secret'); + + $response = $this->from('/setting/nami')->post('/setting/nami', [ + 'mglnr' => '090100', + 'password' => 'secret', + 'default_group_id' => '12345', + 'search_params' => [], + ]); + + $response->assertRedirect('/setting/nami'); + $settings = app(NamiSettings::class); + $this->assertSame('090100', $settings->mglnr); + $this->assertEquals('secret', $settings->password); + $this->assertEquals('12345', $settings->default_group_id); +}); diff --git a/tests/TestCase.php b/tests/TestCase.php index d2ed1b86..d02a741a 100644 --- a/tests/TestCase.php +++ b/tests/TestCase.php @@ -37,7 +37,7 @@ class TestCase extends BaseTestCase $this->initInertiaTestcase(); } - public function loginNami(int $mglnr = 12345, string $password = 'password', int|Group $groupId = 55): static + public function loginNami(string $mglnr = '12345', string $password = 'password', int|Group $groupId = 55): static { Auth::success($mglnr, $password); $group = is_int($groupId) @@ -49,7 +49,7 @@ class TestCase extends BaseTestCase return $this; } - public function withNamiSettings(int $mglnr = 12345, string $password = 'password', int $groupId = 55): self + public function withNamiSettings(string $mglnr = '12345', string $password = 'password', int $groupId = 55): self { NamiSettings::fake([ 'mglnr' => $mglnr,