Skip to content

Commit c6f3e37

Browse files
authored
Merge pull request #7 from TomHAnderson/feature/100-coverage
100% Code Coverage
2 parents 62247fe + c8cc884 commit c6f3e37

File tree

7 files changed

+169
-15
lines changed

7 files changed

+169
-15
lines changed

src/Repository/ApiKeyRepository.php

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,10 +111,14 @@ public function isValidName(string $name): bool
111111

112112
protected function logAdminEvent(ApiKey $apiKey, string $eventName): AdminEvent
113113
{
114-
return (new AdminEvent())
114+
$adminEvent = (new AdminEvent())
115115
->setIpAddress(request()->ip())
116116
->setApiKey($apiKey)
117117
->setEvent($eventName)
118118
->setCreatedAt(new DateTime());
119+
120+
$apiKey->addAdminEvent($adminEvent);
121+
122+
return $adminEvent;
119123
}
120124
}

src/Service/ApiKeyService.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,8 @@ public function logAccessEvent(Request $request, ApiKey $apiKey): void
8585
->setIpAddress($request->ip())
8686
->setUrl($request->fullUrl());
8787

88+
$apiKey->addAccessEvent($event);
89+
8890
$this->getEntityManager()->persist($event);
8991
$this->getEntityManager()->flush();
9092
}

