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}"); } }
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); }
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); }
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); }
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); }
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); }
public function testDeleteNonexistentSetting() { $response = API::userDelete(self::$config['userID'], "settings/nonexistentSetting", array("If-Unmodified-Since-Version: 0")); $this->assert404($response); }
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); }
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); }