diff --git a/src/Fakes/Fake.php b/src/Fakes/Fake.php index a3395d5..322db3c 100644 --- a/src/Fakes/Fake.php +++ b/src/Fakes/Fake.php @@ -56,4 +56,29 @@ abstract class Fake { return Http::response(''); } + + public function assertBodyMatches(string $is, array|callable $should): bool + { + $requestBody = json_decode($is, true); + + if (!is_array($requestBody)) { + return false; + } + + if (is_callable($should)) { + return $should($requestBody); + } + + foreach ($should as $key => $value) { + if (!array_key_exists($key, $requestBody)) { + return false; + } + + if ($requestBody[$key] !== $value) { + return false; + } + } + + return true; + } } diff --git a/src/Fakes/MemberFake.php b/src/Fakes/MemberFake.php index f50d2fe..101c238 100644 --- a/src/Fakes/MemberFake.php +++ b/src/Fakes/MemberFake.php @@ -121,9 +121,9 @@ class MemberFake extends Fake } /** - * @param array $body + * @param array|callable $body */ - public function assertStored(int $groupId, array $body): void + public function assertStored(int $groupId, array|callable $body): void { Http::assertSent(function ($request) use ($groupId, $body) { $url = "https://nami.dpsg.de/ica/rest/nami/mitglied/filtered-for-navigation/gruppierung/gruppierung/{$groupId}"; @@ -132,26 +132,14 @@ class MemberFake extends Fake return false; } - $requestBody = json_decode($request->body(), true); - - foreach ($body as $key => $value) { - if (!array_key_exists($key, $requestBody)) { - return false; - } - - if ($requestBody[$key] !== $value) { - return false; - } - } - - return true; + return $this->assertBodyMatches($request->body(), $body); }); } /** - * @param array $body + * @param array|callable $body */ - public function assertUpdated(int $groupId, int $memberId, array $body): void + public function assertUpdated(int $groupId, int $memberId, array|callable $body): void { Http::assertSent(function ($request) use ($groupId, $memberId, $body) { $url = "https://nami.dpsg.de/ica/rest/nami/mitglied/filtered-for-navigation/gruppierung/gruppierung/{$groupId}/{$memberId}"; @@ -160,19 +148,7 @@ class MemberFake extends Fake return false; } - $requestBody = json_decode($request->body(), true); - - foreach ($body as $key => $value) { - if (!array_key_exists($key, $requestBody)) { - return false; - } - - if ($requestBody[$key] !== $value) { - return false; - } - } - - return true; + return $this->assertBodyMatches($request->body(), $body); }); } diff --git a/src/Fakes/MembershipFake.php b/src/Fakes/MembershipFake.php index 506dbcb..cee9ca3 100644 --- a/src/Fakes/MembershipFake.php +++ b/src/Fakes/MembershipFake.php @@ -12,7 +12,7 @@ class MembershipFake extends Fake public function fetches(int $memberId, array $membershipIds): self { Http::fake(function ($request) use ($memberId, $membershipIds) { - $url = 'https://nami.dpsg.de/ica/rest/nami/zugeordnete-taetigkeiten/filtered-for-navigation/gruppierung-mitglied/mitglied/'.$memberId.'/flist'; + $url = 'https://nami.dpsg.de/ica/rest/nami/zugeordnete-taetigkeiten/filtered-for-navigation/gruppierung-mitglied/mitglied/' . $memberId . '/flist'; if ($request->url() === $url && 'GET' === $request->method()) { return $this->collection(collect($membershipIds)->map(function ($membership) { return [ @@ -36,7 +36,7 @@ class MembershipFake extends Fake public function failsFetching(int $memberId, string $error = 'Error'): self { Http::fake(function ($request) use ($memberId, $error) { - $url = 'https://nami.dpsg.de/ica/rest/nami/zugeordnete-taetigkeiten/filtered-for-navigation/gruppierung-mitglied/mitglied/'.$memberId.'/flist'; + $url = 'https://nami.dpsg.de/ica/rest/nami/zugeordnete-taetigkeiten/filtered-for-navigation/gruppierung-mitglied/mitglied/' . $memberId . '/flist'; if ($request->url() === $url && 'GET' === $request->method()) { return $this->errorResponse($error); } @@ -48,7 +48,7 @@ class MembershipFake extends Fake public function failsFetchingWithHtml(int $memberId): self { Http::fake(function ($request) use ($memberId) { - $url = 'https://nami.dpsg.de/ica/rest/nami/zugeordnete-taetigkeiten/filtered-for-navigation/gruppierung-mitglied/mitglied/'.$memberId.'/flist'; + $url = 'https://nami.dpsg.de/ica/rest/nami/zugeordnete-taetigkeiten/filtered-for-navigation/gruppierung-mitglied/mitglied/' . $memberId . '/flist'; if ($request->url() === $url && 'GET' === $request->method()) { return $this->htmlResponse(); } @@ -63,7 +63,7 @@ class MembershipFake extends Fake public function shows(int $memberId, array $data): self { Http::fake(function ($request) use ($memberId, $data) { - $url = 'https://nami.dpsg.de/ica/rest/nami/zugeordnete-taetigkeiten/filtered-for-navigation/gruppierung-mitglied/mitglied/'.$memberId.'/'.$data['id']; + $url = 'https://nami.dpsg.de/ica/rest/nami/zugeordnete-taetigkeiten/filtered-for-navigation/gruppierung-mitglied/mitglied/' . $memberId . '/' . $data['id']; if ($request->url() === $url && 'GET' === $request->method()) { return $this->dataResponse(array_merge([ 'id' => 68, @@ -85,7 +85,7 @@ class MembershipFake extends Fake public function failsShowing(int $memberId, int $membershipId, ?string $error = 'Error'): self { Http::fake(function ($request) use ($memberId, $membershipId, $error) { - $url = 'https://nami.dpsg.de/ica/rest/nami/zugeordnete-taetigkeiten/filtered-for-navigation/gruppierung-mitglied/mitglied/'.$memberId.'/'.$membershipId; + $url = 'https://nami.dpsg.de/ica/rest/nami/zugeordnete-taetigkeiten/filtered-for-navigation/gruppierung-mitglied/mitglied/' . $memberId . '/' . $membershipId; if ($request->url() === $url && 'GET' === $request->method()) { return $this->errorResponse($error); } @@ -109,7 +109,7 @@ class MembershipFake extends Fake public function failsShowingWithHtml(int $memberId, int $membershipId): self { Http::fake(function ($request) use ($memberId, $membershipId) { - $url = 'https://nami.dpsg.de/ica/rest/nami/zugeordnete-taetigkeiten/filtered-for-navigation/gruppierung-mitglied/mitglied/'.$memberId.'/'.$membershipId; + $url = 'https://nami.dpsg.de/ica/rest/nami/zugeordnete-taetigkeiten/filtered-for-navigation/gruppierung-mitglied/mitglied/' . $memberId . '/' . $membershipId; if ($request->url() === $url && 'GET' === $request->method()) { return $this->htmlResponse(); } @@ -180,7 +180,7 @@ class MembershipFake extends Fake }); } - public function assertCreated(int $memberId, array $payload): void + public function assertCreated(int $memberId, array|callable $payload): void { $url = "https://nami.dpsg.de/ica/rest/nami/zugeordnete-taetigkeiten/filtered-for-navigation/gruppierung-mitglied/mitglied/{$memberId}"; @@ -189,39 +189,9 @@ class MembershipFake extends Fake return false; } - $requestBody = json_decode($request->body(), true); - - foreach ($payload as $key => $value) { - if (!array_key_exists($key, $requestBody)) { - return false; - } - - if ($requestBody[$key] !== $value) { - return false; - } - } - - return true; + return $this->assertBodyMatches($request->body(), $payload); }); } public function assertUpdated(int $memberId, array $payload): void { - $url = "https://nami.dpsg.de/ica/rest/nami/zugeordnete-taetigkeiten/filtered-for-navigation/gruppierung-mitglied/mitglied/{$memberId}/{$payload['id']}"; - Http::assertSent(function ($request) use ($url, $payload) { - if ($request->url() !== $url || 'PUT' !== $request->method()) { - return false; - } - - if (data_get($request, 'id') !== $payload['id']) { - return false; - } - - if (data_get($request, 'aktivBis') !== data_get($payload, 'aktivBis')) { - return false; - } - - return true; - }); - } -}