Add Login fake

This commit is contained in:
philipp lang 2021-11-17 00:26:23 +01:00
parent d666f78714
commit 513cf6616d
5 changed files with 67 additions and 32 deletions

View File

@ -7,13 +7,13 @@ use Illuminate\Http\Client\Response;
use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\Http;
use Illuminate\Support\Str;
use Zoomyboy\LaravelNami\Fakes\Fake;
use Zoomyboy\LaravelNami\Fakes\FakeInstance;
use Zoomyboy\LaravelNami\Fakes\LoginFake;
class FakeBackend {
private $members;
private $passwords;
public $groups = [];
public $loggedInAs = null;
public ?array $loggedIn = null;
public function __construct() {
$this->members = collect([]);
@ -25,8 +25,7 @@ class FakeBackend {
}
public function init($cookie) {
$this->cookie = $cookie;
return $this;
return Http::withOptions(['cookies' => $cookie->forBackend()]);
}
public function put($url, $data) {
@ -135,24 +134,6 @@ class FakeBackend {
]);
}
public function post($url, $data) {
if ($url === 'https://nami.dpsg.de/ica/rest/nami/auth/manual/sessionStartup') {
if (!data_get($data, 'username') || !data_get($data, 'password')) {
return $this->wrongLoginResponse();
}
if ($this->passwords[data_get($data, 'username')] === data_get($data, 'password')) {
$this->loggedInAs = data_get($data, 'username');
$this->cookie->set($data['username'], 'rZMBv1McDAJ-KukQ6BboJBTq.srv-nami06');
return $this->response([
"statusCode" => 0,
]);
}
}
$this->urlNotFoundException($url);
}
private function wrongLoginResponse() {
return $this->response([
"servicePrefix" => null,
@ -181,9 +162,21 @@ class FakeBackend {
return new Response(new GuzzleResponse(200, [], json_encode($data)));
}
public function fakeNamiPassword($mglnr, $password, $groups) {
$this->passwords[$mglnr] = $password;
$this->groups[$mglnr] = $groups;
/**
* @param string $mglnr
* @param array<int, array> $groups
*/
public function fakeLogin(string $mglnr, array $groups): void
{
app(LoginFake::class)->succeeds($mglnr);
foreach ($groups as $group) {
GroupFake::addGroup($group);
}
}
public function fakeFailedLogin(string $mglnr): void
{
app(LoginFake::class)->fails($mglnr);
}
public function asForm() {

View File

@ -2,8 +2,8 @@
namespace Zoomyboy\LaravelNami\Cookies;
use Illuminate\Support\Facades\Cache;
use GuzzleHttp\Cookie\SetCookie;
use Illuminate\Support\Facades\Cache;
class CacheCookie {

7
src/Fakes/Fake.php Normal file
View File

@ -0,0 +1,7 @@
<?php
namespace Zoomyboy\LaravelNami\Fakes;
abstract class Fake {
}

39
src/Fakes/LoginFake.php Normal file
View File

@ -0,0 +1,39 @@
<?php
namespace Zoomyboy\LaravelNami\Fakes;
use Illuminate\Http\Client\Response;
use Illuminate\Support\Facades\Http;
class LoginFake extends Fake {
public function succeeds(string $mglnr): void
{
Http::fake(function($request) use ($mglnr) {
if ($request->url() === 'https://nami.dpsg.de/ica/pages/login.jsp') {
return Http::response('', 200);
}
if ($request->url() === 'https://nami.dpsg.de/ica/rest/nami/auth/manual/sessionStartup') {
return Http::response('{"statusCode": 0}', 302)->then(function($r) use ($mglnr) {
app('nami.cookie')->set($mglnr, 'rZMBv1McDAJ-KukQ6BboJBTq.srv-nami06');
return $r;
});
}
});
}
public function fails(string $mglnr): void
{
Http::fake(function($request) {
if ($request->url() === 'https://nami.dpsg.de/ica/pages/login.jsp') {
return Http::response('', 200);
}
if ($request->url() === 'https://nami.dpsg.de/ica/rest/nami/auth/manual/sessionStartup') {
return Http::response('{"statusCode": 3000, "statusMessage": "Benutzer nicht gefunden oder Passwort falsch"}', 200);
}
});
}
}

View File

@ -25,8 +25,4 @@ trait FakesNami {
}
}
public function fakeNamiPassword($mglnr, $password, $groups) {
Backend::fakeNamiPassword($mglnr, $password, $groups);
}
}