Fixed tests

This commit is contained in:
philipp lang 2022-02-18 18:29:02 +01:00
parent b78b0a5b21
commit 54826f0f73
15 changed files with 148 additions and 187 deletions

View File

@ -85,16 +85,14 @@ class Api {
} }
} }
public function login($mglnr = null, $password = null): self { public function login(int $mglnr, string $password): self
{
if ($this->cookie->isLoggedIn()) { if ($this->cookie->isLoggedIn()) {
return $this; return $this;
} }
$this->cookie->beforeLogin(); $this->cookie->beforeLogin();
$mglnr = $mglnr ?: config('nami.auth.mglnr');
$password = $password ?: config('nami.auth.password');
$this->http()->get($this->url.'/ica/pages/login.jsp'); $this->http()->get($this->url.'/ica/pages/login.jsp');
$response = $this->http()->asForm()->post($this->url.'/ica/rest/nami/auth/manual/sessionStartup', [ $response = $this->http()->asForm()->post($this->url.'/ica/rest/nami/auth/manual/sessionStartup', [
'Login' => 'API', 'Login' => 'API',
@ -109,7 +107,6 @@ class Api {
throw $e; throw $e;
} }
$this->loggedIn = $mglnr;
$this->cookie->afterLogin(); $this->cookie->afterLogin();
return $this; return $this;

View File

@ -12,7 +12,7 @@ class Cookie {
/** /**
* Loads the cookie for a new request * Loads the cookie for a new request
* *
* @return FileCookieJar * @return FileCookieJar
*/ */
public function load(): FileCookieJar public function load(): FileCookieJar
@ -55,7 +55,7 @@ class Cookie {
private function newFileName(): string private function newFileName(): string
{ {
return $this->path.'/'.time().'.txt'; return $this->path.'/'.time().'.txt';
} }
private function isExpired(): bool private function isExpired(): bool

View File

@ -4,6 +4,9 @@ namespace Zoomyboy\LaravelNami;
use Illuminate\Support\Facades\Facade; use Illuminate\Support\Facades\Facade;
/**
* @method static \Zoomyboy\LaravelNami\Api login(int $mglnr, string $password)
*/
class Nami extends Facade { class Nami extends Facade {
protected static function getFacadeAccessor() { return 'nami.api'; } protected static function getFacadeAccessor() { return 'nami.api'; }
} }

View File

@ -4,8 +4,10 @@ namespace Zoomyboy\LaravelNami\Tests;
use Illuminate\Support\Facades\Config; use Illuminate\Support\Facades\Config;
use Illuminate\Support\Facades\Http; use Illuminate\Support\Facades\Http;
use Zoomyboy\LaravelNami\Api;
use Zoomyboy\LaravelNami\Cookies\Cookie; use Zoomyboy\LaravelNami\Cookies\Cookie;
use Zoomyboy\LaravelNami\Cookies\FakeCookie; use Zoomyboy\LaravelNami\Cookies\FakeCookie;
use Zoomyboy\LaravelNami\Nami;
use Zoomyboy\LaravelNami\Providers\NamiServiceProvider; use Zoomyboy\LaravelNami\Providers\NamiServiceProvider;
use Zoomyboy\LaravelNami\Tests\Stub\Member; use Zoomyboy\LaravelNami\Tests\Stub\Member;
@ -36,10 +38,11 @@ class TestCase extends \Orchestra\Testbench\TestCase
return ob_get_clean(); return ob_get_clean();
} }
public function fakeGenders() { public function login(): Api
return [ {
'https://nami.dpsg.de/ica/rest/baseadmin/geschlecht' => Http::response($this->fakeJson('genders.json'), 200) touch (__DIR__.'/../.cookies/'.time().'.txt');
];
return Nami::login(123, 'secret');
} }
private function clearCookies(): void private function clearCookies(): void

View File

@ -2,72 +2,59 @@
namespace Zoomyboy\LaravelNami\Tests\Unit; namespace Zoomyboy\LaravelNami\Tests\Unit;
use Zoomyboy\LaravelNami\Nami;
use Zoomyboy\LaravelNami\Tests\TestCase;
use Illuminate\Support\Facades\Http;
use Illuminate\Support\Facades\Config; use Illuminate\Support\Facades\Config;
use Zoomyboy\LaravelNami\NamiServiceProvider; use Illuminate\Support\Facades\Http;
use Zoomyboy\LaravelNami\LoginException;
use Zoomyboy\LaravelNami\Group; use Zoomyboy\LaravelNami\Group;
use Zoomyboy\LaravelNami\LoginException;
use Zoomyboy\LaravelNami\Nami;
use Zoomyboy\LaravelNami\NamiServiceProvider;
use Zoomyboy\LaravelNami\Tests\TestCase;
class GetGroupsTest extends TestCase class GetGroupsTest extends TestCase
{ {
public $groupsResponse = '{"success":true,"data":[{"descriptor":"Group","name":"","representedClass":"de.iconcept.nami.entity.org.Gruppierung","id":100}],"responseType":"OK"}'; public string $groupsResponse = '{"success":true,"data":[{"descriptor":"Group","name":"","representedClass":"de.iconcept.nami.entity.org.Gruppierung","id":100}],"responseType":"OK"}';
public $subgroupsResponse = '{ "success": true, "data": [ { "descriptor": "Siebengebirge", "name": "", "representedClass": "de.iconcept.nami.entity.org.Gruppierung", "id": 101300 }, { "descriptor": "Sieg", "name": "", "representedClass": "de.iconcept.nami.entity.org.Gruppierung", "id": 100900 }, { "descriptor": "Sieg", "name": "", "representedClass": "de.iconcept.nami.entity.org.Gruppierung", "id": 100900 }, { "descriptor": "Voreifel", "name": "", "representedClass": "de.iconcept.nami.entity.org.Gruppierung", "id": 101000 } ], "responseType": "OK" }'; public string $subgroupsResponse = '{ "success": true, "data": [ { "descriptor": "Siebengebirge", "name": "", "representedClass": "de.iconcept.nami.entity.org.Gruppierung", "id": 101300 }, { "descriptor": "Sieg", "name": "", "representedClass": "de.iconcept.nami.entity.org.Gruppierung", "id": 100900 }, { "descriptor": "Sieg", "name": "", "representedClass": "de.iconcept.nami.entity.org.Gruppierung", "id": 100900 }, { "descriptor": "Voreifel", "name": "", "representedClass": "de.iconcept.nami.entity.org.Gruppierung", "id": 101000 } ], "responseType": "OK" }';
public $subsubgroupsResponse = '{ "success": true, "data": [ { "descriptor": "Silva", "name": "", "representedClass": "de.iconcept.nami.entity.org.Gruppierung", "id": 100105 } ], "responseType": "OK" }'; public string $subsubgroupsResponse = '{ "success": true, "data": [ { "descriptor": "Silva", "name": "", "representedClass": "de.iconcept.nami.entity.org.Gruppierung", "id": 100105 } ], "responseType": "OK" }';
public function test_get_all_groups() public function test_get_all_groups(): void
{ {
Http::fake([ Http::fake([
'https://nami.dpsg.de/ica/pages/login.jsp' => Http::response('<html></html>', 200),
'https://nami.dpsg.de/ica/rest/nami/auth/manual/sessionStartup' => Http::response($this->successJson, 200),
'https://nami.dpsg.de/ica/rest/nami/gruppierungen/filtered-for-navigation/gruppierung/node/root' => Http::response($this->groupsResponse, 200), 'https://nami.dpsg.de/ica/rest/nami/gruppierungen/filtered-for-navigation/gruppierung/node/root' => Http::response($this->groupsResponse, 200),
]); ]);
$this->setCredentials(); $groups = $this->login()->groups();
Nami::login();
$this->assertEquals([ $this->assertEquals([
['id' => 100, 'name' => 'Group', 'parent_id' => null] ['id' => 100, 'name' => 'Group', 'parent_id' => null]
], Nami::groups()->toArray()); ], $groups->toArray());
Http::assertSent(function($request) { Http::assertSent(function($request) {
return $request->url() == 'https://nami.dpsg.de/ica/rest/nami/gruppierungen/filtered-for-navigation/gruppierung/node/root'; return $request->url() == 'https://nami.dpsg.de/ica/rest/nami/gruppierungen/filtered-for-navigation/gruppierung/node/root';
}); });
Http::assertSentCount(3); Http::assertSentCount(1);
} }
public function test_has_group_access() public function test_has_group_access(): void
{ {
Http::fake([ Http::fake([
'https://nami.dpsg.de/ica/pages/login.jsp' => Http::response('<html></html>', 200),
'https://nami.dpsg.de/ica/rest/nami/auth/manual/sessionStartup' => Http::response($this->successJson, 200),
'https://nami.dpsg.de/ica/rest/nami/gruppierungen/filtered-for-navigation/gruppierung/node/root' => Http::response($this->groupsResponse, 200), 'https://nami.dpsg.de/ica/rest/nami/gruppierungen/filtered-for-navigation/gruppierung/node/root' => Http::response($this->groupsResponse, 200),
]); ]);
$api = $this->login();
$this->setCredentials(); $this->assertTrue($api->hasGroup(100));
$this->assertFalse($api->hasGroup(10101));
Nami::login(); Http::assertSentCount(2);
$this->assertTrue(Nami::hasGroup(100));
$this->assertFalse(Nami::hasGroup(10101));
Http::assertSentCount(4);
} }
public function test_get_subgroups_for_a_group() { public function test_get_subgroups_for_a_group(): void
{
Http::fake([ Http::fake([
'https://nami.dpsg.de/ica/pages/login.jsp' => Http::response('<html></html>', 200),
'https://nami.dpsg.de/ica/rest/nami/auth/manual/sessionStartup' => Http::response($this->successJson, 200),
'https://nami.dpsg.de/ica/rest/nami/gruppierungen/filtered-for-navigation/gruppierung/node/root' => Http::response($this->groupsResponse, 200), 'https://nami.dpsg.de/ica/rest/nami/gruppierungen/filtered-for-navigation/gruppierung/node/root' => Http::response($this->groupsResponse, 200),
'https://nami.dpsg.de/ica/rest/nami/gruppierungen/filtered-for-navigation/gruppierung/node/100' => Http::response($this->subgroupsResponse, 200) 'https://nami.dpsg.de/ica/rest/nami/gruppierungen/filtered-for-navigation/gruppierung/node/100' => Http::response($this->subgroupsResponse, 200)
]); ]);
$this->setCredentials(); $subgroups = $this->login()->group(100)->subgroups();
Nami::login();
$subgroups = Nami::group(100)->subgroups();
$this->assertEquals([ $this->assertEquals([
['id' => 101300, 'parent_id' => 100, 'name' => 'Siebengebirge'], ['id' => 101300, 'parent_id' => 100, 'name' => 'Siebengebirge'],
@ -75,18 +62,15 @@ class GetGroupsTest extends TestCase
['id' => 100900, 'parent_id' => 100, 'name' => 'Sieg'], ['id' => 100900, 'parent_id' => 100, 'name' => 'Sieg'],
['id' => 101000, 'parent_id' => 100, 'name' => 'Voreifel'] ['id' => 101000, 'parent_id' => 100, 'name' => 'Voreifel']
], $subgroups->toArray()); ], $subgroups->toArray());
$subgroups->each(function($group) { $subgroups->each(function($group) {
$this->assertInstanceOf(Group::class, $group); $this->assertInstanceOf(Group::class, $group);
}); });
Http::assertSent(function($request) { Http::assertSent(function($request) {
return $request->url() == 'https://nami.dpsg.de/ica/rest/nami/gruppierungen/filtered-for-navigation/gruppierung/node/root'; return $request->url() == 'https://nami.dpsg.de/ica/rest/nami/gruppierungen/filtered-for-navigation/gruppierung/node/root';
}); });
Http::assertSent(function($request) { Http::assertSent(function($request) {
return $request->url() == 'https://nami.dpsg.de/ica/rest/nami/gruppierungen/filtered-for-navigation/gruppierung/node/100'; return $request->url() == 'https://nami.dpsg.de/ica/rest/nami/gruppierungen/filtered-for-navigation/gruppierung/node/100';
}); });
Http::assertSentCount(2);
Http::assertSentCount(4);
} }
} }

View File

@ -66,7 +66,7 @@ class LoginTest extends TestCase
public function test_delete_expired_cookie_before_login(): void public function test_delete_expired_cookie_before_login(): void
{ {
$lastLogin = now()->subHour(2)->timestamp; $lastLogin = now()->subHours(2)->timestamp;
touch(__DIR__."/../../.cookies/{$lastLogin}.txt"); touch(__DIR__."/../../.cookies/{$lastLogin}.txt");
Http::fake($this->fakeSuccessfulLogin()); Http::fake($this->fakeSuccessfulLogin());

View File

@ -2,54 +2,50 @@
namespace Zoomyboy\LaravelNami\Tests\Unit; namespace Zoomyboy\LaravelNami\Tests\Unit;
use Zoomyboy\LaravelNami\Nami;
use Zoomyboy\LaravelNami\Tests\TestCase;
use Illuminate\Support\Facades\Http;
use Illuminate\Support\Facades\Config; use Illuminate\Support\Facades\Config;
use Zoomyboy\LaravelNami\NamiServiceProvider; use Illuminate\Support\Facades\Http;
use Zoomyboy\LaravelNami\LoginException;
use Zoomyboy\LaravelNami\Group; use Zoomyboy\LaravelNami\Group;
use Zoomyboy\LaravelNami\LoginException;
use Zoomyboy\LaravelNami\Nami;
use Zoomyboy\LaravelNami\NamiServiceProvider;
use Zoomyboy\LaravelNami\Tests\TestCase;
class PullActivitiesTest extends TestCase class PullActivitiesTest extends TestCase
{ {
public $groupsResponse = '{"success":true,"data":[{"descriptor":"Group","name":"","representedClass":"de.iconcept.nami.entity.org.Gruppierung","id":103}],"responseType":"OK"}'; public string $groupsResponse = '{"success":true,"data":[{"descriptor":"Group","name":"","representedClass":"de.iconcept.nami.entity.org.Gruppierung","id":103}],"responseType":"OK"}';
public function test_get_all_activities() { public function test_get_all_activities(): void
Http::fake(array_merge($this->login(),[ {
Http::fake([
'https://nami.dpsg.de/ica/rest/nami/gruppierungen/filtered-for-navigation/gruppierung/node/root' => Http::response($this->groupsResponse, 200), 'https://nami.dpsg.de/ica/rest/nami/gruppierungen/filtered-for-navigation/gruppierung/node/root' => Http::response($this->groupsResponse, 200),
'https://nami.dpsg.de/ica/rest/nami/taetigkeitaufgruppierung/filtered/gruppierung/gruppierung/103' => Http::response($this->fakeJson('activities.json'), 200) 'https://nami.dpsg.de/ica/rest/nami/taetigkeitaufgruppierung/filtered/gruppierung/gruppierung/103' => Http::response($this->fakeJson('activities.json'), 200)
])); ]);
$this->setCredentials(); $activities = $this->login()->group(103)->activities();
Nami::login();
$this->assertSame([ $this->assertSame([
[ 'name' => 'Ac1', 'id' => 4 ], [ 'name' => 'Ac1', 'id' => 4 ],
[ 'name' => 'Ac2', 'id' => 3 ] [ 'name' => 'Ac2', 'id' => 3 ]
], Nami::group(103)->activities()->toArray()); ], $activities->toArray());
Http::assertSentCount(2);
Http::assertSentCount(4);
} }
public function test_get_all_subactivities() { public function test_get_all_subactivities(): void
Http::fake(array_merge($this->login(),[ {
Http::fake([
'https://nami.dpsg.de/ica/rest/nami/gruppierungen/filtered-for-navigation/gruppierung/node/root' => Http::response($this->groupsResponse, 200), 'https://nami.dpsg.de/ica/rest/nami/gruppierungen/filtered-for-navigation/gruppierung/node/root' => Http::response($this->groupsResponse, 200),
'https://nami.dpsg.de/ica/rest/nami/taetigkeitaufgruppierung/filtered/gruppierung/gruppierung/103' => Http::response($this->fakeJson('activities.json'), 200), 'https://nami.dpsg.de/ica/rest/nami/taetigkeitaufgruppierung/filtered/gruppierung/gruppierung/103' => Http::response($this->fakeJson('activities.json'), 200),
'https://nami.dpsg.de/ica/rest/nami/untergliederungauftaetigkeit/filtered/untergliederung/taetigkeit/4' => Http::response($this->fakeJson('subactivities-4.json'), 200) 'https://nami.dpsg.de/ica/rest/nami/untergliederungauftaetigkeit/filtered/untergliederung/taetigkeit/4' => Http::response($this->fakeJson('subactivities-4.json'), 200)
])); ]);
$this->setCredentials(); $subactivities = $this->login()->group(103)->activities()->first()->subactivities();
Nami::login();
$this->assertSame([ $this->assertSame([
[ 'name' => 'Biber', 'id' => 40 ], [ 'name' => 'Biber', 'id' => 40 ],
[ 'name' => 'Wölfling', 'id' => 30 ] [ 'name' => 'Wölfling', 'id' => 30 ]
], Nami::group(103)->activities()->first()->subactivities()->toArray()); ], $subactivities->toArray());
Http::assertSentCount(3);
Http::assertSentCount(5);
} }
} }

View File

@ -2,31 +2,30 @@
namespace Zoomyboy\LaravelNami\Tests\Unit; namespace Zoomyboy\LaravelNami\Tests\Unit;
use Zoomyboy\LaravelNami\Nami;
use Zoomyboy\LaravelNami\Tests\TestCase;
use Illuminate\Support\Facades\Http;
use Illuminate\Support\Facades\Config; use Illuminate\Support\Facades\Config;
use Zoomyboy\LaravelNami\NamiServiceProvider; use Illuminate\Support\Facades\Http;
use Zoomyboy\LaravelNami\LoginException;
use Zoomyboy\LaravelNami\Group; use Zoomyboy\LaravelNami\Group;
use Zoomyboy\LaravelNami\LoginException;
use Zoomyboy\LaravelNami\Nami;
use Zoomyboy\LaravelNami\NamiServiceProvider;
use Zoomyboy\LaravelNami\Tests\TestCase;
class PullConfessionTest extends TestCase class PullConfessionTest extends TestCase
{ {
public function test_get_all_confessions() { public function test_get_all_confessions(): void
Http::fake(array_merge($this->login(), [ {
Http::fake([
'https://nami.dpsg.de/ica/rest/baseadmin/konfession' => Http::response($this->fakeJson('confession.json'), 200) 'https://nami.dpsg.de/ica/rest/baseadmin/konfession' => Http::response($this->fakeJson('confession.json'), 200)
])); ]);
$this->setCredentials(); $confessions = $this->login()->confessions();
Nami::login();
$this->assertEquals([ $this->assertEquals([
1 => 'römisch-katholisch' 1 => 'römisch-katholisch'
], Nami::confessions()->pluck('name', 'id')->toArray()); ], $confessions->pluck('name', 'id')->toArray());
Http::assertSentCount(3); Http::assertSentCount(1);
} }
} }

View File

@ -2,30 +2,31 @@
namespace Zoomyboy\LaravelNami\Tests\Unit; namespace Zoomyboy\LaravelNami\Tests\Unit;
use Zoomyboy\LaravelNami\Nami;
use Zoomyboy\LaravelNami\Tests\TestCase;
use Illuminate\Support\Facades\Http;
use Illuminate\Support\Facades\Config; use Illuminate\Support\Facades\Config;
use Zoomyboy\LaravelNami\NamiServiceProvider; use Illuminate\Support\Facades\Http;
use Zoomyboy\LaravelNami\LoginException;
use Zoomyboy\LaravelNami\Group; use Zoomyboy\LaravelNami\Group;
use Zoomyboy\LaravelNami\LoginException;
use Zoomyboy\LaravelNami\Nami;
use Zoomyboy\LaravelNami\NamiServiceProvider;
use Zoomyboy\LaravelNami\Tests\TestCase;
class PullGenderTest extends TestCase class PullGenderTest extends TestCase
{ {
public function test_get_all_genders() { public function test_get_all_genders(): void
Http::fake(array_merge($this->login(), $this->fakeGenders())); {
Http::fake([
'https://nami.dpsg.de/ica/rest/baseadmin/geschlecht' => Http::response($this->fakeJson('genders.json'), 200)
]);
$this->setCredentials(); $genders = $this->login()->genders();
Nami::login();
$this->assertEquals([ $this->assertEquals([
19 => 'Männlich', 19 => 'Männlich',
20 => 'Weiblich' 20 => 'Weiblich'
], Nami::genders()->pluck('name', 'id')->toArray()); ], $genders->pluck('name', 'id')->toArray());
Http::assertSentCount(3); Http::assertSentCount(1);
} }
} }

View File

@ -86,20 +86,18 @@ class PullMemberTest extends TestCase
*/ */
public function test_get_a_single_member(array $input, array $check): void public function test_get_a_single_member(array $input, array $check): void
{ {
Http::fake(array_merge($this->login(), [ Http::fake([
'https://nami.dpsg.de/ica/rest/nami/gruppierungen/filtered-for-navigation/gruppierung/node/root' => Http::response($this->groupsResponse, 200), 'https://nami.dpsg.de/ica/rest/nami/gruppierungen/filtered-for-navigation/gruppierung/node/root' => Http::response($this->groupsResponse, 200),
'https://nami.dpsg.de/ica/rest/nami/mitglied/filtered-for-navigation/gruppierung/gruppierung/103/16' => Http::response($this->fakeJson('member-16.json', ['data' => $input]), 200), 'https://nami.dpsg.de/ica/rest/nami/mitglied/filtered-for-navigation/gruppierung/gruppierung/103/16' => Http::response($this->fakeJson('member-16.json', ['data' => $input]), 200),
])); ]);
$this->setCredentials();
Nami::login();
$group = Nami::group(103); $group = $this->login()->group(103);
foreach ($check as $key => $value) { foreach ($check as $key => $value) {
$this->assertSame($value, $group->member(16)->toArray()[$key]); $this->assertSame($value, $group->member(16)->toArray()[$key]);
} }
Http::assertSentCount(4); Http::assertSentCount(2);
} }
/** /**
@ -107,20 +105,18 @@ class PullMemberTest extends TestCase
*/ */
public function test_get_attribute_of_member_collection(array $input, array $check): void public function test_get_attribute_of_member_collection(array $input, array $check): void
{ {
Http::fake(array_merge($this->login(), [ Http::fake([
'https://nami.dpsg.de/ica/rest/nami/gruppierungen/filtered-for-navigation/gruppierung/node/root' => Http::response($this->groupsResponse, 200), 'https://nami.dpsg.de/ica/rest/nami/gruppierungen/filtered-for-navigation/gruppierung/node/root' => Http::response($this->groupsResponse, 200),
'https://nami.dpsg.de/ica/rest/nami/mitglied/filtered-for-navigation/gruppierung/gruppierung/103/flist' => Http::response($this->fakeJson('member_overview.json'), 200), 'https://nami.dpsg.de/ica/rest/nami/mitglied/filtered-for-navigation/gruppierung/gruppierung/103/flist' => Http::response($this->fakeJson('member_overview.json'), 200),
'https://nami.dpsg.de/ica/rest/nami/mitglied/filtered-for-navigation/gruppierung/gruppierung/103/16' => Http::response($this->fakeJson('member-16.json', ['data' => $input]), 200), 'https://nami.dpsg.de/ica/rest/nami/mitglied/filtered-for-navigation/gruppierung/gruppierung/103/16' => Http::response($this->fakeJson('member-16.json', ['data' => $input]), 200),
])); ]);
$this->setCredentials();
Nami::login();
$member = Nami::group(103)->members()->first(); $member = $this->login()->group(103)->members()->first();
foreach ($check as $key => $value) { foreach ($check as $key => $value) {
$this->assertSame($value, $member->toArray()[$key]); $this->assertSame($value, $member->toArray()[$key]);
} }
Http::assertSentCount(5); Http::assertSentCount(3);
} }
/** /**
@ -128,21 +124,17 @@ class PullMemberTest extends TestCase
*/ */
public function test_get_attribute_of_member_overview(string $key, array $values): void public function test_get_attribute_of_member_overview(string $key, array $values): void
{ {
Http::fake(array_merge($this->login(), [ Http::fake([
'https://nami.dpsg.de/ica/rest/nami/gruppierungen/filtered-for-navigation/gruppierung/node/root' => Http::response($this->groupsResponse, 200), 'https://nami.dpsg.de/ica/rest/nami/gruppierungen/filtered-for-navigation/gruppierung/node/root' => Http::response($this->groupsResponse, 200),
'https://nami.dpsg.de/ica/rest/nami/mitglied/filtered-for-navigation/gruppierung/gruppierung/103/flist' => Http::response($this->fakeJson('member_overview.json'), 200) 'https://nami.dpsg.de/ica/rest/nami/mitglied/filtered-for-navigation/gruppierung/gruppierung/103/flist' => Http::response($this->fakeJson('member_overview.json'), 200)
])); ]);
$this->setCredentials(); $members = $this->login()->group(103)->memberOverview();
Nami::login();
$members = Nami::group(103)->memberOverview();
foreach ($members as $i => $m) { foreach ($members as $i => $m) {
$this->assertSame($values[$i], $m->toArray()[$key]); $this->assertSame($values[$i], $m->toArray()[$key]);
} }
Http::assertSentCount(4); Http::assertSentCount(2);
} }
/** /**
@ -150,23 +142,21 @@ class PullMemberTest extends TestCase
*/ */
public function test_set_relations(string $key, array $values): void public function test_set_relations(string $key, array $values): void
{ {
Http::fake(array_merge($this->login(), [ Http::fake([
'https://nami.dpsg.de/ica/rest/nami/gruppierungen/filtered-for-navigation/gruppierung/node/root' => Http::response($this->groupsResponse, 200), 'https://nami.dpsg.de/ica/rest/nami/gruppierungen/filtered-for-navigation/gruppierung/node/root' => Http::response($this->groupsResponse, 200),
'https://nami.dpsg.de/ica/rest/nami/mitglied/filtered-for-navigation/gruppierung/gruppierung/103/flist' => Http::response($this->fakeJson('member_overview.json'), 200), 'https://nami.dpsg.de/ica/rest/nami/mitglied/filtered-for-navigation/gruppierung/gruppierung/103/flist' => Http::response($this->fakeJson('member_overview.json'), 200),
'https://nami.dpsg.de/ica/rest/nami/mitglied/filtered-for-navigation/gruppierung/gruppierung/103/16' => Http::response($this->fakeJson('member-16.json'), 200), 'https://nami.dpsg.de/ica/rest/nami/mitglied/filtered-for-navigation/gruppierung/gruppierung/103/16' => Http::response($this->fakeJson('member-16.json'), 200),
'https://nami.dpsg.de/ica/rest/nami/mitglied/filtered-for-navigation/gruppierung/gruppierung/103/17' => Http::response($this->fakeJson('member-17.json'), 200) 'https://nami.dpsg.de/ica/rest/nami/mitglied/filtered-for-navigation/gruppierung/gruppierung/103/17' => Http::response($this->fakeJson('member-17.json'), 200)
])); ]);
$this->setCredentials(); $members = $this->login()->group(103)->members();
Nami::login();
$this->assertSame([ $this->assertSame([
16 => $values[0], 16 => $values[0],
17 => $values[1] 17 => $values[1]
], Nami::group(103)->members()->pluck($key, 'id')->toArray()); ], $members->pluck($key, 'id')->toArray());
Http::assertSentCount(6); Http::assertSentCount(4);
} }
/** /**
@ -174,21 +164,17 @@ class PullMemberTest extends TestCase
*/ */
public function test_get_a_member_from_overview_with_no_rights(string $key, array $values): void public function test_get_a_member_from_overview_with_no_rights(string $key, array $values): void
{ {
Http::fake(array_merge($this->login(), [ Http::fake([
'https://nami.dpsg.de/ica/rest/nami/gruppierungen/filtered-for-navigation/gruppierung/node/root' => Http::response($this->groupsResponse, 200), 'https://nami.dpsg.de/ica/rest/nami/gruppierungen/filtered-for-navigation/gruppierung/node/root' => Http::response($this->groupsResponse, 200),
'https://nami.dpsg.de/ica/rest/nami/mitglied/filtered-for-navigation/gruppierung/gruppierung/103/16' => Http::response($this->unauthorizedResponse, 200), 'https://nami.dpsg.de/ica/rest/nami/mitglied/filtered-for-navigation/gruppierung/gruppierung/103/16' => Http::response($this->unauthorizedResponse, 200),
'https://nami.dpsg.de/ica/rest/nami/mitglied/filtered-for-navigation/gruppierung/gruppierung/103/flist' => Http::response($this->fakeJson('member_overview.json'), 200) 'https://nami.dpsg.de/ica/rest/nami/mitglied/filtered-for-navigation/gruppierung/gruppierung/103/flist' => Http::response($this->fakeJson('member_overview.json'), 200)
])); ]);
$this->setCredentials(); $member = $this->login()->group(103)->member(16);
Nami::login(); $this->assertSame($values[0], $member->toArray()[$key]);
$group = Nami::group(103); Http::assertSentCount(3);
$this->assertSame($values[0], $group->member(16)->toArray()[$key]);
Http::assertSentCount(5);
} }
} }

View File

@ -9,17 +9,17 @@ use Zoomyboy\LaravelNami\Tests\TestCase;
class PullMembershipsTest extends TestCase class PullMembershipsTest extends TestCase
{ {
public $groupsResponse = '{"success":true,"data":[{"descriptor":"Group","name":"","representedClass":"de.iconcept.nami.entity.org.Gruppierung","id":103}],"responseType":"OK"}';
public $unauthorizedResponse = '';
public function errorProvider() { public function errorProvider(): array
{
return [ return [
'unauth' => ['{"success":false,"data":null,"responseType":"EXCEPTION","message":"Access denied - no right for requested operation","title":"Exception"}'], 'unauth' => ['{"success":false,"data":null,"responseType":"EXCEPTION","message":"Access denied - no right for requested operation","title":"Exception"}'],
'noright' => ['{"success":false,"responseType":"EXCEPTION","message":"Sicherheitsverletzung: Zugriff auf Rechte Recht (n:2001002 o:2) fehlgeschlagen"}'] 'noright' => ['{"success":false,"responseType":"EXCEPTION","message":"Sicherheitsverletzung: Zugriff auf Rechte Recht (n:2001002 o:2) fehlgeschlagen"}']
]; ];
} }
public function dataProvider() { public function dataProvider(): array
{
return [ return [
'id' => ['id', [68, 69]], 'id' => ['id', [68, 69]],
'group_id' => ['group_id', [103,104]], 'group_id' => ['group_id', [103,104]],
@ -35,16 +35,14 @@ class PullMembershipsTest extends TestCase
/** /**
* @dataProvider dataProvider * @dataProvider dataProvider
*/ */
public function test_get_all_memberships_of_a_member($key, $values) { public function test_get_all_memberships_of_a_member(string $key, array $values): void
Http::fake(array_merge($this->login(), [ {
Http::fake([
'https://nami.dpsg.de/ica/rest/nami/zugeordnete-taetigkeiten/filtered-for-navigation/gruppierung-mitglied/mitglied/16/flist' => Http::response($this->fakeJson('membership-overview.json'), 200), 'https://nami.dpsg.de/ica/rest/nami/zugeordnete-taetigkeiten/filtered-for-navigation/gruppierung-mitglied/mitglied/16/flist' => Http::response($this->fakeJson('membership-overview.json'), 200),
'https://nami.dpsg.de/ica/rest/nami/zugeordnete-taetigkeiten/filtered-for-navigation/gruppierung-mitglied/mitglied/16/68' => Http::response($this->fakeJson('membership-68.json'), 200), 'https://nami.dpsg.de/ica/rest/nami/zugeordnete-taetigkeiten/filtered-for-navigation/gruppierung-mitglied/mitglied/16/68' => Http::response($this->fakeJson('membership-68.json'), 200),
'https://nami.dpsg.de/ica/rest/nami/zugeordnete-taetigkeiten/filtered-for-navigation/gruppierung-mitglied/mitglied/16/69' => Http::response($this->fakeJson('membership-69.json'), 200) 'https://nami.dpsg.de/ica/rest/nami/zugeordnete-taetigkeiten/filtered-for-navigation/gruppierung-mitglied/mitglied/16/69' => Http::response($this->fakeJson('membership-69.json'), 200)
])); ]);
$this->setCredentials();
Nami::login();
$member = new Member(['id' => 16]); $member = new Member(['id' => 16]);
$memberships = $member->memberships(); $memberships = $member->memberships();
@ -53,25 +51,23 @@ class PullMembershipsTest extends TestCase
$this->assertSame($values[$i], $m->toArray()[$key]); $this->assertSame($values[$i], $m->toArray()[$key]);
} }
Http::assertSentCount(5); Http::assertSentCount(3);
} }
/** /**
* @dataProvider errorProvider * @dataProvider errorProvider
*/ */
public function test_it_gets_no_memberships_with_no_rights($error) { public function test_it_gets_no_memberships_with_no_rights(string $error): void
Http::fake(array_merge($this->login(), [ {
Http::fake([
'https://nami.dpsg.de/ica/rest/nami/zugeordnete-taetigkeiten/filtered-for-navigation/gruppierung-mitglied/mitglied/16/flist' => Http::response($error, 200) 'https://nami.dpsg.de/ica/rest/nami/zugeordnete-taetigkeiten/filtered-for-navigation/gruppierung-mitglied/mitglied/16/flist' => Http::response($error, 200)
])); ]);
$this->setCredentials();
Nami::login();
$member = new Member(['id' => 16]); $member = new Member(['id' => 16]);
$memberships = $member->memberships(); $memberships = $member->memberships();
$this->assertSame([], $member->memberships()->toArray()); $this->assertSame([], $member->memberships()->toArray());
Http::assertSentCount(4); Http::assertSentCount(2);
} }
} }

View File

@ -2,31 +2,30 @@
namespace Zoomyboy\LaravelNami\Tests\Unit; namespace Zoomyboy\LaravelNami\Tests\Unit;
use Zoomyboy\LaravelNami\Nami;
use Zoomyboy\LaravelNami\Tests\TestCase;
use Illuminate\Support\Facades\Http;
use Illuminate\Support\Facades\Config; use Illuminate\Support\Facades\Config;
use Zoomyboy\LaravelNami\NamiServiceProvider; use Illuminate\Support\Facades\Http;
use Zoomyboy\LaravelNami\LoginException;
use Zoomyboy\LaravelNami\Group; use Zoomyboy\LaravelNami\Group;
use Zoomyboy\LaravelNami\LoginException;
use Zoomyboy\LaravelNami\Nami;
use Zoomyboy\LaravelNami\NamiServiceProvider;
use Zoomyboy\LaravelNami\Tests\TestCase;
class PullNationalityTest extends TestCase class PullNationalityTest extends TestCase
{ {
public function test_get_all_nationalities() { public function test_get_all_nationalities(): void
Http::fake(array_merge($this->login(), [ {
Http::fake([
'https://nami.dpsg.de/ica/rest/baseadmin/staatsangehoerigkeit' => Http::response($this->fakeJson('nationalities.json')) 'https://nami.dpsg.de/ica/rest/baseadmin/staatsangehoerigkeit' => Http::response($this->fakeJson('nationalities.json'))
])); ]);
$this->setCredentials(); $nationalities = $this->login()->nationalities();
Nami::login();
$this->assertEquals([ $this->assertEquals([
['name' => 'deutsch', 'id' => 1054] ['name' => 'deutsch', 'id' => 1054]
], Nami::nationalities()->toArray()); ], $nationalities->toArray());
Http::assertSentCount(3); Http::assertSentCount(1);
} }
} }

View File

@ -50,9 +50,9 @@ class PushMemberTest extends TestCase
* @dataProvider dataProvider * @dataProvider dataProvider
*/ */
public function test_push_a_single_member(array $overwrites, array $check): void { public function test_push_a_single_member(array $overwrites, array $check): void {
Http::fake(array_merge([ Http::fake([
'https://nami.dpsg.de/ica/rest/nami/mitglied/filtered-for-navigation/gruppierung/gruppierung/103/16' => Http::response('{"success": true, "data": {"id": 16}}', 200), 'https://nami.dpsg.de/ica/rest/nami/mitglied/filtered-for-navigation/gruppierung/gruppierung/103/16' => Http::response('{"success": true, "data": {"id": 16}}', 200),
])); ]);
$res = Nami::putMember(array_merge($this->attributes[0], $overwrites)); $res = Nami::putMember(array_merge($this->attributes[0], $overwrites));
$this->assertEquals(16, $res['id']); $this->assertEquals(16, $res['id']);

View File

@ -11,16 +11,14 @@ use Zoomyboy\LaravelNami\Tests\TestCase;
class PushMembershipsTest extends TestCase class PushMembershipsTest extends TestCase
{ {
public function test_create_a_membership() { public function test_create_a_membership(): void
{
Carbon::setTestNow(Carbon::parse('2021-02-03 06:00:00')); Carbon::setTestNow(Carbon::parse('2021-02-03 06:00:00'));
Http::fake(array_merge($this->login(), [ Http::fake([
'https://nami.dpsg.de/ica/rest/nami/zugeordnete-taetigkeiten/filtered-for-navigation/gruppierung-mitglied/mitglied/16/flist' => Http::response($this->fakeJson('membership-overview.json'), 200), 'https://nami.dpsg.de/ica/rest/nami/zugeordnete-taetigkeiten/filtered-for-navigation/gruppierung-mitglied/mitglied/16/flist' => Http::response($this->fakeJson('membership-overview.json'), 200),
'https://nami.dpsg.de/ica/rest/nami/zugeordnete-taetigkeiten/filtered-for-navigation/gruppierung-mitglied/mitglied/16' => Http::response($this->fakeJson('membership-create.json'), 200), 'https://nami.dpsg.de/ica/rest/nami/zugeordnete-taetigkeiten/filtered-for-navigation/gruppierung-mitglied/mitglied/16' => Http::response($this->fakeJson('membership-create.json'), 200),
])); ]);
$this->setCredentials();
Nami::login();
$member = new Member(['id' => 16]); $member = new Member(['id' => 16]);
$id = $member->putMembership([ $id = $member->putMembership([
'created_at' => now(), 'created_at' => now(),
@ -31,7 +29,7 @@ class PushMembershipsTest extends TestCase
]); ]);
$this->assertEquals(65, $id); $this->assertEquals(65, $id);
Http::assertSentCount(3); Http::assertSentCount(1);
Http::assertSent(fn ($request) => $request->method() === 'POST' Http::assertSent(fn ($request) => $request->method() === 'POST'
&& $request->url() === 'https://nami.dpsg.de/ica/rest/nami/zugeordnete-taetigkeiten/filtered-for-navigation/gruppierung-mitglied/mitglied/16' && $request->url() === 'https://nami.dpsg.de/ica/rest/nami/zugeordnete-taetigkeiten/filtered-for-navigation/gruppierung-mitglied/mitglied/16'

View File

@ -14,10 +14,8 @@ use Zoomyboy\LaravelNami\Tests\TestCase;
class SearchTest extends TestCase class SearchTest extends TestCase
{ {
public $groupsResponse = '{"success":true,"data":[{"descriptor":"Group","name":"","representedClass":"de.iconcept.nami.entity.org.Gruppierung","id":103}],"responseType":"OK"}';
public $unauthorizedResponse = '{"success":false,"data":null,"responseType":"EXCEPTION","message":"Access denied - no right for requested operation","title":"Exception"}';
public $attributes = [ public array $attributes = [
[ [
'firstname' => 'Max', 'firstname' => 'Max',
'lastname' => 'Nach1', 'lastname' => 'Nach1',
@ -35,33 +33,34 @@ class SearchTest extends TestCase
] ]
]; ];
public function dataProvider() { public function dataProvider(): array
{
return [ return [
'firstname' => ['vorname', ['Max', 'Jane']], 'firstname' => ['vorname', ['Max', 'Jane']],
]; ];
} }
public function test_find_a_member_by_mglnr() { public function test_find_a_member_by_mglnr(): void
Http::fake(array_merge($this->login(), [ {
Http::fake([
$this->url(['mitgliedsNummber' => 150]) => Http::response($this->fakeJson('searchResponse.json'), 200), $this->url(['mitgliedsNummber' => 150]) => Http::response($this->fakeJson('searchResponse.json'), 200),
])); ]);
$this->setCredentials(); $member = $this->login()->findNr(150);
Nami::login();
$member = Nami::findNr(150);
$this->assertEquals('Philipp', $member->firstname); $this->assertEquals('Philipp', $member->firstname);
Http::assertSent(function($request) { Http::assertSent(function($request) {
return $request->url() == $this->url(['mitgliedsNummber' => 150]) return $request->url() == $this->url(['mitgliedsNummber' => 150])
&& $request->method() == 'GET'; && $request->method() == 'GET';
}); });
Http::assertSentCount(3); Http::assertSentCount(1);
} }
private function url($payload) { private function url(array $payload): string
{
$payload = rawurlencode(json_encode($payload)); $payload = rawurlencode(json_encode($payload));
return "https://nami.dpsg.de/ica/rest/nami/search-multi/result-list?searchedValues={$payload}&page=1&start=0&limit=100"; return "https://nami.dpsg.de/ica/rest/nami/search-multi/result-list?searchedValues={$payload}&page=1&start=0&limit=100";
} }