From 0e3327bca70623175791ee41085d55d0cb13fe5b Mon Sep 17 00:00:00 2001 From: Bharat Mediratta Date: Sun, 3 Jan 2010 20:30:35 -0800 Subject: Simplify the REST API code. Here's what I did: 1) Simplify gallery_rest to return flat models, no children and do no validation for now. 2) Flatten the REST replies and use HTTP codes to indicate success/failure instead of additional status messages. 3) Use the message and error code support in the base Exception class, instead of brewing our own in Rest_Exception. 4) Get rid of rest::success() and rest::fail() -- we only need rest::reply() since all failures are covered by throwing an exception. 5) Get rid of /rest/access_key and just use /rest for authentication. 6) Inline and simplify rest::normalize_request since we only use it once 7) Change rest::set_active_user to succeed or throw an exception 8) Extract Rest_Exception::sendHeaders into rest::send_headers() Here's what's currently broken: 1) Data validation. There currently is none 2) Logging. That's gone too 3) image block and tag code is broken 4) Tests are broken 5) No movie support --- modules/gallery/tests/Gallery_Rest_Helper_Test.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'modules/gallery/tests/Gallery_Rest_Helper_Test.php') diff --git a/modules/gallery/tests/Gallery_Rest_Helper_Test.php b/modules/gallery/tests/Gallery_Rest_Helper_Test.php index cd0aabae..c5c8a890 100644 --- a/modules/gallery/tests/Gallery_Rest_Helper_Test.php +++ b/modules/gallery/tests/Gallery_Rest_Helper_Test.php @@ -136,7 +136,8 @@ class Gallery_Rest_Helper_Test extends Unit_Test_Case { try { gallery_rest::put($request); } catch (Rest_Exception $e) { - $this->assert_equal("400 Bad request", $e->getMessage()); + $this->assert_equal("Bad request", $e->getMessage()); + $this->assert_equal(400, $e->getCode()); } catch (Exception $e) { $this->assert_false(true, $e->__toString()); } -- cgit v1.2.3 From f95442c314f84004c48758579f076ae209aace43 Mon Sep 17 00:00:00 2001 From: Bharat Mediratta Date: Tue, 19 Jan 2010 01:17:29 -0800 Subject: Rewrite the tests entirely to cover the new REST code. --- modules/gallery/tests/Gallery_Rest_Helper_Test.php | 347 ++++++++------------- 1 file changed, 138 insertions(+), 209 deletions(-) (limited to 'modules/gallery/tests/Gallery_Rest_Helper_Test.php') diff --git a/modules/gallery/tests/Gallery_Rest_Helper_Test.php b/modules/gallery/tests/Gallery_Rest_Helper_Test.php index dac221b3..35fd0daf 100644 --- a/modules/gallery/tests/Gallery_Rest_Helper_Test.php +++ b/modules/gallery/tests/Gallery_Rest_Helper_Test.php @@ -17,262 +17,191 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ -class Gallery_Rest_Helper_Test extends Unit_Test_Case { +class Gallery_Rest_Helper_Test extends Gallery_Unit_Test_Case { public function setup() { $this->_save = array($_GET, $_POST, $_SERVER, $_FILES); - $this->_saved_active_user = identity::active_user(); } public function teardown() { list($_GET, $_POST, $_SERVER, $_FILES) = $this->_save; - identity::set_active_user($this->_saved_active_user); - if (!empty($this->_user)) { - try { - $this->_user->delete(); - } catch (Exception $e) { } - } } - private function _create_user() { - if (empty($this->_user)) { - $this->_user = identity::create_user("access_test" . rand(), "Access Test", "password"); - $key = ORM::factory("user_access_token"); - $key->access_key = md5($this->_user->name . rand()); - $key->user_id = $this->_user->id; - $key->save(); - identity::set_active_user($this->_user); - } - return $this->_user; + public function resolve_test() { + $album = test::random_album(); + $resolved = rest::resolve(rest::url("gallery", $album->relative_url())); + $this->assert_equal($album->id, $resolved->id); } - private function _create_album($parent=null) { - $album_name = "rest_album_" . rand(); - if (empty($parent)) { - $parent = ORM::factory("item", 1); - } - return album::create($parent, $album_name, $album_name, $album_name); - } + public function get_scope_test() { + $album1 = test::random_album(); + $photo1 = test::random_photo($album1); + $album2 = test::random_album($album1); + $photo2 = test::random_photo($album2); + $album1->reload(); - private function _create_image($parent=null) { - $filename = MODPATH . "gallery/tests/test.jpg"; - $image_name = "rest_image_" . rand(); - if (empty($parent)) { - $parent = ORM::factory("item", 1); - } - return photo::create($parent, $filename, "$image_name.jpg", $image_name); - } + // No scope is the same as "direct" + $request->url = rest::url("gallery", $album1->relative_url()); + $request->params = new stdClass(); + $this->assert_equal_array( + array("resource" => $album1->as_array(), + "members" => array( + rest::url("gallery", $photo1->relative_url()), + rest::url("gallery", $album2->relative_url()))), + gallery_rest::get($request)); - public function gallery_rest_get_album_test() { - $album = $this->_create_album(); - $child = $this->_create_album($album); - $photo = $this->_create_image($child); - $child->reload(); - $request = (object)array("arguments" => explode("/", $child->relative_url())); + $request->url = rest::url("gallery", $album1->relative_url()); + $request->params->scope = "direct"; + $this->assert_equal_array( + array("resource" => $album1->as_array(), + "members" => array( + rest::url("gallery", $photo1->relative_url()), + rest::url("gallery", $album2->relative_url()))), + gallery_rest::get($request)); - $this->assert_equal( - json_encode(array("status" => "OK", - "resource" => - array("type" => $child->type, - "name" => $child->name, - "path" => $child->relative_url(), - "parent_path" => $album->relative_url(), - "title" => $child->title, - "thumb_url" => $child->thumb_url(), - "thumb_size" => array("height" => $child->thumb_height, - "width" => $child->thumb_width), - "resize_url" => $child->resize_url(), - "resize_size" => array("height" => 0, - "width" => 0), - "url" => $child->file_url(), - "size" => array("height" => $child->height, - "width" => $child->width), - "description" => $child->description, - "slug" => $child->slug, - "children" => array(array( - "type" => "photo", - "has_children" => false, - "path" => $photo->relative_url(), - "thumb_url" => $photo->thumb_url(), - "thumb_dimensions" => array( - "width" => (string)$photo->thumb_width, - "height" => (string)$photo->thumb_height), - "has_thumb" => true, - "title" => $photo->title))))), + $request->url = rest::url("gallery", $album1->relative_url()); + $request->params->scope = "all"; + $this->assert_equal_array( + array("resource" => $album1->as_array(), + "members" => array( + rest::url("gallery", $photo1->relative_url()), + rest::url("gallery", $album2->relative_url()), + rest::url("gallery", $photo2->relative_url()))), gallery_rest::get($request)); } - public function gallery_rest_get_photo_test() { - $child = $this->_create_album(); - $photo = $this->_create_image($child); - $request = (object)array("arguments" => explode("/", $photo->relative_url())); - - $this->assert_equal( - json_encode(array("status" => "OK", - "resource" => - array("type" => $photo->type, - "name" => $photo->name, - "path" => $photo->relative_url(), - "parent_path" => $child->relative_url(), - "title" => $photo->title, - "thumb_url" => $photo->thumb_url(), - "thumb_size" => array("height" => (string)$photo->thumb_height, - "width" => (string)$photo->thumb_width), - "resize_url" => $photo->resize_url(), - "resize_size" => array("height" => $photo->resize_height, - "width" => $photo->resize_width), - "url" => $photo->file_url(), - "size" => array("height" => (string)$photo->height, - "width" => (string)$photo->width), - "description" => $photo->description, - "slug" => $photo->slug))), + public function get_children_like_test() { + $album1 = test::random_album(); + $photo1 = test::random_photo($album1); + $photo2 = test::random_photo_unsaved($album1); + $photo2->name = "foo.jpg"; + $photo2->save(); + $album1->reload(); + + $request->url = rest::url("gallery", $album1->relative_url()); + $request->params->name = "foo"; + $this->assert_equal_array( + array("resource" => $album1->as_array(), + "members" => array( + rest::url("gallery", $photo2->relative_url()))), gallery_rest::get($request)); } - public function gallery_rest_put_album_no_path_test() { - $request = (object)array("description" => "Updated description", - "title" => "Updated Title", - "name" => "new name"); + public function get_children_type_test() { + $album1 = test::random_album(); + $photo1 = test::random_photo($album1); + $album2 = test::random_album($album1); + $album1->reload(); - try { - gallery_rest::put($request); - } catch (Rest_Exception $e) { - $this->assert_equal("Bad request", $e->getMessage()); - $this->assert_equal(400, $e->getCode()); - } catch (Exception $e) { - $this->assert_false(true, $e->__toString()); - } + $request->url = rest::url("gallery", $album1->relative_url()); + $request->params->type = "album"; + $this->assert_equal_array( + array("resource" => $album1->as_array(), + "members" => array( + rest::url("gallery", $album2->relative_url()))), + gallery_rest::get($request)); } - public function gallery_rest_put_album_not_found_test() { - $photo = $this->_create_image(); - $request = (object)array("arguments" => explode("/", $photo->relative_url() . rand()), - "description" => "Updated description", - "title" => "Updated Title", - "name" => "new name"); + public function update_album_test() { + $album1 = test::random_album(); + access::allow(identity::everybody(), "edit", $album1); - try { - gallery_rest::put($request); - } catch (Kohana_404_Exception $k404) { - } catch (Exception $e) { - $this->assert_false(true, $e->__toString()); - } + $request->url = rest::url("gallery", $album1->relative_url()); + $request->params->title = "my new title"; + + $this->assert_equal_array( + array("url" => rest::url("gallery", $album1->relative_url())), + gallery_rest::put($request)); + $this->assert_equal("my new title", $album1->reload()->title); } - public function gallery_rest_put_album_no_edit_permission_test() { - $child = $this->_create_album(); - $this->_create_user(); - $request = (object)array("arguments" => explode("/", $child->relative_url()), - "description" => "Updated description", - "title" => "Updated Title", - "name" => "new name"); + public function update_album_illegal_value_fails_test() { + $album1 = test::random_album(); + access::allow(identity::everybody(), "edit", $album1); + + $request->url = rest::url("gallery", $album1->relative_url()); + $request->params->title = "my new title"; + $request->params->slug = "not url safe"; try { gallery_rest::put($request); - } catch (Kohana_404_Exception $k404) { - } catch (Exception $e) { - $this->assert_false(true, $e->__toString()); + } catch (ORM_Validation_Exception $e) { + $this->assert_equal(array("slug" => "not_url_safe"), $e->validation->errors()); + return; } + $this->assert_true(false, "Shouldn't get here"); } - public function gallery_rest_put_album_rename_conflict_test() { - $child = $this->_create_album(); - $sibling = $this->_create_image(); - $this->_create_user(); - access::allow(identity::registered_users(), "edit", $child); - $request = (object)array("arguments" => explode("/", $child->relative_url()), - "description" => "Updated description", - "title" => "Updated Title", - "name" => $sibling->name); - - $this->assert_equal( - json_encode(array("status" => "VALIDATE_ERROR", - "fields" => array("slug" => "Duplicate Internet address"))), - gallery_rest::put($request)); - } - - public function gallery_rest_put_album_test() { - $child = $this->_create_album(); - $sibling = $this->_create_image(); - $this->_create_user(); - access::allow(identity::registered_users(), "edit", $child); + public function add_album_test() { + $album1 = test::random_album(); + access::allow(identity::everybody(), "edit", $album1); - $new_name = "new_album_name" . rand(); - $request = (object)array("arguments" => explode("/", $child->relative_url()), - "description" => "Updated description", - "title" => "Updated Title", - "name" => $new_name); + $request->url = rest::url("gallery", $album1->relative_url()); + $request->params->type = "album"; + $request->params->name = "my album"; + $request->params->title = "my album"; + $response = gallery_rest::post($request); + $new_album = rest::resolve($response["url"]); - $this->assert_equal(json_encode(array("status" => "OK")), gallery_rest::put($request)); - $child->reload(); - $this->assert_equal("Updated description", $child->description); - $this->assert_equal("Updated Title", $child->title); - $this->assert_equal($new_name, $child->name); + $this->assert_true($new_album->is_album()); + $this->assert_equal($album1->id, $new_album->parent_id); } - public function gallery_rest_put_photo_test() { - $child = $this->_create_album(); - $photo = $this->_create_image($child); - $this->_create_user(); - access::allow(identity::registered_users(), "edit", $child); + public function add_album_illegal_value_fails_test() { + $album1 = test::random_album(); + access::allow(identity::everybody(), "edit", $album1); - $request = (object)array("arguments" => explode("/", $photo->relative_url()), - "description" => "Updated description", - "title" => "Updated Title", - "name" => "new name"); + $request->url = rest::url("gallery", $album1->relative_url()); + $request->params->type = "album"; + $request->params->name = "my album"; + $request->params->title = "my album"; + $request->params->slug = "not url safe"; - $this->assert_equal(json_encode(array("status" => "OK")), gallery_rest::put($request)); - $photo->reload(); - $this->assert_equal("Updated description", $photo->description); - $this->assert_equal("Updated Title", $photo->title); - $this->assert_equal("new name", $photo->name); + try { + gallery_rest::post($request); + } catch (ORM_Validation_Exception $e) { + $this->assert_equal(array("slug" => "not_url_safe"), $e->validation->errors()); + return; + } + $this->assert_true(false, "Shouldn't get here"); } - public function gallery_rest_delete_album_test() { - $album = $this->_create_album(); - $child = $this->_create_album($album); - $this->_create_user(); - access::allow(identity::registered_users(), "edit", $album); - $request = (object)array("arguments" => explode("/", $child->relative_url())); + public function add_photo_test() { + $album1 = test::random_album(); + access::allow(identity::everybody(), "edit", $album1); + + $request->url = rest::url("gallery", $album1->relative_url()); + $request->params->type = "photo"; + $request->params->name = "my photo.jpg"; + $request->file = MODPATH . "gallery/tests/test.jpg"; + $response = gallery_rest::post($request); + $new_photo = rest::resolve($response["url"]); - $this->assert_equal(json_encode(array("status" => "OK", - "resource" => array( - "parent_path" => $album->relative_url()))), - gallery_rest::delete($request)); - $child->reload(); - $this->assert_false($child->loaded()); + $this->assert_true($new_photo->is_photo()); + $this->assert_equal($album1->id, $new_photo->parent_id); } - public function gallery_rest_delete_photo_test() { - $album = $this->_create_album(); - $photo = $this->_create_image($album); - $this->_create_user(); - access::allow(identity::registered_users(), "edit", $album); + public function delete_album_test() { + $album1 = test::random_album(); + access::allow(identity::everybody(), "edit", $album1); - $request = (object)array("arguments" => explode("/", $photo->relative_url())); + $request->url = rest::url("gallery", $album1->relative_url()); + gallery_rest::delete($request); - $this->assert_equal(json_encode(array("status" => "OK", - "resource" => array( - "parent_path" => $album->relative_url()))), - gallery_rest::delete($request)); - $photo->reload(); - $this->assert_false($photo->loaded()); + $album1->reload(); + $this->assert_false($album1->loaded()); } - public function gallery_rest_post_album_test() { - $album = $this->_create_album(); - $this->_create_user(); - access::allow(identity::registered_users(), "edit", $album); + public function delete_album_fails_without_permission_test() { + $album1 = test::random_album(); - $new_path = $album->relative_url() . "/new%20child"; - $request = (object)array("arguments" => explode("/", $new_path)); - - $this->assert_equal(json_encode(array("status" => "OK", "path" => $new_path)), - gallery_rest::post($request)); - $album = ORM::factory("item") - ->where("relative_url_cache", "=", $new_path) - ->find(); - $this->assert_true($album->loaded()); - $this->assert_equal("new child", $album->slug); + $request->url = rest::url("gallery", $album1->relative_url()); + try { + gallery_rest::delete($request); + } catch (Exception $e) { + $this->assert_equal("@todo FORBIDDEN", $e->getMessage()); + return; + } + $this->assert_true(false, "Shouldn't get here"); } } -- cgit v1.2.3 From c590fed132b07647c38b1d5b4a93ffe30b6ac4bf Mon Sep 17 00:00:00 2001 From: Bharat Mediratta Date: Tue, 19 Jan 2010 01:33:57 -0800 Subject: Change rest::url() to take a module name and a resource. The module does the rest. This function is symmetrical to rest::resolve. --- modules/gallery/helpers/gallery_rest.php | 28 ++++--------- modules/gallery/tests/Gallery_Rest_Helper_Test.php | 46 +++++++++++----------- modules/rest/helpers/rest.php | 12 ++++-- modules/tag/helpers/tag_rest.php | 15 ++++--- modules/tag/helpers/tags_rest.php | 6 +-- 5 files changed, 50 insertions(+), 57 deletions(-) (limited to 'modules/gallery/tests/Gallery_Rest_Helper_Test.php') diff --git a/modules/gallery/helpers/gallery_rest.php b/modules/gallery/helpers/gallery_rest.php index 827da122..5fd73a2e 100644 --- a/modules/gallery/helpers/gallery_rest.php +++ b/modules/gallery/helpers/gallery_rest.php @@ -17,25 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - -// @todo Add logging - -// Validation questions -// -// We need to be able to properly validate anything we want to enter here. But all of our -// validation currently happens at the controller / form level, and we're not using the same -// controllers or forms. -// -// Possible solutions: -// 1) Move validation into the model and use it both here and in the regular controllers. But -// if we do that, how do we translate validation failures into a user-consumable output which -// we need so that we can return proper error responses to form submissions? -// -// 2) Create some kind of validation helper that can validate every field. Wait, isn't this -// just like #1 except in a helper instead of in the model? - class gallery_rest_Core { - /** * For items that are collections, you can specify the following additional query parameters to * query the collection. You can specify them in any combination. @@ -90,7 +72,7 @@ class gallery_rest_Core { $members = array(); foreach ($orm->find_all() as $child) { - $members[] = url::abs_site("rest/gallery/" . $child->relative_url()); + $members[] = rest::url("gallery", $child); } return array("resource" => $item->as_array(), "members" => $members); @@ -114,7 +96,7 @@ class gallery_rest_Core { } $item->save(); - return array("url" => url::abs_site("/rest/gallery/" . $item->relative_url())); + return array("url" => rest::url("gallery", $item)); } static function post($request) { @@ -150,7 +132,7 @@ class gallery_rest_Core { throw new Rest_Exception("Invalid type: $params->type", 400); } - return array("url" => url::abs_site("/rest/gallery/" . $item->relative_url())); + return array("url" => rest::url("gallery", $item)); } static function delete($request) { @@ -163,4 +145,8 @@ class gallery_rest_Core { static function resolve($path) { return url::get_item_from_uri($path); } + + static function url($item) { + return url::abs_site("rest/gallery/" . $item->relative_url()); + } } diff --git a/modules/gallery/tests/Gallery_Rest_Helper_Test.php b/modules/gallery/tests/Gallery_Rest_Helper_Test.php index 35fd0daf..dcd9a9db 100644 --- a/modules/gallery/tests/Gallery_Rest_Helper_Test.php +++ b/modules/gallery/tests/Gallery_Rest_Helper_Test.php @@ -28,7 +28,7 @@ class Gallery_Rest_Helper_Test extends Gallery_Unit_Test_Case { public function resolve_test() { $album = test::random_album(); - $resolved = rest::resolve(rest::url("gallery", $album->relative_url())); + $resolved = rest::resolve(rest::url("gallery", $album)); $this->assert_equal($album->id, $resolved->id); } @@ -40,32 +40,32 @@ class Gallery_Rest_Helper_Test extends Gallery_Unit_Test_Case { $album1->reload(); // No scope is the same as "direct" - $request->url = rest::url("gallery", $album1->relative_url()); + $request->url = rest::url("gallery", $album1); $request->params = new stdClass(); $this->assert_equal_array( array("resource" => $album1->as_array(), "members" => array( - rest::url("gallery", $photo1->relative_url()), - rest::url("gallery", $album2->relative_url()))), + rest::url("gallery", $photo1), + rest::url("gallery", $album2))), gallery_rest::get($request)); - $request->url = rest::url("gallery", $album1->relative_url()); + $request->url = rest::url("gallery", $album1); $request->params->scope = "direct"; $this->assert_equal_array( array("resource" => $album1->as_array(), "members" => array( - rest::url("gallery", $photo1->relative_url()), - rest::url("gallery", $album2->relative_url()))), + rest::url("gallery", $photo1), + rest::url("gallery", $album2))), gallery_rest::get($request)); - $request->url = rest::url("gallery", $album1->relative_url()); + $request->url = rest::url("gallery", $album1); $request->params->scope = "all"; $this->assert_equal_array( array("resource" => $album1->as_array(), "members" => array( - rest::url("gallery", $photo1->relative_url()), - rest::url("gallery", $album2->relative_url()), - rest::url("gallery", $photo2->relative_url()))), + rest::url("gallery", $photo1), + rest::url("gallery", $album2), + rest::url("gallery", $photo2))), gallery_rest::get($request)); } @@ -77,12 +77,12 @@ class Gallery_Rest_Helper_Test extends Gallery_Unit_Test_Case { $photo2->save(); $album1->reload(); - $request->url = rest::url("gallery", $album1->relative_url()); + $request->url = rest::url("gallery", $album1); $request->params->name = "foo"; $this->assert_equal_array( array("resource" => $album1->as_array(), "members" => array( - rest::url("gallery", $photo2->relative_url()))), + rest::url("gallery", $photo2))), gallery_rest::get($request)); } @@ -92,12 +92,12 @@ class Gallery_Rest_Helper_Test extends Gallery_Unit_Test_Case { $album2 = test::random_album($album1); $album1->reload(); - $request->url = rest::url("gallery", $album1->relative_url()); + $request->url = rest::url("gallery", $album1); $request->params->type = "album"; $this->assert_equal_array( array("resource" => $album1->as_array(), "members" => array( - rest::url("gallery", $album2->relative_url()))), + rest::url("gallery", $album2))), gallery_rest::get($request)); } @@ -105,11 +105,11 @@ class Gallery_Rest_Helper_Test extends Gallery_Unit_Test_Case { $album1 = test::random_album(); access::allow(identity::everybody(), "edit", $album1); - $request->url = rest::url("gallery", $album1->relative_url()); + $request->url = rest::url("gallery", $album1); $request->params->title = "my new title"; $this->assert_equal_array( - array("url" => rest::url("gallery", $album1->relative_url())), + array("url" => rest::url("gallery", $album1)), gallery_rest::put($request)); $this->assert_equal("my new title", $album1->reload()->title); } @@ -118,7 +118,7 @@ class Gallery_Rest_Helper_Test extends Gallery_Unit_Test_Case { $album1 = test::random_album(); access::allow(identity::everybody(), "edit", $album1); - $request->url = rest::url("gallery", $album1->relative_url()); + $request->url = rest::url("gallery", $album1); $request->params->title = "my new title"; $request->params->slug = "not url safe"; @@ -135,7 +135,7 @@ class Gallery_Rest_Helper_Test extends Gallery_Unit_Test_Case { $album1 = test::random_album(); access::allow(identity::everybody(), "edit", $album1); - $request->url = rest::url("gallery", $album1->relative_url()); + $request->url = rest::url("gallery", $album1); $request->params->type = "album"; $request->params->name = "my album"; $request->params->title = "my album"; @@ -150,7 +150,7 @@ class Gallery_Rest_Helper_Test extends Gallery_Unit_Test_Case { $album1 = test::random_album(); access::allow(identity::everybody(), "edit", $album1); - $request->url = rest::url("gallery", $album1->relative_url()); + $request->url = rest::url("gallery", $album1); $request->params->type = "album"; $request->params->name = "my album"; $request->params->title = "my album"; @@ -170,7 +170,7 @@ class Gallery_Rest_Helper_Test extends Gallery_Unit_Test_Case { $album1 = test::random_album(); access::allow(identity::everybody(), "edit", $album1); - $request->url = rest::url("gallery", $album1->relative_url()); + $request->url = rest::url("gallery", $album1); $request->params->type = "photo"; $request->params->name = "my photo.jpg"; $request->file = MODPATH . "gallery/tests/test.jpg"; @@ -185,7 +185,7 @@ class Gallery_Rest_Helper_Test extends Gallery_Unit_Test_Case { $album1 = test::random_album(); access::allow(identity::everybody(), "edit", $album1); - $request->url = rest::url("gallery", $album1->relative_url()); + $request->url = rest::url("gallery", $album1); gallery_rest::delete($request); $album1->reload(); @@ -195,7 +195,7 @@ class Gallery_Rest_Helper_Test extends Gallery_Unit_Test_Case { public function delete_album_fails_without_permission_test() { $album1 = test::random_album(); - $request->url = rest::url("gallery", $album1->relative_url()); + $request->url = rest::url("gallery", $album1); try { gallery_rest::delete($request); } catch (Exception $e) { diff --git a/modules/rest/helpers/rest.php b/modules/rest/helpers/rest.php index 423765bb..93ad2bd3 100644 --- a/modules/rest/helpers/rest.php +++ b/modules/rest/helpers/rest.php @@ -75,10 +75,14 @@ class rest_Core { /** * Return an absolute url used for REST resource location. * @param string module name (eg, "gallery", "tags") - * @param string relative path (eg "Family/Weddings.jpg") - * @return string complete url + * @param object resource */ - static function url($module, $path) { - return url::abs_site("rest/$module/$path"); + static function url($module, $resource) { + $class = "{$module}_rest"; + if (!method_exists($class, "url")) { + throw new Exception("@todo MISSING REST CLASS: $class"); + } + + return call_user_func(array($class, "url"), $resource); } } diff --git a/modules/tag/helpers/tag_rest.php b/modules/tag/helpers/tag_rest.php index 0aac5291..a4eaee90 100644 --- a/modules/tag/helpers/tag_rest.php +++ b/modules/tag/helpers/tag_rest.php @@ -22,10 +22,10 @@ class tag_rest_Core { $tag = rest::resolve($request->url); $items = array(); foreach ($tag->items() as $item) { - $items[] = url::abs_site("rest/gallery/" . $item->relative_url()); + $items[] = rest::url("gallery", $item); } - return rest::reply(array("resource" => $tag->as_array(), "members" => $items)); + return array("resource" => $tag->as_array(), "members" => $items); } static function post($request) { @@ -38,7 +38,7 @@ class tag_rest_Core { access::required("edit", $item); tag::add($item, $tag->name); - return rest::reply(array("url" => url::abs_site("rest/tag/" . rawurlencode($tag->name)))); + return array("url" => rest::url("tag", $tag)); } static function put($request) { @@ -61,7 +61,7 @@ class tag_rest_Core { } $tag->save(); - return rest::reply(array("url" => url::abs_site("rest/tag/" . rawurlencode($tag->name)))); + return array("url" => rest::url("tag", $tag)); } static function delete($request) { @@ -70,7 +70,6 @@ class tag_rest_Core { if (empty($request->params->url)) { // Delete the tag $tag->delete(); - return rest::reply(); } else { // Remove an item from the tag $item = rest::resolve($request->params->url); @@ -78,7 +77,7 @@ class tag_rest_Core { $tag->save(); tag::compact(); - return rest::reply(array("url" => url::abs_site("rest/tag/" . rawurlencode($tag->name)))); + return array("url" => rest::url("tag", $tag)); } } @@ -90,4 +89,8 @@ class tag_rest_Core { return $tag; } + + static function url($item) { + return url::abs_site("rest/tag/" . rawurlencode($tag->name)); + } } diff --git a/modules/tag/helpers/tags_rest.php b/modules/tag/helpers/tags_rest.php index 7f0ed66a..dd23e97f 100644 --- a/modules/tag/helpers/tags_rest.php +++ b/modules/tag/helpers/tags_rest.php @@ -21,9 +21,9 @@ class tags_rest_Core { static function get($request) { $tags = array(); foreach (ORM::factory("tag")->find_all() as $tag) { - $tags[$tag->name] = url::abs_site("rest/tags/" . rawurlencode($tag->name)); + $tags[$tag->name] = rest::url("tags", $tag); } - return rest::reply(array("members" => $tags)); + return array("members" => $tags); } static function post($request) { @@ -43,6 +43,6 @@ class tags_rest_Core { $tag->save(); } - return rest::reply(array("url" => url::abs_site("rest/tag/" . rawurlencode($tag->name)))); + return array("url" => rest::url("tag", $tag)); } } -- cgit v1.2.3 From 709d797408b2821fd8ec97c83fa982519a028bf8 Mon Sep 17 00:00:00 2001 From: Bharat Mediratta Date: Thu, 21 Jan 2010 20:10:45 -0800 Subject: Make sure that we actually don't have permissions, to avoid contamination w/ other tests. --- modules/gallery/tests/Gallery_Rest_Helper_Test.php | 1 + 1 file changed, 1 insertion(+) (limited to 'modules/gallery/tests/Gallery_Rest_Helper_Test.php') diff --git a/modules/gallery/tests/Gallery_Rest_Helper_Test.php b/modules/gallery/tests/Gallery_Rest_Helper_Test.php index dcd9a9db..7586e010 100644 --- a/modules/gallery/tests/Gallery_Rest_Helper_Test.php +++ b/modules/gallery/tests/Gallery_Rest_Helper_Test.php @@ -194,6 +194,7 @@ class Gallery_Rest_Helper_Test extends Gallery_Unit_Test_Case { public function delete_album_fails_without_permission_test() { $album1 = test::random_album(); + access::deny(identity::everybody(), "edit", $album1); $request->url = rest::url("gallery", $album1); try { -- cgit v1.2.3 From 25dc3e1a7bc7736363ca642a6e67ac1644266f68 Mon Sep 17 00:00:00 2001 From: Bharat Mediratta Date: Fri, 22 Jan 2010 01:11:03 -0800 Subject: Moved to Item_Rest_Helper_Test.php --- modules/gallery/tests/Gallery_Rest_Helper_Test.php | 208 --------------------- 1 file changed, 208 deletions(-) delete mode 100644 modules/gallery/tests/Gallery_Rest_Helper_Test.php (limited to 'modules/gallery/tests/Gallery_Rest_Helper_Test.php') diff --git a/modules/gallery/tests/Gallery_Rest_Helper_Test.php b/modules/gallery/tests/Gallery_Rest_Helper_Test.php deleted file mode 100644 index 7586e010..00000000 --- a/modules/gallery/tests/Gallery_Rest_Helper_Test.php +++ /dev/null @@ -1,208 +0,0 @@ -_save = array($_GET, $_POST, $_SERVER, $_FILES); - } - - public function teardown() { - list($_GET, $_POST, $_SERVER, $_FILES) = $this->_save; - } - - public function resolve_test() { - $album = test::random_album(); - $resolved = rest::resolve(rest::url("gallery", $album)); - $this->assert_equal($album->id, $resolved->id); - } - - public function get_scope_test() { - $album1 = test::random_album(); - $photo1 = test::random_photo($album1); - $album2 = test::random_album($album1); - $photo2 = test::random_photo($album2); - $album1->reload(); - - // No scope is the same as "direct" - $request->url = rest::url("gallery", $album1); - $request->params = new stdClass(); - $this->assert_equal_array( - array("resource" => $album1->as_array(), - "members" => array( - rest::url("gallery", $photo1), - rest::url("gallery", $album2))), - gallery_rest::get($request)); - - $request->url = rest::url("gallery", $album1); - $request->params->scope = "direct"; - $this->assert_equal_array( - array("resource" => $album1->as_array(), - "members" => array( - rest::url("gallery", $photo1), - rest::url("gallery", $album2))), - gallery_rest::get($request)); - - $request->url = rest::url("gallery", $album1); - $request->params->scope = "all"; - $this->assert_equal_array( - array("resource" => $album1->as_array(), - "members" => array( - rest::url("gallery", $photo1), - rest::url("gallery", $album2), - rest::url("gallery", $photo2))), - gallery_rest::get($request)); - } - - public function get_children_like_test() { - $album1 = test::random_album(); - $photo1 = test::random_photo($album1); - $photo2 = test::random_photo_unsaved($album1); - $photo2->name = "foo.jpg"; - $photo2->save(); - $album1->reload(); - - $request->url = rest::url("gallery", $album1); - $request->params->name = "foo"; - $this->assert_equal_array( - array("resource" => $album1->as_array(), - "members" => array( - rest::url("gallery", $photo2))), - gallery_rest::get($request)); - } - - public function get_children_type_test() { - $album1 = test::random_album(); - $photo1 = test::random_photo($album1); - $album2 = test::random_album($album1); - $album1->reload(); - - $request->url = rest::url("gallery", $album1); - $request->params->type = "album"; - $this->assert_equal_array( - array("resource" => $album1->as_array(), - "members" => array( - rest::url("gallery", $album2))), - gallery_rest::get($request)); - } - - public function update_album_test() { - $album1 = test::random_album(); - access::allow(identity::everybody(), "edit", $album1); - - $request->url = rest::url("gallery", $album1); - $request->params->title = "my new title"; - - $this->assert_equal_array( - array("url" => rest::url("gallery", $album1)), - gallery_rest::put($request)); - $this->assert_equal("my new title", $album1->reload()->title); - } - - public function update_album_illegal_value_fails_test() { - $album1 = test::random_album(); - access::allow(identity::everybody(), "edit", $album1); - - $request->url = rest::url("gallery", $album1); - $request->params->title = "my new title"; - $request->params->slug = "not url safe"; - - try { - gallery_rest::put($request); - } catch (ORM_Validation_Exception $e) { - $this->assert_equal(array("slug" => "not_url_safe"), $e->validation->errors()); - return; - } - $this->assert_true(false, "Shouldn't get here"); - } - - public function add_album_test() { - $album1 = test::random_album(); - access::allow(identity::everybody(), "edit", $album1); - - $request->url = rest::url("gallery", $album1); - $request->params->type = "album"; - $request->params->name = "my album"; - $request->params->title = "my album"; - $response = gallery_rest::post($request); - $new_album = rest::resolve($response["url"]); - - $this->assert_true($new_album->is_album()); - $this->assert_equal($album1->id, $new_album->parent_id); - } - - public function add_album_illegal_value_fails_test() { - $album1 = test::random_album(); - access::allow(identity::everybody(), "edit", $album1); - - $request->url = rest::url("gallery", $album1); - $request->params->type = "album"; - $request->params->name = "my album"; - $request->params->title = "my album"; - $request->params->slug = "not url safe"; - - try { - gallery_rest::post($request); - } catch (ORM_Validation_Exception $e) { - $this->assert_equal(array("slug" => "not_url_safe"), $e->validation->errors()); - return; - } - $this->assert_true(false, "Shouldn't get here"); - } - - - public function add_photo_test() { - $album1 = test::random_album(); - access::allow(identity::everybody(), "edit", $album1); - - $request->url = rest::url("gallery", $album1); - $request->params->type = "photo"; - $request->params->name = "my photo.jpg"; - $request->file = MODPATH . "gallery/tests/test.jpg"; - $response = gallery_rest::post($request); - $new_photo = rest::resolve($response["url"]); - - $this->assert_true($new_photo->is_photo()); - $this->assert_equal($album1->id, $new_photo->parent_id); - } - - public function delete_album_test() { - $album1 = test::random_album(); - access::allow(identity::everybody(), "edit", $album1); - - $request->url = rest::url("gallery", $album1); - gallery_rest::delete($request); - - $album1->reload(); - $this->assert_false($album1->loaded()); - } - - public function delete_album_fails_without_permission_test() { - $album1 = test::random_album(); - access::deny(identity::everybody(), "edit", $album1); - - $request->url = rest::url("gallery", $album1); - try { - gallery_rest::delete($request); - } catch (Exception $e) { - $this->assert_equal("@todo FORBIDDEN", $e->getMessage()); - return; - } - $this->assert_true(false, "Shouldn't get here"); - } -} -- cgit v1.2.3