diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 3ffa1cebb..860bffa3f 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -58,8 +58,11 @@ jobs: run: php artisan key:generate - name: Unit tests - run: vendor/bin/phpunit --bootstrap vendor/autoload.php tests/Unit + run: vendor/bin/phpunit tests/Unit if: ${{ always() }} + env: + DB_HOST: UNIT_NO_DB + SKIP_MIGRATIONS: true - name: Integration tests run: vendor/bin/phpunit tests/Integration diff --git a/tests/Unit/Http/Middleware/Api/Daemon/DaemonAuthenticateTest.php b/tests/Unit/Http/Middleware/Api/Daemon/DaemonAuthenticateTest.php deleted file mode 100644 index 2b464f8fe..000000000 --- a/tests/Unit/Http/Middleware/Api/Daemon/DaemonAuthenticateTest.php +++ /dev/null @@ -1,152 +0,0 @@ -encrypter = m::mock(Encrypter::class); - } - - /** - * Test that if we are accessing the daemon configuration route this middleware is not - * applied in order to allow an unauthenticated request to use a token to grab data. - */ - public function testResponseShouldContinueIfRouteIsExempted() - { - $this->request->expects('route->getName')->withNoArgs()->andReturn('daemon.configuration'); - - $this->getMiddleware()->handle($this->request, $this->getClosureAssertions()); - } - - /** - * Test that not passing in the bearer token will result in a HTTP/401 error with the - * proper response headers. - */ - public function testResponseShouldFailIfNoTokenIsProvided() - { - $this->request->expects('route->getName')->withNoArgs()->andReturn('random.route'); - $this->request->expects('bearerToken')->withNoArgs()->andReturnNull(); - - try { - $this->getMiddleware()->handle($this->request, $this->getClosureAssertions()); - } catch (HttpException $exception) { - $this->assertEquals(401, $exception->getStatusCode(), 'Assert that a status code of 401 is returned.'); - $this->assertTrue(is_array($exception->getHeaders()), 'Assert that an array of headers is returned.'); - $this->assertArrayHasKey('WWW-Authenticate', $exception->getHeaders(), 'Assert exception headers contains WWW-Authenticate.'); - $this->assertEquals('Bearer', $exception->getHeaders()['WWW-Authenticate']); - } - } - - /** - * Test that passing in an invalid node daemon secret will result in a bad request - * exception being returned. - * - * @dataProvider badTokenDataProvider - */ - public function testResponseShouldFailIfTokenFormatIsIncorrect(string $token) - { - $this->expectException(BadRequestHttpException::class); - - $this->request->expects('route->getName')->withNoArgs()->andReturn('random.route'); - $this->request->expects('bearerToken')->withNoArgs()->andReturn($token); - - $this->getMiddleware()->handle($this->request, $this->getClosureAssertions()); - } - - /** - * Test that an access denied error is returned if the node is valid but the token - * provided is not valid. - */ - public function testResponseShouldFailIfTokenIsNotValid() - { - $node = Node::factory()->create(); - - $this->expectException(AccessDeniedHttpException::class); - - $this->request->expects('route->getName')->withNoArgs()->andReturn('random.route'); - $this->request->expects('bearerToken')->withNoArgs()->andReturn($node->daemon_token_id . '.random_string_123'); - - $this->encrypter->expects('decrypt')->with($node->daemon_token)->andReturns(decrypt($node->daemon_token)); - - $this->getMiddleware()->handle($this->request, $this->getClosureAssertions()); - } - - /** - * Test that an access denied exception is returned if the node is not found using - * the token ID provided. - */ - public function testResponseShouldFailIfNodeIsNotFound() - { - $this->expectException(ModelNotFoundException::class); - - $this->request->expects('route->getName')->withNoArgs()->andReturn('random.route'); - $this->request->expects('bearerToken')->withNoArgs()->andReturn('abcd1234.random_string_123'); - - $this->getMiddleware()->handle($this->request, $this->getClosureAssertions()); - } - - /** - * Test a successful middleware process. - */ - public function testSuccessfulMiddlewareProcess() - { - $node = Node::factory()->create(); - $node->daemon_token = encrypt('the_same'); - $node->save(); - - $this->request->expects('route->getName')->withNoArgs()->andReturn('random.route'); - $this->request->expects('bearerToken')->withNoArgs()->andReturn($node->daemon_token_id . '.the_same'); - $this->encrypter->expects('decrypt')->with($node->daemon_token)->andReturns(decrypt($node->daemon_token)); - - $this->getMiddleware()->handle($this->request, $this->getClosureAssertions()); - $this->assertRequestHasAttribute('node'); - $this->assertRequestAttributeEquals($node->fresh(), 'node'); - } - - /** - * Provides different tokens that should trigger a bad request exception due to - * their formatting. - * - * @return array|\string[][] - */ - public static function badTokenDataProvider(): array - { - return [ - ['foo'], - ['foobar'], - ['foo-bar'], - ['foo.bar.baz'], - ['.foo'], - ['foo.'], - ['foo..bar'], - ]; - } - - /** - * Return an instance of the middleware using mocked dependencies. - */ - private function getMiddleware(): DaemonAuthenticate - { - return new DaemonAuthenticate($this->encrypter); - } -}