public function testKeyCreateNotification()
 {
     API::useAPIKey("");
     $name = "Test " . uniqid();
     $response = API::superPost('users/' . self::$config['userID'] . '/keys', json_encode(['name' => $name, 'access' => ['user' => ['library' => true]]]));
     try {
         // No notification when creating a new key
         $this->assertCountNotifications(0, $response);
     } finally {
         $json = API::getJSONFromResponse($response);
         $key = $json['key'];
         $response = API::userDelete(self::$config['userID'], "keys/{$key}");
     }
 }
Beispiel #2
0
 private function _testTagsSince($param)
 {
     $tags1 = array("a", "aa", "b");
     $tags2 = array("b", "c", "cc");
     $data1 = API::createItem("book", array("tags" => array_map(function ($tag) {
         return array("tag" => $tag);
     }, $tags1)), $this, 'jsonData');
     $data2 = API::createItem("book", array("tags" => array_map(function ($tag) {
         return array("tag" => $tag);
     }, $tags2)), $this, 'jsonData');
     // Only newly added tags should be included in 'since',
     // not previously added tags or tags added to items
     $response = API::userGet(self::$config['userID'], "tags?{$param}=" . $data1['version']);
     $this->assertNumResults(2, $response);
     // Deleting an item shouldn't update associated tag versions
     $response = API::userDelete(self::$config['userID'], "items/{$data1['key']}", array("If-Unmodified-Since-Version: " . $data1['version']));
     $this->assert204($response);
     $response = API::userGet(self::$config['userID'], "tags?{$param}=" . $data1['version']);
     $this->assertNumResults(2, $response);
     $libraryVersion = $response->getHeader("Last-Modified-Version");
     $response = API::userGet(self::$config['userID'], "tags?{$param}=" . $libraryVersion);
     $this->assertNumResults(0, $response);
 }
Beispiel #3
0
 public function testMultiTagDelete()
 {
     $tags1 = array("a", "aa", "b");
     $tags2 = array("b", "c", "cc");
     $tags3 = array("Foo");
     API::createItem("book", array("tags" => array_map(function ($tag) {
         return array("tag" => $tag);
     }, $tags1)), $this, 'key');
     API::createItem("book", array("tags" => array_map(function ($tag) {
         return array("tag" => $tag, "type" => 1);
     }, $tags2)), $this, 'key');
     API::createItem("book", array("tags" => array_map(function ($tag) {
         return array("tag" => $tag);
     }, $tags3)), $this, 'key');
     $libraryVersion = API::getLibraryVersion();
     // Missing version header
     $response = API::userDelete(self::$config['userID'], "tags?tag=" . implode("%20||%20", array_merge($tags1, $tags2)));
     $this->assert428($response);
     // Outdated version header
     $response = API::userDelete(self::$config['userID'], "tags?tag=" . implode("%20||%20", array_merge($tags1, $tags2)), array("If-Unmodified-Since-Version: " . ($libraryVersion - 1)));
     $this->assert412($response);
     // Delete
     $response = API::userDelete(self::$config['userID'], "tags?tag=" . implode("%20||%20", array_merge($tags1, $tags2)), array("If-Unmodified-Since-Version: {$libraryVersion}"));
     $this->assert204($response);
     // Make sure they're gone
     $response = API::userGet(self::$config['userID'], "tags?tag=" . implode("%20||%20", array_merge($tags1, $tags2, $tags3)));
     $this->assert200($response);
     $this->assertNumResults(1, $response);
 }
Beispiel #4
0
 public function test204NoCompression()
 {
     $json = API::createItem("book", [], null, 'jsonData');
     $response = API::userDelete(self::$config['userID'], "items/{$json['key']}", ["If-Unmodified-Since-Version: {$json['version']}"]);
     $this->assertHTTPStatus(204, $response);
     $this->assertNoCompression($response);
     $this->assertContentLength(0, $response);
 }
Beispiel #5
0
 public function testKeyCreateAndDelete()
 {
     API::useAPIKey("");
     $name = "Test " . uniqid();
     // Can't create as user
     $response = API::userPost(self::$config['userID'], 'keys', json_encode(['name' => $name, 'access' => ['user' => ['library' => true]]]));
     $this->assert403($response);
     // Create as root
     $response = API::userPost(self::$config['userID'], 'keys', json_encode(['name' => $name, 'access' => ['user' => ['library' => true]]]), [], ["username" => self::$config['rootUsername'], "password" => self::$config['rootPassword']]);
     $this->assert201($response);
     $json = API::getJSONFromResponse($response);
     $key = $json['key'];
     $this->assertEquals($json['name'], $name);
     $this->assertEquals(['user' => ['library' => true, 'files' => true]], $json['access']);
     // Delete anonymously (with embedded key)
     $response = API::userDelete(self::$config['userID'], "keys/{$key}");
     $this->assert204($response);
     $response = API::userGet(self::$config['userID'], "keys/{$key}");
     $this->assert404($response);
 }
