aboutsummaryrefslogtreecommitdiffhomepage
path: root/tests/Wallabag/ApiBundle/Controller/DeveloperControllerTest.php
diff options
context:
space:
mode:
Diffstat (limited to 'tests/Wallabag/ApiBundle/Controller/DeveloperControllerTest.php')
-rw-r--r--tests/Wallabag/ApiBundle/Controller/DeveloperControllerTest.php63
1 files changed, 50 insertions, 13 deletions
diff --git a/tests/Wallabag/ApiBundle/Controller/DeveloperControllerTest.php b/tests/Wallabag/ApiBundle/Controller/DeveloperControllerTest.php
index 6659443b..53aed12b 100644
--- a/tests/Wallabag/ApiBundle/Controller/DeveloperControllerTest.php
+++ b/tests/Wallabag/ApiBundle/Controller/DeveloperControllerTest.php
@@ -3,6 +3,7 @@
3namespace Tests\Wallabag\ApiBundle\Controller; 3namespace Tests\Wallabag\ApiBundle\Controller;
4 4
5use Tests\Wallabag\CoreBundle\WallabagCoreTestCase; 5use Tests\Wallabag\CoreBundle\WallabagCoreTestCase;
6use Wallabag\ApiBundle\Entity\Client;
6 7
7class DeveloperControllerTest extends WallabagCoreTestCase 8class DeveloperControllerTest extends WallabagCoreTestCase
8{ 9{
@@ -33,14 +34,10 @@ class DeveloperControllerTest extends WallabagCoreTestCase
33 $this->assertContains('My app', $alert[0]); 34 $this->assertContains('My app', $alert[0]);
34 } 35 }
35 36
36 /** 37 public function testCreateTokenFromPasswords()
37 * @depends testCreateClient
38 */
39 public function testCreateToken()
40 { 38 {
41 $client = $this->getClient(); 39 $client = $this->getClient();
42 $em = $client->getContainer()->get('doctrine.orm.entity_manager'); 40 $apiClient = $this->createApiClientForUser('admin');
43 $apiClient = $em->getRepository('WallabagApiBundle:Client')->findOneByName('My app');
44 41
45 $client->request('POST', '/oauth/v2/token', [ 42 $client->request('POST', '/oauth/v2/token', [
46 'grant_type' => 'password', 43 'grant_type' => 'password',
@@ -59,6 +56,26 @@ class DeveloperControllerTest extends WallabagCoreTestCase
59 $this->assertArrayHasKey('refresh_token', $data); 56 $this->assertArrayHasKey('refresh_token', $data);
60 } 57 }
61 58
59 public function testCreateTokenFromClientCredentialsOnly()
60 {
61 $client = $this->getClient();
62 $apiClient = $this->createApiClientForUser('admin', ['client_credentials']);
63
64 $client->request('POST', '/oauth/v2/token', [
65 'grant_type' => 'client_credentials',
66 'client_id' => $apiClient->getPublicId(),
67 'client_secret' => $apiClient->getSecret(),
68 ]);
69
70 $this->assertEquals(200, $client->getResponse()->getStatusCode());
71
72 $data = json_decode($client->getResponse()->getContent(), true);
73 $this->assertArrayHasKey('access_token', $data);
74 $this->assertArrayHasKey('expires_in', $data);
75 $this->assertArrayHasKey('token_type', $data);
76 // Client Credentials created-clients have no refresh tokens
77 }
78
62 public function testListingClient() 79 public function testListingClient()
63 { 80 {
64 $this->logInAs('admin'); 81 $this->logInAs('admin');
@@ -83,6 +100,7 @@ class DeveloperControllerTest extends WallabagCoreTestCase
83 public function testRemoveClient() 100 public function testRemoveClient()
84 { 101 {
85 $client = $this->getClient(); 102 $client = $this->getClient();
103 $adminApiClient = $this->createApiClientForUser('admin');
86 $em = $client->getContainer()->get('doctrine.orm.entity_manager'); 104 $em = $client->getContainer()->get('doctrine.orm.entity_manager');
87 105
88 // Try to remove an admin's client with a wrong user 106 // Try to remove an admin's client with a wrong user
@@ -90,12 +108,8 @@ class DeveloperControllerTest extends WallabagCoreTestCase
90 $client->request('GET', '/developer'); 108 $client->request('GET', '/developer');
91 $this->assertContains('no_client', $client->getResponse()->getContent()); 109 $this->assertContains('no_client', $client->getResponse()->getContent());
92 110
93 // get an ID of a admin's client
94 $this->logInAs('admin');
95 $nbClients = $em->getRepository('WallabagApiBundle:Client')->findByUser($this->getLoggedInUserId());
96
97 $this->logInAs('bob'); 111 $this->logInAs('bob');
98 $client->request('GET', '/developer/client/delete/'.$nbClients[0]->getId()); 112 $client->request('GET', '/developer/client/delete/'.$adminApiClient->getId());
99 $this->assertEquals(403, $client->getResponse()->getStatusCode()); 113 $this->assertEquals(403, $client->getResponse()->getStatusCode());
100 114
101 // Try to remove the admin's client with the good user 115 // Try to remove the admin's client with the good user
@@ -111,7 +125,30 @@ class DeveloperControllerTest extends WallabagCoreTestCase
111 $client->click($link); 125 $client->click($link);
112 $this->assertEquals(302, $client->getResponse()->getStatusCode()); 126 $this->assertEquals(302, $client->getResponse()->getStatusCode());
113 127
114 $newNbClients = $em->getRepository('WallabagApiBundle:Client')->findByUser($this->getLoggedInUserId()); 128 $this->assertNull(
115 $this->assertGreaterThan(count($newNbClients), count($nbClients)); 129 $em->getRepository('WallabagApiBundle:Client')->find($adminApiClient->getId()),
130 'The client should have been removed'
131 );
132 }
133
134 /**
135 * @param string $username
136 *
137 * @param array $grantTypes
138 * @return Client
139 */
140 private function createApiClientForUser($username, $grantTypes = ['password'])
141 {
142 $client = $this->getClient();
143 $em = $client->getContainer()->get('doctrine.orm.entity_manager');
144 $userManager = $client->getContainer()->get('fos_user.user_manager');
145 $user = $userManager->findUserBy(array('username' => $username));
146 $apiClient = new Client($user);
147 $apiClient->setName('My app');
148 $apiClient->setAllowedGrantTypes($grantTypes);
149 $em->persist($apiClient);
150 $em->flush();
151
152 return $apiClient;
116 } 153 }
117} 154}