Add membership member test

This commit is contained in:
Philipp Lang 2022-02-22 01:31:02 +01:00
parent 33ab14f51e
commit 534ce18491
3 changed files with 115 additions and 0 deletions

View File

@ -3,6 +3,7 @@
namespace Zoomyboy\LaravelNami\Fakes;
use GuzzleHttp\Promise\PromiseInterface;
use Illuminate\Support\Collection;
use Illuminate\Support\Facades\Http;
abstract class Fake {
@ -15,6 +16,22 @@ abstract class Fake {
]));
}
public function collection(Collection $collection): PromiseInterface
{
return Http::response(json_encode([
'success' => true,
'data' => $collection->toArray(),
]));
}
public function data(array $data): PromiseInterface
{
return Http::response(json_encode([
'success' => true,
'data' => $data,
]));
}
public function htmlResponse(): PromiseInterface
{
return Http::response('<html></html>');

View File

@ -0,0 +1,56 @@
<?php
namespace Zoomyboy\LaravelNami\Fakes;
use Illuminate\Http\Client\Response;
use Illuminate\Support\Facades\Http;
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';
if ($request->url() === $url && $request->method() === 'GET') {
return $this->collection(collect($membershipIds)->map(fn ($membershipId) => ['id' => $membershipId]));
}
});
return $this;
}
public function fetchFails(int $memberId, string $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';
if ($request->url() === $url && $request->method() === 'GET') {
return $this->errorResponse($error);
}
});
return $this;
}
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'];
if ($request->url() === $url && $request->method() === 'GET') {
return $this->data(array_merge([
"id" => 68,
"gruppierung" => "Diözesanleitung Köln 100000",
"gruppierungId" => 103,
"taetigkeit" => "ReferentIn",
"taetigkeitId" => 33,
"untergliederung" => "Pfadfinder",
"untergliederungId" => 55,
"aktivVon" => "2017-02-11 00:00:00",
"aktivBis" => "2017-03-11 00:00:00"
], $data));
}
});
return $this;
}
}

42
tests/Unit/MemberTest.php Normal file
View File

@ -0,0 +1,42 @@
<?php
namespace Zoomyboy\LaravelNami\Tests\Unit;
use Illuminate\Support\Facades\Http;
use Zoomyboy\LaravelNami\Fakes\MembershipFake;
use Zoomyboy\LaravelNami\Member;
use Zoomyboy\LaravelNami\Nami;
use Zoomyboy\LaravelNami\Tests\TestCase;
class MemberTest extends TestCase
{
public function test_get_memberships_of_a_member(): void
{
app(MembershipFake::class)
->fetches(16, [68, 69])
->shows(16, [
"id" => 68,
]);
$this->login();
$member = new Member(['id' => 16]);
$membership = $member->memberships()->first();
$this->assertEquals(68, $membership->id);
}
/**
* @testWith ["Access denied - no right for requested operation", "Sicherheitsverletzung: Zugriff auf Rechte Recht (n:2001002 o:2) fehlgeschlagen"]
*/
public function test_it_gets_no_memberships_with_no_rights(string $error): void
{
app(MembershipFake::class)->fetchFails(16, $error);
$this->login();
$member = new Member(['id' => 16]);
$memberships = $member->memberships();
$this->assertSame([], $member->memberships()->toArray());
}
}