Beispiel #6
0
 private function _testMultiObjectDelete($objectType)
 {
     $objectTypePlural = API::getPluralObjectType($objectType);
     $keyProp = $objectType . "Key";
     $deleteKeys = array();
     $keepKeys = array();
     switch ($objectType) {
         case 'collection':
             $deleteKeys[] = API::createCollection("Name", false, $this, 'key');
             $deleteKeys[] = API::createCollection("Name", false, $this, 'key');
             $keepKeys[] = API::createCollection("Name", false, $this, 'key');
             break;
         case 'item':
             $deleteKeys[] = API::createItem("book", array("title" => "Title"), $this, 'key');
             $deleteKeys[] = API::createItem("book", array("title" => "Title"), $this, 'key');
             $keepKeys[] = API::createItem("book", array("title" => "Title"), $this, 'key');
             break;
         case 'search':
             $deleteKeys[] = API::createSearch("Name", 'default', $this, 'key');
             $deleteKeys[] = API::createSearch("Name", 'default', $this, 'key');
             $keepKeys[] = API::createSearch("Name", 'default', $this, 'key');
             break;
     }
     $response = API::userGet(self::$config['userID'], "{$objectTypePlural}");
     $this->assert200($response);
     $this->assertNumResults(sizeOf($deleteKeys) + sizeOf($keepKeys), $response);
     $libraryVersion = $response->getHeader("Last-Modified-Version");
     $response = API::userDelete(self::$config['userID'], "{$objectTypePlural}?{$keyProp}=" . implode(',', $deleteKeys), array("If-Unmodified-Since-Version: " . $libraryVersion));
     $this->assert204($response);
     $libraryVersion = $response->getHeader("Last-Modified-Version");
     $response = API::userGet(self::$config['userID'], "{$objectTypePlural}");
     $this->assert200($response);
     $this->assertNumResults(sizeOf($keepKeys), $response);
     $response = API::userGet(self::$config['userID'], "{$objectTypePlural}?{$keyProp}=" . implode(',', $keepKeys));
     $this->assert200($response);
     $this->assertNumResults(sizeOf($keepKeys), $response);
     // Add trailing comma to itemKey param, to test key parsing
     $response = API::userDelete(self::$config['userID'], "{$objectTypePlural}?{$keyProp}=" . implode(',', $keepKeys) . ",", array("If-Unmodified-Since-Version: " . $libraryVersion));
     $this->assert204($response);
     $response = API::userGet(self::$config['userID'], "{$objectTypePlural}");
     $this->assert200($response);
     $this->assertNumResults(0, $response);
 }
Beispiel #7
0
 public function testDeleteNonexistentSetting()
 {
     $response = API::userDelete(self::$config['userID'], "settings/nonexistentSetting", array("If-Unmodified-Since-Version: 0"));
     $this->assert404($response);
 }
Beispiel #8
0
 public function testTagDeletePermissions()
 {
     API::userClear(self::$config['userID']);
     API::createItem('book', array("tags" => array(array("tag" => "A"))), $this);
     $libraryVersion = API::getLibraryVersion();
     API::setKeyOption(self::$config['userID'], self::$config['apiKey'], 'libraryWrite', 0);
     $response = API::userDelete(self::$config['userID'], "tags?tag=A&key=" . self::$config['apiKey']);
     $this->assert403($response);
     API::setKeyOption(self::$config['userID'], self::$config['apiKey'], 'libraryWrite', 1);
     $response = API::userDelete(self::$config['userID'], "tags?tag=A&key=" . self::$config['apiKey'], array("If-Unmodified-Since-Version: {$libraryVersion}"));
     $this->assert204($response);
 }
Beispiel #9
0
 public function testKeyCreateAndModifyWithCredentials()
 {
     API::useAPIKey("");
     $name = "Test " . uniqid();
     // Can't create on /users/:userID/keys with credentials
     $response = API::userPost(self::$config['userID'], 'keys', json_encode(['username' => self::$config['username'], 'password' => self::$config['password'], 'name' => $name, 'access' => ['user' => ['library' => true]]]));
     $this->assert403($response);
     // Create with credentials
     $response = API::post('keys', json_encode(['username' => self::$config['username'], 'password' => self::$config['password'], 'name' => $name, 'access' => ['user' => ['library' => true]]]), [], []);
     $this->assert201($response);
     $json = API::getJSONFromResponse($response);
     $key = $json['key'];
     $this->assertEquals($json['userID'], self::$config['userID']);
     $this->assertEquals($json['name'], $name);
     $this->assertEquals(['user' => ['library' => true, 'files' => true]], $json['access']);
     $name = "Test " . uniqid();
     // Can't modify on /users/:userID/keys/:key with credentials
     $response = API::userPut(self::$config['userID'], "keys/{$key}", json_encode(['username' => self::$config['username'], 'password' => self::$config['password'], 'name' => $name, 'access' => ['user' => ['library' => true]]]));
     $this->assert403($response);
     // Modify with credentials
     $response = API::put("keys/{$key}", json_encode(['username' => self::$config['username'], 'password' => self::$config['password'], 'name' => $name, 'access' => ['user' => ['library' => true]]]));
     $this->assert200($response);
     $json = API::getJSONFromResponse($response);
     $key = $json['key'];
     $this->assertEquals($json['name'], $name);
     $response = API::userDelete(self::$config['userID'], "keys/{$key}");
     $this->assert204($response);
 }