src/ServiceProvider.php

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -22,22 +22,21 @@ public function register(): void
2222
/**
2323
* Bootstrap any application services.
2424
*/
25+
// phpcs:disable SlevomatCodingStandard.ControlStructures.EarlyExit.EarlyExitNotUsed
2526
public function boot(): void
2627
{
27-
if (! $this->app->runningInConsole()) {
28-
return;
28+
if ($this->app->runningInConsole()) {
29+
$this->commands([
30+
Console\Command\ActivateApiKey::class,
31+
Console\Command\AddScope::class,
32+
Console\Command\DeactivateApiKey::class,
33+
Console\Command\DeleteScope::class,
34+
Console\Command\GenerateApiKey::class,
35+
Console\Command\GenerateScope::class,
36+
Console\Command\PrintApiKey::class,
37+
Console\Command\PrintScope::class,
38+
Console\Command\RemoveScope::class,
39+
]);
2940
}
30-
31-
$this->commands([
32-
Console\Command\ActivateApiKey::class,
33-
Console\Command\AddScope::class,
34-
Console\Command\DeactivateApiKey::class,
35-
Console\Command\DeleteScope::class,
36-
Console\Command\GenerateApiKey::class,
37-
Console\Command\GenerateScope::class,
38-
Console\Command\PrintApiKey::class,
39-
Console\Command\PrintScope::class,
40-
Console\Command\RemoveScope::class,
41-
]);
4241
}
4342
}
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
<?php
2+
3+
namespace ApiSkeletonsTest\Laravel\Doctrine\ApiKey\Feature\Entity;
4+
5+
use ApiSkeletons\Laravel\Doctrine\ApiKey\Entity\ApiKey;
6+
use ApiSkeletons\Laravel\Doctrine\ApiKey\Http\Middleware\AuthorizeApiKey;
7+
use ApiSkeletons\Laravel\Doctrine\ApiKey\Service\ApiKeyService;
8+
use ApiSkeletonsTest\Laravel\Doctrine\ApiKey\TestCase;
9+
use DateTime;
10+
use Illuminate\Http\Request;
11+
12+
final class AccessEventTest extends TestCase
13+
{
14+
public function testAccessEvent(): void
15+
{
16+
$entityManager = $this->createDatabase(app('em'));
17+
$apiKeyRepository = $entityManager->getRepository(ApiKey::class);
18+
19+
$now = new DateTime();
20+
21+
$apiKey = $apiKeyRepository->generate('testing');
22+
$entityManager->flush();
23+
24+
$request = Request::create('/apiresource', 'GET');
25+
$request->headers->set('Authorization', 'Bearer ' . $apiKey->getApiKey());
26+
27+
$middleware = new AuthorizeApiKey(app(ApiKeyService::class));
28+
29+
$response = $middleware->handle($request, function() {});
30+
$this->assertNull($response);
31+
32+
foreach ($apiKey->getAccessEvents() as $accessEvent) {
33+
$this->assertGreaterThan(0, $accessEvent->getId());
34+
$this->assertGreaterThan($now, $accessEvent->getCreatedAt());
35+
$this->assertEquals(request()->ip(), $accessEvent->getIpAddress());
36+
$this->assertEquals('http://localhost/apiresource', $accessEvent->getUrl());
37+
38+
$accessEvent->getApiKey()->removeAccessEvent($accessEvent);
39+
}
40+
41+
$this->assertEquals(0, count($apiKey->getAccessEvents()));
42+
}
43+
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
<?php
2+
3+
namespace ApiSkeletonsTest\Laravel\Doctrine\ApiKey\Feature\Entity;
4+
5+
use ApiSkeletons\Laravel\Doctrine\ApiKey\Entity\ApiKey;
6+
use ApiSkeletonsTest\Laravel\Doctrine\ApiKey\TestCase;
7+
use DateTime;
8+
9+
final class AdminEventTest extends TestCase
10+
{
11+
public function testAdminEvent(): void
12+
{
13+
$entityManager = $this->createDatabase(app('em'));
14+
$repository = $entityManager->getRepository(ApiKey::class);
15+
16+
$now = new DateTime();
17+
18+
$apiKey = $repository->generate('testing');
19+
$entityManager->flush();
20+
21+
$this->assertGreaterThan(0, $apiKey->getId());
22+
$this->assertEquals('testing', $apiKey->getName());
23+
$this->assertEquals(64, strlen($apiKey->getApiKey()));
24+
$this->assertEquals(true, $apiKey->getIsActive());
25+
$this->assertGreaterThan($now, $apiKey->getCreatedAt());
26+
27+
foreach ($apiKey->getAdminEvents() as $adminEvent) {
28+
$this->assertEquals('generate', $adminEvent->getEvent());
29+
$this->assertEquals($apiKey, $adminEvent->getApiKey());
30+
$this->assertEquals(request()->ip(), $adminEvent->getIpAddress());
31+
$this->assertGreaterThan(0, $adminEvent->getId());
32+
$this->assertGreaterThan($now, $adminEvent->getCreatedAt());
33+
34+
$adminEvent->getApiKey()->removeAdminEvent($adminEvent);
35+
}
36+
37+
$this->assertEquals(0, count($apiKey->getAdminEvents()));
38+
}
39+
}

test/Feature/Entity/ApiKeyTest.php

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
<?php
2+
3+
namespace ApiSkeletonsTest\Laravel\Doctrine\ApiKey\Feature\Entity;
4+
5+
use ApiSkeletons\Laravel\Doctrine\ApiKey\Entity\ApiKey;
6+
use ApiSkeletons\Laravel\Doctrine\ApiKey\Http\Middleware\AuthorizeApiKey;
7+
use ApiSkeletons\Laravel\Doctrine\ApiKey\Service\ApiKeyService;
8+
use ApiSkeletonsTest\Laravel\Doctrine\ApiKey\TestCase;
9+
use DateTime;
10+
use Illuminate\Http\Request;
11+
12+
final class ApiKeyTest extends TestCase
13+
{
14+
public function testAdminEvent(): void
15+
{
16+
$entityManager = $this->createDatabase(app('em'));
17+
$repository = $entityManager->getRepository(ApiKey::class);
18+
19+
$now = new DateTime();
20+
21+
$apiKey = $repository->generate('testing');
22+
$entityManager->flush();
23+
24+
$this->assertGreaterThan(0, $apiKey->getId());
25+
$this->assertEquals('testing', $apiKey->getName());
26+
$this->assertEquals(64, strlen($apiKey->getApiKey()));
27+
$this->assertEquals(true, $apiKey->getIsActive());
28+
$this->assertGreaterThan($now, $apiKey->getCreatedAt());
29+
30+
foreach ($apiKey->getAdminEvents() as $adminEvent) {
31+
$this->assertEquals('generate', $adminEvent->getEvent());
32+
$this->assertEquals($apiKey, $adminEvent->getApiKey());
33+
34+
$adminEvent->getApiKey()->removeAdminEvent($adminEvent);
35+
}
36+
37+
$this->assertEquals(0, count($apiKey->getAdminEvents()));
38+
}
39+
40+
public function testAccessEvent(): void
41+
{
42+
$entityManager = $this->createDatabase(app('em'));
43+
$apiKeyRepository = $entityManager->getRepository(ApiKey::class);
44+
45+
$apiKey = $apiKeyRepository->generate('testing');
46+
$entityManager->flush();
47+
48+
$request = Request::create('/apiresource', 'GET');
49+
$request->headers->set('Authorization', 'Bearer ' . $apiKey->getApiKey());
50+
51+
$middleware = new AuthorizeApiKey(app(ApiKeyService::class));
52+
53+
$response = $middleware->handle($request, function() {});
54+
$this->assertNull($response);
55+
56+
foreach ($apiKey->getAccessEvents() as $accessEvent) {
57+
58+
$apiKey->removeAccessEvent($accessEvent);
59+
}
60+
61+
$this->assertEquals(0, count($apiKey->getAccessEvents()));
62+
}
63+
}

test/Feature/Repository/ScopeRepositoryTest.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
use ApiSkeletons\Laravel\Doctrine\ApiKey\Exception\InvalidName;
99
use ApiSkeletons\Laravel\Doctrine\ApiKey\Exception\ScopeHasApiKeys;
1010
use ApiSkeletonsTest\Laravel\Doctrine\ApiKey\TestCase;
11+
use DateTime;
1112

1213
final class ScopeRepositoryTest extends TestCase
1314
{
@@ -16,10 +17,13 @@ public function testGenerate(): void
1617
$entityManager = $this->createDatabase(app('em'));
1718
$repository = $entityManager->getRepository(Scope::class);
1819

20+
$now = new DateTime();
21+
1922
$scope = $repository->generate('testing');
2023
$entityManager->flush();
2124

2225
$this->assertGreaterThan(0, $scope->getId());
26+
$this->assertGreaterThan($now, $scope->getCreatedAt());
2327
$this->assertEquals('testing', $scope->getName());
2428
}
2529

0 commit comments

Comments
 (0)