laravel-nami-api/tests/Unit/GroupsTest.php

94 lines
2.8 KiB
PHP
Raw Normal View History

2022-02-19 17:08:43 +01:00
<?php
namespace Zoomyboy\LaravelNami\Tests\Unit;
use Zoomyboy\LaravelNami\Authentication\Auth;
2023-02-08 01:26:01 +01:00
use Zoomyboy\LaravelNami\Exceptions\NoJsonReceivedException;
2022-02-19 17:08:43 +01:00
use Zoomyboy\LaravelNami\Exceptions\NotAuthenticatedException;
2023-02-08 01:26:01 +01:00
use Zoomyboy\LaravelNami\Exceptions\NotSuccessfulException;
2022-02-19 17:08:43 +01:00
use Zoomyboy\LaravelNami\Fakes\GroupFake;
2023-02-17 14:54:17 +01:00
use Zoomyboy\LaravelNami\Data\Group;
2022-02-19 17:08:43 +01:00
use Zoomyboy\LaravelNami\Nami;
use Zoomyboy\LaravelNami\Tests\TestCase;
class GroupsTest extends TestCase
{
public function setUp(): void
{
parent::setUp();
2022-03-11 20:13:19 +01:00
2022-02-19 17:08:43 +01:00
Auth::fake();
}
2022-03-11 20:13:19 +01:00
public function testGetGroups(): void
2022-02-19 17:08:43 +01:00
{
Auth::success(12345, 'secret');
2022-02-20 01:41:21 +01:00
app(GroupFake::class)->fetches(null, [
2022-03-11 20:13:19 +01:00
1234 => ['name' => 'testgroup'],
2022-02-19 17:08:43 +01:00
]);
$group = Nami::login(12345, 'secret')->group(1234);
2022-03-11 20:13:19 +01:00
$this->assertInstanceOf(Group::class, $group);
2022-02-19 17:08:43 +01:00
$this->assertEquals('testgroup', $group->name);
$this->assertEquals(1234, $group->id);
2023-02-17 14:54:17 +01:00
$this->assertNull($group->parentId);
2022-02-19 17:08:43 +01:00
app(GroupFake::class)->assertRootFetched();
}
2022-03-11 20:13:19 +01:00
public function testGetSubgroups(): void
2022-02-19 17:08:43 +01:00
{
Auth::success(12345, 'secret');
2022-02-20 01:41:21 +01:00
app(GroupFake::class)->fetches(null, [
2022-03-11 20:13:19 +01:00
1234 => ['name' => 'testgroup'],
2022-02-20 01:41:21 +01:00
])->fetches(1234, [
2022-03-11 20:13:19 +01:00
555 => ['name' => 'ABC'],
2022-02-19 17:08:43 +01:00
]);
2023-02-17 14:54:17 +01:00
$group = Nami::login(12345, 'secret')->groups(Group::from(['id' => 1234, 'name' => 'lorem', 'parentId' => null]))->first();
2022-02-19 17:08:43 +01:00
$this->assertEquals('ABC', $group->name);
$this->assertEquals(555, $group->id);
2023-02-17 14:54:17 +01:00
$this->assertEquals(1234, $group->parentId);
2022-02-19 17:08:43 +01:00
app(GroupFake::class)->assertFetched(1234);
}
2022-03-11 20:13:19 +01:00
public function testNeedsAuthentication(): void
2022-02-20 01:41:21 +01:00
{
$this->expectException(NotAuthenticatedException::class);
$group = Nami::group(1234);
}
2022-03-11 20:13:19 +01:00
public function testThrowsExceptionWhenGroupFetchFailed(): void
2022-02-20 01:41:21 +01:00
{
2023-02-08 01:26:01 +01:00
$this->expectException(NotSuccessfulException::class);
2022-02-20 01:41:21 +01:00
Auth::success(12345, 'secret');
app(GroupFake::class)->failsToFetch(null);
Nami::login(12345, 'secret')->group(1234);
}
2022-03-11 20:13:19 +01:00
public function testThrowsExceptionWhenSubgroupFetchFailed(): void
2022-02-20 01:41:21 +01:00
{
2023-02-08 01:26:01 +01:00
$this->expectException(NotSuccessfulException::class);
2022-02-20 01:41:21 +01:00
Auth::success(12345, 'secret');
app(GroupFake::class)->fetches(null, [
2022-03-11 20:13:19 +01:00
1234 => ['name' => 'testgroup'],
2022-02-20 01:41:21 +01:00
]);
app(GroupFake::class)->failsToFetch(1234);
2023-02-17 14:54:17 +01:00
Nami::login(12345, 'secret')->groups(Group::from(['id' => 1234, 'name' => 'lorem', 'parentId' => null]));
2022-02-20 01:41:21 +01:00
}
2022-03-11 20:13:19 +01:00
public function testItDoesntReturnGroupWhenNoJsonIsReturned(): void
2022-02-20 01:41:21 +01:00
{
2023-02-08 01:26:01 +01:00
$this->expectException(NoJsonReceivedException::class);
2022-02-20 01:41:21 +01:00
Auth::success(12345, 'secret');
app(GroupFake::class)->failsToFetchWithoutJson(null);
2023-02-08 01:26:01 +01:00
Nami::login(12345, 'secret')->group(1234);
2022-02-20 01:41:21 +01:00
}
2022-02-19 17:08:43 +01:00
}