{"action":"created","comment":{"url":"https://api.github.com/repos/OpenConext/OpenConext-user-lifecycle/pulls/comments/192095679","pull_request_review_id":124793130,"id":192095679,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDE5MjA5NTY3OQ==","diff_hunk":"@@ -0,0 +1,214 @@\n+<?php\n+\n+/**\n+ * Copyright 2018 SURFnet B.V.\n+ *\n+ * Licensed under the Apache License, Version 2.0 (the \"License\");\n+ * you may not use this file except in compliance with the License.\n+ * You may obtain a copy of the License at\n+ *\n+ *     http://www.apache.org/licenses/LICENSE-2.0\n+ *\n+ * Unless required by applicable law or agreed to in writing, software\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n+ * See the License for the specific language governing permissions and\n+ * limitations under the License.\n+ */\n+\n+namespace OpenConext\\UserLifecycle\\Tests\\Integration\\UserLifecycleBundle\\Command;\n+\n+use DateTime;\n+use GuzzleHttp\\Handler\\MockHandler;\n+use GuzzleHttp\\Psr7\\Response;\n+use Mockery as m;\n+use OpenConext\\UserLifecycle\\Application\\Service\\DeprovisionService;\n+use OpenConext\\UserLifecycle\\Domain\\Entity\\LastLogin;\n+use OpenConext\\UserLifecycle\\Infrastructure\\UserLifecycleBundle\\Command\\DeprovisionCommand;\n+use OpenConext\\UserLifecycle\\Infrastructure\\UserLifecycleBundle\\Repository\\LastLoginRepository;\n+use OpenConext\\UserLifecycle\\Tests\\Integration\\DatabaseTestCase;\n+use Psr\\Container\\ContainerInterface;\n+use Psr\\Log\\LoggerInterface;\n+use Symfony\\Component\\Console\\Application;\n+use Symfony\\Component\\Console\\Tester\\CommandTester;\n+\n+class BatchDeprovisionCommandTest extends DatabaseTestCase\n+{\n+\n+    /**\n+     * @var ContainerInterface\n+     */\n+    private $container;\n+\n+    /**\n+     * @var MockHandler\n+     */\n+    private $handlerMyService;\n+\n+    /**\n+     * @var MockHandler\n+     */\n+    private $handlerMySecondService;\n+\n+    /**\n+     * @var Application\n+     */\n+    private $application;\n+\n+    /**\n+     * @var LastLoginRepository\n+     */\n+    private $repository;\n+\n+    public function setUp()\n+    {\n+        parent::setUp();\n+        $this->container = self::$kernel->getContainer();\n+\n+        // Create a client collection that consists of mockable guzzle clients utilizing the Guzzle mock handler.\n+        $clientCollection = $this->container->get('open_conext.user_lifecycle.test.deprovision_client_collection');\n+\n+        $clientCollection->addClient(\n+            $this->container->get('open_conext.user_lifecycle.deprovision_client.test.my_service_name')\n+        );\n+        $clientCollection->addClient(\n+            $this->container->get('open_conext.user_lifecycle.deprovision_client.test.my_second_name')\n+        );\n+\n+        // Expose the mock handlers, so the test methods can determine what the 'api' should return\n+        $this->handlerMyService = $this->container->get(\n+            'open_conext.user_lifecycle.guzzle_mock_handler.my_service_name'\n+        );\n+        $this->handlerMySecondService = $this->container->get(\n+            'open_conext.user_lifecycle.guzzle_mock_handler.my_second_name'\n+        );\n+\n+        // Create the application and add the information command\n+        $this->application = new Application(self::$kernel);\n+\n+        $deprovisionService = $this->container->get(DeprovisionService::class);\n+\n+        // Set the time on the LastLoginRepository\n+        $this->repository = $this->container->get('doctrine.orm.default_entity_manager')->getRepository(LastLogin::class);\n+        $this->repository->setNow(new DateTime('2018-01-01'));\n+\n+        $logger = m::mock(LoggerInterface::class);\n+        $logger->shouldIgnoreMissing();\n+\n+        $this->application->add(new DeprovisionCommand($deprovisionService, $logger));\n+\n+        // Load the database fixtures\n+        $this->loadFixtures();\n+    }\n+\n+    public function test_execute()\n+    {\n+        // Ascertain we start of with 4 entries in the last login repository\n+        $this->assertCount(4, $this->repository->findAll());\n+\n+        $collabPersonId = 'urn:collab:org:surf.nl:jimi_hendrix';\n+        $this->handlerMyService->append(\n+            new Response(200, [], $this->getOkStatus('my_service_name', $collabPersonId))\n+        );\n+\n+        $this->handlerMySecondService->append(\n+            new Response(200, [], $this->getOkStatus('my_second_name', $collabPersonId))\n+        );\n+\n+        $command = $this->application->find('user-lifecycle:deprovision');\n+        $commandTester = new CommandTester($command);\n+\n+        $commandTester->setInputs(['yes']);\n+        $commandTester->execute([]);\n+\n+        $output = $commandTester->getDisplay();\n+\n+        $this->assertContains($collabPersonId, $output);\n+        $this->assertContains('OK', $output);\n+\n+        // After deprovisioning the user should have been removed from the last login table\n+        $this->assertCount(3, $this->repository->findAll());\n+    }\n+\n+    public function test_execute_multiple_users()\n+    {\n+        // Set the repository time in the future, ensuring deprovisioning of all users in the last login table\n+        $this->repository->setNow(new DateTime('2028-01-01'));\n+\n+        // Ascertain we start of with 4 entries in the last login repository\n+        $this->assertCount(4, $this->repository->findAll());\n+\n+        $this->handlerMyService->append(\n+            new Response(200, [], $this->getOkStatus('my_service_name', 'user1')),\n+            new Response(200, [], $this->getOkStatus('my_service_name', 'user2')),\n+            new Response(200, [], $this->getOkStatus('my_service_name', 'user3')),\n+            new Response(200, [], $this->getOkStatus('my_service_name', 'user4'))\n+        );\n+\n+        $this->handlerMySecondService->append(\n+            new Response(200, [], $this->getOkStatus('my_second_name', 'user1')),\n+            new Response(200, [], $this->getOkStatus('my_second_name', 'user2')),\n+            new Response(200, [], $this->getOkStatus('my_second_name', 'user3')),\n+            new Response(200, [], $this->getOkStatus('my_second_name', 'user4'))\n+        );\n+\n+        $command = $this->application->find('user-lifecycle:deprovision');\n+        $commandTester = new CommandTester($command);\n+\n+        $commandTester->setInputs(['yes']);\n+        $commandTester->execute([]);\n+\n+        // After deprovisioning the user should have been removed from the last login table\n+        $this->assertCount(0, $this->repository->findAll());\n+    }\n+    public function test_execute_multiple_users_one_failure()\n+    {\n+        // Set the repository time in the future, ensuring deprovisioning of all users in the last login table\n+        $this->repository->setNow(new DateTime('2028-01-01'));\n+\n+        // Ascertain we start of with 4 entries in the last login repository\n+        $this->assertCount(4, $this->repository->findAll());\n+\n+        $this->handlerMyService->append(\n+            new Response(200, [], $this->getOkStatus('my_service_name', 'user1')),\n+            new Response(200, [], $this->getOkStatus('my_service_name', 'user2')),\n+            new Response(200, [], $this->getOkStatus('my_service_name', 'user3')),\n+            new Response(200, [], $this->getOkStatus('my_service_name', 'user4'))\n+        );\n+\n+        $this->handlerMySecondService->append(\n+            new Response(200, [], $this->getOkStatus('my_second_name', 'user1')),\n+            new Response(200, [], $this->getOkStatus('my_second_name', 'user2')),\n+            new Response(200, [], $this->getFailedStatus('my_second_name', 'user3')),\n+            new Response(200, [], $this->getOkStatus('my_second_name', 'user4'))\n+        );\n+\n+        $command = $this->application->find('user-lifecycle:deprovision');","path":"tests/integration/UserLifecycleBundle/Command/BatchDeprovisionCommandTest.php","position":186,"original_position":186,"commit_id":"c9603cbebf6430df224dcb41423fe0db21307f0d","original_commit_id":"4b2c53a55c1649fd942293ccbcec7236737a14e7","user":{"login":"jorissteyn","id":448056,"node_id":"MDQ6VXNlcjQ0ODA1Ng==","avatar_url":"https://avatars3.githubusercontent.com/u/448056?v=4","gravatar_id":"","url":"https://api.github.com/users/jorissteyn","html_url":"https://github.com/jorissteyn","followers_url":"https://api.github.com/users/jorissteyn/followers","following_url":"https://api.github.com/users/jorissteyn/following{/other_user}","gists_url":"https://api.github.com/users/jorissteyn/gists{/gist_id}","starred_url":"https://api.github.com/users/jorissteyn/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jorissteyn/subscriptions","organizations_url":"https://api.github.com/users/jorissteyn/orgs","repos_url":"https://api.github.com/users/jorissteyn/repos","events_url":"https://api.github.com/users/jorissteyn/events{/privacy}","received_events_url":"https://api.github.com/users/jorissteyn/received_events","type":"User","site_admin":false},"body":"Still don't agree with the mandatory prefix, is there really no way around it? In my mind, it's the equivalent of having to type `grep grep` instead of `grep` or `composer composer:install` instead of `composer install`.","created_at":"2018-05-31T13:20:02Z","updated_at":"2018-05-31T13:39:46Z","html_url":"https://github.com/OpenConext/OpenConext-user-lifecycle/pull/9#discussion_r192095679","pull_request_url":"https://api.github.com/repos/OpenConext/OpenConext-user-lifecycle/pulls/9","author_association":"CONTRIBUTOR","_links":{"self":{"href":"https://api.github.com/repos/OpenConext/OpenConext-user-lifecycle/pulls/comments/192095679"},"html":{"href":"https://github.com/OpenConext/OpenConext-user-lifecycle/pull/9#discussion_r192095679"},"pull_request":{"href":"https://api.github.com/repos/OpenConext/OpenConext-user-lifecycle/pulls/9"}}},"pull_request":{"url":"https://api.github.com/repos/OpenConext/OpenConext-user-lifecycle/pulls/9","id":191740418,"node_id":"MDExOlB1bGxSZXF1ZXN0MTkxNzQwNDE4","html_url":"https://github.com/OpenConext/OpenConext-user-lifecycle/pull/9","diff_url":"https://github.com/OpenConext/OpenConext-user-lifecycle/pull/9.diff","patch_url":"https://github.com/OpenConext/OpenConext-user-lifecycle/pull/9.patch","issue_url":"https://api.github.com/repos/OpenConext/OpenConext-user-lifecycle/issues/9","number":9,"state":"open","locked":false,"title":"Batch deprovision","user":{"login":"MKodde","id":28252948,"node_id":"MDQ6VXNlcjI4MjUyOTQ4","avatar_url":"https://avatars1.githubusercontent.com/u/28252948?v=4","gravatar_id":"","url":"https://api.github.com/users/MKodde","html_url":"https://github.com/MKodde","followers_url":"https://api.github.com/users/MKodde/followers","following_url":"https://api.github.com/users/MKodde/following{/other_user}","gists_url":"https://api.github.com/users/MKodde/gists{/gist_id}","starred_url":"https://api.github.com/users/MKodde/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/MKodde/subscriptions","organizations_url":"https://api.github.com/users/MKodde/orgs","repos_url":"https://api.github.com/users/MKodde/repos","events_url":"https://api.github.com/users/MKodde/events{/privacy}","received_events_url":"https://api.github.com/users/MKodde/received_events","type":"User","site_admin":false},"body":"Another monster PR, for details see [Pivotal](https://www.pivotaltracker.com/story/show/157420112)\r\n\r\nNot in this PR:\r\n * Remove the force option in favor of the Symfony built in force option.\r\n * Improve styling of the json output to the CLI\r\n * Add silent option to output producing commands","created_at":"2018-05-31T12:38:14Z","updated_at":"2018-05-31T13:39:46Z","closed_at":null,"merged_at":null,"merge_commit_sha":"0ab2e45c466590d918244f3573fb25d1bcc90dae","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/OpenConext/OpenConext-user-lifecycle/pulls/9/commits","review_comments_url":"https://api.github.com/repos/OpenConext/OpenConext-user-lifecycle/pulls/9/comments","review_comment_url":"https://api.github.com/repos/OpenConext/OpenConext-user-lifecycle/pulls/comments{/number}","comments_url":"https://api.github.com/repos/OpenConext/OpenConext-user-lifecycle/issues/9/comments","statuses_url":"https://api.github.com/repos/OpenConext/OpenConext-user-lifecycle/statuses/c9603cbebf6430df224dcb41423fe0db21307f0d","head":{"label":"OpenConext:feature/batch-deprovision","ref":"feature/batch-deprovision","sha":"c9603cbebf6430df224dcb41423fe0db21307f0d","user":{"login":"OpenConext","id":1457650,"node_id":"MDEyOk9yZ2FuaXphdGlvbjE0NTc2NTA=","avatar_url":"https://avatars2.githubusercontent.com/u/1457650?v=4","gravatar_id":"","url":"https://api.github.com/users/OpenConext","html_url":"https://github.com/OpenConext","followers_url":"https://api.github.com/users/OpenConext/followers","following_url":"https://api.github.com/users/OpenConext/following{/other_user}","gists_url":"https://api.github.com/users/OpenConext/gists{/gist_id}","starred_url":"https://api.github.com/users/OpenConext/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/OpenConext/subscriptions","organizations_url":"https://api.github.com/users/OpenConext/orgs","repos_url":"https://api.github.com/users/OpenConext/repos","events_url":"https://api.github.com/users/OpenConext/events{/privacy}","received_events_url":"https://api.github.com/users/OpenConext/received_events","type":"Organization","site_admin":false},"repo":{"id":132448588,"node_id":"MDEwOlJlcG9zaXRvcnkxMzI0NDg1ODg=","name":"OpenConext-user-lifecycle","full_name":"OpenConext/OpenConext-user-lifecycle","owner":{"login":"OpenConext","id":1457650,"node_id":"MDEyOk9yZ2FuaXphdGlvbjE0NTc2NTA=","avatar_url":"https://avatars2.githubusercontent.com/u/1457650?v=4","gravatar_id":"","url":"https://api.github.com/users/OpenConext","html_url":"https://github.com/OpenConext","followers_url":"https://api.github.com/users/OpenConext/followers","following_url":"https://api.github.com/users/OpenConext/following{/other_user}","gists_url":"https://api.github.com/users/OpenConext/gists{/gist_id}","starred_url":"https://api.github.com/users/OpenConext/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/OpenConext/subscriptions","organizations_url":"https://api.github.com/users/OpenConext/orgs","repos_url":"https://api.github.com/users/OpenConext/repos","events_url":"https://api.github.com/users/OpenConext/events{/privacy}","received_events_url":"https://api.github.com/users/OpenConext/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/OpenConext/OpenConext-user-lifecycle","description":"Deprovision users within the OpenConext platform","fork":false,"url":"https://api.github.com/repos/OpenConext/OpenConext-user-lifecycle","forks_url":"https://api.github.com/repos/OpenConext/OpenConext-user-lifecycle/forks","keys_url":"https://api.github.com/repos/OpenConext/OpenConext-user-lifecycle/keys{/key_id}","collaborators_url":"https://api.github.com/repos/OpenConext/OpenConext-user-lifecycle/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/OpenConext/OpenConext-user-lifecycle/teams","hooks_url":"https://api.github.com/repos/OpenConext/OpenConext-user-lifecycle/hooks","issue_events_url":"https://api.github.com/repos/OpenConext/OpenConext-user-lifecycle/issues/events{/number}","events_url":"https://api.github.com/repos/OpenConext/OpenConext-user-lifecycle/events","assignees_url":"https://api.github.com/repos/OpenConext/OpenConext-user-lifecycle/assignees{/user}","branches_url":"https://api.github.com/repos/OpenConext/OpenConext-user-lifecycle/branches{/branch}","tags_url":"https://api.github.com/repos/OpenConext/OpenConext-user-lifecycle/tags","blobs_url":"https://api.github.com/repos/OpenConext/OpenConext-user-lifecycle/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/OpenConext/OpenConext-user-lifecycle/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/OpenConext/OpenConext-user-lifecycle/git/refs{/sha}","trees_url":"https://api.github.com/repos/OpenConext/OpenConext-user-lifecycle/git/trees{/sha}","statuses_url":"https://api.github.com/repos/OpenConext/OpenConext-user-lifecycle/statuses/{sha}","languages_url":"https://api.github.com/repos/OpenConext/OpenConext-user-lifecycle/languages","stargazers_url":"https://api.github.com/repos/OpenConext/OpenConext-user-lifecycle/stargazers","contributors_url":"https://api.github.com/repos/OpenConext/OpenConext-user-lifecycle/contributors","subscribers_url":"https://api.github.com/repos/OpenConext/OpenConext-user-lifecycle/subscribers","subscription_url":"https://api.github.com/repos/OpenConext/OpenConext-user-lifecycle/subscription","commits_url":"https://api.github.com/repos/OpenConext/OpenConext-user-lifecycle/commits{/sha}","git_commits_url":"https://api.github.com/repos/OpenConext/OpenConext-user-lifecycle/git/commits{/sha}","comments_url":"https://api.github.com/repos/OpenConext/OpenConext-user-lifecycle/comments{/number}","issue_comment_url":"https://api.github.com/repos/OpenConext/OpenConext-user-lifecycle/issues/comments{/number}","contents_url":"https://api.github.com/repos/OpenConext/OpenConext-user-lifecycle/contents/{+path}","compare_url":"https://api.github.com/repos/OpenConext/OpenConext-user-lifecycle/compare/{base}...{head}","merges_url":"https://api.github.com/repos/OpenConext/OpenConext-user-lifecycle/merges","archive_url":"https://api.github.com/repos/OpenConext/OpenConext-user-lifecycle/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/OpenConext/OpenConext-user-lifecycle/downloads","issues_url":"https://api.github.com/repos/OpenConext/OpenConext-user-lifecycle/issues{/number}","pulls_url":"https://api.github.com/repos/OpenConext/OpenConext-user-lifecycle/pulls{/number}","milestones_url":"https://api.github.com/repos/OpenConext/OpenConext-user-lifecycle/milestones{/number}","notifications_url":"https://api.github.com/repos/OpenConext/OpenConext-user-lifecycle/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/OpenConext/OpenConext-user-lifecycle/labels{/name}","releases_url":"https://api.github.com/repos/OpenConext/OpenConext-user-lifecycle/releases{/id}","deployments_url":"https://api.github.com/repos/OpenConext/OpenConext-user-lifecycle/deployments","created_at":"2018-05-07T11:05:37Z","updated_at":"2018-05-31T12:35:58Z","pushed_at":"2018-05-31T13:28:33Z","git_url":"git://github.com/OpenConext/OpenConext-user-lifecycle.git","ssh_url":"git@github.com:OpenConext/OpenConext-user-lifecycle.git","clone_url":"https://github.com/OpenConext/OpenConext-user-lifecycle.git","svn_url":"https://github.com/OpenConext/OpenConext-user-lifecycle","homepage":null,"size":227,"stargazers_count":1,"watchers_count":1,"language":"PHP","has_issues":true,"has_projects":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":1,"license":{"key":"apache-2.0","name":"Apache License 2.0","spdx_id":"Apache-2.0","url":"https://api.github.com/licenses/apache-2.0","node_id":"MDc6TGljZW5zZTI="},"forks":0,"open_issues":1,"watchers":1,"default_branch":"master"}},"base":{"label":"OpenConext:master","ref":"master","sha":"5decd96c58a7d1981bd5363ca25ef9bded4ce9ca","user":{"login":"OpenConext","id":1457650,"node_id":"MDEyOk9yZ2FuaXphdGlvbjE0NTc2NTA=","avatar_url":"https://avatars2.githubusercontent.com/u/1457650?v=4","gravatar_id":"","url":"https://api.github.com/users/OpenConext","html_url":"https://github.com/OpenConext","followers_url":"https://api.github.com/users/OpenConext/followers","following_url":"https://api.github.com/users/OpenConext/following{/other_user}","gists_url":"https://api.github.com/users/OpenConext/gists{/gist_id}","starred_url":"https://api.github.com/users/OpenConext/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/OpenConext/subscriptions","organizations_url":"https://api.github.com/users/OpenConext/orgs","repos_url":"https://api.github.com/users/OpenConext/repos","events_url":"https://api.github.com/users/OpenConext/events{/privacy}","received_events_url":"https://api.github.com/users/OpenConext/received_events","type":"Organization","site_admin":false},"repo":{"id":132448588,"node_id":"MDEwOlJlcG9zaXRvcnkxMzI0NDg1ODg=","name":"OpenConext-user-lifecycle","full_name":"OpenConext/OpenConext-user-lifecycle","owner":{"login":"OpenConext","id":1457650,"node_id":"MDEyOk9yZ2FuaXphdGlvbjE0NTc2NTA=","avatar_url":"https://avatars2.githubusercontent.com/u/1457650?v=4","gravatar_id":"","url":"https://api.github.com/users/OpenConext","html_url":"https://github.com/OpenConext","followers_url":"https://api.github.com/users/OpenConext/followers","following_url":"https://api.github.com/users/OpenConext/following{/other_user}","gists_url":"https://api.github.com/users/OpenConext/gists{/gist_id}","starred_url":"https://api.github.com/users/OpenConext/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/OpenConext/subscriptions","organizations_url":"https://api.github.com/users/OpenConext/orgs","repos_url":"https://api.github.com/users/OpenConext/repos","events_url":"https://api.github.com/users/OpenConext/events{/privacy}","received_events_url":"https://api.github.com/users/OpenConext/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/OpenConext/OpenConext-user-lifecycle","description":"Deprovision users within the OpenConext platform","fork":false,"url":"https://api.github.com/repos/OpenConext/OpenConext-user-lifecycle","forks_url":"https://api.github.com/repos/OpenConext/OpenConext-user-lifecycle/forks","keys_url":"https://api.github.com/repos/OpenConext/OpenConext-user-lifecycle/keys{/key_id}","collaborators_url":"https://api.github.com/repos/OpenConext/OpenConext-user-lifecycle/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/OpenConext/OpenConext-user-lifecycle/teams","hooks_url":"https://api.github.com/repos/OpenConext/OpenConext-user-lifecycle/hooks","issue_events_url":"https://api.github.com/repos/OpenConext/OpenConext-user-lifecycle/issues/events{/number}","events_url":"https://api.github.com/repos/OpenConext/OpenConext-user-lifecycle/events","assignees_url":"https://api.github.com/repos/OpenConext/OpenConext-user-lifecycle/assignees{/user}","branches_url":"https://api.github.com/repos/OpenConext/OpenConext-user-lifecycle/branches{/branch}","tags_url":"https://api.github.com/repos/OpenConext/OpenConext-user-lifecycle/tags","blobs_url":"https://api.github.com/repos/OpenConext/OpenConext-user-lifecycle/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/OpenConext/OpenConext-user-lifecycle/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/OpenConext/OpenConext-user-lifecycle/git/refs{/sha}","trees_url":"https://api.github.com/repos/OpenConext/OpenConext-user-lifecycle/git/trees{/sha}","statuses_url":"https://api.github.com/repos/OpenConext/OpenConext-user-lifecycle/statuses/{sha}","languages_url":"https://api.github.com/repos/OpenConext/OpenConext-user-lifecycle/languages","stargazers_url":"https://api.github.com/repos/OpenConext/OpenConext-user-lifecycle/stargazers","contributors_url":"https://api.github.com/repos/OpenConext/OpenConext-user-lifecycle/contributors","subscribers_url":"https://api.github.com/repos/OpenConext/OpenConext-user-lifecycle/subscribers","subscription_url":"https://api.github.com/repos/OpenConext/OpenConext-user-lifecycle/subscription","commits_url":"https://api.github.com/repos/OpenConext/OpenConext-user-lifecycle/commits{/sha}","git_commits_url":"https://api.github.com/repos/OpenConext/OpenConext-user-lifecycle/git/commits{/sha}","comments_url":"https://api.github.com/repos/OpenConext/OpenConext-user-lifecycle/comments{/number}","issue_comment_url":"https://api.github.com/repos/OpenConext/OpenConext-user-lifecycle/issues/comments{/number}","contents_url":"https://api.github.com/repos/OpenConext/OpenConext-user-lifecycle/contents/{+path}","compare_url":"https://api.github.com/repos/OpenConext/OpenConext-user-lifecycle/compare/{base}...{head}","merges_url":"https://api.github.com/repos/OpenConext/OpenConext-user-lifecycle/merges","archive_url":"https://api.github.com/repos/OpenConext/OpenConext-user-lifecycle/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/OpenConext/OpenConext-user-lifecycle/downloads","issues_url":"https://api.github.com/repos/OpenConext/OpenConext-user-lifecycle/issues{/number}","pulls_url":"https://api.github.com/repos/OpenConext/OpenConext-user-lifecycle/pulls{/number}","milestones_url":"https://api.github.com/repos/OpenConext/OpenConext-user-lifecycle/milestones{/number}","notifications_url":"https://api.github.com/repos/OpenConext/OpenConext-user-lifecycle/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/OpenConext/OpenConext-user-lifecycle/labels{/name}","releases_url":"https://api.github.com/repos/OpenConext/OpenConext-user-lifecycle/releases{/id}","deployments_url":"https://api.github.com/repos/OpenConext/OpenConext-user-lifecycle/deployments","created_at":"2018-05-07T11:05:37Z","updated_at":"2018-05-31T12:35:58Z","pushed_at":"2018-05-31T13:28:33Z","git_url":"git://github.com/OpenConext/OpenConext-user-lifecycle.git","ssh_url":"git@github.com:OpenConext/OpenConext-user-lifecycle.git","clone_url":"https://github.com/OpenConext/OpenConext-user-lifecycle.git","svn_url":"https://github.com/OpenConext/OpenConext-user-lifecycle","homepage":null,"size":227,"stargazers_count":1,"watchers_count":1,"language":"PHP","has_issues":true,"has_projects":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":1,"license":{"key":"apache-2.0","name":"Apache License 2.0","spdx_id":"Apache-2.0","url":"https://api.github.com/licenses/apache-2.0","node_id":"MDc6TGljZW5zZTI="},"forks":0,"open_issues":1,"watchers":1,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/OpenConext/OpenConext-user-lifecycle/pulls/9"},"html":{"href":"https://github.com/OpenConext/OpenConext-user-lifecycle/pull/9"},"issue":{"href":"https://api.github.com/repos/OpenConext/OpenConext-user-lifecycle/issues/9"},"comments":{"href":"https://api.github.com/repos/OpenConext/OpenConext-user-lifecycle/issues/9/comments"},"review_comments":{"href":"https://api.github.com/repos/OpenConext/OpenConext-user-lifecycle/pulls/9/comments"},"review_comment":{"href":"https://api.github.com/repos/OpenConext/OpenConext-user-lifecycle/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/OpenConext/OpenConext-user-lifecycle/pulls/9/commits"},"statuses":{"href":"https://api.github.com/repos/OpenConext/OpenConext-user-lifecycle/statuses/c9603cbebf6430df224dcb41423fe0db21307f0d"}},"author_association":"CONTRIBUTOR"}}
{"actor":{"display_login":"jorissteyn"}}