from galaxy.exceptions import error_codes from base import api from requests import delete from operator import itemgetter class BasePageApiTestCase( api.ApiTestCase ): def _create_valid_page_with_slug( self, slug ): page_request = self._test_page_payload( slug=slug ) page_response = self._post( "pages", page_request ) self._assert_status_code_is( page_response, 200 ) return page_response.json() def _create_valid_page_as( self, other_email, slug ): run_as_user = self._setup_user( other_email ) page_request = self._test_page_payload( slug=slug ) page_request[ "run_as" ] = run_as_user[ "id" ] page_response = self._post( "pages", page_request, admin=True ) self._assert_status_code_is( page_response, 200 ) return page_response.json() def _test_page_payload( self, **kwds ): request = dict( slug="mypage", title="MY PAGE", content="
Page!
", ) request.update( **kwds ) return request class PageApiTestCase( BasePageApiTestCase ): def test_create( self ): response_json = self._create_valid_page_with_slug( "mypage" ) self._assert_has_keys( response_json, "slug", "title", "id" ) def test_index( self ): create_response_json = self._create_valid_page_with_slug( "indexpage" ) assert self._users_index_has_page_with_id( create_response_json[ "id" ] ) def test_index_doesnt_show_unavailable_pages( self ): create_response_json = self._create_valid_page_as( "others_page_index@bx.psu.edu", "otherspageindex" ) assert not self._users_index_has_page_with_id( create_response_json[ "id" ] ) def test_cannot_create_pages_with_same_slug( self ): page_request = self._test_page_payload( slug="mypage1" ) page_response_1 = self._post( "pages", page_request ) self._assert_status_code_is( page_response_1, 200 ) page_response_2 = self._post( "pages", page_request ) self._assert_status_code_is( page_response_2, 400 ) self._assert_error_code_is( page_response_2, error_codes.USER_SLUG_DUPLICATE ) def test_page_requires_name( self ): page_request = self._test_page_payload() del page_request[ 'title' ] page_response = self._post( "pages", page_request ) self._assert_status_code_is( page_response, 400 ) self._assert_error_code_is( page_response, error_codes.USER_OBJECT_ATTRIBUTE_MISSING ) def test_page_requires_slug( self ): page_request = self._test_page_payload() del page_request[ 'slug' ] page_response = self._post( "pages", page_request ) self._assert_status_code_is( page_response, 400 ) def test_delete( self ): response_json = self._create_valid_page_with_slug( "testdelete" ) delete_response = delete( self._api_url( "pages/%s" % response_json[ 'id' ], use_key=True ) ) self._assert_status_code_is( delete_response, 200 ) def test_404_on_delete_unknown_page( self ): delete_response = delete( self._api_url( "pages/%s" % self._random_key(), use_key=True ) ) self._assert_status_code_is( delete_response, 404 ) self._assert_error_code_is( delete_response, error_codes.USER_OBJECT_NOT_FOUND ) def test_403_on_delete_unowned_page( self ): page_response = self._create_valid_page_as( "others_page@bx.psu.edu", "otherspage" ) delete_response = delete( self._api_url( "pages/%s" % page_response[ "id" ], use_key=True ) ) self._assert_status_code_is( delete_response, 403 ) self._assert_error_code_is( delete_response, error_codes.USER_DOES_NOT_OWN_ITEM ) def test_show( self ): response_json = self._create_valid_page_with_slug( "pagetoshow" ) show_response = self._get( "pages/%s" % response_json['id'] ) self._assert_status_code_is( show_response, 200 ) show_json = show_response.json() self._assert_has_keys( show_json, "slug", "title", "id" ) self.assertEquals( show_json["slug"], "pagetoshow" ) self.assertEquals( show_json["title"], "MY PAGE" ) self.assertEquals( show_json["content"], "Page!
" ) def test_403_on_unowner_show( self ): response_json = self._create_valid_page_as( "others_page_show@bx.psu.edu", "otherspageshow" ) show_response = self._get( "pages/%s" % response_json['id'] ) self._assert_status_code_is( show_response, 403 ) self._assert_error_code_is( show_response, error_codes.USER_DOES_NOT_OWN_ITEM ) def _users_index_has_page_with_id( self, id ): index_response = self._get( "pages" ) self._assert_status_code_is( index_response, 200 ) pages = index_response.json() return id in map( itemgetter( "id" ), pages )