Skip to content
This repository has been archived by the owner on Feb 22, 2018. It is now read-only.

Commit

Permalink
Add tests for the new pub.dartlang.org API.
Browse files Browse the repository at this point in the history
  • Loading branch information
nex3 committed May 29, 2013
1 parent dbe9dad commit d18b6d1
Show file tree
Hide file tree
Showing 9 changed files with 620 additions and 302 deletions.
1 change: 1 addition & 0 deletions test/test_handlers/api/__init__.py
@@ -0,0 +1 @@

149 changes: 149 additions & 0 deletions test/test_handlers/api/test_package_uploaders.py
@@ -0,0 +1,149 @@
# Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
# for details. All rights reserved. Use of this source code is governed by a
# BSD-style license that can be found in the LICENSE file.

from models.package import Package
from testcase import TestCase

class PackageUploadersTest(TestCase):
def setUp(self):
super(PackageUploadersTest, self).setUp()
self.package = Package.new(
name='test-package',
uploaders=[self.normal_user('uploader1'),
self.normal_user('uploader2')])
self.package.put()

def test_create_requires_login(self):
response = self.testapp.post('/api/packages/test-package/uploaders',
{'email': self.normal_user().email()},
status=401)
self.assert_json_error(response)

def test_create_requires_uploader(self):
self.be_normal_oauth_user()
response = self.testapp.post('/api/packages/test-package/uploaders',
{'email': self.normal_user().email()},
status=403)
self.assert_json_error(response)

def test_create_requires_new_uploader(self):
self.be_normal_oauth_user('uploader1')
response = self.testapp.post(
'/api/packages/test-package/uploaders',
{'email': self.normal_user('uploader2').email()},
status=400)
self.assert_json_error(response)

def test_uploader_creates_new_uploader(self):
self.be_normal_oauth_user('uploader1')
response = self.testapp.post('/api/packages/test-package/uploaders',
{'email': self.normal_user().email()})
self.assert_json_success(response)

package = Package.get_by_key_name('test-package')
self.assertEquals(package.uploaders, [
self.normal_user('uploader1'),
self.normal_user('uploader2'),
self.normal_user()
])

def test_create_is_case_insensitive(self):
self.be_normal_oauth_user('uploader1')
response = self.testapp.post(
'/api/packages/test-package/uploaders',
{'email': self.normal_user('NAme').email()})
self.assert_json_success(response)

response = self.testapp.post(
'/api/packages/test-package/uploaders',
{'email': self.normal_user('naME').email()},
status=400)
self.assert_json_error(response)

package = Package.get_by_key_name('test-package')
self.assertEquals(package.uploaders, [
self.normal_user('uploader1'),
self.normal_user('uploader2'),
self.normal_user('NAme')
])

def test_admin_creates_new_uploader(self):
self.be_admin_oauth_user()
response = self.testapp.post('/api/packages/test-package/uploaders',
{'email': self.normal_user().email()})
self.assert_json_success(response)

package = Package.get_by_key_name('test-package')
self.assertEquals(package.uploaders, [
self.normal_user('uploader1'),
self.normal_user('uploader2'),
self.normal_user()
])

def test_delete_requires_login(self):
response = self.testapp.delete(
'/api/packages/test-package/uploaders/' +
self.normal_user('uploader1').email(),
status=401)
self.assert_json_error(response)

def test_delete_requires_uploader(self):
self.be_normal_oauth_user()
response = self.testapp.delete(
'/api/packages/test-package/uploaders/' +
self.normal_user('uploader1').email(),
status=403)
self.assert_json_error(response)

def test_cant_delete_non_uploader(self):
self.be_normal_oauth_user('uploader1')
response = self.testapp.delete(
'/api/packages/test-package/uploaders/' +
self.normal_user('non-uploader').email(),
status=400)
self.assert_json_error(response)

def test_cant_delete_only_uploader(self):
self.package.uploaders = [self.normal_user('uploader1')]
self.package.put()

self.be_normal_oauth_user('uploader1')
response = self.testapp.delete(
'/api/packages/test-package/uploaders/' +
self.normal_user('uploader1').email(),
status=400)
self.assert_json_error(response)

This comment has been minimized.

Copy link
@munificent

munificent May 30, 2013

Contributor

Add a test for deleting an uploader when all uploaders have the same email.

This comment has been minimized.

Copy link
@nex3

nex3 May 30, 2013

Author Contributor

See previous response; it shouldn't be possible for multiple uploaders to have the same email.


def test_uploader_deletes_uploader(self):
self.be_normal_oauth_user('uploader1')
response = self.testapp.delete(
'/api/packages/test-package/uploaders/' +
self.normal_user('uploader1').email())
self.assert_json_success(response)

package = Package.get_by_key_name('test-package')
self.assertEquals(
package.uploaders, [self.normal_user('uploader2')])

def test_delete_is_case_insensitive(self):
self.be_normal_oauth_user('uploader1')
response = self.testapp.delete(
'/api/packages/test-package/uploaders/' +
self.normal_user('UpLoAdEr1').email())
self.assert_json_success(response)

package = Package.get_by_key_name('test-package')
self.assertEquals(
package.uploaders, [self.normal_user('uploader2')])

def test_admin_deletes_uploader(self):
self.be_admin_oauth_user()
response = self.testapp.delete(
'/api/packages/test-package/uploaders/' +
self.normal_user('uploader1').email())
self.assert_json_success(response)

package = Package.get_by_key_name('test-package')
self.assertEquals(
package.uploaders, [self.normal_user('uploader2')])

0 comments on commit d18b6d1

Please sign in to comment.