create(); } public function testAssertionConsumerServiceAction() { $this->expectException(\RuntimeException::class); $this->expectExceptionMessage('You must configure the check path in your firewall.'); $oauth = $this->getAuth(); $sut = new SamlController($oauth); $sut->assertionConsumerServiceAction(); } public function testLogoutAction() { $this->expectException(\RuntimeException::class); $this->expectExceptionMessage('You must configure the logout path in your firewall.'); $oauth = $this->getAuth(); $sut = new SamlController($oauth); $sut->logoutAction(); } public function testMetadataAction() { $expected = << urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified Kimai Kimai https://www.kimai.org Kimai Admin kimai-tech@example.com Kimai Support kimai-support@example.com EOD; $oauth = $this->getAuth(); $sut = new SamlController($oauth); $result = $sut->metadataAction(); self::assertInstanceOf(Response::class, $result); self::assertEquals('xml', $result->headers->get('Content-Type')); $expected = Xml::load($expected); $actual = Xml::load($result->getContent()); // the "validUntil" attribute in the outer node changes per request self::assertEquals($expected->firstChild->firstChild, $actual->firstChild->firstChild); } public function testLoginActionThrowsErrorOnSecurityErrorAttribute() { $this->expectException(\RuntimeException::class); $this->expectExceptionMessage('My test error'); $request = new Request(); $request->setSession($this->createMock(SessionInterface::class)); $request->attributes->set(Security::AUTHENTICATION_ERROR, new \Exception('My test error')); $oauth = $this->getAuth(); $sut = new SamlController($oauth); $sut->loginAction($request); } }