From 924dda296f1ea832f99c7a3fccd923e6659c001b Mon Sep 17 00:00:00 2001 From: Joseph Schorr Date: Sun, 8 Jul 2018 18:33:21 +0300 Subject: [PATCH] Fully migrate API security tests into the pytest test suite Also adds an additional test that ensures that at least one security test exists for every (api endpoint, http method) pair. --- data/test/test_userfiles.py | 11 +- data/userfiles.py | 16 +- endpoints/api/test/test_security.py | 1338 +++++++- endpoints/test/shared.py | 2 +- test/fixtures.py | 9 + test/test_api_security.py | 4456 --------------------------- test/testconfig.py | 1 + 7 files changed, 1340 insertions(+), 4493 deletions(-) delete mode 100644 test/test_api_security.py diff --git a/data/test/test_userfiles.py b/data/test/test_userfiles.py index 8aabf8d06..671011e58 100644 --- a/data/test/test_userfiles.py +++ b/data/test/test_userfiles.py @@ -38,16 +38,17 @@ def test_lookup_userfile(app, client): storage_mock.stream_read_file = _stream_read_file app.config['USERFILES_PATH'] = 'foo' - Userfiles(app, distributed_storage=storage_mock) + Userfiles(app, distributed_storage=storage_mock, path='mockuserfiles', + handler_name='mockuserfiles') - rv = client.open('/userfiles/' + uuid, method='GET') + rv = client.open('/mockuserfiles/' + uuid, method='GET') assert rv.status_code == 200 - rv = client.open('/userfiles/' + upper_uuid, method='GET') + rv = client.open('/mockuserfiles/' + upper_uuid, method='GET') assert rv.status_code == 200 - rv = client.open('/userfiles/' + bad_uuid, method='GET') + rv = client.open('/mockuserfiles/' + bad_uuid, method='GET') assert rv.status_code == 404 - rv = client.open('/userfiles/foo/bar/baz', method='GET') + rv = client.open('/mockuserfiles/foo/bar/baz', method='GET') assert rv.status_code == 404 diff --git a/data/userfiles.py b/data/userfiles.py index 9d2ea8a2b..1803c94ef 100644 --- a/data/userfiles.py +++ b/data/userfiles.py @@ -128,23 +128,23 @@ class DelegateUserfiles(object): class Userfiles(object): - def __init__(self, app=None, distributed_storage=None): + def __init__(self, app=None, distributed_storage=None, path='userfiles', + handler_name='userfiles_handler'): self.app = app if app is not None: - self.state = self.init_app(app, distributed_storage) + self.state = self.init_app(app, distributed_storage, path=path, handler_name=handler_name) else: self.state = None - def init_app(self, app, distributed_storage): + def init_app(self, app, distributed_storage, path='userfiles', handler_name='userfiles_handler'): location = app.config.get('USERFILES_LOCATION') - path = app.config.get('USERFILES_PATH', None) + userfiles_path = app.config.get('USERFILES_PATH', None) - if path is not None: - handler_name = 'userfiles_handlers' - userfiles = DelegateUserfiles(app, distributed_storage, location, path, + if userfiles_path is not None: + userfiles = DelegateUserfiles(app, distributed_storage, location, userfiles_path, handler_name=handler_name) - app.add_url_rule('/userfiles/', + app.add_url_rule('/%s/' % path, view_func=UserfilesHandlers.as_view(handler_name, distributed_storage=distributed_storage, location=location, diff --git a/endpoints/api/test/test_security.py b/endpoints/api/test/test_security.py index e644063a1..908395a0c 100644 --- a/endpoints/api/test/test_security.py +++ b/endpoints/api/test/test_security.py @@ -4,21 +4,38 @@ import pytest from flask_principal import AnonymousIdentity from endpoints.api import api -from endpoints.api.organization import OrganizationCollaboratorList -from endpoints.api.repositorynotification import RepositoryNotification -from endpoints.api.permission import RepositoryUserTransitivePermission -from endpoints.api.team import OrganizationTeamSyncing from endpoints.api.test.shared import conduct_api_call -from endpoints.api.repository import RepositoryTrust -from endpoints.api.signing import RepositorySignatures -from endpoints.api.search import ConductRepositorySearch -from endpoints.api.superuser import SuperUserRepositoryBuildLogs, SuperUserRepositoryBuildResource -from endpoints.api.superuser import SuperUserRepositoryBuildStatus -from endpoints.api.appspecifictokens import AppTokens, AppToken -from endpoints.api.manifest import RepositoryManifest -from endpoints.api.trigger import BuildTrigger from endpoints.test.shared import client_with_identity, toggle_feature +from endpoints.api.appspecifictokens import * +from endpoints.api.billing import * +from endpoints.api.build import * +from endpoints.api.discovery import * +from endpoints.api.globalmessages import * +from endpoints.api.image import * +from endpoints.api.logs import * +from endpoints.api.manifest import * +from endpoints.api.organization import * +from endpoints.api.permission import * +from endpoints.api.prototype import * +from endpoints.api.repoemail import * +from endpoints.api.repository import * +from endpoints.api.repositorynotification import * +from endpoints.api.repotoken import * +from endpoints.api.robot import * +from endpoints.api.search import * +from endpoints.api.secscan import * +from endpoints.api.signing import * +from endpoints.api.subscribe import * +from endpoints.api.suconfig import * +from endpoints.api.superuser import * +from endpoints.api.tag import * +from endpoints.api.team import * +from endpoints.api.trigger import * +from endpoints.api.user import * + +from endpoints.api.repository import Repository + from test.fixtures import * ORG_PARAMS = {'orgname': 'buynlarge'} @@ -31,13 +48,13 @@ TOKEN_PARAMS = {'token_uuid': 'someuuid'} TRIGGER_PARAMS = {'repository': 'devtable/simple', 'trigger_uuid': 'someuuid'} MANIFEST_PARAMS = {'repository': 'devtable/simple', 'manifestref': 'sha256:deadbeef'} -@pytest.mark.parametrize('resource,method,params,body,identity,expected', [ +SECURITY_TESTS = [ (AppTokens, 'GET', {}, {}, None, 401), (AppTokens, 'GET', {}, {}, 'freshuser', 200), (AppTokens, 'GET', {}, {}, 'reader', 200), (AppTokens, 'GET', {}, {}, 'devtable', 200), - (AppTokens, 'POST', {}, {}, None, 403), + (AppTokens, 'POST', {}, {}, None, 401), (AppTokens, 'POST', {}, {}, 'freshuser', 400), (AppTokens, 'POST', {}, {}, 'reader', 400), (AppTokens, 'POST', {}, {}, 'devtable', 400), @@ -47,7 +64,7 @@ MANIFEST_PARAMS = {'repository': 'devtable/simple', 'manifestref': 'sha256:dead (AppToken, 'GET', TOKEN_PARAMS, {}, 'reader', 404), (AppToken, 'GET', TOKEN_PARAMS, {}, 'devtable', 404), - (AppToken, 'DELETE', TOKEN_PARAMS, {}, None, 403), + (AppToken, 'DELETE', TOKEN_PARAMS, {}, None, 401), (AppToken, 'DELETE', TOKEN_PARAMS, {}, 'freshuser', 404), (AppToken, 'DELETE', TOKEN_PARAMS, {}, 'reader', 404), (AppToken, 'DELETE', TOKEN_PARAMS, {}, 'devtable', 404), @@ -62,12 +79,12 @@ MANIFEST_PARAMS = {'repository': 'devtable/simple', 'manifestref': 'sha256:dead (OrganizationCollaboratorList, 'GET', ORG_PARAMS, None, 'reader', 403), (OrganizationCollaboratorList, 'GET', ORG_PARAMS, None, 'devtable', 200), - (OrganizationTeamSyncing, 'POST', TEAM_PARAMS, {}, None, 403), + (OrganizationTeamSyncing, 'POST', TEAM_PARAMS, {}, None, 401), (OrganizationTeamSyncing, 'POST', TEAM_PARAMS, {}, 'freshuser', 403), (OrganizationTeamSyncing, 'POST', TEAM_PARAMS, {}, 'reader', 403), (OrganizationTeamSyncing, 'POST', TEAM_PARAMS, {}, 'devtable', 400), - (OrganizationTeamSyncing, 'DELETE', TEAM_PARAMS, {}, None, 403), + (OrganizationTeamSyncing, 'DELETE', TEAM_PARAMS, {}, None, 401), (OrganizationTeamSyncing, 'DELETE', TEAM_PARAMS, {}, 'freshuser', 403), (OrganizationTeamSyncing, 'DELETE', TEAM_PARAMS, {}, 'reader', 403), (OrganizationTeamSyncing, 'DELETE', TEAM_PARAMS, {}, 'devtable', 200), @@ -90,18 +107,18 @@ MANIFEST_PARAMS = {'repository': 'devtable/simple', 'manifestref': 'sha256:dead (SuperUserRepositoryBuildResource, 'GET', BUILD_PARAMS, None, None, 401), (SuperUserRepositoryBuildResource, 'GET', BUILD_PARAMS, None, 'freshuser', 403), (SuperUserRepositoryBuildResource, 'GET', BUILD_PARAMS, None, 'reader', 403), - (SuperUserRepositoryBuildResource, 'GET', BUILD_PARAMS, None, 'devtable', 404), + (SuperUserRepositoryBuildResource, 'GET', BUILD_PARAMS, None, 'devtable', 404), (RepositorySignatures, 'GET', REPO_PARAMS, {}, 'freshuser', 403), (RepositorySignatures, 'GET', REPO_PARAMS, {}, 'reader', 403), (RepositorySignatures, 'GET', REPO_PARAMS, {}, 'devtable', 404), - (RepositoryNotification, 'POST', NOTIFICATION_PARAMS, {}, None, 403), + (RepositoryNotification, 'POST', NOTIFICATION_PARAMS, {}, None, 401), (RepositoryNotification, 'POST', NOTIFICATION_PARAMS, {}, 'freshuser', 403), (RepositoryNotification, 'POST', NOTIFICATION_PARAMS, {}, 'reader', 403), (RepositoryNotification, 'POST', NOTIFICATION_PARAMS, {}, 'devtable', 400), - (RepositoryTrust, 'POST', REPO_PARAMS, {'trust_enabled': True}, None, 403), + (RepositoryTrust, 'POST', REPO_PARAMS, {'trust_enabled': True}, None, 401), (RepositoryTrust, 'POST', REPO_PARAMS, {'trust_enabled': True}, 'freshuser', 403), (RepositoryTrust, 'POST', REPO_PARAMS, {'trust_enabled': True}, 'reader', 403), (RepositoryTrust, 'POST', REPO_PARAMS, {'trust_enabled': True}, 'devtable', 404), @@ -111,12 +128,12 @@ MANIFEST_PARAMS = {'repository': 'devtable/simple', 'manifestref': 'sha256:dead (BuildTrigger, 'GET', TRIGGER_PARAMS, {}, 'reader', 403), (BuildTrigger, 'GET', TRIGGER_PARAMS, {}, 'devtable', 404), - (BuildTrigger, 'DELETE', TRIGGER_PARAMS, {}, None, 403), + (BuildTrigger, 'DELETE', TRIGGER_PARAMS, {}, None, 401), (BuildTrigger, 'DELETE', TRIGGER_PARAMS, {}, 'freshuser', 403), (BuildTrigger, 'DELETE', TRIGGER_PARAMS, {}, 'reader', 403), (BuildTrigger, 'DELETE', TRIGGER_PARAMS, {}, 'devtable', 404), - (BuildTrigger, 'PUT', TRIGGER_PARAMS, {}, None, 403), + (BuildTrigger, 'PUT', TRIGGER_PARAMS, {}, None, 401), (BuildTrigger, 'PUT', TRIGGER_PARAMS, {}, 'freshuser', 403), (BuildTrigger, 'PUT', TRIGGER_PARAMS, {}, 'reader', 403), (BuildTrigger, 'PUT', TRIGGER_PARAMS, {}, 'devtable', 400), @@ -135,12 +152,1287 @@ MANIFEST_PARAMS = {'repository': 'devtable/simple', 'manifestref': 'sha256:dead (RepositoryUserTransitivePermission, 'GET', {'username': 'A2O9','repository': 'buynlarge/orgrepo'}, None, 'devtable', 404), (RepositoryUserTransitivePermission, 'GET', {'username': 'devtable','repository': 'devtable/shared'}, None, 'devtable', 200), (RepositoryUserTransitivePermission, 'GET', {'username': 'devtable','repository': 'devtable/nope'}, None, 'devtable', 404), -]) + + (StarredRepositoryList, 'GET', None, None, None, 401), + (StarredRepositoryList, 'GET', None, None, 'devtable', 200), + (StarredRepositoryList, 'GET', None, None, 'freshuser', 200), + (StarredRepositoryList, 'GET', None, None, 'reader', 200), + (StarredRepositoryList, 'POST', None, {u'namespace': 'public', u'repository': 'publicrepo'}, None, 401), + (StarredRepositoryList, 'POST', None, {u'namespace': 'public', u'repository': 'publicrepo'}, 'devtable', 201), + (StarredRepositoryList, 'POST', None, {u'namespace': 'public', u'repository': 'publicrepo'}, 'freshuser', 201), + (StarredRepositoryList, 'POST', None, {u'namespace': 'public', u'repository': 'publicrepo'}, 'reader', 201), + + (StarredRepository, 'DELETE', {'repository': 'public/publicrepo'}, None, None, 401), + (StarredRepository, 'DELETE', {'repository': 'public/publicrepo'}, None, 'devtable', 204), + (StarredRepository, 'DELETE', {'repository': 'public/publicrepo'}, None, 'freshuser', 204), + (StarredRepository, 'DELETE', {'repository': 'public/publicrepo'}, None, 'reader', 204), + + (UserNotification, 'GET', {'uuid': 'someuuid'}, None, None, 401), + (UserNotification, 'GET', {'uuid': 'someuuid'}, None, 'devtable', 404), + (UserNotification, 'GET', {'uuid': 'someuuid'}, None, 'freshuser', 404), + (UserNotification, 'GET', {'uuid': 'someuuid'}, None, 'reader', 404), + (UserNotification, 'PUT', {'uuid': 'someuuid'}, {}, None, 401), + (UserNotification, 'PUT', {'uuid': 'someuuid'}, {}, 'devtable', 404), + (UserNotification, 'PUT', {'uuid': 'someuuid'}, {}, 'freshuser', 404), + (UserNotification, 'PUT', {'uuid': 'someuuid'}, {}, 'reader', 404), + + (UserInvoiceList, 'GET', None, None, None, 401), + (UserInvoiceList, 'GET', None, None, 'devtable', 200), + (UserInvoiceList, 'GET', None, None, 'freshuser', 404), + (UserInvoiceList, 'GET', None, None, 'reader', 404), + + (PrivateRepositories, 'GET', None, None, None, 401), + (PrivateRepositories, 'GET', None, None, 'devtable', 200), + (PrivateRepositories, 'GET', None, None, 'freshuser', 200), + (PrivateRepositories, 'GET', None, None, 'reader', 200), + + (ConvertToOrganization, 'POST', None, {u'adminPassword': 'IQTM', u'plan': '1RB4', u'adminUser': '44E8'}, None, 401), + (ConvertToOrganization, 'POST', None, {u'adminPassword': 'IQTM', u'plan': '1RB4', u'adminUser': '44E8'}, 'devtable', 400), + (ConvertToOrganization, 'POST', None, {u'adminPassword': 'IQTM', u'plan': '1RB4', u'adminUser': '44E8'}, 'freshuser', 400), + (ConvertToOrganization, 'POST', None, {u'adminPassword': 'IQTM', u'plan': '1RB4', u'adminUser': '44E8'}, 'reader', 400), + + (UserRobotList, 'GET', None, None, None, 401), + (UserRobotList, 'GET', None, None, 'devtable', 200), + (UserRobotList, 'GET', None, None, 'freshuser', 200), + (UserRobotList, 'GET', None, None, 'reader', 200), + + (UserCard, 'GET', None, None, None, 401), + (UserCard, 'GET', None, None, 'devtable', 200), + (UserCard, 'GET', None, None, 'freshuser', 200), + (UserCard, 'GET', None, None, 'reader', 200), + (UserCard, 'POST', None, {u'token': 'ORH4'}, None, 401), + + (UserPlan, 'GET', None, None, None, 401), + (UserPlan, 'GET', None, None, 'devtable', 200), + (UserPlan, 'GET', None, None, 'freshuser', 200), + (UserPlan, 'GET', None, None, 'reader', 200), + (UserPlan, 'PUT', None, {u'plan': '1QIK'}, None, 401), + + (UserLogs, 'GET', None, None, None, 401), + (UserLogs, 'GET', None, None, 'devtable', 200), + (UserLogs, 'GET', None, None, 'freshuser', 200), + (UserLogs, 'GET', None, None, 'reader', 200), + + (OrganizationList, 'POST', None, {u'name': 'KSIS', u'email': 'DHVZ'}, None, 401), + (OrganizationList, 'POST', None, {u'name': 'KSIS', u'email': 'DHVZ'}, 'devtable', 400), + (OrganizationList, 'POST', None, {u'name': 'KSIS', u'email': 'DHVZ'}, 'freshuser', 400), + (OrganizationList, 'POST', None, {u'name': 'KSIS', u'email': 'DHVZ'}, 'reader', 400), + + (Repository, 'GET', {'repository': 'public/publicrepo'}, None, None, 200), + (Repository, 'GET', {'repository': 'public/publicrepo'}, None, 'devtable', 200), + (Repository, 'GET', {'repository': 'public/publicrepo'}, None, 'freshuser', 200), + (Repository, 'GET', {'repository': 'public/publicrepo'}, None, 'reader', 200), + + (RepositoryList, 'GET', None, None, None, 400), + (RepositoryList, 'GET', None, None, 'devtable', 400), + (RepositoryList, 'GET', None, None, 'freshuser', 400), + (RepositoryList, 'GET', None, None, 'reader', 400), + (RepositoryList, 'POST', None, {u'repository': 'XZGB', u'visibility': u'public', u'description': '0O8U'}, None, 400), + (RepositoryList, 'POST', None, {u'repository': 'XZGB', u'visibility': u'public', u'description': '0O8U'}, 'devtable', 201), + (RepositoryList, 'POST', None, {u'repository': 'XZGB', u'visibility': u'public', u'description': '0O8U'}, 'freshuser', 201), + (RepositoryList, 'POST', None, {u'repository': 'XZGB', u'visibility': u'public', u'description': '0O8U'}, 'reader', 201), + + (DiscoveryResource, 'GET', None, None, None, 200), + (DiscoveryResource, 'GET', None, None, 'devtable', 200), + (DiscoveryResource, 'GET', None, None, 'freshuser', 200), + (DiscoveryResource, 'GET', None, None, 'reader', 200), + + (FileDropResource, 'POST', None, {u'mimeType': 'TKBX'}, None, 200), + (FileDropResource, 'POST', None, {u'mimeType': 'TKBX'}, 'devtable', 200), + (FileDropResource, 'POST', None, {u'mimeType': 'TKBX'}, 'freshuser', 200), + (FileDropResource, 'POST', None, {u'mimeType': 'TKBX'}, 'reader', 200), + + (Recovery, 'POST', None, {u'email': '826S'}, None, 200), + (Recovery, 'POST', None, {u'email': '826S'}, 'devtable', 200), + (Recovery, 'POST', None, {u'email': '826S'}, 'freshuser', 200), + (Recovery, 'POST', None, {u'email': '826S'}, 'reader', 200), + + (Signout, 'POST', None, None, None, 200), + (Signout, 'POST', None, None, 'devtable', 200), + (Signout, 'POST', None, None, 'freshuser', 200), + (Signout, 'POST', None, None, 'reader', 200), + + (Signin, 'POST', None, {u'username': 'E9RY', u'password': 'LQ0N'}, None, 403), + (Signin, 'POST', None, {u'username': 'E9RY', u'password': 'LQ0N'}, 'devtable', 403), + (Signin, 'POST', None, {u'username': 'E9RY', u'password': 'LQ0N'}, 'freshuser', 403), + (Signin, 'POST', None, {u'username': 'E9RY', u'password': 'LQ0N'}, 'reader', 403), + + (ExternalLoginInformation, 'POST', {'service_id': 'someservice'}, {}, None, 400), + (ExternalLoginInformation, 'POST', {'service_id': 'someservice'}, {}, 'devtable', 400), + (ExternalLoginInformation, 'POST', {'service_id': 'someservice'}, {}, 'freshuser', 400), + (ExternalLoginInformation, 'POST', {'service_id': 'someservice'}, {}, 'reader', 400), + + (DetachExternal, 'POST', {'service_id': 'someservice'}, {}, None, 401), + (DetachExternal, 'POST', {'service_id': 'someservice'}, {}, 'devtable', 200), + (DetachExternal, 'POST', {'service_id': 'someservice'}, {}, 'freshuser', 200), + (DetachExternal, 'POST', {'service_id': 'someservice'}, {}, 'reader', 200), + + (VerifyUser, 'POST', None, {u'password': 'LQ0N'}, None, 401), + (VerifyUser, 'POST', None, {u'password': 'password'}, 'devtable', 200), + (VerifyUser, 'POST', None, {u'password': 'LQ0N'}, 'freshuser', 403), + (VerifyUser, 'POST', None, {u'password': 'LQ0N'}, 'reader', 403), + + (ClientKey, 'POST', None, {u'password': 'LQ0N'}, None, 401), + (ClientKey, 'POST', None, {u'password': 'password'}, 'devtable', 200), + (ClientKey, 'POST', None, {u'password': 'LQ0N'}, 'freshuser', 400), + (ClientKey, 'POST', None, {u'password': 'password'}, 'reader', 200), + + (ListPlans, 'GET', None, None, None, 200), + (ListPlans, 'GET', None, None, 'devtable', 200), + (ListPlans, 'GET', None, None, 'freshuser', 200), + (ListPlans, 'GET', None, None, 'reader', 200), + + (User, 'GET', None, None, None, 401), + (User, 'GET', None, None, 'devtable', 200), + (User, 'GET', None, None, 'freshuser', 200), + (User, 'GET', None, None, 'reader', 200), + (User, 'POST', None, {u'username': 'T946', u'password': '0SG4', u'email': 'MENT'}, None, 400), + (User, 'POST', None, {u'username': 'T946', u'password': '0SG4', u'email': 'MENT'}, 'devtable', 400), + (User, 'POST', None, {u'username': 'T946', u'password': '0SG4', u'email': 'MENT'}, 'freshuser', 400), + (User, 'POST', None, {u'username': 'T946', u'password': '0SG4', u'email': 'MENT'}, 'reader', 400), + (User, 'PUT', None, {}, None, 401), + (User, 'PUT', None, {}, 'devtable', 200), + (User, 'PUT', None, {}, 'freshuser', 200), + (User, 'PUT', None, {}, 'reader', 200), + (User, 'DELETE', None, {}, None, 401), + (User, 'DELETE', None, {}, 'devtable', 400), + (User, 'DELETE', None, {}, 'freshuser', 204), + (User, 'DELETE', None, {}, 'reader', 204), + + (TeamMember, 'DELETE', {'orgname': 'buynlarge', 'membername': 'devtable', 'teamname': 'readers'}, None, None, 401), + (TeamMember, 'DELETE', {'orgname': 'buynlarge', 'membername': 'devtable', 'teamname': 'readers'}, None, 'devtable', 400), + (TeamMember, 'DELETE', {'orgname': 'buynlarge', 'membername': 'devtable', 'teamname': 'readers'}, None, 'freshuser', 403), + (TeamMember, 'DELETE', {'orgname': 'buynlarge', 'membername': 'devtable', 'teamname': 'readers'}, None, 'reader', 403), + (TeamMember, 'PUT', {'orgname': 'buynlarge', 'membername': 'devtable', 'teamname': 'readers'}, None, None, 401), + (TeamMember, 'PUT', {'orgname': 'buynlarge', 'membername': 'devtable', 'teamname': 'readers'}, None, 'devtable', 200), + (TeamMember, 'PUT', {'orgname': 'buynlarge', 'membername': 'devtable', 'teamname': 'readers'}, None, 'freshuser', 403), + (TeamMember, 'PUT', {'orgname': 'buynlarge', 'membername': 'devtable', 'teamname': 'readers'}, None, 'reader', 403), + (TeamMember, 'DELETE', {'orgname': 'buynlarge', 'membername': 'devtable', 'teamname': 'owners'}, None, None, 401), + (TeamMember, 'DELETE', {'orgname': 'buynlarge', 'membername': 'devtable', 'teamname': 'owners'}, None, 'devtable', 400), + (TeamMember, 'DELETE', {'orgname': 'buynlarge', 'membername': 'devtable', 'teamname': 'owners'}, None, 'freshuser', 403), + (TeamMember, 'DELETE', {'orgname': 'buynlarge', 'membername': 'devtable', 'teamname': 'owners'}, None, 'reader', 403), + (TeamMember, 'PUT', {'orgname': 'buynlarge', 'membername': 'devtable', 'teamname': 'owners'}, None, None, 401), + (TeamMember, 'PUT', {'orgname': 'buynlarge', 'membername': 'devtable', 'teamname': 'owners'}, None, 'devtable', 400), + (TeamMember, 'PUT', {'orgname': 'buynlarge', 'membername': 'devtable', 'teamname': 'owners'}, None, 'freshuser', 403), + (TeamMember, 'PUT', {'orgname': 'buynlarge', 'membername': 'devtable', 'teamname': 'owners'}, None, 'reader', 403), + + (TeamPermissions, 'GET', {'orgname': 'buynlarge', 'teamname': 'readers'}, None, None, 401), + (TeamPermissions, 'GET', {'orgname': 'buynlarge', 'teamname': 'readers'}, None, 'devtable', 200), + (TeamPermissions, 'GET', {'orgname': 'buynlarge', 'teamname': 'readers'}, None, 'freshuser', 403), + (TeamPermissions, 'GET', {'orgname': 'buynlarge', 'teamname': 'readers'}, None, 'reader', 403), + + (TeamMemberList, 'GET', {'orgname': 'buynlarge', 'teamname': 'readers'}, None, None, 401), + (TeamMemberList, 'GET', {'orgname': 'buynlarge', 'teamname': 'readers'}, None, 'devtable', 200), + (TeamMemberList, 'GET', {'orgname': 'buynlarge', 'teamname': 'readers'}, None, 'freshuser', 403), + (TeamMemberList, 'GET', {'orgname': 'buynlarge', 'teamname': 'readers'}, None, 'reader', 200), + (TeamMemberList, 'GET', {'orgname': 'buynlarge', 'teamname': 'owners'}, None, None, 401), + (TeamMemberList, 'GET', {'orgname': 'buynlarge', 'teamname': 'owners'}, None, 'devtable', 200), + (TeamMemberList, 'GET', {'orgname': 'buynlarge', 'teamname': 'owners'}, None, 'freshuser', 403), + (TeamMemberList, 'GET', {'orgname': 'buynlarge', 'teamname': 'owners'}, None, 'reader', 403), + + (RepositoryUserPermission, 'DELETE', {'username': 'A2O9', 'repository': 'public/publicrepo'}, None, None, 401), + (RepositoryUserPermission, 'DELETE', {'username': 'A2O9', 'repository': 'public/publicrepo'}, None, 'devtable', 403), + (RepositoryUserPermission, 'DELETE', {'username': 'A2O9', 'repository': 'public/publicrepo'}, None, 'freshuser', 403), + (RepositoryUserPermission, 'DELETE', {'username': 'A2O9', 'repository': 'public/publicrepo'}, None, 'reader', 403), + (RepositoryUserPermission, 'GET', {'username': 'A2O9', 'repository': 'public/publicrepo'}, None, None, 401), + (RepositoryUserPermission, 'GET', {'username': 'A2O9', 'repository': 'public/publicrepo'}, None, 'devtable', 403), + (RepositoryUserPermission, 'GET', {'username': 'A2O9', 'repository': 'public/publicrepo'}, None, 'freshuser', 403), + (RepositoryUserPermission, 'GET', {'username': 'A2O9', 'repository': 'public/publicrepo'}, None, 'reader', 403), + (RepositoryUserPermission, 'PUT', {'username': 'A2O9', 'repository': 'public/publicrepo'}, {u'role': u'read'}, None, 401), + (RepositoryUserPermission, 'PUT', {'username': 'A2O9', 'repository': 'public/publicrepo'}, {u'role': u'read'}, 'devtable', 403), + (RepositoryUserPermission, 'PUT', {'username': 'A2O9', 'repository': 'public/publicrepo'}, {u'role': u'read'}, 'freshuser', 403), + (RepositoryUserPermission, 'PUT', {'username': 'A2O9', 'repository': 'public/publicrepo'}, {u'role': u'read'}, 'reader', 403), + (RepositoryUserPermission, 'DELETE', {'username': 'A2O9', 'repository': 'devtable/shared'}, None, None, 401), + (RepositoryUserPermission, 'DELETE', {'username': 'A2O9', 'repository': 'devtable/shared'}, None, 'devtable', 400), + (RepositoryUserPermission, 'DELETE', {'username': 'A2O9', 'repository': 'devtable/shared'}, None, 'freshuser', 403), + (RepositoryUserPermission, 'DELETE', {'username': 'A2O9', 'repository': 'devtable/shared'}, None, 'reader', 403), + (RepositoryUserPermission, 'GET', {'username': 'A2O9', 'repository': 'devtable/shared'}, None, None, 401), + (RepositoryUserPermission, 'GET', {'username': 'A2O9', 'repository': 'devtable/shared'}, None, 'devtable', 400), + (RepositoryUserPermission, 'GET', {'username': 'A2O9', 'repository': 'devtable/shared'}, None, 'freshuser', 403), + (RepositoryUserPermission, 'GET', {'username': 'A2O9', 'repository': 'devtable/shared'}, None, 'reader', 403), + (RepositoryUserPermission, 'PUT', {'username': 'A2O9', 'repository': 'devtable/shared'}, {u'role': u'read'}, None, 401), + (RepositoryUserPermission, 'PUT', {'username': 'A2O9', 'repository': 'devtable/shared'}, {u'role': u'read'}, 'devtable', 400), + (RepositoryUserPermission, 'PUT', {'username': 'A2O9', 'repository': 'devtable/shared'}, {u'role': u'read'}, 'freshuser', 403), + (RepositoryUserPermission, 'PUT', {'username': 'A2O9', 'repository': 'devtable/shared'}, {u'role': u'read'}, 'reader', 403), + (RepositoryUserPermission, 'DELETE', {'username': 'A2O9', 'repository': 'buynlarge/orgrepo'}, None, None, 401), + (RepositoryUserPermission, 'DELETE', {'username': 'A2O9', 'repository': 'buynlarge/orgrepo'}, None, 'devtable', 400), + (RepositoryUserPermission, 'DELETE', {'username': 'A2O9', 'repository': 'buynlarge/orgrepo'}, None, 'freshuser', 403), + (RepositoryUserPermission, 'DELETE', {'username': 'A2O9', 'repository': 'buynlarge/orgrepo'}, None, 'reader', 403), + (RepositoryUserPermission, 'GET', {'username': 'A2O9', 'repository': 'buynlarge/orgrepo'}, None, None, 401), + (RepositoryUserPermission, 'GET', {'username': 'A2O9', 'repository': 'buynlarge/orgrepo'}, None, 'devtable', 400), + (RepositoryUserPermission, 'GET', {'username': 'A2O9', 'repository': 'buynlarge/orgrepo'}, None, 'freshuser', 403), + (RepositoryUserPermission, 'GET', {'username': 'A2O9', 'repository': 'buynlarge/orgrepo'}, None, 'reader', 403), + (RepositoryUserPermission, 'PUT', {'username': 'A2O9', 'repository': 'buynlarge/orgrepo'}, {u'role': u'read'}, None, 401), + (RepositoryUserPermission, 'PUT', {'username': 'A2O9', 'repository': 'buynlarge/orgrepo'}, {u'role': u'read'}, 'devtable', 400), + (RepositoryUserPermission, 'PUT', {'username': 'A2O9', 'repository': 'buynlarge/orgrepo'}, {u'role': u'read'}, 'freshuser', 403), + (RepositoryUserPermission, 'PUT', {'username': 'A2O9', 'repository': 'buynlarge/orgrepo'}, {u'role': u'read'}, 'reader', 403), + + (RepositoryTeamPermission, 'DELETE', {'repository': 'public/publicrepo', 'teamname': 'readers'}, None, None, 401), + (RepositoryTeamPermission, 'DELETE', {'repository': 'public/publicrepo', 'teamname': 'readers'}, None, 'devtable', 403), + (RepositoryTeamPermission, 'DELETE', {'repository': 'public/publicrepo', 'teamname': 'readers'}, None, 'freshuser', 403), + (RepositoryTeamPermission, 'DELETE', {'repository': 'public/publicrepo', 'teamname': 'readers'}, None, 'reader', 403), + (RepositoryTeamPermission, 'GET', {'repository': 'public/publicrepo', 'teamname': 'readers'}, None, None, 401), + (RepositoryTeamPermission, 'GET', {'repository': 'public/publicrepo', 'teamname': 'readers'}, None, 'devtable', 403), + (RepositoryTeamPermission, 'GET', {'repository': 'public/publicrepo', 'teamname': 'readers'}, None, 'freshuser', 403), + (RepositoryTeamPermission, 'GET', {'repository': 'public/publicrepo', 'teamname': 'readers'}, None, 'reader', 403), + (RepositoryTeamPermission, 'PUT', {'repository': 'public/publicrepo', 'teamname': 'readers'}, {u'role': u'read'}, None, 401), + (RepositoryTeamPermission, 'PUT', {'repository': 'public/publicrepo', 'teamname': 'readers'}, {u'role': u'read'}, 'devtable', 403), + (RepositoryTeamPermission, 'PUT', {'repository': 'public/publicrepo', 'teamname': 'readers'}, {u'role': u'read'}, 'freshuser', 403), + (RepositoryTeamPermission, 'PUT', {'repository': 'public/publicrepo', 'teamname': 'readers'}, {u'role': u'read'}, 'reader', 403), + (RepositoryTeamPermission, 'DELETE', {'repository': 'devtable/shared', 'teamname': 'readers'}, None, None, 401), + (RepositoryTeamPermission, 'DELETE', {'repository': 'devtable/shared', 'teamname': 'readers'}, None, 'devtable', 400), + (RepositoryTeamPermission, 'DELETE', {'repository': 'devtable/shared', 'teamname': 'readers'}, None, 'freshuser', 403), + (RepositoryTeamPermission, 'DELETE', {'repository': 'devtable/shared', 'teamname': 'readers'}, None, 'reader', 403), + (RepositoryTeamPermission, 'GET', {'repository': 'devtable/shared', 'teamname': 'readers'}, None, None, 401), + (RepositoryTeamPermission, 'GET', {'repository': 'devtable/shared', 'teamname': 'readers'}, None, 'devtable', 400), + (RepositoryTeamPermission, 'GET', {'repository': 'devtable/shared', 'teamname': 'readers'}, None, 'freshuser', 403), + (RepositoryTeamPermission, 'GET', {'repository': 'devtable/shared', 'teamname': 'readers'}, None, 'reader', 403), + (RepositoryTeamPermission, 'PUT', {'repository': 'devtable/shared', 'teamname': 'readers'}, {u'role': u'read'}, None, 401), + (RepositoryTeamPermission, 'PUT', {'repository': 'devtable/shared', 'teamname': 'readers'}, {u'role': u'read'}, 'devtable', 400), + (RepositoryTeamPermission, 'PUT', {'repository': 'devtable/shared', 'teamname': 'readers'}, {u'role': u'read'}, 'freshuser', 403), + (RepositoryTeamPermission, 'PUT', {'repository': 'devtable/shared', 'teamname': 'readers'}, {u'role': u'read'}, 'reader', 403), + (RepositoryTeamPermission, 'DELETE', {'repository': 'buynlarge/orgrepo', 'teamname': 'readers'}, None, None, 401), + (RepositoryTeamPermission, 'DELETE', {'repository': 'buynlarge/orgrepo', 'teamname': 'readers'}, None, 'devtable', 204), + (RepositoryTeamPermission, 'DELETE', {'repository': 'buynlarge/orgrepo', 'teamname': 'readers'}, None, 'freshuser', 403), + (RepositoryTeamPermission, 'DELETE', {'repository': 'buynlarge/orgrepo', 'teamname': 'readers'}, None, 'reader', 403), + (RepositoryTeamPermission, 'GET', {'repository': 'buynlarge/orgrepo', 'teamname': 'readers'}, None, None, 401), + (RepositoryTeamPermission, 'GET', {'repository': 'buynlarge/orgrepo', 'teamname': 'readers'}, None, 'devtable', 200), + (RepositoryTeamPermission, 'GET', {'repository': 'buynlarge/orgrepo', 'teamname': 'readers'}, None, 'freshuser', 403), + (RepositoryTeamPermission, 'GET', {'repository': 'buynlarge/orgrepo', 'teamname': 'readers'}, None, 'reader', 403), + (RepositoryTeamPermission, 'PUT', {'repository': 'buynlarge/orgrepo', 'teamname': 'readers'}, {u'role': u'read'}, None, 401), + (RepositoryTeamPermission, 'PUT', {'repository': 'buynlarge/orgrepo', 'teamname': 'readers'}, {u'role': u'read'}, 'devtable', 200), + (RepositoryTeamPermission, 'PUT', {'repository': 'buynlarge/orgrepo', 'teamname': 'readers'}, {u'role': u'read'}, 'freshuser', 403), + (RepositoryTeamPermission, 'PUT', {'repository': 'buynlarge/orgrepo', 'teamname': 'readers'}, {u'role': u'read'}, 'reader', 403), + (RepositoryTeamPermission, 'DELETE', {'repository': 'public/publicrepo', 'teamname': 'owners'}, None, None, 401), + (RepositoryTeamPermission, 'DELETE', {'repository': 'public/publicrepo', 'teamname': 'owners'}, None, 'devtable', 403), + (RepositoryTeamPermission, 'DELETE', {'repository': 'public/publicrepo', 'teamname': 'owners'}, None, 'freshuser', 403), + (RepositoryTeamPermission, 'DELETE', {'repository': 'public/publicrepo', 'teamname': 'owners'}, None, 'reader', 403), + (RepositoryTeamPermission, 'GET', {'repository': 'public/publicrepo', 'teamname': 'owners'}, None, None, 401), + (RepositoryTeamPermission, 'GET', {'repository': 'public/publicrepo', 'teamname': 'owners'}, None, 'devtable', 403), + (RepositoryTeamPermission, 'GET', {'repository': 'public/publicrepo', 'teamname': 'owners'}, None, 'freshuser', 403), + (RepositoryTeamPermission, 'GET', {'repository': 'public/publicrepo', 'teamname': 'owners'}, None, 'reader', 403), + (RepositoryTeamPermission, 'PUT', {'repository': 'public/publicrepo', 'teamname': 'owners'}, {u'role': u'read'}, None, 401), + (RepositoryTeamPermission, 'PUT', {'repository': 'public/publicrepo', 'teamname': 'owners'}, {u'role': u'read'}, 'devtable', 403), + (RepositoryTeamPermission, 'PUT', {'repository': 'public/publicrepo', 'teamname': 'owners'}, {u'role': u'read'}, 'freshuser', 403), + (RepositoryTeamPermission, 'PUT', {'repository': 'public/publicrepo', 'teamname': 'owners'}, {u'role': u'read'}, 'reader', 403), + (RepositoryTeamPermission, 'DELETE', {'repository': 'devtable/shared', 'teamname': 'owners'}, None, None, 401), + (RepositoryTeamPermission, 'DELETE', {'repository': 'devtable/shared', 'teamname': 'owners'}, None, 'devtable', 400), + (RepositoryTeamPermission, 'DELETE', {'repository': 'devtable/shared', 'teamname': 'owners'}, None, 'freshuser', 403), + (RepositoryTeamPermission, 'DELETE', {'repository': 'devtable/shared', 'teamname': 'owners'}, None, 'reader', 403), + (RepositoryTeamPermission, 'GET', {'repository': 'devtable/shared', 'teamname': 'owners'}, None, None, 401), + (RepositoryTeamPermission, 'GET', {'repository': 'devtable/shared', 'teamname': 'owners'}, None, 'devtable', 400), + (RepositoryTeamPermission, 'GET', {'repository': 'devtable/shared', 'teamname': 'owners'}, None, 'freshuser', 403), + (RepositoryTeamPermission, 'GET', {'repository': 'devtable/shared', 'teamname': 'owners'}, None, 'reader', 403), + (RepositoryTeamPermission, 'PUT', {'repository': 'devtable/shared', 'teamname': 'owners'}, {u'role': u'read'}, None, 401), + (RepositoryTeamPermission, 'PUT', {'repository': 'devtable/shared', 'teamname': 'owners'}, {u'role': u'read'}, 'devtable', 400), + (RepositoryTeamPermission, 'PUT', {'repository': 'devtable/shared', 'teamname': 'owners'}, {u'role': u'read'}, 'freshuser', 403), + (RepositoryTeamPermission, 'PUT', {'repository': 'devtable/shared', 'teamname': 'owners'}, {u'role': u'read'}, 'reader', 403), + (RepositoryTeamPermission, 'DELETE', {'repository': 'buynlarge/orgrepo', 'teamname': 'owners'}, None, None, 401), + (RepositoryTeamPermission, 'DELETE', {'repository': 'buynlarge/orgrepo', 'teamname': 'owners'}, None, 'devtable', 400), + (RepositoryTeamPermission, 'DELETE', {'repository': 'buynlarge/orgrepo', 'teamname': 'owners'}, None, 'freshuser', 403), + (RepositoryTeamPermission, 'DELETE', {'repository': 'buynlarge/orgrepo', 'teamname': 'owners'}, None, 'reader', 403), + (RepositoryTeamPermission, 'GET', {'repository': 'buynlarge/orgrepo', 'teamname': 'owners'}, None, None, 401), + (RepositoryTeamPermission, 'GET', {'repository': 'buynlarge/orgrepo', 'teamname': 'owners'}, None, 'devtable', 400), + (RepositoryTeamPermission, 'GET', {'repository': 'buynlarge/orgrepo', 'teamname': 'owners'}, None, 'freshuser', 403), + (RepositoryTeamPermission, 'GET', {'repository': 'buynlarge/orgrepo', 'teamname': 'owners'}, None, 'reader', 403), + (RepositoryTeamPermission, 'PUT', {'repository': 'buynlarge/orgrepo', 'teamname': 'owners'}, {u'role': u'read'}, None, 401), + (RepositoryTeamPermission, 'PUT', {'repository': 'buynlarge/orgrepo', 'teamname': 'owners'}, {u'role': u'read'}, 'devtable', 200), + (RepositoryTeamPermission, 'PUT', {'repository': 'buynlarge/orgrepo', 'teamname': 'owners'}, {u'role': u'read'}, 'freshuser', 403), + (RepositoryTeamPermission, 'PUT', {'repository': 'buynlarge/orgrepo', 'teamname': 'owners'}, {u'role': u'read'}, 'reader', 403), + + (BuildTriggerActivate, 'POST', {'repository': 'public/publicrepo', 'trigger_uuid': 'SWO1'}, {}, None, 401), + (BuildTriggerActivate, 'POST', {'repository': 'public/publicrepo', 'trigger_uuid': 'SWO1'}, {}, 'devtable', 403), + (BuildTriggerActivate, 'POST', {'repository': 'public/publicrepo', 'trigger_uuid': 'SWO1'}, {}, 'freshuser', 403), + (BuildTriggerActivate, 'POST', {'repository': 'public/publicrepo', 'trigger_uuid': 'SWO1'}, {}, 'reader', 403), + (BuildTriggerActivate, 'POST', {'repository': 'devtable/shared', 'trigger_uuid': 'SWO1'}, {}, None, 401), + (BuildTriggerActivate, 'POST', {'repository': 'devtable/shared', 'trigger_uuid': 'SWO1'}, {'config': {}}, 'devtable', 404), + (BuildTriggerActivate, 'POST', {'repository': 'devtable/shared', 'trigger_uuid': 'SWO1'}, {}, 'freshuser', 403), + (BuildTriggerActivate, 'POST', {'repository': 'devtable/shared', 'trigger_uuid': 'SWO1'}, {}, 'reader', 403), + (BuildTriggerActivate, 'POST', {'repository': 'buynlarge/orgrepo', 'trigger_uuid': 'SWO1'}, {}, None, 401), + (BuildTriggerActivate, 'POST', {'repository': 'buynlarge/orgrepo', 'trigger_uuid': 'SWO1'}, {'config': {}}, 'devtable', 404), + (BuildTriggerActivate, 'POST', {'repository': 'buynlarge/orgrepo', 'trigger_uuid': 'SWO1'}, {}, 'freshuser', 403), + (BuildTriggerActivate, 'POST', {'repository': 'buynlarge/orgrepo', 'trigger_uuid': 'SWO1'}, {}, 'reader', 403), + + (BuildTriggerFieldValues, 'POST', {'field_name': 'test_field', 'repository': 'public/publicrepo', 'trigger_uuid': 'SWO1'}, {}, None, 401), + (BuildTriggerFieldValues, 'POST', {'field_name': 'test_field', 'repository': 'public/publicrepo', 'trigger_uuid': 'SWO1'}, {}, 'devtable', 403), + (BuildTriggerFieldValues, 'POST', {'field_name': 'test_field', 'repository': 'public/publicrepo', 'trigger_uuid': 'SWO1'}, {}, 'freshuser', 403), + (BuildTriggerFieldValues, 'POST', {'field_name': 'test_field', 'repository': 'public/publicrepo', 'trigger_uuid': 'SWO1'}, {}, 'reader', 403), + (BuildTriggerFieldValues, 'POST', {'field_name': 'test_field', 'repository': 'devtable/shared', 'trigger_uuid': 'SWO1'}, {}, None, 401), + (BuildTriggerFieldValues, 'POST', {'field_name': 'test_field', 'repository': 'devtable/shared', 'trigger_uuid': 'SWO1'}, {'config': {}}, 'devtable', 404), + (BuildTriggerFieldValues, 'POST', {'field_name': 'test_field', 'repository': 'devtable/shared', 'trigger_uuid': 'SWO1'}, {}, 'freshuser', 403), + (BuildTriggerFieldValues, 'POST', {'field_name': 'test_field', 'repository': 'devtable/shared', 'trigger_uuid': 'SWO1'}, {}, 'reader', 403), + (BuildTriggerFieldValues, 'POST', {'field_name': 'test_field', 'repository': 'buynlarge/orgrepo', 'trigger_uuid': 'SWO1'}, {}, None, 401), + (BuildTriggerFieldValues, 'POST', {'field_name': 'test_field', 'repository': 'buynlarge/orgrepo', 'trigger_uuid': 'SWO1'}, {'config': {}}, 'devtable', 404), + (BuildTriggerFieldValues, 'POST', {'field_name': 'test_field', 'repository': 'buynlarge/orgrepo', 'trigger_uuid': 'SWO1'}, {}, 'freshuser', 403), + (BuildTriggerFieldValues, 'POST', {'field_name': 'test_field', 'repository': 'buynlarge/orgrepo', 'trigger_uuid': 'SWO1'}, {}, 'reader', 403), + + (BuildTriggerSources, 'POST', {'repository': 'public/publicrepo', 'trigger_uuid': '831C'}, None, None, 401), + (BuildTriggerSources, 'POST', {'repository': 'public/publicrepo', 'trigger_uuid': '831C'}, {'namespace': 'foo'}, 'devtable', 403), + (BuildTriggerSources, 'POST', {'repository': 'public/publicrepo', 'trigger_uuid': '831C'}, None, 'freshuser', 403), + (BuildTriggerSources, 'POST', {'repository': 'public/publicrepo', 'trigger_uuid': '831C'}, None, 'reader', 403), + (BuildTriggerSources, 'POST', {'repository': 'devtable/shared', 'trigger_uuid': '831C'}, None, None, 401), + (BuildTriggerSources, 'POST', {'repository': 'devtable/shared', 'trigger_uuid': '831C'}, {'namespace': 'foo'}, 'devtable', 404), + (BuildTriggerSources, 'POST', {'repository': 'devtable/shared', 'trigger_uuid': '831C'}, None, 'freshuser', 403), + (BuildTriggerSources, 'POST', {'repository': 'devtable/shared', 'trigger_uuid': '831C'}, None, 'reader', 403), + (BuildTriggerSources, 'POST', {'repository': 'buynlarge/orgrepo', 'trigger_uuid': '831C'}, None, None, 401), + (BuildTriggerSources, 'POST', {'repository': 'buynlarge/orgrepo', 'trigger_uuid': '831C'}, {'namespace': 'foo'}, 'devtable', 404), + (BuildTriggerSources, 'POST', {'repository': 'buynlarge/orgrepo', 'trigger_uuid': '831C'}, None, 'freshuser', 403), + (BuildTriggerSources, 'POST', {'repository': 'buynlarge/orgrepo', 'trigger_uuid': '831C'}, None, 'reader', 403), + + (BuildTriggerSubdirs, 'POST', {'repository': 'public/publicrepo', 'trigger_uuid': '4I2Y'}, {}, None, 401), + (BuildTriggerSubdirs, 'POST', {'repository': 'public/publicrepo', 'trigger_uuid': '4I2Y'}, {}, 'devtable', 403), + (BuildTriggerSubdirs, 'POST', {'repository': 'public/publicrepo', 'trigger_uuid': '4I2Y'}, {}, 'freshuser', 403), + (BuildTriggerSubdirs, 'POST', {'repository': 'public/publicrepo', 'trigger_uuid': '4I2Y'}, {}, 'reader', 403), + (BuildTriggerSubdirs, 'POST', {'repository': 'devtable/shared', 'trigger_uuid': '4I2Y'}, {}, None, 401), + (BuildTriggerSubdirs, 'POST', {'repository': 'devtable/shared', 'trigger_uuid': '4I2Y'}, {}, 'devtable', 404), + (BuildTriggerSubdirs, 'POST', {'repository': 'devtable/shared', 'trigger_uuid': '4I2Y'}, {}, 'freshuser', 403), + (BuildTriggerSubdirs, 'POST', {'repository': 'devtable/shared', 'trigger_uuid': '4I2Y'}, {}, 'reader', 403), + (BuildTriggerSubdirs, 'POST', {'repository': 'buynlarge/orgrepo', 'trigger_uuid': '4I2Y'}, {}, None, 401), + (BuildTriggerSubdirs, 'POST', {'repository': 'buynlarge/orgrepo', 'trigger_uuid': '4I2Y'}, {}, 'devtable', 404), + (BuildTriggerSubdirs, 'POST', {'repository': 'buynlarge/orgrepo', 'trigger_uuid': '4I2Y'}, {}, 'freshuser', 403), + (BuildTriggerSubdirs, 'POST', {'repository': 'buynlarge/orgrepo', 'trigger_uuid': '4I2Y'}, {}, 'reader', 403), + + (TriggerBuildList, 'GET', {'repository': 'public/publicrepo', 'trigger_uuid': 'ZM1W'}, None, None, 401), + (TriggerBuildList, 'GET', {'repository': 'public/publicrepo', 'trigger_uuid': 'ZM1W'}, None, 'devtable', 403), + (TriggerBuildList, 'GET', {'repository': 'public/publicrepo', 'trigger_uuid': 'ZM1W'}, None, 'freshuser', 403), + (TriggerBuildList, 'GET', {'repository': 'public/publicrepo', 'trigger_uuid': 'ZM1W'}, None, 'reader', 403), + (TriggerBuildList, 'GET', {'repository': 'devtable/shared', 'trigger_uuid': 'ZM1W'}, None, None, 401), + (TriggerBuildList, 'GET', {'repository': 'devtable/shared', 'trigger_uuid': 'ZM1W'}, None, 'devtable', 200), + (TriggerBuildList, 'GET', {'repository': 'devtable/shared', 'trigger_uuid': 'ZM1W'}, None, 'freshuser', 403), + (TriggerBuildList, 'GET', {'repository': 'devtable/shared', 'trigger_uuid': 'ZM1W'}, None, 'reader', 403), + (TriggerBuildList, 'GET', {'repository': 'buynlarge/orgrepo', 'trigger_uuid': 'ZM1W'}, None, None, 401), + (TriggerBuildList, 'GET', {'repository': 'buynlarge/orgrepo', 'trigger_uuid': 'ZM1W'}, None, 'devtable', 200), + (TriggerBuildList, 'GET', {'repository': 'buynlarge/orgrepo', 'trigger_uuid': 'ZM1W'}, None, 'freshuser', 403), + (TriggerBuildList, 'GET', {'repository': 'buynlarge/orgrepo', 'trigger_uuid': 'ZM1W'}, None, 'reader', 403), + + (ActivateBuildTrigger, 'POST', {'repository': 'public/publicrepo', 'trigger_uuid': '0BYE'}, None, None, 401), + (ActivateBuildTrigger, 'POST', {'repository': 'public/publicrepo', 'trigger_uuid': '0BYE'}, None, 'devtable', 403), + (ActivateBuildTrigger, 'POST', {'repository': 'public/publicrepo', 'trigger_uuid': '0BYE'}, None, 'freshuser', 403), + (ActivateBuildTrigger, 'POST', {'repository': 'public/publicrepo', 'trigger_uuid': '0BYE'}, None, 'reader', 403), + (ActivateBuildTrigger, 'POST', {'repository': 'devtable/shared', 'trigger_uuid': '0BYE'}, None, None, 401), + (ActivateBuildTrigger, 'POST', {'repository': 'devtable/shared', 'trigger_uuid': '0BYE'}, {}, 'devtable', 404), + (ActivateBuildTrigger, 'POST', {'repository': 'devtable/shared', 'trigger_uuid': '0BYE'}, None, 'freshuser', 403), + (ActivateBuildTrigger, 'POST', {'repository': 'devtable/shared', 'trigger_uuid': '0BYE'}, None, 'reader', 403), + (ActivateBuildTrigger, 'POST', {'repository': 'buynlarge/orgrepo', 'trigger_uuid': '0BYE'}, None, None, 401), + (ActivateBuildTrigger, 'POST', {'repository': 'buynlarge/orgrepo', 'trigger_uuid': '0BYE'}, {}, 'devtable', 404), + (ActivateBuildTrigger, 'POST', {'repository': 'buynlarge/orgrepo', 'trigger_uuid': '0BYE'}, None, 'freshuser', 403), + (ActivateBuildTrigger, 'POST', {'repository': 'buynlarge/orgrepo', 'trigger_uuid': '0BYE'}, None, 'reader', 403), + + (BuildTriggerAnalyze, 'POST', {'repository': 'public/publicrepo', 'trigger_uuid': '0BYE'}, None, None, 401), + (BuildTriggerAnalyze, 'POST', {'repository': 'public/publicrepo', 'trigger_uuid': '0BYE'}, {'config': {}}, 'devtable', 403), + (BuildTriggerAnalyze, 'POST', {'repository': 'public/publicrepo', 'trigger_uuid': '0BYE'}, None, 'freshuser', 403), + (BuildTriggerAnalyze, 'POST', {'repository': 'public/publicrepo', 'trigger_uuid': '0BYE'}, None, 'reader', 403), + (BuildTriggerAnalyze, 'POST', {'repository': 'devtable/shared', 'trigger_uuid': '0BYE'}, None, None, 401), + (BuildTriggerAnalyze, 'POST', {'repository': 'devtable/shared', 'trigger_uuid': '0BYE'}, {'config': {}}, 'devtable', 404), + (BuildTriggerAnalyze, 'POST', {'repository': 'devtable/shared', 'trigger_uuid': '0BYE'}, None, 'freshuser', 403), + (BuildTriggerAnalyze, 'POST', {'repository': 'devtable/shared', 'trigger_uuid': '0BYE'}, None, 'reader', 403), + (BuildTriggerAnalyze, 'POST', {'repository': 'buynlarge/orgrepo', 'trigger_uuid': '0BYE'}, None, None, 401), + (BuildTriggerAnalyze, 'POST', {'repository': 'buynlarge/orgrepo', 'trigger_uuid': '0BYE'}, {'config': {}}, 'devtable', 404), + (BuildTriggerAnalyze, 'POST', {'repository': 'buynlarge/orgrepo', 'trigger_uuid': '0BYE'}, None, 'freshuser', 403), + (BuildTriggerAnalyze, 'POST', {'repository': 'buynlarge/orgrepo', 'trigger_uuid': '0BYE'}, None, 'reader', 403), + + (RepositoryBuildStatus, 'GET', {'build_uuid': 'FG86', 'repository': 'public/publicrepo'}, None, None, 400), + (RepositoryBuildStatus, 'GET', {'build_uuid': 'FG86', 'repository': 'public/publicrepo'}, None, 'devtable', 400), + (RepositoryBuildStatus, 'GET', {'build_uuid': 'FG86', 'repository': 'public/publicrepo'}, None, 'freshuser', 400), + (RepositoryBuildStatus, 'GET', {'build_uuid': 'FG86', 'repository': 'public/publicrepo'}, None, 'reader', 400), + (RepositoryBuildStatus, 'GET', {'build_uuid': 'FG86', 'repository': 'devtable/shared'}, None, None, 401), + (RepositoryBuildStatus, 'GET', {'build_uuid': 'FG86', 'repository': 'devtable/shared'}, None, 'devtable', 400), + (RepositoryBuildStatus, 'GET', {'build_uuid': 'FG86', 'repository': 'devtable/shared'}, None, 'freshuser', 403), + (RepositoryBuildStatus, 'GET', {'build_uuid': 'FG86', 'repository': 'devtable/shared'}, None, 'reader', 400), + (RepositoryBuildStatus, 'GET', {'build_uuid': 'FG86', 'repository': 'buynlarge/orgrepo'}, None, None, 401), + (RepositoryBuildStatus, 'GET', {'build_uuid': 'FG86', 'repository': 'buynlarge/orgrepo'}, None, 'devtable', 400), + (RepositoryBuildStatus, 'GET', {'build_uuid': 'FG86', 'repository': 'buynlarge/orgrepo'}, None, 'freshuser', 403), + (RepositoryBuildStatus, 'GET', {'build_uuid': 'FG86', 'repository': 'buynlarge/orgrepo'}, None, 'reader', 400), + + (RepositoryBuildResource, 'GET', {'build_uuid': 'FG86', 'repository': 'public/publicrepo'}, None, None, 404), + (RepositoryBuildResource, 'GET', {'build_uuid': 'FG86', 'repository': 'public/publicrepo'}, None, 'devtable', 404), + (RepositoryBuildResource, 'GET', {'build_uuid': 'FG86', 'repository': 'public/publicrepo'}, None, 'freshuser', 404), + (RepositoryBuildResource, 'GET', {'build_uuid': 'FG86', 'repository': 'public/publicrepo'}, None, 'reader', 404), + (RepositoryBuildResource, 'GET', {'build_uuid': 'FG86', 'repository': 'devtable/shared'}, None, None, 401), + (RepositoryBuildResource, 'GET', {'build_uuid': 'FG86', 'repository': 'devtable/shared'}, None, 'devtable', 404), + (RepositoryBuildResource, 'GET', {'build_uuid': 'FG86', 'repository': 'devtable/shared'}, None, 'freshuser', 403), + (RepositoryBuildResource, 'GET', {'build_uuid': 'FG86', 'repository': 'devtable/shared'}, None, 'reader', 404), + (RepositoryBuildResource, 'GET', {'build_uuid': 'FG86', 'repository': 'buynlarge/orgrepo'}, None, None, 401), + (RepositoryBuildResource, 'GET', {'build_uuid': 'FG86', 'repository': 'buynlarge/orgrepo'}, None, 'devtable', 404), + (RepositoryBuildResource, 'GET', {'build_uuid': 'FG86', 'repository': 'buynlarge/orgrepo'}, None, 'freshuser', 403), + (RepositoryBuildResource, 'GET', {'build_uuid': 'FG86', 'repository': 'buynlarge/orgrepo'}, None, 'reader', 404), + + (RepositoryBuildResource, 'DELETE', {'build_uuid': 'FG86', 'repository': 'public/publicrepo'}, None, None, 401), + (RepositoryBuildResource, 'DELETE', {'build_uuid': 'FG86', 'repository': 'public/publicrepo'}, None, 'devtable', 403), + (RepositoryBuildResource, 'DELETE', {'build_uuid': 'FG86', 'repository': 'public/publicrepo'}, None, 'freshuser', 403), + (RepositoryBuildResource, 'DELETE', {'build_uuid': 'FG86', 'repository': 'public/publicrepo'}, None, 'reader', 403), + (RepositoryBuildResource, 'DELETE', {'build_uuid': 'FG86', 'repository': 'devtable/shared'}, None, None, 401), + (RepositoryBuildResource, 'DELETE', {'build_uuid': 'FG86', 'repository': 'devtable/shared'}, None, 'devtable', 404), + (RepositoryBuildResource, 'DELETE', {'build_uuid': 'FG86', 'repository': 'devtable/shared'}, None, 'freshuser', 403), + (RepositoryBuildResource, 'DELETE', {'build_uuid': 'FG86', 'repository': 'devtable/shared'}, None, 'reader', 403), + (RepositoryBuildResource, 'DELETE', {'build_uuid': 'FG86', 'repository': 'buynlarge/orgrepo'}, None, None, 401), + (RepositoryBuildResource, 'DELETE', {'build_uuid': 'FG86', 'repository': 'buynlarge/orgrepo'}, None, 'devtable', 404), + (RepositoryBuildResource, 'DELETE', {'build_uuid': 'FG86', 'repository': 'buynlarge/orgrepo'}, None, 'freshuser', 403), + (RepositoryBuildResource, 'DELETE', {'build_uuid': 'FG86', 'repository': 'buynlarge/orgrepo'}, None, 'reader', 403), + + (RepositoryBuildLogs, 'GET', {'build_uuid': 'S5J8', 'repository': 'public/publicrepo'}, None, None, 401), + (RepositoryBuildLogs, 'GET', {'build_uuid': 'S5J8', 'repository': 'public/publicrepo'}, None, 'devtable', 403), + (RepositoryBuildLogs, 'GET', {'build_uuid': 'S5J8', 'repository': 'public/publicrepo'}, None, 'freshuser', 403), + (RepositoryBuildLogs, 'GET', {'build_uuid': 'S5J8', 'repository': 'public/publicrepo'}, None, 'reader', 403), + (RepositoryBuildLogs, 'GET', {'build_uuid': 'S5J8', 'repository': 'devtable/shared'}, None, None, 401), + (RepositoryBuildLogs, 'GET', {'build_uuid': 'S5J8', 'repository': 'devtable/shared'}, None, 'devtable', 400), + (RepositoryBuildLogs, 'GET', {'build_uuid': 'S5J8', 'repository': 'devtable/shared'}, None, 'freshuser', 403), + (RepositoryBuildLogs, 'GET', {'build_uuid': 'S5J8', 'repository': 'devtable/shared'}, None, 'reader', 403), + (RepositoryBuildLogs, 'GET', {'build_uuid': 'S5J8', 'repository': 'buynlarge/orgrepo'}, None, None, 401), + (RepositoryBuildLogs, 'GET', {'build_uuid': 'S5J8', 'repository': 'buynlarge/orgrepo'}, None, 'devtable', 400), + (RepositoryBuildLogs, 'GET', {'build_uuid': 'S5J8', 'repository': 'buynlarge/orgrepo'}, None, 'freshuser', 403), + (RepositoryBuildLogs, 'GET', {'build_uuid': 'S5J8', 'repository': 'buynlarge/orgrepo'}, None, 'reader', 403), + + (ListRepositoryTags, 'GET', {'tag': 'TN96', 'repository': 'public/publicrepo'}, None, None, 200), + (ListRepositoryTags, 'GET', {'tag': 'TN96', 'repository': 'public/publicrepo'}, None, 'devtable', 200), + (ListRepositoryTags, 'GET', {'tag': 'TN96', 'repository': 'public/publicrepo'}, None, 'freshuser', 200), + (ListRepositoryTags, 'GET', {'tag': 'TN96', 'repository': 'public/publicrepo'}, None, 'reader', 200), + (ListRepositoryTags, 'GET', {'tag': 'TN96', 'repository': 'devtable/shared'}, None, None, 401), + (ListRepositoryTags, 'GET', {'tag': 'TN96', 'repository': 'devtable/shared'}, None, 'devtable', 200), + (ListRepositoryTags, 'GET', {'tag': 'TN96', 'repository': 'devtable/shared'}, None, 'freshuser', 403), + (ListRepositoryTags, 'GET', {'tag': 'TN96', 'repository': 'devtable/shared'}, None, 'reader', 200), + (ListRepositoryTags, 'GET', {'tag': 'TN96', 'repository': 'buynlarge/orgrepo'}, None, None, 401), + (ListRepositoryTags, 'GET', {'tag': 'TN96', 'repository': 'buynlarge/orgrepo'}, None, 'devtable', 200), + (ListRepositoryTags, 'GET', {'tag': 'TN96', 'repository': 'buynlarge/orgrepo'}, None, 'freshuser', 403), + (ListRepositoryTags, 'GET', {'tag': 'TN96', 'repository': 'buynlarge/orgrepo'}, None, 'reader', 200), + + (RepositoryTagImages, 'GET', {'tag': 'TN96', 'repository': 'public/publicrepo'}, None, None, 404), + (RepositoryTagImages, 'GET', {'tag': 'TN96', 'repository': 'public/publicrepo'}, None, 'devtable', 404), + (RepositoryTagImages, 'GET', {'tag': 'TN96', 'repository': 'public/publicrepo'}, None, 'freshuser', 404), + (RepositoryTagImages, 'GET', {'tag': 'TN96', 'repository': 'public/publicrepo'}, None, 'reader', 404), + (RepositoryTagImages, 'GET', {'tag': 'TN96', 'repository': 'devtable/shared'}, None, None, 401), + (RepositoryTagImages, 'GET', {'tag': 'TN96', 'repository': 'devtable/shared'}, None, 'devtable', 404), + (RepositoryTagImages, 'GET', {'tag': 'TN96', 'repository': 'devtable/shared'}, None, 'freshuser', 403), + (RepositoryTagImages, 'GET', {'tag': 'TN96', 'repository': 'devtable/shared'}, None, 'reader', 404), + (RepositoryTagImages, 'GET', {'tag': 'TN96', 'repository': 'buynlarge/orgrepo'}, None, None, 401), + (RepositoryTagImages, 'GET', {'tag': 'TN96', 'repository': 'buynlarge/orgrepo'}, None, 'devtable', 404), + (RepositoryTagImages, 'GET', {'tag': 'TN96', 'repository': 'buynlarge/orgrepo'}, None, 'freshuser', 403), + (RepositoryTagImages, 'GET', {'tag': 'TN96', 'repository': 'buynlarge/orgrepo'}, None, 'reader', 404), + + (PermissionPrototype, 'DELETE', {'orgname': 'buynlarge', 'prototypeid': 'L24B'}, None, None, 401), + (PermissionPrototype, 'DELETE', {'orgname': 'buynlarge', 'prototypeid': 'L24B'}, None, 'devtable', 404), + (PermissionPrototype, 'DELETE', {'orgname': 'buynlarge', 'prototypeid': 'L24B'}, None, 'freshuser', 403), + (PermissionPrototype, 'DELETE', {'orgname': 'buynlarge', 'prototypeid': 'L24B'}, None, 'reader', 403), + (PermissionPrototype, 'PUT', {'orgname': 'buynlarge', 'prototypeid': 'L24B'}, {u'role': u'read'}, None, 401), + (PermissionPrototype, 'PUT', {'orgname': 'buynlarge', 'prototypeid': 'L24B'}, {u'role': u'read'}, 'devtable', 404), + (PermissionPrototype, 'PUT', {'orgname': 'buynlarge', 'prototypeid': 'L24B'}, {u'role': u'read'}, 'freshuser', 403), + (PermissionPrototype, 'PUT', {'orgname': 'buynlarge', 'prototypeid': 'L24B'}, {u'role': u'read'}, 'reader', 403), + + (OrganizationMember, 'DELETE', {'orgname': 'buynlarge', 'membername': 'someuser'}, None, None, 401), + (OrganizationMember, 'DELETE', {'orgname': 'buynlarge', 'membername': 'someuser'}, None, 'devtable', 404), + (OrganizationMember, 'DELETE', {'orgname': 'buynlarge', 'membername': 'someuser'}, None, 'freshuser', 403), + (OrganizationMember, 'DELETE', {'orgname': 'buynlarge', 'membername': 'someuser'}, None, 'reader', 403), + (OrganizationMember, 'GET', {'orgname': 'buynlarge', 'membername': 'someuser'}, None, None, 401), + (OrganizationMember, 'GET', {'orgname': 'buynlarge', 'membername': 'someuser'}, None, 'devtable', 404), + (OrganizationMember, 'GET', {'orgname': 'buynlarge', 'membername': 'someuser'}, None, 'freshuser', 403), + (OrganizationMember, 'GET', {'orgname': 'buynlarge', 'membername': 'someuser'}, None, 'reader', 403), + + (OrgRobot, 'DELETE', {'orgname': 'buynlarge', 'robot_shortname': 'Z7PD'}, None, None, 401), + (OrgRobot, 'DELETE', {'orgname': 'buynlarge', 'robot_shortname': 'Z7PD'}, None, 'devtable', 400), + (OrgRobot, 'DELETE', {'orgname': 'buynlarge', 'robot_shortname': 'Z7PD'}, None, 'freshuser', 403), + (OrgRobot, 'DELETE', {'orgname': 'buynlarge', 'robot_shortname': 'Z7PD'}, None, 'reader', 403), + (OrgRobot, 'GET', {'orgname': 'buynlarge', 'robot_shortname': 'Z7PD'}, None, None, 401), + (OrgRobot, 'GET', {'orgname': 'buynlarge', 'robot_shortname': 'Z7PD'}, None, 'devtable', 400), + (OrgRobot, 'GET', {'orgname': 'buynlarge', 'robot_shortname': 'Z7PD'}, None, 'freshuser', 403), + (OrgRobot, 'GET', {'orgname': 'buynlarge', 'robot_shortname': 'Z7PD'}, None, 'reader', 403), + (OrgRobot, 'PUT', {'orgname': 'buynlarge', 'robot_shortname': 'Z7PD'}, {}, None, 401), + (OrgRobot, 'PUT', {'orgname': 'buynlarge', 'robot_shortname': 'Z7PD'}, {}, 'devtable', 400), + (OrgRobot, 'PUT', {'orgname': 'buynlarge', 'robot_shortname': 'Z7PD'}, {}, 'freshuser', 403), + (OrgRobot, 'PUT', {'orgname': 'buynlarge', 'robot_shortname': 'Z7PD'}, {}, 'reader', 403), + + (OrganizationTeam, 'DELETE', {'orgname': 'buynlarge', 'teamname': 'readers'}, None, None, 401), + (OrganizationTeam, 'DELETE', {'orgname': 'buynlarge', 'teamname': 'readers'}, None, 'devtable', 204), + (OrganizationTeam, 'DELETE', {'orgname': 'buynlarge', 'teamname': 'readers'}, None, 'freshuser', 403), + (OrganizationTeam, 'DELETE', {'orgname': 'buynlarge', 'teamname': 'readers'}, None, 'reader', 403), + (OrganizationTeam, 'PUT', {'orgname': 'buynlarge', 'teamname': 'readers'}, {u'role': u'member'}, None, 401), + (OrganizationTeam, 'PUT', {'orgname': 'buynlarge', 'teamname': 'readers'}, {u'role': u'member'}, 'devtable', 200), + (OrganizationTeam, 'PUT', {'orgname': 'buynlarge', 'teamname': 'readers'}, {u'role': u'member'}, 'freshuser', 403), + (OrganizationTeam, 'PUT', {'orgname': 'buynlarge', 'teamname': 'readers'}, {u'role': u'member'}, 'reader', 403), + (OrganizationTeam, 'DELETE', {'orgname': 'buynlarge', 'teamname': 'owners'}, None, None, 401), + (OrganizationTeam, 'DELETE', {'orgname': 'buynlarge', 'teamname': 'owners'}, None, 'devtable', 400), + (OrganizationTeam, 'DELETE', {'orgname': 'buynlarge', 'teamname': 'owners'}, None, 'freshuser', 403), + (OrganizationTeam, 'DELETE', {'orgname': 'buynlarge', 'teamname': 'owners'}, None, 'reader', 403), + (OrganizationTeam, 'PUT', {'orgname': 'buynlarge', 'teamname': 'owners'}, {u'role': u'member'}, None, 401), + (OrganizationTeam, 'PUT', {'orgname': 'buynlarge', 'teamname': 'owners'}, {u'role': u'member'}, 'devtable', 400), + (OrganizationTeam, 'PUT', {'orgname': 'buynlarge', 'teamname': 'owners'}, {u'role': u'member'}, 'freshuser', 403), + (OrganizationTeam, 'PUT', {'orgname': 'buynlarge', 'teamname': 'owners'}, {u'role': u'member'}, 'reader', 403), + + (RepositoryTeamPermissionList, 'GET', {'repository': 'public/publicrepo'}, None, None, 401), + (RepositoryTeamPermissionList, 'GET', {'repository': 'public/publicrepo'}, None, 'devtable', 403), + (RepositoryTeamPermissionList, 'GET', {'repository': 'public/publicrepo'}, None, 'freshuser', 403), + (RepositoryTeamPermissionList, 'GET', {'repository': 'public/publicrepo'}, None, 'reader', 403), + (RepositoryTeamPermissionList, 'GET', {'repository': 'devtable/shared'}, None, None, 401), + (RepositoryTeamPermissionList, 'GET', {'repository': 'devtable/shared'}, None, 'devtable', 200), + (RepositoryTeamPermissionList, 'GET', {'repository': 'devtable/shared'}, None, 'freshuser', 403), + (RepositoryTeamPermissionList, 'GET', {'repository': 'devtable/shared'}, None, 'reader', 403), + (RepositoryTeamPermissionList, 'GET', {'repository': 'buynlarge/orgrepo'}, None, None, 401), + (RepositoryTeamPermissionList, 'GET', {'repository': 'buynlarge/orgrepo'}, None, 'devtable', 200), + (RepositoryTeamPermissionList, 'GET', {'repository': 'buynlarge/orgrepo'}, None, 'freshuser', 403), + (RepositoryTeamPermissionList, 'GET', {'repository': 'buynlarge/orgrepo'}, None, 'reader', 403), + + (RepositoryUserPermissionList, 'GET', {'repository': 'public/publicrepo'}, None, None, 401), + (RepositoryUserPermissionList, 'GET', {'repository': 'public/publicrepo'}, None, 'devtable', 403), + (RepositoryUserPermissionList, 'GET', {'repository': 'public/publicrepo'}, None, 'freshuser', 403), + (RepositoryUserPermissionList, 'GET', {'repository': 'public/publicrepo'}, None, 'reader', 403), + (RepositoryUserPermissionList, 'GET', {'repository': 'devtable/shared'}, None, None, 401), + (RepositoryUserPermissionList, 'GET', {'repository': 'devtable/shared'}, None, 'devtable', 200), + (RepositoryUserPermissionList, 'GET', {'repository': 'devtable/shared'}, None, 'freshuser', 403), + (RepositoryUserPermissionList, 'GET', {'repository': 'devtable/shared'}, None, 'reader', 403), + (RepositoryUserPermissionList, 'GET', {'repository': 'buynlarge/orgrepo'}, None, None, 401), + (RepositoryUserPermissionList, 'GET', {'repository': 'buynlarge/orgrepo'}, None, 'devtable', 200), + (RepositoryUserPermissionList, 'GET', {'repository': 'buynlarge/orgrepo'}, None, 'freshuser', 403), + (RepositoryUserPermissionList, 'GET', {'repository': 'buynlarge/orgrepo'}, None, 'reader', 403), + + (BuildTrigger, 'DELETE', {'repository': 'public/publicrepo', 'trigger_uuid': 'D6TI'}, None, None, 401), + (BuildTrigger, 'DELETE', {'repository': 'public/publicrepo', 'trigger_uuid': 'D6TI'}, None, 'devtable', 403), + (BuildTrigger, 'DELETE', {'repository': 'public/publicrepo', 'trigger_uuid': 'D6TI'}, None, 'freshuser', 403), + (BuildTrigger, 'DELETE', {'repository': 'public/publicrepo', 'trigger_uuid': 'D6TI'}, None, 'reader', 403), + (BuildTrigger, 'GET', {'repository': 'public/publicrepo', 'trigger_uuid': 'D6TI'}, None, None, 401), + (BuildTrigger, 'GET', {'repository': 'public/publicrepo', 'trigger_uuid': 'D6TI'}, None, 'devtable', 403), + (BuildTrigger, 'GET', {'repository': 'public/publicrepo', 'trigger_uuid': 'D6TI'}, None, 'freshuser', 403), + (BuildTrigger, 'GET', {'repository': 'public/publicrepo', 'trigger_uuid': 'D6TI'}, None, 'reader', 403), + (BuildTrigger, 'DELETE', {'repository': 'devtable/shared', 'trigger_uuid': 'D6TI'}, None, None, 401), + (BuildTrigger, 'DELETE', {'repository': 'devtable/shared', 'trigger_uuid': 'D6TI'}, None, 'devtable', 404), + (BuildTrigger, 'DELETE', {'repository': 'devtable/shared', 'trigger_uuid': 'D6TI'}, None, 'freshuser', 403), + (BuildTrigger, 'DELETE', {'repository': 'devtable/shared', 'trigger_uuid': 'D6TI'}, None, 'reader', 403), + (BuildTrigger, 'GET', {'repository': 'devtable/shared', 'trigger_uuid': 'D6TI'}, None, None, 401), + (BuildTrigger, 'GET', {'repository': 'devtable/shared', 'trigger_uuid': 'D6TI'}, None, 'devtable', 404), + (BuildTrigger, 'GET', {'repository': 'devtable/shared', 'trigger_uuid': 'D6TI'}, None, 'freshuser', 403), + (BuildTrigger, 'GET', {'repository': 'devtable/shared', 'trigger_uuid': 'D6TI'}, None, 'reader', 403), + (BuildTrigger, 'DELETE', {'repository': 'buynlarge/orgrepo', 'trigger_uuid': 'D6TI'}, None, None, 401), + (BuildTrigger, 'DELETE', {'repository': 'buynlarge/orgrepo', 'trigger_uuid': 'D6TI'}, None, 'devtable', 404), + (BuildTrigger, 'DELETE', {'repository': 'buynlarge/orgrepo', 'trigger_uuid': 'D6TI'}, None, 'freshuser', 403), + (BuildTrigger, 'DELETE', {'repository': 'buynlarge/orgrepo', 'trigger_uuid': 'D6TI'}, None, 'reader', 403), + (BuildTrigger, 'GET', {'repository': 'buynlarge/orgrepo', 'trigger_uuid': 'D6TI'}, None, None, 401), + (BuildTrigger, 'GET', {'repository': 'buynlarge/orgrepo', 'trigger_uuid': 'D6TI'}, None, 'devtable', 404), + (BuildTrigger, 'GET', {'repository': 'buynlarge/orgrepo', 'trigger_uuid': 'D6TI'}, None, 'freshuser', 403), + (BuildTrigger, 'GET', {'repository': 'buynlarge/orgrepo', 'trigger_uuid': 'D6TI'}, None, 'reader', 403), + + (RepositoryNotification, 'DELETE', {'uuid': 'QFAT', 'repository': 'public/publicrepo'}, None, None, 401), + (RepositoryNotification, 'DELETE', {'uuid': 'QFAT', 'repository': 'public/publicrepo'}, None, 'devtable', 403), + (RepositoryNotification, 'DELETE', {'uuid': 'QFAT', 'repository': 'public/publicrepo'}, None, 'freshuser', 403), + (RepositoryNotification, 'DELETE', {'uuid': 'QFAT', 'repository': 'public/publicrepo'}, None, 'reader', 403), + (RepositoryNotification, 'GET', {'uuid': 'QFAT', 'repository': 'public/publicrepo'}, None, None, 401), + (RepositoryNotification, 'GET', {'uuid': 'QFAT', 'repository': 'public/publicrepo'}, None, 'devtable', 403), + (RepositoryNotification, 'GET', {'uuid': 'QFAT', 'repository': 'public/publicrepo'}, None, 'freshuser', 403), + (RepositoryNotification, 'GET', {'uuid': 'QFAT', 'repository': 'public/publicrepo'}, None, 'reader', 403), + (RepositoryNotification, 'DELETE', {'uuid': 'QFAT', 'repository': 'devtable/shared'}, None, None, 401), + (RepositoryNotification, 'DELETE', {'uuid': 'QFAT', 'repository': 'devtable/shared'}, None, 'devtable', 400), + (RepositoryNotification, 'DELETE', {'uuid': 'QFAT', 'repository': 'devtable/shared'}, None, 'freshuser', 403), + (RepositoryNotification, 'DELETE', {'uuid': 'QFAT', 'repository': 'devtable/shared'}, None, 'reader', 403), + (RepositoryNotification, 'GET', {'uuid': 'QFAT', 'repository': 'devtable/shared'}, None, None, 401), + (RepositoryNotification, 'GET', {'uuid': 'QFAT', 'repository': 'devtable/shared'}, None, 'devtable', 404), + (RepositoryNotification, 'GET', {'uuid': 'QFAT', 'repository': 'devtable/shared'}, None, 'freshuser', 403), + (RepositoryNotification, 'GET', {'uuid': 'QFAT', 'repository': 'devtable/shared'}, None, 'reader', 403), + (RepositoryNotification, 'DELETE', {'uuid': 'QFAT', 'repository': 'buynlarge/orgrepo'}, None, None, 401), + (RepositoryNotification, 'DELETE', {'uuid': 'QFAT', 'repository': 'buynlarge/orgrepo'}, None, 'devtable', 400), + (RepositoryNotification, 'DELETE', {'uuid': 'QFAT', 'repository': 'buynlarge/orgrepo'}, None, 'freshuser', 403), + (RepositoryNotification, 'DELETE', {'uuid': 'QFAT', 'repository': 'buynlarge/orgrepo'}, None, 'reader', 403), + (RepositoryNotification, 'GET', {'uuid': 'QFAT', 'repository': 'buynlarge/orgrepo'}, None, None, 401), + (RepositoryNotification, 'GET', {'uuid': 'QFAT', 'repository': 'buynlarge/orgrepo'}, None, 'devtable', 404), + (RepositoryNotification, 'GET', {'uuid': 'QFAT', 'repository': 'buynlarge/orgrepo'}, None, 'freshuser', 403), + (RepositoryNotification, 'GET', {'uuid': 'QFAT', 'repository': 'buynlarge/orgrepo'}, None, 'reader', 403), + + (RepositoryToken, 'DELETE', {'code': 'UJQB', 'repository': 'public/publicrepo'}, None, None, 401), + (RepositoryToken, 'DELETE', {'code': 'UJQB', 'repository': 'public/publicrepo'}, None, 'devtable', 403), + (RepositoryToken, 'DELETE', {'code': 'UJQB', 'repository': 'public/publicrepo'}, None, 'freshuser', 403), + (RepositoryToken, 'DELETE', {'code': 'UJQB', 'repository': 'public/publicrepo'}, None, 'reader', 403), + (RepositoryToken, 'GET', {'code': 'UJQB', 'repository': 'public/publicrepo'}, None, None, 401), + (RepositoryToken, 'GET', {'code': 'UJQB', 'repository': 'public/publicrepo'}, None, 'devtable', 403), + (RepositoryToken, 'GET', {'code': 'UJQB', 'repository': 'public/publicrepo'}, None, 'freshuser', 403), + (RepositoryToken, 'GET', {'code': 'UJQB', 'repository': 'public/publicrepo'}, None, 'reader', 403), + (RepositoryToken, 'PUT', {'code': 'UJQB', 'repository': 'public/publicrepo'}, {u'role': u'read'}, None, 401), + (RepositoryToken, 'PUT', {'code': 'UJQB', 'repository': 'public/publicrepo'}, {u'role': u'read'}, 'devtable', 403), + (RepositoryToken, 'PUT', {'code': 'UJQB', 'repository': 'public/publicrepo'}, {u'role': u'read'}, 'freshuser', 403), + (RepositoryToken, 'PUT', {'code': 'UJQB', 'repository': 'public/publicrepo'}, {u'role': u'read'}, 'reader', 403), + (RepositoryToken, 'DELETE', {'code': 'UJQB', 'repository': 'devtable/shared'}, None, None, 401), + (RepositoryToken, 'DELETE', {'code': 'UJQB', 'repository': 'devtable/shared'}, None, 'devtable', 400), + (RepositoryToken, 'DELETE', {'code': 'UJQB', 'repository': 'devtable/shared'}, None, 'freshuser', 403), + (RepositoryToken, 'DELETE', {'code': 'UJQB', 'repository': 'devtable/shared'}, None, 'reader', 403), + (RepositoryToken, 'GET', {'code': 'UJQB', 'repository': 'devtable/shared'}, None, None, 401), + (RepositoryToken, 'GET', {'code': 'UJQB', 'repository': 'devtable/shared'}, None, 'devtable', 404), + (RepositoryToken, 'GET', {'code': 'UJQB', 'repository': 'devtable/shared'}, None, 'freshuser', 403), + (RepositoryToken, 'GET', {'code': 'UJQB', 'repository': 'devtable/shared'}, None, 'reader', 403), + (RepositoryToken, 'PUT', {'code': 'UJQB', 'repository': 'devtable/shared'}, {u'role': u'read'}, None, 401), + (RepositoryToken, 'PUT', {'code': 'UJQB', 'repository': 'devtable/shared'}, {u'role': u'read'}, 'devtable', 400), + (RepositoryToken, 'PUT', {'code': 'UJQB', 'repository': 'devtable/shared'}, {u'role': u'read'}, 'freshuser', 403), + (RepositoryToken, 'PUT', {'code': 'UJQB', 'repository': 'devtable/shared'}, {u'role': u'read'}, 'reader', 403), + (RepositoryToken, 'DELETE', {'code': 'UJQB', 'repository': 'buynlarge/orgrepo'}, None, None, 401), + (RepositoryToken, 'DELETE', {'code': 'UJQB', 'repository': 'buynlarge/orgrepo'}, None, 'devtable', 400), + (RepositoryToken, 'DELETE', {'code': 'UJQB', 'repository': 'buynlarge/orgrepo'}, None, 'freshuser', 403), + (RepositoryToken, 'DELETE', {'code': 'UJQB', 'repository': 'buynlarge/orgrepo'}, None, 'reader', 403), + (RepositoryToken, 'GET', {'code': 'UJQB', 'repository': 'buynlarge/orgrepo'}, None, None, 401), + (RepositoryToken, 'GET', {'code': 'UJQB', 'repository': 'buynlarge/orgrepo'}, None, 'devtable', 404), + (RepositoryToken, 'GET', {'code': 'UJQB', 'repository': 'buynlarge/orgrepo'}, None, 'freshuser', 403), + (RepositoryToken, 'GET', {'code': 'UJQB', 'repository': 'buynlarge/orgrepo'}, None, 'reader', 403), + (RepositoryToken, 'PUT', {'code': 'UJQB', 'repository': 'buynlarge/orgrepo'}, {u'role': u'read'}, None, 401), + (RepositoryToken, 'PUT', {'code': 'UJQB', 'repository': 'buynlarge/orgrepo'}, {u'role': u'read'}, 'devtable', 400), + (RepositoryToken, 'PUT', {'code': 'UJQB', 'repository': 'buynlarge/orgrepo'}, {u'role': u'read'}, 'freshuser', 403), + (RepositoryToken, 'PUT', {'code': 'UJQB', 'repository': 'buynlarge/orgrepo'}, {u'role': u'read'}, 'reader', 403), + + (RepositoryImage, 'GET', {'image_id': '5AVQ', 'repository': 'public/publicrepo'}, None, None, 404), + (RepositoryImage, 'GET', {'image_id': '5AVQ', 'repository': 'public/publicrepo'}, None, 'devtable', 404), + (RepositoryImage, 'GET', {'image_id': '5AVQ', 'repository': 'public/publicrepo'}, None, 'freshuser', 404), + (RepositoryImage, 'GET', {'image_id': '5AVQ', 'repository': 'public/publicrepo'}, None, 'reader', 404), + (RepositoryImage, 'GET', {'image_id': '5AVQ', 'repository': 'devtable/shared'}, None, None, 401), + (RepositoryImage, 'GET', {'image_id': '5AVQ', 'repository': 'devtable/shared'}, None, 'devtable', 404), + (RepositoryImage, 'GET', {'image_id': '5AVQ', 'repository': 'devtable/shared'}, None, 'freshuser', 403), + (RepositoryImage, 'GET', {'image_id': '5AVQ', 'repository': 'devtable/shared'}, None, 'reader', 404), + (RepositoryImage, 'GET', {'image_id': '5AVQ', 'repository': 'buynlarge/orgrepo'}, None, None, 401), + (RepositoryImage, 'GET', {'image_id': '5AVQ', 'repository': 'buynlarge/orgrepo'}, None, 'devtable', 404), + (RepositoryImage, 'GET', {'image_id': '5AVQ', 'repository': 'buynlarge/orgrepo'}, None, 'freshuser', 403), + (RepositoryImage, 'GET', {'image_id': '5AVQ', 'repository': 'buynlarge/orgrepo'}, None, 'reader', 404), + + (RestoreTag, 'POST', {'tag': 'HP8R', 'repository': 'public/publicrepo'}, {u'image': 'WXNG'}, None, 401), + (RestoreTag, 'POST', {'tag': 'HP8R', 'repository': 'public/publicrepo'}, {u'image': 'WXNG'}, 'devtable', 403), + (RestoreTag, 'POST', {'tag': 'HP8R', 'repository': 'public/publicrepo'}, {u'image': 'WXNG'}, 'freshuser', 403), + (RestoreTag, 'POST', {'tag': 'HP8R', 'repository': 'public/publicrepo'}, {u'image': 'WXNG'}, 'reader', 403), + (RestoreTag, 'POST', {'tag': 'HP8R', 'repository': 'devtable/shared'}, {u'image': 'WXNG'}, None, 401), + (RestoreTag, 'POST', {'tag': 'HP8R', 'repository': 'devtable/shared'}, {u'image': 'WXNG'}, 'devtable', 400), + (RestoreTag, 'POST', {'tag': 'HP8R', 'repository': 'devtable/shared'}, {u'image': 'WXNG'}, 'freshuser', 403), + (RestoreTag, 'POST', {'tag': 'HP8R', 'repository': 'devtable/shared'}, {u'image': 'WXNG'}, 'reader', 403), + (RestoreTag, 'POST', {'tag': 'HP8R', 'repository': 'buynlarge/orgrepo'}, {u'image': 'WXNG'}, None, 401), + (RestoreTag, 'POST', {'tag': 'HP8R', 'repository': 'buynlarge/orgrepo'}, {u'image': 'WXNG'}, 'devtable', 400), + (RestoreTag, 'POST', {'tag': 'HP8R', 'repository': 'buynlarge/orgrepo'}, {u'image': 'WXNG'}, 'freshuser', 403), + (RestoreTag, 'POST', {'tag': 'HP8R', 'repository': 'buynlarge/orgrepo'}, {u'image': 'WXNG'}, 'reader', 403), + + (RepositoryTag, 'DELETE', {'tag': 'HP8R', 'repository': 'public/publicrepo'}, None, None, 401), + (RepositoryTag, 'DELETE', {'tag': 'HP8R', 'repository': 'public/publicrepo'}, None, 'devtable', 403), + (RepositoryTag, 'DELETE', {'tag': 'HP8R', 'repository': 'public/publicrepo'}, None, 'freshuser', 403), + (RepositoryTag, 'DELETE', {'tag': 'HP8R', 'repository': 'public/publicrepo'}, None, 'reader', 403), + (RepositoryTag, 'PUT', {'tag': 'HP8R', 'repository': 'public/publicrepo'}, {u'image': 'WXNG'}, None, 401), + (RepositoryTag, 'PUT', {'tag': 'HP8R', 'repository': 'public/publicrepo'}, {u'image': 'WXNG'}, 'devtable', 403), + (RepositoryTag, 'PUT', {'tag': 'HP8R', 'repository': 'public/publicrepo'}, {u'image': 'WXNG'}, 'freshuser', 403), + (RepositoryTag, 'PUT', {'tag': 'HP8R', 'repository': 'public/publicrepo'}, {u'image': 'WXNG'}, 'reader', 403), + (RepositoryTag, 'DELETE', {'tag': 'HP8R', 'repository': 'devtable/shared'}, None, None, 401), + (RepositoryTag, 'DELETE', {'tag': 'HP8R', 'repository': 'devtable/shared'}, None, 'devtable', 400), + (RepositoryTag, 'DELETE', {'tag': 'HP8R', 'repository': 'devtable/shared'}, None, 'freshuser', 403), + (RepositoryTag, 'DELETE', {'tag': 'HP8R', 'repository': 'devtable/shared'}, None, 'reader', 403), + (RepositoryTag, 'PUT', {'tag': 'HP8R', 'repository': 'devtable/shared'}, {u'image': 'WXNG'}, None, 401), + (RepositoryTag, 'PUT', {'tag': 'HP8R', 'repository': 'devtable/shared'}, {u'image': 'WXNG'}, 'devtable', 404), + (RepositoryTag, 'PUT', {'tag': 'HP8R', 'repository': 'devtable/shared'}, {u'image': 'WXNG'}, 'freshuser', 403), + (RepositoryTag, 'PUT', {'tag': 'HP8R', 'repository': 'devtable/shared'}, {u'image': 'WXNG'}, 'reader', 403), + (RepositoryTag, 'DELETE', {'tag': 'HP8R', 'repository': 'buynlarge/orgrepo'}, None, None, 401), + (RepositoryTag, 'DELETE', {'tag': 'HP8R', 'repository': 'buynlarge/orgrepo'}, None, 'devtable', 400), + (RepositoryTag, 'DELETE', {'tag': 'HP8R', 'repository': 'buynlarge/orgrepo'}, None, 'freshuser', 403), + (RepositoryTag, 'DELETE', {'tag': 'HP8R', 'repository': 'buynlarge/orgrepo'}, None, 'reader', 403), + (RepositoryTag, 'PUT', {'tag': 'HP8R', 'repository': 'buynlarge/orgrepo'}, {u'image': 'WXNG'}, None, 401), + (RepositoryTag, 'PUT', {'tag': 'HP8R', 'repository': 'buynlarge/orgrepo'}, {u'image': 'WXNG'}, 'devtable', 404), + (RepositoryTag, 'PUT', {'tag': 'HP8R', 'repository': 'buynlarge/orgrepo'}, {u'image': 'WXNG'}, 'freshuser', 403), + (RepositoryTag, 'PUT', {'tag': 'HP8R', 'repository': 'buynlarge/orgrepo'}, {u'image': 'WXNG'}, 'reader', 403), + + (PermissionPrototypeList, 'GET', {'orgname': 'buynlarge'}, None, None, 401), + (PermissionPrototypeList, 'GET', {'orgname': 'buynlarge'}, None, 'devtable', 200), + (PermissionPrototypeList, 'GET', {'orgname': 'buynlarge'}, None, 'freshuser', 403), + (PermissionPrototypeList, 'GET', {'orgname': 'buynlarge'}, None, 'reader', 403), + (PermissionPrototypeList, 'POST', {'orgname': 'buynlarge'}, {u'role': u'read', u'delegate': {u'kind': u'user', u'name': '7DGP'}}, None, 401), + (PermissionPrototypeList, 'POST', {'orgname': 'buynlarge'}, {u'role': u'read', u'delegate': {u'kind': u'user', u'name': '7DGP'}}, 'devtable', 400), + (PermissionPrototypeList, 'POST', {'orgname': 'buynlarge'}, {u'role': u'read', u'delegate': {u'kind': u'user', u'name': '7DGP'}}, 'freshuser', 403), + (PermissionPrototypeList, 'POST', {'orgname': 'buynlarge'}, {u'role': u'read', u'delegate': {u'kind': u'user', u'name': '7DGP'}}, 'reader', 403), + + (OrganizationInvoiceList, 'GET', {'orgname': 'buynlarge'}, None, None, 401), + (OrganizationInvoiceList, 'GET', {'orgname': 'buynlarge'}, None, 'devtable', 200), + (OrganizationInvoiceList, 'GET', {'orgname': 'buynlarge'}, None, 'freshuser', 403), + (OrganizationInvoiceList, 'GET', {'orgname': 'buynlarge'}, None, 'reader', 403), + + (OrgPrivateRepositories, 'GET', {'orgname': 'buynlarge'}, None, None, 401), + (OrgPrivateRepositories, 'GET', {'orgname': 'buynlarge'}, None, 'devtable', 200), + (OrgPrivateRepositories, 'GET', {'orgname': 'buynlarge'}, None, 'freshuser', 403), + (OrgPrivateRepositories, 'GET', {'orgname': 'buynlarge'}, None, 'reader', 403), + + (OrganizationMemberList, 'GET', {'orgname': 'buynlarge'}, None, None, 401), + (OrganizationMemberList, 'GET', {'orgname': 'buynlarge'}, None, 'devtable', 200), + (OrganizationMemberList, 'GET', {'orgname': 'buynlarge'}, None, 'freshuser', 403), + (OrganizationMemberList, 'GET', {'orgname': 'buynlarge'}, None, 'reader', 403), + + (OrgRobotList, 'GET', {'orgname': 'buynlarge'}, None, None, 401), + (OrgRobotList, 'GET', {'orgname': 'buynlarge'}, None, 'devtable', 200), + (OrgRobotList, 'GET', {'orgname': 'buynlarge'}, None, 'freshuser', 403), + (OrgRobotList, 'GET', {'orgname': 'buynlarge'}, None, 'reader', 200), + + (OrganizationCard, 'GET', {'orgname': 'buynlarge'}, None, None, 401), + (OrganizationCard, 'GET', {'orgname': 'buynlarge'}, None, 'devtable', 200), + (OrganizationCard, 'GET', {'orgname': 'buynlarge'}, None, 'freshuser', 403), + (OrganizationCard, 'GET', {'orgname': 'buynlarge'}, None, 'reader', 403), + (OrganizationCard, 'POST', {'orgname': 'buynlarge'}, {u'token': '4VFR'}, None, 401), + (OrganizationCard, 'POST', {'orgname': 'buynlarge'}, {u'token': '4VFR'}, 'freshuser', 403), + (OrganizationCard, 'POST', {'orgname': 'buynlarge'}, {u'token': '4VFR'}, 'reader', 403), + + (OrganizationPlan, 'GET', {'orgname': 'buynlarge'}, None, None, 401), + (OrganizationPlan, 'GET', {'orgname': 'buynlarge'}, None, 'devtable', 200), + (OrganizationPlan, 'GET', {'orgname': 'buynlarge'}, None, 'freshuser', 403), + (OrganizationPlan, 'GET', {'orgname': 'buynlarge'}, None, 'reader', 403), + (OrganizationPlan, 'PUT', {'orgname': 'buynlarge'}, {u'plan': 'WWEI'}, None, 401), + (OrganizationPlan, 'PUT', {'orgname': 'buynlarge'}, {u'plan': 'WWEI'}, 'freshuser', 403), + (OrganizationPlan, 'PUT', {'orgname': 'buynlarge'}, {u'plan': 'WWEI'}, 'reader', 403), + + (OrgLogs, 'GET', {'orgname': 'buynlarge'}, None, None, 401), + (OrgLogs, 'GET', {'orgname': 'buynlarge'}, None, 'devtable', 200), + (OrgLogs, 'GET', {'orgname': 'buynlarge'}, None, 'freshuser', 403), + (OrgLogs, 'GET', {'orgname': 'buynlarge'}, None, 'reader', 403), + + (RepositoryVisibility, 'POST', {'repository': 'public/publicrepo'}, {u'visibility': u'public'}, None, 401), + (RepositoryVisibility, 'POST', {'repository': 'public/publicrepo'}, {u'visibility': u'public'}, 'devtable', 403), + (RepositoryVisibility, 'POST', {'repository': 'public/publicrepo'}, {u'visibility': u'public'}, 'freshuser', 403), + (RepositoryVisibility, 'POST', {'repository': 'public/publicrepo'}, {u'visibility': u'public'}, 'reader', 403), + (RepositoryVisibility, 'POST', {'repository': 'devtable/shared'}, {u'visibility': u'public'}, None, 401), + (RepositoryVisibility, 'POST', {'repository': 'devtable/shared'}, {u'visibility': u'public'}, 'devtable', 200), + (RepositoryVisibility, 'POST', {'repository': 'devtable/shared'}, {u'visibility': u'public'}, 'freshuser', 403), + (RepositoryVisibility, 'POST', {'repository': 'devtable/shared'}, {u'visibility': u'public'}, 'reader', 403), + (RepositoryVisibility, 'POST', {'repository': 'buynlarge/orgrepo'}, {u'visibility': u'public'}, None, 401), + (RepositoryVisibility, 'POST', {'repository': 'buynlarge/orgrepo'}, {u'visibility': u'public'}, 'devtable', 200), + (RepositoryVisibility, 'POST', {'repository': 'buynlarge/orgrepo'}, {u'visibility': u'public'}, 'freshuser', 403), + (RepositoryVisibility, 'POST', {'repository': 'buynlarge/orgrepo'}, {u'visibility': u'public'}, 'reader', 403), + + (BuildTriggerList, 'GET', {'repository': 'public/publicrepo'}, None, None, 401), + (BuildTriggerList, 'GET', {'repository': 'public/publicrepo'}, None, 'devtable', 403), + (BuildTriggerList, 'GET', {'repository': 'public/publicrepo'}, None, 'freshuser', 403), + (BuildTriggerList, 'GET', {'repository': 'public/publicrepo'}, None, 'reader', 403), + (BuildTriggerList, 'GET', {'repository': 'devtable/shared'}, None, None, 401), + (BuildTriggerList, 'GET', {'repository': 'devtable/shared'}, None, 'devtable', 200), + (BuildTriggerList, 'GET', {'repository': 'devtable/shared'}, None, 'freshuser', 403), + (BuildTriggerList, 'GET', {'repository': 'devtable/shared'}, None, 'reader', 403), + (BuildTriggerList, 'GET', {'repository': 'buynlarge/orgrepo'}, None, None, 401), + (BuildTriggerList, 'GET', {'repository': 'buynlarge/orgrepo'}, None, 'devtable', 200), + (BuildTriggerList, 'GET', {'repository': 'buynlarge/orgrepo'}, None, 'freshuser', 403), + (BuildTriggerList, 'GET', {'repository': 'buynlarge/orgrepo'}, None, 'reader', 403), + + (RepositoryNotificationList, 'GET', {'repository': 'public/publicrepo'}, None, None, 401), + (RepositoryNotificationList, 'GET', {'repository': 'public/publicrepo'}, None, 'devtable', 403), + (RepositoryNotificationList, 'GET', {'repository': 'public/publicrepo'}, None, 'freshuser', 403), + (RepositoryNotificationList, 'GET', {'repository': 'public/publicrepo'}, None, 'reader', 403), + (RepositoryNotificationList, 'POST', {'repository': 'public/publicrepo'}, {}, None, 401), + (RepositoryNotificationList, 'POST', {'repository': 'public/publicrepo'}, {}, 'devtable', 403), + (RepositoryNotificationList, 'POST', {'repository': 'public/publicrepo'}, {}, 'freshuser', 403), + (RepositoryNotificationList, 'POST', {'repository': 'public/publicrepo'}, {}, 'reader', 403), + (RepositoryNotificationList, 'GET', {'repository': 'devtable/shared'}, None, None, 401), + (RepositoryNotificationList, 'GET', {'repository': 'devtable/shared'}, None, 'devtable', 200), + (RepositoryNotificationList, 'GET', {'repository': 'devtable/shared'}, None, 'freshuser', 403), + (RepositoryNotificationList, 'GET', {'repository': 'devtable/shared'}, None, 'reader', 403), + (RepositoryNotificationList, 'POST', {'repository': 'devtable/shared'}, {}, None, 401), + (RepositoryNotificationList, 'POST', {'repository': 'devtable/shared'}, {'config': {'email': 'a@b.com'}, 'event': 'repo_push', 'method': 'email'}, 'devtable', 400), + (RepositoryNotificationList, 'POST', {'repository': 'devtable/shared'}, {}, 'freshuser', 403), + (RepositoryNotificationList, 'POST', {'repository': 'devtable/shared'}, {}, 'reader', 403), + (RepositoryNotificationList, 'GET', {'repository': 'buynlarge/orgrepo'}, None, None, 401), + (RepositoryNotificationList, 'GET', {'repository': 'buynlarge/orgrepo'}, None, 'devtable', 200), + (RepositoryNotificationList, 'GET', {'repository': 'buynlarge/orgrepo'}, None, 'freshuser', 403), + (RepositoryNotificationList, 'GET', {'repository': 'buynlarge/orgrepo'}, None, 'reader', 403), + (RepositoryNotificationList, 'POST', {'repository': 'buynlarge/orgrepo'}, {}, None, 401), + (RepositoryNotificationList, 'POST', {'repository': 'buynlarge/orgrepo'}, {'config': {'email': 'a@b.com'}, 'event': 'repo_push', 'method': 'email'}, 'devtable', 400), + (RepositoryNotificationList, 'POST', {'repository': 'buynlarge/orgrepo'}, {}, 'freshuser', 403), + (RepositoryNotificationList, 'POST', {'repository': 'buynlarge/orgrepo'}, {}, 'reader', 403), + + (RepositoryAuthorizedEmail, 'GET', {'email': 'jschorr@devtable.com', 'repository': 'public/publicrepo'}, None, None, 401), + (RepositoryAuthorizedEmail, 'GET', {'email': 'jschorr@devtable.com', 'repository': 'public/publicrepo'}, None, 'devtable', 403), + (RepositoryAuthorizedEmail, 'GET', {'email': 'jschorr@devtable.com', 'repository': 'public/publicrepo'}, None, 'freshuser', 403), + (RepositoryAuthorizedEmail, 'GET', {'email': 'jschorr@devtable.com', 'repository': 'public/publicrepo'}, None, 'reader', 403), + (RepositoryAuthorizedEmail, 'POST', {'email': 'jschorr@devtable.com', 'repository': 'public/publicrepo'}, {}, None, 401), + (RepositoryAuthorizedEmail, 'POST', {'email': 'jschorr@devtable.com', 'repository': 'public/publicrepo'}, {}, 'devtable', 403), + (RepositoryAuthorizedEmail, 'POST', {'email': 'jschorr@devtable.com', 'repository': 'public/publicrepo'}, {}, 'freshuser', 403), + (RepositoryAuthorizedEmail, 'POST', {'email': 'jschorr@devtable.com', 'repository': 'public/publicrepo'}, {}, 'reader', 403), + (RepositoryAuthorizedEmail, 'GET', {'email': 'jschorr@devtable.com', 'repository': 'devtable/shared'}, None, None, 401), + (RepositoryAuthorizedEmail, 'GET', {'email': 'jschorr@devtable.com', 'repository': 'devtable/shared'}, None, 'devtable', 404), + (RepositoryAuthorizedEmail, 'GET', {'email': 'jschorr@devtable.com', 'repository': 'devtable/shared'}, None, 'freshuser', 403), + (RepositoryAuthorizedEmail, 'GET', {'email': 'jschorr@devtable.com', 'repository': 'devtable/shared'}, None, 'reader', 403), + (RepositoryAuthorizedEmail, 'POST', {'email': 'jschorr@devtable.com', 'repository': 'devtable/shared'}, {}, None, 401), + (RepositoryAuthorizedEmail, 'POST', {'email': 'jschorr@devtable.com', 'repository': 'devtable/shared'}, {}, 'devtable', 200), + (RepositoryAuthorizedEmail, 'POST', {'email': 'jschorr@devtable.com', 'repository': 'devtable/shared'}, {}, 'freshuser', 403), + (RepositoryAuthorizedEmail, 'POST', {'email': 'jschorr@devtable.com', 'repository': 'devtable/shared'}, {}, 'reader', 403), + (RepositoryAuthorizedEmail, 'GET', {'email': 'jschorr@devtable.com', 'repository': 'buynlarge/orgrepo'}, None, None, 401), + (RepositoryAuthorizedEmail, 'GET', {'email': 'jschorr@devtable.com', 'repository': 'buynlarge/orgrepo'}, None, 'devtable', 404), + (RepositoryAuthorizedEmail, 'GET', {'email': 'jschorr@devtable.com', 'repository': 'buynlarge/orgrepo'}, None, 'freshuser', 403), + (RepositoryAuthorizedEmail, 'GET', {'email': 'jschorr@devtable.com', 'repository': 'buynlarge/orgrepo'}, None, 'reader', 403), + (RepositoryAuthorizedEmail, 'POST', {'email': 'jschorr@devtable.com', 'repository': 'buynlarge/orgrepo'}, {}, None, 401), + (RepositoryAuthorizedEmail, 'POST', {'email': 'jschorr@devtable.com', 'repository': 'buynlarge/orgrepo'}, {}, 'devtable', 200), + (RepositoryAuthorizedEmail, 'POST', {'email': 'jschorr@devtable.com', 'repository': 'buynlarge/orgrepo'}, {}, 'freshuser', 403), + (RepositoryAuthorizedEmail, 'POST', {'email': 'jschorr@devtable.com', 'repository': 'buynlarge/orgrepo'}, {}, 'reader', 403), + + (RepositoryTokenList, 'GET', {'repository': 'public/publicrepo'}, None, None, 401), + (RepositoryTokenList, 'GET', {'repository': 'public/publicrepo'}, None, 'devtable', 403), + (RepositoryTokenList, 'GET', {'repository': 'public/publicrepo'}, None, 'freshuser', 403), + (RepositoryTokenList, 'GET', {'repository': 'public/publicrepo'}, None, 'reader', 403), + (RepositoryTokenList, 'POST', {'repository': 'public/publicrepo'}, {u'friendlyName': 'R1CN'}, None, 401), + (RepositoryTokenList, 'POST', {'repository': 'public/publicrepo'}, {u'friendlyName': 'R1CN'}, 'devtable', 403), + (RepositoryTokenList, 'POST', {'repository': 'public/publicrepo'}, {u'friendlyName': 'R1CN'}, 'freshuser', 403), + (RepositoryTokenList, 'POST', {'repository': 'public/publicrepo'}, {u'friendlyName': 'R1CN'}, 'reader', 403), + (RepositoryTokenList, 'GET', {'repository': 'devtable/shared'}, None, None, 401), + (RepositoryTokenList, 'GET', {'repository': 'devtable/shared'}, None, 'devtable', 200), + (RepositoryTokenList, 'GET', {'repository': 'devtable/shared'}, None, 'freshuser', 403), + (RepositoryTokenList, 'GET', {'repository': 'devtable/shared'}, None, 'reader', 403), + (RepositoryTokenList, 'POST', {'repository': 'devtable/shared'}, {u'friendlyName': 'R1CN'}, None, 401), + (RepositoryTokenList, 'POST', {'repository': 'devtable/shared'}, {u'friendlyName': 'R1CN'}, 'devtable', 201), + (RepositoryTokenList, 'POST', {'repository': 'devtable/shared'}, {u'friendlyName': 'R1CN'}, 'freshuser', 403), + (RepositoryTokenList, 'POST', {'repository': 'devtable/shared'}, {u'friendlyName': 'R1CN'}, 'reader', 403), + (RepositoryTokenList, 'GET', {'repository': 'buynlarge/orgrepo'}, None, None, 401), + (RepositoryTokenList, 'GET', {'repository': 'buynlarge/orgrepo'}, None, 'devtable', 200), + (RepositoryTokenList, 'GET', {'repository': 'buynlarge/orgrepo'}, None, 'freshuser', 403), + (RepositoryTokenList, 'GET', {'repository': 'buynlarge/orgrepo'}, None, 'reader', 403), + (RepositoryTokenList, 'POST', {'repository': 'buynlarge/orgrepo'}, {u'friendlyName': 'R1CN'}, None, 401), + (RepositoryTokenList, 'POST', {'repository': 'buynlarge/orgrepo'}, {u'friendlyName': 'R1CN'}, 'devtable', 201), + (RepositoryTokenList, 'POST', {'repository': 'buynlarge/orgrepo'}, {u'friendlyName': 'R1CN'}, 'freshuser', 403), + (RepositoryTokenList, 'POST', {'repository': 'buynlarge/orgrepo'}, {u'friendlyName': 'R1CN'}, 'reader', 403), + + (RepositoryBuildList, 'GET', {'repository': 'public/publicrepo'}, None, None, 200), + (RepositoryBuildList, 'GET', {'repository': 'public/publicrepo'}, None, 'devtable', 200), + (RepositoryBuildList, 'GET', {'repository': 'public/publicrepo'}, None, 'freshuser', 200), + (RepositoryBuildList, 'GET', {'repository': 'public/publicrepo'}, None, 'reader', 200), + (RepositoryBuildList, 'POST', {'repository': 'public/publicrepo'}, {u'file_id': 'UX7K'}, None, 401), + (RepositoryBuildList, 'POST', {'repository': 'public/publicrepo'}, {u'file_id': 'UX7K'}, 'devtable', 403), + (RepositoryBuildList, 'POST', {'repository': 'public/publicrepo'}, {u'file_id': 'UX7K'}, 'freshuser', 403), + (RepositoryBuildList, 'POST', {'repository': 'public/publicrepo'}, {u'file_id': 'UX7K'}, 'reader', 403), + (RepositoryBuildList, 'GET', {'repository': 'devtable/shared'}, None, None, 401), + (RepositoryBuildList, 'GET', {'repository': 'devtable/shared'}, None, 'devtable', 200), + (RepositoryBuildList, 'GET', {'repository': 'devtable/shared'}, None, 'freshuser', 403), + (RepositoryBuildList, 'GET', {'repository': 'devtable/shared'}, None, 'reader', 200), + (RepositoryBuildList, 'POST', {'repository': 'devtable/shared'}, {u'file_id': 'UX7K'}, None, 401), + (RepositoryBuildList, 'POST', {'repository': 'devtable/shared'}, {u'file_id': 'UX7K'}, 'devtable', 201), + (RepositoryBuildList, 'POST', {'repository': 'devtable/shared'}, {u'file_id': 'UX7K'}, 'freshuser', 403), + (RepositoryBuildList, 'POST', {'repository': 'devtable/shared'}, {u'file_id': 'UX7K'}, 'reader', 403), + (RepositoryBuildList, 'GET', {'repository': 'buynlarge/orgrepo'}, None, None, 401), + (RepositoryBuildList, 'GET', {'repository': 'buynlarge/orgrepo'}, None, 'devtable', 200), + (RepositoryBuildList, 'GET', {'repository': 'buynlarge/orgrepo'}, None, 'freshuser', 403), + (RepositoryBuildList, 'GET', {'repository': 'buynlarge/orgrepo'}, None, 'reader', 200), + (RepositoryBuildList, 'POST', {'repository': 'buynlarge/orgrepo'}, {u'file_id': 'UX7K'}, None, 401), + (RepositoryBuildList, 'POST', {'repository': 'buynlarge/orgrepo'}, {u'file_id': 'UX7K'}, 'devtable', 201), + (RepositoryBuildList, 'POST', {'repository': 'buynlarge/orgrepo'}, {u'file_id': 'UX7K'}, 'freshuser', 403), + (RepositoryBuildList, 'POST', {'repository': 'buynlarge/orgrepo'}, {u'file_id': 'UX7K'}, 'reader', 403), + + (RepositoryImageList, 'GET', {'repository': 'public/publicrepo'}, None, None, 200), + (RepositoryImageList, 'GET', {'repository': 'public/publicrepo'}, None, 'devtable', 200), + (RepositoryImageList, 'GET', {'repository': 'public/publicrepo'}, None, 'freshuser', 200), + (RepositoryImageList, 'GET', {'repository': 'public/publicrepo'}, None, 'reader', 200), + (RepositoryImageList, 'GET', {'repository': 'devtable/shared'}, None, None, 401), + (RepositoryImageList, 'GET', {'repository': 'devtable/shared'}, None, 'devtable', 200), + (RepositoryImageList, 'GET', {'repository': 'devtable/shared'}, None, 'freshuser', 403), + (RepositoryImageList, 'GET', {'repository': 'devtable/shared'}, None, 'reader', 200), + (RepositoryImageList, 'GET', {'repository': 'buynlarge/orgrepo'}, None, None, 401), + (RepositoryImageList, 'GET', {'repository': 'buynlarge/orgrepo'}, None, 'devtable', 200), + (RepositoryImageList, 'GET', {'repository': 'buynlarge/orgrepo'}, None, 'freshuser', 403), + (RepositoryImageList, 'GET', {'repository': 'buynlarge/orgrepo'}, None, 'reader', 200), + + (RepositoryLogs, 'GET', {'repository': 'public/publicrepo'}, None, None, 401), + (RepositoryLogs, 'GET', {'repository': 'public/publicrepo'}, None, 'devtable', 403), + (RepositoryLogs, 'GET', {'repository': 'public/publicrepo'}, None, 'freshuser', 403), + (RepositoryLogs, 'GET', {'repository': 'public/publicrepo'}, None, 'reader', 403), + (RepositoryLogs, 'GET', {'repository': 'devtable/shared'}, None, None, 401), + (RepositoryLogs, 'GET', {'repository': 'devtable/shared'}, None, 'devtable', 200), + (RepositoryLogs, 'GET', {'repository': 'devtable/shared'}, None, 'freshuser', 403), + (RepositoryLogs, 'GET', {'repository': 'devtable/shared'}, None, 'reader', 403), + (RepositoryLogs, 'GET', {'repository': 'buynlarge/orgrepo'}, None, None, 401), + (RepositoryLogs, 'GET', {'repository': 'buynlarge/orgrepo'}, None, 'devtable', 200), + (RepositoryLogs, 'GET', {'repository': 'buynlarge/orgrepo'}, None, 'freshuser', 403), + (RepositoryLogs, 'GET', {'repository': 'buynlarge/orgrepo'}, None, 'reader', 403), + + (UserRobot, 'DELETE', {'robot_shortname': 'robotname'}, None, None, 401), + (UserRobot, 'DELETE', {'robot_shortname': 'robotname'}, None, 'devtable', 400), + (UserRobot, 'DELETE', {'robot_shortname': 'robotname'}, None, 'freshuser', 400), + (UserRobot, 'DELETE', {'robot_shortname': 'robotname'}, None, 'reader', 400), + (UserRobot, 'GET', {'robot_shortname': 'robotname'}, None, None, 401), + (UserRobot, 'GET', {'robot_shortname': 'robotname'}, None, 'devtable', 400), + (UserRobot, 'GET', {'robot_shortname': 'robotname'}, None, 'freshuser', 400), + (UserRobot, 'GET', {'robot_shortname': 'robotname'}, None, 'reader', 400), + (UserRobot, 'PUT', {'robot_shortname': 'robotname'}, {}, None, 401), + (UserRobot, 'PUT', {'robot_shortname': 'robotname'}, {}, 'devtable', 201), + (UserRobot, 'PUT', {'robot_shortname': 'robotname'}, {}, 'freshuser', 201), + (UserRobot, 'PUT', {'robot_shortname': 'robotname'}, {}, 'reader', 201), + + (RegenerateUserRobot, 'POST', {'robot_shortname': 'robotname'}, None, None, 401), + (RegenerateUserRobot, 'POST', {'robot_shortname': 'robotname'}, None, 'devtable', 400), + (RegenerateUserRobot, 'POST', {'robot_shortname': 'robotname'}, None, 'freshuser', 400), + (RegenerateUserRobot, 'POST', {'robot_shortname': 'robotname'}, None, 'reader', 400), + + (RegenerateOrgRobot, 'POST', {'orgname': 'buynlarge', 'robot_shortname': 'robotname'}, None, None, 401), + (RegenerateOrgRobot, 'POST', {'orgname': 'buynlarge', 'robot_shortname': 'robotname'}, None, 'devtable', 400), + (RegenerateOrgRobot, 'POST', {'orgname': 'buynlarge', 'robot_shortname': 'robotname'}, None, 'freshuser', 403), + (RegenerateOrgRobot, 'POST', {'orgname': 'buynlarge', 'robot_shortname': 'robotname'}, None, 'reader', 403), + + (UserRobotPermissions, 'GET', {'robot_shortname': 'robotname'}, None, None, 401), + (UserRobotPermissions, 'GET', {'robot_shortname': 'robotname'}, None, 'devtable', 400), + (UserRobotPermissions, 'GET', {'robot_shortname': 'robotname'}, None, 'freshuser', 400), + (UserRobotPermissions, 'GET', {'robot_shortname': 'robotname'}, None, 'reader', 400), + + (OrgRobotPermissions, 'GET', {'orgname': 'buynlarge', 'robot_shortname': 'robotname'}, None, None, 401), + (OrgRobotPermissions, 'GET', {'orgname': 'buynlarge', 'robot_shortname': 'robotname'}, None, 'devtable', 400), + (OrgRobotPermissions, 'GET', {'orgname': 'buynlarge', 'robot_shortname': 'robotname'}, None, 'freshuser', 403), + (OrgRobotPermissions, 'GET', {'orgname': 'buynlarge', 'robot_shortname': 'robotname'}, None, 'reader', 403), + + (Organization, 'DELETE', {'orgname': 'buynlarge'}, {}, None, 401), + (Organization, 'DELETE', {'orgname': 'buynlarge'}, {}, 'devtable', 204), + (Organization, 'DELETE', {'orgname': 'buynlarge'}, {}, 'freshuser', 403), + (Organization, 'DELETE', {'orgname': 'buynlarge'}, {}, 'reader', 403), + (Organization, 'GET', {'orgname': 'buynlarge'}, None, None, 200), + (Organization, 'GET', {'orgname': 'buynlarge'}, None, 'devtable', 200), + (Organization, 'GET', {'orgname': 'buynlarge'}, None, 'freshuser', 200), + (Organization, 'GET', {'orgname': 'buynlarge'}, None, 'reader', 200), + (Organization, 'PUT', {'orgname': 'buynlarge'}, {}, None, 401), + (Organization, 'PUT', {'orgname': 'buynlarge'}, {}, 'devtable', 200), + (Organization, 'PUT', {'orgname': 'buynlarge'}, {}, 'freshuser', 403), + (Organization, 'PUT', {'orgname': 'buynlarge'}, {}, 'reader', 403), + + (Repository, 'DELETE', {'repository': 'public/publicrepo'}, None, None, 401), + (Repository, 'DELETE', {'repository': 'public/publicrepo'}, None, 'devtable', 403), + (Repository, 'DELETE', {'repository': 'public/publicrepo'}, None, 'freshuser', 403), + (Repository, 'DELETE', {'repository': 'public/publicrepo'}, None, 'reader', 403), + (Repository, 'GET', {'repository': 'public/publicrepo'}, None, None, 200), + (Repository, 'GET', {'repository': 'public/publicrepo'}, None, 'devtable', 200), + (Repository, 'GET', {'repository': 'public/publicrepo'}, None, 'freshuser', 200), + (Repository, 'GET', {'repository': 'public/publicrepo'}, None, 'reader', 200), + (Repository, 'PUT', {'repository': 'public/publicrepo'}, {u'description': 'WXNG'}, None, 401), + (Repository, 'PUT', {'repository': 'public/publicrepo'}, {u'description': 'WXNG'}, 'devtable', 403), + (Repository, 'PUT', {'repository': 'public/publicrepo'}, {u'description': 'WXNG'}, 'freshuser', 403), + (Repository, 'PUT', {'repository': 'public/publicrepo'}, {u'description': 'WXNG'}, 'reader', 403), + (Repository, 'DELETE', {'repository': 'devtable/shared'}, None, None, 401), + (Repository, 'DELETE', {'repository': 'devtable/shared'}, None, 'devtable', 204), + (Repository, 'DELETE', {'repository': 'devtable/shared'}, None, 'freshuser', 403), + (Repository, 'DELETE', {'repository': 'devtable/shared'}, None, 'reader', 403), + (Repository, 'GET', {'repository': 'devtable/shared'}, None, None, 401), + (Repository, 'GET', {'repository': 'devtable/shared'}, None, 'devtable', 200), + (Repository, 'GET', {'repository': 'devtable/shared'}, None, 'freshuser', 403), + (Repository, 'GET', {'repository': 'devtable/shared'}, None, 'reader', 200), + (Repository, 'PUT', {'repository': 'devtable/shared'}, {u'description': 'WXNG'}, None, 401), + (Repository, 'PUT', {'repository': 'devtable/shared'}, {u'description': 'WXNG'}, 'devtable', 200), + (Repository, 'PUT', {'repository': 'devtable/shared'}, {u'description': 'WXNG'}, 'freshuser', 403), + (Repository, 'PUT', {'repository': 'devtable/shared'}, {u'description': 'WXNG'}, 'reader', 403), + (Repository, 'DELETE', {'repository': 'buynlarge/orgrepo'}, None, None, 401), + (Repository, 'DELETE', {'repository': 'buynlarge/orgrepo'}, None, 'devtable', 204), + (Repository, 'DELETE', {'repository': 'buynlarge/orgrepo'}, None, 'freshuser', 403), + (Repository, 'DELETE', {'repository': 'buynlarge/orgrepo'}, None, 'reader', 403), + (Repository, 'GET', {'repository': 'buynlarge/orgrepo'}, None, None, 401), + (Repository, 'GET', {'repository': 'buynlarge/orgrepo'}, None, 'devtable', 200), + (Repository, 'GET', {'repository': 'buynlarge/orgrepo'}, None, 'freshuser', 403), + (Repository, 'GET', {'repository': 'buynlarge/orgrepo'}, None, 'reader', 200), + (Repository, 'PUT', {'repository': 'buynlarge/orgrepo'}, {u'description': 'WXNG'}, None, 401), + (Repository, 'PUT', {'repository': 'buynlarge/orgrepo'}, {u'description': 'WXNG'}, 'devtable', 200), + (Repository, 'PUT', {'repository': 'buynlarge/orgrepo'}, {u'description': 'WXNG'}, 'freshuser', 403), + (Repository, 'PUT', {'repository': 'buynlarge/orgrepo'}, {u'description': 'WXNG'}, 'reader', 403), + + (EntitySearch, 'GET', {'prefix': 'R9NZ'}, None, None, 200), + (EntitySearch, 'GET', {'prefix': 'R9NZ'}, None, 'devtable', 200), + (EntitySearch, 'GET', {'prefix': 'R9NZ'}, None, 'freshuser', 200), + (EntitySearch, 'GET', {'prefix': 'R9NZ'}, None, 'reader', 200), + + (ApplicationInformation, 'GET', {'client_id': '3LGI'}, None, None, 404), + (ApplicationInformation, 'GET', {'client_id': '3LGI'}, None, 'devtable', 404), + (ApplicationInformation, 'GET', {'client_id': '3LGI'}, None, 'freshuser', 404), + (ApplicationInformation, 'GET', {'client_id': '3LGI'}, None, 'reader', 404), + + (OrganizationApplications, 'GET', {'orgname': 'buynlarge'}, None, None, 401), + (OrganizationApplications, 'GET', {'orgname': 'buynlarge'}, None, 'devtable', 200), + (OrganizationApplications, 'GET', {'orgname': 'buynlarge'}, None, 'freshuser', 403), + (OrganizationApplications, 'GET', {'orgname': 'buynlarge'}, None, 'reader', 403), + (OrganizationApplications, 'POST', {'orgname': 'buynlarge'}, {u'name': 'foo'}, None, 401), + (OrganizationApplications, 'POST', {'orgname': 'buynlarge'}, {u'name': 'foo'}, 'devtable', 200), + (OrganizationApplications, 'POST', {'orgname': 'buynlarge'}, {u'name': 'foo'}, 'freshuser', 403), + (OrganizationApplications, 'POST', {'orgname': 'buynlarge'}, {u'name': 'foo'}, 'reader', 403), + + (OrganizationApplicationResource, 'DELETE', {'orgname': 'buynlarge', 'client_id': 'deadbeef'}, None, None, 401), + (OrganizationApplicationResource, 'DELETE', {'orgname': 'buynlarge', 'client_id': 'deadbeef'}, None, 'devtable', 204), + (OrganizationApplicationResource, 'DELETE', {'orgname': 'buynlarge', 'client_id': 'deadbeef'}, None, 'freshuser', 403), + (OrganizationApplicationResource, 'DELETE', {'orgname': 'buynlarge', 'client_id': 'deadbeef'}, None, 'reader', 403), + (OrganizationApplicationResource, 'GET', {'orgname': 'buynlarge', 'client_id': 'deadbeef'}, None, None, 401), + (OrganizationApplicationResource, 'GET', {'orgname': 'buynlarge', 'client_id': 'deadbeef'}, None, 'devtable', 200), + (OrganizationApplicationResource, 'GET', {'orgname': 'buynlarge', 'client_id': 'deadbeef'}, None, 'freshuser', 403), + (OrganizationApplicationResource, 'GET', {'orgname': 'buynlarge', 'client_id': 'deadbeef'}, None, 'reader', 403), + (OrganizationApplicationResource, 'PUT', {'orgname': 'buynlarge', 'client_id': 'deadbeef'}, {u'redirect_uri': 'foo', u'name': 'foo', u'application_uri': 'foo'}, None, 401), + (OrganizationApplicationResource, 'PUT', {'orgname': 'buynlarge', 'client_id': 'deadbeef'}, {u'redirect_uri': 'foo', u'name': 'foo', u'application_uri': 'foo'}, 'devtable', 200), + (OrganizationApplicationResource, 'PUT', {'orgname': 'buynlarge', 'client_id': 'deadbeef'}, {u'redirect_uri': 'foo', u'name': 'foo', u'application_uri': 'foo'}, 'freshuser', 403), + (OrganizationApplicationResource, 'PUT', {'orgname': 'buynlarge', 'client_id': 'deadbeef'}, {u'redirect_uri': 'foo', u'name': 'foo', u'application_uri': 'foo'}, 'reader', 403), + + (OrganizationApplicationResetClientSecret, 'POST', {'orgname': 'buynlarge', 'client_id': 'deadbeef'}, None, None, 401), + (OrganizationApplicationResetClientSecret, 'POST', {'orgname': 'buynlarge', 'client_id': 'deadbeef'}, None, 'devtable', 200), + (OrganizationApplicationResetClientSecret, 'POST', {'orgname': 'buynlarge', 'client_id': 'deadbeef'}, None, 'freshuser', 403), + (OrganizationApplicationResetClientSecret, 'POST', {'orgname': 'buynlarge', 'client_id': 'deadbeef'}, None, 'reader', 403), + + (Users, 'GET', {'username': 'devtable'}, None, None, 200), + + (UserNotificationList, 'GET', None, None, None, 401), + (UserNotificationList, 'GET', None, None, 'devtable', 200), + (UserNotificationList, 'GET', None, None, 'freshuser', 200), + (UserNotificationList, 'GET', None, None, 'reader', 200), + + (UserAuthorizationList, 'GET', None, None, None, 401), + (UserAuthorizationList, 'GET', None, None, 'devtable', 200), + (UserAuthorizationList, 'GET', None, None, 'freshuser', 200), + (UserAuthorizationList, 'GET', None, None, 'reader', 200), + + (UserAuthorization, 'DELETE', {'access_token_uuid': 'fake'}, None, None, 401), + (UserAuthorization, 'DELETE', {'access_token_uuid': 'fake'}, None, 'devtable', 404), + (UserAuthorization, 'DELETE', {'access_token_uuid': 'fake'}, None, 'freshuser', 404), + (UserAuthorization, 'DELETE', {'access_token_uuid': 'fake'}, None, 'reader', 404), + (UserAuthorization, 'GET', {'access_token_uuid': 'fake'}, None, None, 401), + (UserAuthorization, 'GET', {'access_token_uuid': 'fake'}, None, 'devtable', 404), + (UserAuthorization, 'GET', {'access_token_uuid': 'fake'}, None, 'freshuser', 404), + (UserAuthorization, 'GET', {'access_token_uuid': 'fake'}, None, 'reader', 404), + + (UserAggregateLogs, 'GET', None, None, None, 401), + (UserAggregateLogs, 'GET', None, None, 'devtable', 200), + (UserAggregateLogs, 'GET', None, None, 'freshuser', 200), + (UserAggregateLogs, 'GET', None, None, 'reader', 200), + + (OrgAggregateLogs, 'GET', {'orgname': 'buynlarge'}, None, None, 401), + (OrgAggregateLogs, 'GET', {'orgname': 'buynlarge'}, None, 'devtable', 200), + (OrgAggregateLogs, 'GET', {'orgname': 'buynlarge'}, None, 'freshuser', 403), + (OrgAggregateLogs, 'GET', {'orgname': 'buynlarge'}, None, 'reader', 403), + + (RepositoryAggregateLogs, 'GET', {'repository': 'devtable/simple'}, None, None, 401), + (RepositoryAggregateLogs, 'GET', {'repository': 'devtable/simple'}, None, 'devtable', 200), + (RepositoryAggregateLogs, 'GET', {'repository': 'devtable/simple'}, None, 'freshuser', 403), + (RepositoryAggregateLogs, 'GET', {'repository': 'devtable/simple'}, None, 'reader', 403), + + (SuperUserAggregateLogs, 'GET', None, None, None, 401), + (SuperUserAggregateLogs, 'GET', None, None, 'devtable', 200), + (SuperUserAggregateLogs, 'GET', None, None, 'freshuser', 403), + (SuperUserAggregateLogs, 'GET', None, None, 'reader', 403), + + (SuperUserLogs, 'GET', None, None, None, 401), + (SuperUserLogs, 'GET', None, None, 'devtable', 200), + (SuperUserLogs, 'GET', None, None, 'freshuser', 403), + (SuperUserLogs, 'GET', None, None, 'reader', 403), + + (SuperUserSendRecoveryEmail, 'POST', {'username': 'someuser'}, None, None, 401), + (SuperUserSendRecoveryEmail, 'POST', {'username': 'someuser'}, None, 'devtable', 404), + (SuperUserSendRecoveryEmail, 'POST', {'username': 'someuser'}, None, 'freshuser', 403), + (SuperUserSendRecoveryEmail, 'POST', {'username': 'someuser'}, None, 'reader', 403), + + (SuperUserTakeOwnership, 'POST', {'namespace': 'invalidnamespace'}, {}, None, 401), + (SuperUserTakeOwnership, 'POST', {'namespace': 'invalidnamespace'}, {}, 'devtable', 404), + (SuperUserTakeOwnership, 'POST', {'namespace': 'invalidnamespace'}, {}, 'freshuser', 403), + (SuperUserTakeOwnership, 'POST', {'namespace': 'invalidnamespace'}, {}, 'reader', 403), + + (SuperUserServiceKeyApproval, 'POST', {'kid': 1234}, {}, None, 401), + (SuperUserServiceKeyApproval, 'POST', {'kid': 1234}, {}, 'devtable', 404), + (SuperUserServiceKeyApproval, 'POST', {'kid': 1234}, {}, 'freshuser', 403), + (SuperUserServiceKeyApproval, 'POST', {'kid': 1234}, {}, 'reader', 403), + + (SuperUserServiceKeyManagement, 'GET', None, None, None, 401), + (SuperUserServiceKeyManagement, 'GET', None, None, 'devtable', 200), + (SuperUserServiceKeyManagement, 'GET', None, None, 'freshuser', 403), + (SuperUserServiceKeyManagement, 'GET', None, None, 'reader', 403), + (SuperUserServiceKeyManagement, 'POST', None, {'expiration': None, 'service': 'someservice'}, None, 401), + (SuperUserServiceKeyManagement, 'POST', None, {'expiration': None, 'service': 'someservice'}, 'devtable', 200), + (SuperUserServiceKeyManagement, 'POST', None, {'expiration': None, 'service': 'someservice'}, 'freshuser', 403), + (SuperUserServiceKeyManagement, 'POST', None, {'expiration': None, 'service': 'someservice'}, 'reader', 403), + + (SuperUserServiceKey, 'DELETE', {'kid': 1234}, None, None, 401), + (SuperUserServiceKey, 'DELETE', {'kid': 1234}, None, 'devtable', 404), + (SuperUserServiceKey, 'DELETE', {'kid': 1234}, None, 'freshuser', 403), + (SuperUserServiceKey, 'DELETE', {'kid': 1234}, None, 'reader', 403), + (SuperUserServiceKey, 'GET', {'kid': 1234}, None, None, 401), + (SuperUserServiceKey, 'GET', {'kid': 1234}, None, 'devtable', 404), + (SuperUserServiceKey, 'GET', {'kid': 1234}, None, 'freshuser', 403), + (SuperUserServiceKey, 'GET', {'kid': 1234}, None, 'reader', 403), + (SuperUserServiceKey, 'PUT', {'kid': 1234}, {}, None, 401), + (SuperUserServiceKey, 'PUT', {'kid': 1234}, {}, 'devtable', 404), + (SuperUserServiceKey, 'PUT', {'kid': 1234}, {}, 'freshuser', 403), + (SuperUserServiceKey, 'PUT', {'kid': 1234}, {}, 'reader', 403), + + (TeamMemberInvite, 'DELETE', {'code': 'foobarbaz'}, None, None, 401), + (TeamMemberInvite, 'DELETE', {'code': 'foobarbaz'}, None, 'devtable', 400), + (TeamMemberInvite, 'DELETE', {'code': 'foobarbaz'}, None, 'freshuser', 400), + (TeamMemberInvite, 'DELETE', {'code': 'foobarbaz'}, None, 'reader', 400), + (TeamMemberInvite, 'PUT', {'code': 'foobarbaz'}, None, None, 401), + (TeamMemberInvite, 'PUT', {'code': 'foobarbaz'}, None, 'devtable', 400), + (TeamMemberInvite, 'PUT', {'code': 'foobarbaz'}, None, 'freshuser', 400), + (TeamMemberInvite, 'PUT', {'code': 'foobarbaz'}, None, 'reader', 400), + + (ConductSearch, 'GET', None, None, None, 200), + (ConductSearch, 'GET', None, None, 'devtable', 200), + + (ChangeLog, 'GET', None, None, None, 401), + (ChangeLog, 'GET', None, None, 'devtable', 200), + (ChangeLog, 'GET', None, None, 'freshuser', 403), + (ChangeLog, 'GET', None, None, 'reader', 403), + + (SuperUserOrganizationList, 'GET', None, None, None, 401), + (SuperUserOrganizationList, 'GET', None, None, 'devtable', 200), + (SuperUserOrganizationList, 'GET', None, None, 'freshuser', 403), + (SuperUserOrganizationList, 'GET', None, None, 'reader', 403), + + (SuperUserOrganizationManagement, 'DELETE', {'name': 'buynlarge'}, None, None, 401), + (SuperUserOrganizationManagement, 'DELETE', {'name': 'buynlarge'}, None, 'devtable', 204), + (SuperUserOrganizationManagement, 'DELETE', {'name': 'buynlarge'}, None, 'freshuser', 403), + (SuperUserOrganizationManagement, 'DELETE', {'name': 'buynlarge'}, None, 'reader', 403), + (SuperUserOrganizationManagement, 'PUT', {'name': 'buynlarge'}, {}, None, 401), + (SuperUserOrganizationManagement, 'PUT', {'name': 'buynlarge'}, {}, 'devtable', 200), + (SuperUserOrganizationManagement, 'PUT', {'name': 'buynlarge'}, {}, 'freshuser', 403), + (SuperUserOrganizationManagement, 'PUT', {'name': 'buynlarge'}, {}, 'reader', 403), + + (SuperUserList, 'GET', None, None, None, 401), + (SuperUserList, 'GET', None, None, 'devtable', 200), + (SuperUserList, 'GET', None, None, 'freshuser', 403), + (SuperUserList, 'GET', None, None, 'reader', 403), + + (SuperUserList, 'POST', None, {'username': 'foo'}, None, 401), + (SuperUserList, 'POST', None, {'username': 'foo'}, 'devtable', 400), + (SuperUserList, 'POST', None, {'username': 'foo'}, 'freshuser', 403), + (SuperUserList, 'POST', None, {'username': 'foo'}, 'reader', 403), + + (SuperUserCustomCertificates, 'GET', None, None, None, 401), + (SuperUserCustomCertificates, 'GET', None, None, 'devtable', 200), + (SuperUserCustomCertificates, 'GET', None, None, 'freshuser', 403), + (SuperUserCustomCertificates, 'GET', None, None, 'reader', 403), + + (SuperUserSystemLogServices, 'GET', None, None, None, 401), + (SuperUserSystemLogServices, 'GET', None, None, 'devtable', 200), + (SuperUserSystemLogServices, 'GET', None, None, 'freshuser', 403), + (SuperUserSystemLogServices, 'GET', None, None, 'reader', 403), + + (SuperUserGetLogsForService, 'GET', {'service': 'foo'}, None, None, 401), + (SuperUserGetLogsForService, 'GET', {'service': 'foo'}, None, 'devtable', 404), + (SuperUserGetLogsForService, 'GET', {'service': 'foo'}, None, 'freshuser', 403), + (SuperUserGetLogsForService, 'GET', {'service': 'foo'}, None, 'reader', 403), + + (SuperUserCustomCertificate, 'DELETE', {'certpath': 'somecert.crt'}, None, None, 401), + (SuperUserCustomCertificate, 'DELETE', {'certpath': 'somecert.crt'}, None, 'devtable', 204), + (SuperUserCustomCertificate, 'DELETE', {'certpath': 'somecert.crt'}, None, 'freshuser', 403), + (SuperUserCustomCertificate, 'DELETE', {'certpath': 'somecert.crt'}, None, 'reader', 403), + (SuperUserCustomCertificate, 'POST', {'certpath': 'somecert.crt'}, None, None, 401), + (SuperUserCustomCertificate, 'POST', {'certpath': 'somecert.crt'}, None, 'devtable', 400), + (SuperUserCustomCertificate, 'POST', {'certpath': 'somecert.crt'}, None, 'freshuser', 403), + (SuperUserCustomCertificate, 'POST', {'certpath': 'somecert.crt'}, None, 'reader', 403), + + (SuperUserManagement, 'DELETE', {'username': 'freshuser'}, None, None, 401), + (SuperUserManagement, 'DELETE', {'username': 'freshuser'}, None, 'devtable', 204), + (SuperUserManagement, 'DELETE', {'username': 'freshuser'}, None, 'freshuser', 403), + (SuperUserManagement, 'DELETE', {'username': 'freshuser'}, None, 'reader', 403), + (SuperUserManagement, 'GET', {'username': 'freshuser'}, None, None, 401), + (SuperUserManagement, 'GET', {'username': 'freshuser'}, None, 'devtable', 200), + (SuperUserManagement, 'GET', {'username': 'freshuser'}, None, 'freshuser', 403), + (SuperUserManagement, 'GET', {'username': 'freshuser'}, None, 'reader', 403), + (SuperUserManagement, 'PUT', {'username': 'freshuser'}, {}, None, 401), + (SuperUserManagement, 'PUT', {'username': 'freshuser'}, {}, 'devtable', 200), + (SuperUserManagement, 'PUT', {'username': 'freshuser'}, {}, 'freshuser', 403), + (SuperUserManagement, 'PUT', {'username': 'freshuser'}, {}, 'reader', 403), + + (GlobalUserMessages, 'GET', None, None, None, 200), + + (GlobalUserMessages, 'POST', None, None, None, 401), + (GlobalUserMessages, 'POST', None, {'message': {'content': 'msg', 'media_type': 'text/plain', 'severity': 'info'}}, 'devtable', 201), + (GlobalUserMessages, 'POST', None, {'message': {'content': 'msg', 'media_type': 'text/plain', 'severity': 'info'}}, 'freshuser', 403), + (GlobalUserMessages, 'POST', None, {'message': {'content': 'msg', 'media_type': 'text/plain', 'severity': 'info'}}, 'reader', 403), + + (GlobalUserMessage, 'DELETE', {'uuid': '1234'}, None, None, 401), + (GlobalUserMessage, 'DELETE', {'uuid': '1234'}, None, 'devtable', 204), + (GlobalUserMessage, 'DELETE', {'uuid': '1234'}, None, 'freshuser', 403), + (GlobalUserMessage, 'DELETE', {'uuid': '1234'}, None, 'reader', 403), + + (UserInvoiceFieldList, 'GET', None, None, None, 401), + (UserInvoiceFieldList, 'GET', None, None, 'devtable', 200), + (UserInvoiceFieldList, 'GET', None, None, 'freshuser', 404), + (UserInvoiceFieldList, 'GET', None, None, 'reader', 404), + (UserInvoiceFieldList, 'POST', None, None, None, 401), + (UserInvoiceFieldList, 'POST', None, {'value': 'bar', 'title': 'foo'}, 'devtable', 200), + (UserInvoiceFieldList, 'POST', None, {'value': 'bar', 'title': 'foo'}, 'freshuser', 404), + (UserInvoiceFieldList, 'POST', None, {'value': 'bar', 'title': 'foo'}, 'reader', 404), + + (UserInvoiceField, 'DELETE', {'field_uuid': '1234'}, None, None, 401), + (UserInvoiceField, 'DELETE', {'field_uuid': '1234'}, None, 'devtable', 201), + (UserInvoiceField, 'DELETE', {'field_uuid': '1234'}, None, 'freshuser', 404), + (UserInvoiceField, 'DELETE', {'field_uuid': '1234'}, None, 'reader', 404), + + (OrganizationInvoiceFieldList, 'GET', {'orgname': 'buynlarge'}, None, None, 403), + (OrganizationInvoiceFieldList, 'GET', {'orgname': 'buynlarge'}, None, 'devtable', 200), + (OrganizationInvoiceFieldList, 'GET', {'orgname': 'buynlarge'}, None, 'freshuser', 403), + (OrganizationInvoiceFieldList, 'GET', {'orgname': 'buynlarge'}, None, 'reader', 403), + (OrganizationInvoiceFieldList, 'POST', {'orgname': 'buynlarge'}, {'value': 'bar', 'title': 'foo'}, None, 403), + (OrganizationInvoiceFieldList, 'POST', {'orgname': 'buynlarge'}, {'value': 'bar', 'title': 'foo'}, 'devtable', 200), + (OrganizationInvoiceFieldList, 'POST', {'orgname': 'buynlarge'}, {'value': 'bar', 'title': 'foo'}, 'freshuser', 403), + (OrganizationInvoiceFieldList, 'POST', {'orgname': 'buynlarge'}, {'value': 'bar', 'title': 'foo'}, 'reader', 403), + + (OrganizationInvoiceField, 'DELETE', {'orgname': 'buynlarge', 'field_uuid': '1234'}, None, None, 403), + (OrganizationInvoiceField, 'DELETE', {'orgname': 'buynlarge', 'field_uuid': '1234'}, None, 'devtable', 201), + (OrganizationInvoiceField, 'DELETE', {'orgname': 'buynlarge', 'field_uuid': '1234'}, None, 'freshuser', 403), + (OrganizationInvoiceField, 'DELETE', {'orgname': 'buynlarge', 'field_uuid': '1234'}, None, 'reader', 403), + + (RepositoryImageSecurity, 'GET', {'repository': 'devtable/simple', 'imageid': 'fake'}, None, None, 401), + (RepositoryImageSecurity, 'GET', {'repository': 'devtable/simple', 'imageid': 'fake'}, None, 'devtable', 404), + (RepositoryImageSecurity, 'GET', {'repository': 'devtable/simple', 'imageid': 'fake'}, None, 'freshuser', 403), + (RepositoryImageSecurity, 'GET', {'repository': 'devtable/simple', 'imageid': 'fake'}, None, 'reader', 403), + + (RepositoryManifestSecurity, 'GET', {'manifestref': 'sha256:abcd', 'repository': 'devtable/simple'}, None, None, 401), + (RepositoryManifestSecurity, 'GET', {'manifestref': 'sha256:abcd', 'repository': 'devtable/simple'}, None, 'devtable', 404), + (RepositoryManifestSecurity, 'GET', {'manifestref': 'sha256:abcd', 'repository': 'devtable/simple'}, None, 'freshuser', 403), + (RepositoryManifestSecurity, 'GET', {'manifestref': 'sha256:abcd', 'repository': 'devtable/simple'}, None, 'reader', 403), + + (RepositoryManifestLabels, 'GET', {'manifestref': 'sha256:abcd', 'repository': 'devtable/simple'}, None, None, 401), + (RepositoryManifestLabels, 'GET', {'manifestref': 'sha256:abcd', 'repository': 'devtable/simple'}, None, 'devtable', 404), + (RepositoryManifestLabels, 'GET', {'manifestref': 'sha256:abcd', 'repository': 'devtable/simple'}, None, 'freshuser', 403), + (RepositoryManifestLabels, 'GET', {'manifestref': 'sha256:abcd', 'repository': 'devtable/simple'}, None, 'reader', 403), + (RepositoryManifestLabels, 'POST', {'manifestref': 'sha256:abcd', 'repository': 'devtable/simple'}, {'media_type': 'text/plain', 'value': 'bar', 'key': 'foo'}, None, 401), + (RepositoryManifestLabels, 'POST', {'manifestref': 'sha256:abcd', 'repository': 'devtable/simple'}, {'media_type': 'text/plain', 'value': 'bar', 'key': 'foo'}, 'devtable', 404), + (RepositoryManifestLabels, 'POST', {'manifestref': 'sha256:abcd', 'repository': 'devtable/simple'}, {'media_type': 'text/plain', 'value': 'bar', 'key': 'foo'}, 'freshuser', 403), + (RepositoryManifestLabels, 'POST', {'manifestref': 'sha256:abcd', 'repository': 'devtable/simple'}, {'media_type': 'text/plain', 'value': 'bar', 'key': 'foo'}, 'reader', 403), + + (ManageRepositoryManifestLabel, 'GET', {'labelid': 'someid', 'manifestref': 'sha256:abcd', 'repository': 'devtable/simple'}, None, None, 401), + (ManageRepositoryManifestLabel, 'GET', {'labelid': 'someid', 'manifestref': 'sha256:abcd', 'repository': 'devtable/simple'}, None, 'devtable', 404), + (ManageRepositoryManifestLabel, 'GET', {'labelid': 'someid', 'manifestref': 'sha256:abcd', 'repository': 'devtable/simple'}, None, 'freshuser', 403), + (ManageRepositoryManifestLabel, 'GET', {'labelid': 'someid', 'manifestref': 'sha256:abcd', 'repository': 'devtable/simple'}, None, 'reader', 403), + + (ManageRepositoryManifestLabel, 'DELETE', {'labelid': 'someid', 'manifestref': 'sha256:abcd', 'repository': 'devtable/simple'}, None, None, 401), + (ManageRepositoryManifestLabel, 'DELETE', {'labelid': 'someid', 'manifestref': 'sha256:abcd', 'repository': 'devtable/simple'}, None, 'devtable', 404), + (ManageRepositoryManifestLabel, 'DELETE', {'labelid': 'someid', 'manifestref': 'sha256:abcd', 'repository': 'devtable/simple'}, None, 'freshuser', 403), + (ManageRepositoryManifestLabel, 'DELETE', {'labelid': 'someid', 'manifestref': 'sha256:abcd', 'repository': 'devtable/simple'}, None, 'reader', 403), + + (InviteTeamMember, 'PUT', {'orgname': 'buynlarge', 'teamname': 'owners', 'email': 'a@example.com'}, None, None, 401), + (InviteTeamMember, 'PUT', {'orgname': 'buynlarge', 'teamname': 'owners', 'email': 'a@example.com'}, None, 'devtable', 200), + (InviteTeamMember, 'PUT', {'orgname': 'buynlarge', 'teamname': 'owners', 'email': 'a@example.com'}, None, 'freshuser', 403), + (InviteTeamMember, 'PUT', {'orgname': 'buynlarge', 'teamname': 'owners', 'email': 'a@example.com'}, None, 'reader', 403), + + (InviteTeamMember, 'DELETE', {'orgname': 'buynlarge', 'teamname': 'owners', 'email': 'a@example.com'}, None, None, 401), + (InviteTeamMember, 'DELETE', {'orgname': 'buynlarge', 'teamname': 'owners', 'email': 'a@example.com'}, None, 'devtable', 404), + (InviteTeamMember, 'DELETE', {'orgname': 'buynlarge', 'teamname': 'owners', 'email': 'a@example.com'}, None, 'freshuser', 403), + (InviteTeamMember, 'DELETE', {'orgname': 'buynlarge', 'teamname': 'owners', 'email': 'a@example.com'}, None, 'reader', 403), + + (TestRepositoryNotification, 'POST', {'repository': 'buynlarge/orgrepo', 'uuid': 'foo'}, None, None, 401), + (TestRepositoryNotification, 'POST', {'repository': 'buynlarge/orgrepo', 'uuid': 'foo'}, None, 'devtable', 400), + (TestRepositoryNotification, 'POST', {'repository': 'buynlarge/orgrepo', 'uuid': 'foo'}, None, 'freshuser', 403), + (TestRepositoryNotification, 'POST', {'repository': 'buynlarge/orgrepo', 'uuid': 'foo'}, None, 'reader', 403), + + (LinkExternalEntity, 'POST', {'username': 'foo'}, None, None, 404), + + (BuildTriggerSourceNamespaces, 'GET', {'repository': 'devtable/simple', 'trigger_uuid': 'foo'}, None, None, 401), + (BuildTriggerSourceNamespaces, 'GET', {'repository': 'devtable/simple', 'trigger_uuid': 'foo'}, None, 'devtable', 404), + (BuildTriggerSourceNamespaces, 'GET', {'repository': 'devtable/simple', 'trigger_uuid': 'foo'}, None, 'freshuser', 403), + (BuildTriggerSourceNamespaces, 'GET', {'repository': 'devtable/simple', 'trigger_uuid': 'foo'}, None, 'reader', 403), +] + +@pytest.mark.parametrize('resource,method,params,body,identity,expected', SECURITY_TESTS) def test_api_security(resource, method, params, body, identity, expected, client): with client_with_identity(identity, client) as cl: conduct_api_call(cl, resource, method, params, body, expected) +ALLOWED_MISSING_MODULES = {'endpoints.api.suconfig', 'endpoints.api.error', 'data.userfiles'} + +def test_all_apis_tested(app): + required_tests = set() + + for rule in app.url_map.iter_rules(): + endpoint_method = app.view_functions[rule.endpoint] + + # Verify that we have a view class for this API method. + if not 'view_class' in dir(endpoint_method): + continue + + view_class = endpoint_method.view_class + if view_class.__module__ in ALLOWED_MISSING_MODULES: + continue + + method_names = list(rule.methods.difference(['HEAD', 'OPTIONS'])) + full_name = '%s.%s' % (view_class.__module__, view_class.__name__) + for method_name in method_names: + required_tests.add('%s::%s' % (full_name, method_name.upper())) + + assert required_tests + + for test in SECURITY_TESTS: + view_class = test[0] + required_tests.discard('%s.%s::%s' % (view_class.__module__, view_class.__name__, + test[1].upper())) + + assert not required_tests, "API security tests missing for: %s" % required_tests + + @pytest.mark.parametrize('is_superuser', [ (True), (False), diff --git a/endpoints/test/shared.py b/endpoints/test/shared.py index 7b540abde..115149fe4 100644 --- a/endpoints/test/shared.py +++ b/endpoints/test/shared.py @@ -14,11 +14,11 @@ CSRF_TOKEN = '123csrfforme' @contextmanager def client_with_identity(auth_username, client): with client.session_transaction() as sess: + sess[CSRF_TOKEN_KEY] = CSRF_TOKEN if auth_username and auth_username is not None: loaded = model.user.get_user(auth_username) sess['user_id'] = loaded.uuid sess['login_time'] = datetime.datetime.now() - sess[CSRF_TOKEN_KEY] = CSRF_TOKEN else: sess['user_id'] = 'anonymous' diff --git a/test/fixtures.py b/test/fixtures.py index 68e461510..ce6a339e2 100644 --- a/test/fixtures.py +++ b/test/fixtures.py @@ -7,6 +7,7 @@ import shutil from flask import Flask, jsonify from flask_login import LoginManager from flask_principal import identity_loaded, Permission, Identity, identity_changed, Principal +from flask_mail import Mail from peewee import SqliteDatabase, savepoint, InternalError from app import app as application @@ -14,6 +15,7 @@ from auth.permissions import on_identity_loaded from data import model from data.database import close_db_filter, db, configure from data.model.user import LoginWrappedDBUser +from data.userfiles import Userfiles from endpoints.api import api_bp from endpoints.appr import appr_bp from endpoints.web import web @@ -124,6 +126,9 @@ def appconfig(database_uri): "DATA_MODEL_CACHE_CONFIG": { 'engine': 'inmemory', }, + "USERFILES_PATH": "userfiles/", + "MAIL_SERVER": "", + "MAIL_DEFAULT_SENDER": 'support@quay.io', } return conf @@ -192,4 +197,8 @@ def app(appconfig, initialized_db): app.register_blueprint(webhooks, url_prefix='/webhooks') app.config.update(appconfig) + + Userfiles(app) + Mail(app) + return app diff --git a/test/test_api_security.py b/test/test_api_security.py deleted file mode 100644 index 0835ed3a9..000000000 --- a/test/test_api_security.py +++ /dev/null @@ -1,4456 +0,0 @@ -import unittest -import json -import datetime - -from urllib import urlencode -from urlparse import urlparse, urlunparse, parse_qs - -from app import app -from data import model -from initdb import setup_database_for_testing, finished_database_for_testing -from endpoints.api import api_bp, api - -from endpoints.api.team import (TeamMember, TeamMemberList, OrganizationTeam, TeamMemberInvite, - TeamPermissions) -from endpoints.api.tag import RepositoryTagImages, RepositoryTag, ListRepositoryTags, RestoreTag -from endpoints.api.search import EntitySearch -from endpoints.api.image import RepositoryImage, RepositoryImageList -from endpoints.api.build import (FileDropResource, RepositoryBuildStatus, RepositoryBuildLogs, - RepositoryBuildList, RepositoryBuildResource) -from endpoints.api.robot import (UserRobotList, OrgRobot, OrgRobotList, UserRobot, - RegenerateOrgRobot, RegenerateUserRobot, UserRobotPermissions, - OrgRobotPermissions) -from endpoints.api.trigger import (BuildTriggerActivate, BuildTriggerSources, BuildTriggerSubdirs, - TriggerBuildList, ActivateBuildTrigger, BuildTrigger, - BuildTriggerList, BuildTriggerAnalyze, BuildTriggerFieldValues) -from endpoints.api.repoemail import RepositoryAuthorizedEmail -from endpoints.api.repositorynotification import RepositoryNotification, RepositoryNotificationList -from endpoints.api.user import (PrivateRepositories, ConvertToOrganization, Recovery, Signout, - Signin, User, UserAuthorizationList, UserAuthorization, UserNotification, - VerifyUser, DetachExternal, StarredRepositoryList, StarredRepository, - ClientKey, ExternalLoginInformation) -from endpoints.api.repotoken import RepositoryToken, RepositoryTokenList -from endpoints.api.prototype import PermissionPrototype, PermissionPrototypeList -from endpoints.api.logs import UserLogs, OrgLogs, RepositoryLogs -from endpoints.api.billing import (UserInvoiceList, UserCard, UserPlan, ListPlans, - OrganizationInvoiceList, OrganizationCard, OrganizationPlan, - UserInvoiceFieldList, UserInvoiceField, - OrganizationInvoiceFieldList, OrganizationInvoiceField) -from endpoints.api.discovery import DiscoveryResource -from endpoints.api.organization import (OrganizationList, OrganizationMember, - OrgPrivateRepositories, OrganizationMemberList, - Organization, ApplicationInformation, - OrganizationApplications, OrganizationApplicationResource, - OrganizationApplicationResetClientSecret) -from endpoints.api.repository import RepositoryList, RepositoryVisibility, Repository -from endpoints.api.permission import (RepositoryUserPermission, RepositoryTeamPermission, - RepositoryTeamPermissionList, RepositoryUserPermissionList, - RepositoryUserTransitivePermission) -from endpoints.api.superuser import (SuperUserLogs, SuperUserList, SuperUserManagement, - SuperUserSendRecoveryEmail, ChangeLog, - SuperUserOrganizationManagement, SuperUserOrganizationList, - SuperUserAggregateLogs, SuperUserServiceKeyManagement, - SuperUserServiceKey, SuperUserServiceKeyApproval, - SuperUserTakeOwnership, - SuperUserCustomCertificates, - SuperUserCustomCertificate, SuperUserRepositoryBuildLogs, - SuperUserRepositoryBuildResource, SuperUserRepositoryBuildStatus) -from endpoints.api.globalmessages import GlobalUserMessage, GlobalUserMessages -from endpoints.api.secscan import RepositoryImageSecurity, RepositoryManifestSecurity -from endpoints.api.manifest import RepositoryManifestLabels, ManageRepositoryManifestLabel - - -try: - app.register_blueprint(api_bp, url_prefix='/api') -except ValueError: - # This blueprint was already registered - pass - -CSRF_TOKEN_KEY = '_csrf_token' -CSRF_TOKEN = '123csrfforme' - - -class ApiTestCase(unittest.TestCase): - @staticmethod - def _add_csrf(without_csrf): - parts = urlparse(without_csrf) - query = parse_qs(parts[4]) - query[CSRF_TOKEN_KEY] = CSRF_TOKEN - return urlunparse(list(parts[0:4]) + [urlencode(query)] + list(parts[5:])) - - def _set_url(self, resource, **url_params): - with app.test_request_context(): - self.url = api.url_for(resource, **url_params) - - def _run_test(self, method, expected_status, auth_username=None, request_body=None): - with app.test_client() as client: - # Temporarily remove the teardown functions - teardown_funcs = [] - if None in app.teardown_request_funcs: - teardown_funcs = app.teardown_request_funcs[None] - app.teardown_request_funcs[None] = [] - - with client.session_transaction() as sess: - if auth_username: - loaded = model.user.get_user(auth_username) - sess['user_id'] = loaded.uuid - sess['login_time'] = datetime.datetime.now() - sess[CSRF_TOKEN_KEY] = CSRF_TOKEN - - # Restore the teardown functions - app.teardown_request_funcs[None] = teardown_funcs - - open_kwargs = { - 'method': method - } - - final_url = self.url - if method != 'GET' and method != 'HEAD': - final_url = self._add_csrf(self.url) - - open_kwargs.update({ - 'data': json.dumps(request_body), - 'content_type': 'application/json', - }) - - rv = client.open(final_url, **open_kwargs) - msg = '%s %s: %s expected: %s' % (method, final_url, rv.status_code, expected_status) - if rv.status_code != expected_status: - print rv.data - - self.assertEqual(rv.status_code, expected_status, msg) - - def setUp(self): - setup_database_for_testing(self) - - def tearDown(self): - finished_database_for_testing(self) - - -class TestUserStarredRepositoryList(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(StarredRepositoryList) - - def test_get_anonymous(self): - self._run_test('GET', 401, None, None) - - def test_get_freshuser(self): - self._run_test('GET', 200, 'freshuser', None) - - def test_get_reader(self): - self._run_test('GET', 200, 'reader', None) - - def test_get_devtable(self): - self._run_test('GET', 200, 'devtable', None) - - def test_post_anonymous(self): - self._run_test('POST', 401, None, {u'namespace': 'public', - u'repository': 'publicrepo'}) - - def test_post_freshuser(self): - self._run_test('POST', 201, 'freshuser', {u'namespace': 'public', - u'repository': 'publicrepo'}) - - def test_post_reader(self): - self._run_test('POST', 201, 'reader', {u'namespace': 'public', - u'repository': 'publicrepo'}) - - def test_post_devtable(self): - self._run_test('POST', 201, 'devtable', {u'namespace': 'public', - u'repository': 'publicrepo'}) - - -class TestUserStarredRepository(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(StarredRepository, repository="public/publicrepo") - - def test_delete_anonymous(self): - self._run_test('DELETE', 401, None, None) - - def test_delete_freshuser(self): - self._run_test('DELETE', 204, 'freshuser', None) - - def test_delete_reader(self): - self._run_test('DELETE', 204, 'reader', None) - - def test_delete_devtable(self): - self._run_test('DELETE', 204, 'devtable', None) - - -class TestUserNotification(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(UserNotification, uuid='someuuid') - - def test_get_anonymous(self): - self._run_test('GET', 401, None, None) - - def test_get_freshuser(self): - self._run_test('GET', 404, 'freshuser', None) - - def test_get_reader(self): - self._run_test('GET', 404, 'reader', None) - - def test_get_devtable(self): - self._run_test('GET', 404, 'devtable', None) - - def test_put_anonymous(self): - self._run_test('PUT', 401, None, {}) - - def test_put_freshuser(self): - self._run_test('PUT', 404, 'freshuser', {}) - - def test_put_reader(self): - self._run_test('PUT', 404, 'reader', {}) - - def test_put_devtable(self): - self._run_test('PUT', 404, 'devtable', {}) - - -class TestUserInvoiceList(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(UserInvoiceList) - - def test_get_anonymous(self): - self._run_test('GET', 401, None, None) - - def test_get_freshuser(self): - self._run_test('GET', 404, 'freshuser', None) - - def test_get_reader(self): - self._run_test('GET', 404, 'reader', None) - - def test_get_devtable(self): - self._run_test('GET', 200, 'devtable', None) - - -class TestPrivateRepositories(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(PrivateRepositories) - - def test_get_anonymous(self): - self._run_test('GET', 401, None, None) - - def test_get_freshuser(self): - self._run_test('GET', 200, 'freshuser', None) - - def test_get_reader(self): - self._run_test('GET', 200, 'reader', None) - - def test_get_devtable(self): - self._run_test('GET', 200, 'devtable', None) - - -class TestConvertToOrganization(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(ConvertToOrganization) - - def test_post_anonymous(self): - self._run_test('POST', 401, None, {u'plan': '1RB4', u'adminUser': '44E8', - u'adminPassword': 'IQTM'}) - - def test_post_freshuser(self): - self._run_test('POST', 400, 'freshuser', {u'plan': '1RB4', u'adminUser': '44E8', - u'adminPassword': 'IQTM'}) - - def test_post_reader(self): - self._run_test('POST', 400, 'reader', {u'plan': '1RB4', u'adminUser': '44E8', - u'adminPassword': 'IQTM'}) - - def test_post_devtable(self): - self._run_test('POST', 400, 'devtable', {u'plan': '1RB4', u'adminUser': '44E8', - u'adminPassword': 'IQTM'}) - - -class TestUserRobotList(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(UserRobotList) - - def test_get_anonymous(self): - self._run_test('GET', 401, None, None) - - def test_get_freshuser(self): - self._run_test('GET', 200, 'freshuser', None) - - def test_get_reader(self): - self._run_test('GET', 200, 'reader', None) - - def test_get_devtable(self): - self._run_test('GET', 200, 'devtable', None) - - -class TestUserCard(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(UserCard) - - def test_get_anonymous(self): - self._run_test('GET', 401, None, None) - - def test_get_freshuser(self): - self._run_test('GET', 200, 'freshuser', None) - - def test_get_reader(self): - self._run_test('GET', 200, 'reader', None) - - def test_get_devtable(self): - self._run_test('GET', 200, 'devtable', None) - - def test_post_anonymous(self): - self._run_test('POST', 401, None, {u'token': 'ORH4'}) - - -class TestUserPlan(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(UserPlan) - - def test_get_anonymous(self): - self._run_test('GET', 401, None, None) - - def test_get_freshuser(self): - self._run_test('GET', 200, 'freshuser', None) - - def test_get_reader(self): - self._run_test('GET', 200, 'reader', None) - - def test_get_devtable(self): - self._run_test('GET', 200, 'devtable', None) - - def test_put_anonymous(self): - self._run_test('PUT', 401, None, {u'plan': '1QIK'}) - - -class TestUserLogs(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(UserLogs) - - def test_get_anonymous(self): - self._run_test('GET', 401, None, None) - - def test_get_freshuser(self): - self._run_test('GET', 200, 'freshuser', None) - - def test_get_reader(self): - self._run_test('GET', 200, 'reader', None) - - def test_get_devtable(self): - self._run_test('GET', 200, 'devtable', None) - - -class TestOrganizationList(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(OrganizationList) - - def test_post_anonymous(self): - self._run_test('POST', 401, None, {u'name': 'KSIS', u'email': 'DHVZ'}) - - def test_post_freshuser(self): - self._run_test('POST', 400, 'freshuser', {u'name': 'KSIS', u'email': 'DHVZ'}) - - def test_post_reader(self): - self._run_test('POST', 400, 'reader', {u'name': 'KSIS', u'email': 'DHVZ'}) - - def test_post_devtable(self): - self._run_test('POST', 400, 'devtable', {u'name': 'KSIS', u'email': 'DHVZ'}) - - -class TestPublicRepository(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(Repository, repository="public/publicrepo") - - def test_get_anonymous(self): - self._run_test('GET', 200, None, None) - - def test_get_freshuser(self): - self._run_test('GET', 200, 'freshuser', None) - - def test_get_reader(self): - self._run_test('GET', 200, 'reader', None) - - def test_get_devtable(self): - self._run_test('GET', 200, 'devtable', None) - - -class TestRepositoryList(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(RepositoryList) - - def test_get_anonymous(self): - self._run_test('GET', 400, None, None) - - def test_get_freshuser(self): - self._run_test('GET', 400, 'freshuser', None) - - def test_get_reader(self): - self._run_test('GET', 400, 'reader', None) - - def test_get_devtable(self): - self._run_test('GET', 400, 'devtable', None) - - def test_post_anonymous(self): - self._run_test('POST', 400, None, {u'visibility': u'public', u'repository': 'XZGB', - u'description': '0O8U'}) - - def test_post_freshuser(self): - self._run_test('POST', 201, 'freshuser', {u'visibility': u'public', u'repository': 'XZGB', - u'description': '0O8U'}) - - def test_post_reader(self): - self._run_test('POST', 201, 'reader', {u'visibility': u'public', u'repository': 'XZGB', - u'description': '0O8U'}) - - def test_post_devtable(self): - self._run_test('POST', 201, 'devtable', {u'visibility': u'public', u'repository': 'XZGB', - u'description': '0O8U'}) - - -class TestDiscoveryResource(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(DiscoveryResource) - - def test_get_anonymous(self): - self._run_test('GET', 200, None, None) - - def test_get_freshuser(self): - self._run_test('GET', 200, 'freshuser', None) - - def test_get_reader(self): - self._run_test('GET', 200, 'reader', None) - - def test_get_devtable(self): - self._run_test('GET', 200, 'devtable', None) - - -class TestFileDropResource(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(FileDropResource) - - def test_post_anonymous(self): - self._run_test('POST', 200, None, {u'mimeType': 'TKBX'}) - - def test_post_freshuser(self): - self._run_test('POST', 200, 'freshuser', {u'mimeType': 'TKBX'}) - - def test_post_reader(self): - self._run_test('POST', 200, 'reader', {u'mimeType': 'TKBX'}) - - def test_post_devtable(self): - self._run_test('POST', 200, 'devtable', {u'mimeType': 'TKBX'}) - - -class TestRecovery(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(Recovery) - - def test_post_anonymous(self): - self._run_test('POST', 200, None, {u'email': '826S'}) - - def test_post_freshuser(self): - self._run_test('POST', 200, 'freshuser', {u'email': '826S'}) - - def test_post_reader(self): - self._run_test('POST', 200, 'reader', {u'email': '826S'}) - - def test_post_devtable(self): - self._run_test('POST', 200, 'devtable', {u'email': '826S'}) - - -class TestSignout(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(Signout) - - def test_post_anonymous(self): - self._run_test('POST', 200, None, None) - - def test_post_freshuser(self): - self._run_test('POST', 200, 'freshuser', None) - - def test_post_reader(self): - self._run_test('POST', 200, 'reader', None) - - def test_post_devtable(self): - self._run_test('POST', 200, 'devtable', None) - - -class TestSignin(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(Signin) - - def test_post_anonymous(self): - self._run_test('POST', 403, None, {u'username': 'E9RY', u'password': 'LQ0N'}) - - def test_post_freshuser(self): - self._run_test('POST', 403, 'freshuser', {u'username': 'E9RY', u'password': 'LQ0N'}) - - def test_post_reader(self): - self._run_test('POST', 403, 'reader', {u'username': 'E9RY', u'password': 'LQ0N'}) - - def test_post_devtable(self): - self._run_test('POST', 403, 'devtable', {u'username': 'E9RY', u'password': 'LQ0N'}) - - -class TestExternalLoginInformation(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(ExternalLoginInformation, service_id='someservice') - - def test_post_anonymous(self): - self._run_test('POST', 400, None, {}) - - def test_post_freshuser(self): - self._run_test('POST', 400, 'freshuser', {}) - - def test_post_reader(self): - self._run_test('POST', 400, 'reader', {}) - - def test_post_devtable(self): - self._run_test('POST', 400, 'devtable', {}) - - -class TestDetachExternal(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(DetachExternal, service_id='someservice') - - def test_post_anonymous(self): - self._run_test('POST', 401, None, {}) - - def test_post_freshuser(self): - self._run_test('POST', 200, 'freshuser', {}) - - def test_post_reader(self): - self._run_test('POST', 200, 'reader', {}) - - def test_post_devtable(self): - self._run_test('POST', 200, 'devtable', {}) - - -class TestVerifyUser(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(VerifyUser) - - def test_post_anonymous(self): - self._run_test('POST', 401, None, {u'password': 'LQ0N'}) - - def test_post_freshuser(self): - self._run_test('POST', 403, 'freshuser', {u'password': 'LQ0N'}) - - def test_post_reader(self): - self._run_test('POST', 403, 'reader', {u'password': 'LQ0N'}) - - def test_post_devtable(self): - self._run_test('POST', 200, 'devtable', {u'password': 'password'}) - - - -class TestClientKey(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(ClientKey) - - def test_post_anonymous(self): - self._run_test('POST', 401, None, {u'password': 'LQ0N'}) - - def test_post_freshuser(self): - self._run_test('POST', 400, 'freshuser', {u'password': 'LQ0N'}) - - def test_post_reader(self): - self._run_test('POST', 200, 'reader', {u'password': 'password'}) - - def test_post_devtable(self): - self._run_test('POST', 200, 'devtable', {u'password': 'password'}) - - - -class TestListPlans(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(ListPlans) - - def test_get_anonymous(self): - self._run_test('GET', 200, None, None) - - def test_get_freshuser(self): - self._run_test('GET', 200, 'freshuser', None) - - def test_get_reader(self): - self._run_test('GET', 200, 'reader', None) - - def test_get_devtable(self): - self._run_test('GET', 200, 'devtable', None) - - -class TestUser(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(User) - - def test_get_anonymous(self): - self._run_test('GET', 401, None, None) - - def test_get_freshuser(self): - self._run_test('GET', 200, 'freshuser', None) - - def test_get_reader(self): - self._run_test('GET', 200, 'reader', None) - - def test_get_devtable(self): - self._run_test('GET', 200, 'devtable', None) - - def test_put_anonymous(self): - self._run_test('PUT', 401, None, {}) - - def test_put_freshuser(self): - self._run_test('PUT', 200, 'freshuser', {}) - - def test_put_reader(self): - self._run_test('PUT', 200, 'reader', {}) - - def test_put_devtable(self): - self._run_test('PUT', 200, 'devtable', {}) - - def test_post_anonymous(self): - self._run_test('POST', 400, None, {u'username': 'T946', u'password': '0SG4', u'email': 'MENT'}) - - def test_post_freshuser(self): - self._run_test('POST', 400, 'freshuser', {u'username': 'T946', u'password': '0SG4', - u'email': 'MENT'}) - - def test_post_reader(self): - self._run_test('POST', 400, 'reader', {u'username': 'T946', u'password': '0SG4', - u'email': 'MENT'}) - - def test_post_devtable(self): - self._run_test('POST', 400, 'devtable', {u'username': 'T946', u'password': '0SG4', - u'email': 'MENT'}) - - -class TestTeamMemberBuynlargeDevtableReaders(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(TeamMember, orgname="buynlarge", membername="devtable", teamname="readers") - - def test_put_anonymous(self): - self._run_test('PUT', 401, None, None) - - def test_put_freshuser(self): - self._run_test('PUT', 403, 'freshuser', None) - - def test_put_reader(self): - self._run_test('PUT', 403, 'reader', None) - - def test_put_devtable(self): - self._run_test('PUT', 200, 'devtable', None) - - def test_delete_anonymous(self): - self._run_test('DELETE', 401, None, None) - - def test_delete_freshuser(self): - self._run_test('DELETE', 403, 'freshuser', None) - - def test_delete_reader(self): - self._run_test('DELETE', 403, 'reader', None) - - def test_delete_devtable(self): - self._run_test('DELETE', 400, 'devtable', None) - - -class TestTeamMemberBuynlargeDevtableOwners(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(TeamMember, orgname="buynlarge", membername="devtable", teamname="owners") - - def test_put_anonymous(self): - self._run_test('PUT', 401, None, None) - - def test_put_freshuser(self): - self._run_test('PUT', 403, 'freshuser', None) - - def test_put_reader(self): - self._run_test('PUT', 403, 'reader', None) - - def test_put_devtable(self): - self._run_test('PUT', 400, 'devtable', None) - - def test_delete_anonymous(self): - self._run_test('DELETE', 401, None, None) - - def test_delete_freshuser(self): - self._run_test('DELETE', 403, 'freshuser', None) - - def test_delete_reader(self): - self._run_test('DELETE', 403, 'reader', None) - - def test_delete_devtable(self): - self._run_test('DELETE', 400, 'devtable', None) - - -class TestTeamPermissionsBuynlarge(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(TeamPermissions, orgname="buynlarge", teamname="readers") - - def test_get_anonymous(self): - self._run_test('GET', 401, None, None) - - def test_get_freshuser(self): - self._run_test('GET', 403, 'freshuser', None) - - def test_get_reader(self): - self._run_test('GET', 403, 'reader', None) - - def test_get_devtable(self): - self._run_test('GET', 200, 'devtable', None) - - -class TestTeamMemberListBuynlargeReaders(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(TeamMemberList, orgname="buynlarge", teamname="readers") - - def test_get_anonymous(self): - self._run_test('GET', 401, None, None) - - def test_get_freshuser(self): - self._run_test('GET', 403, 'freshuser', None) - - def test_get_reader(self): - self._run_test('GET', 200, 'reader', None) - - def test_get_devtable(self): - self._run_test('GET', 200, 'devtable', None) - - -class TestTeamMemberListBuynlargeOwners(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(TeamMemberList, orgname="buynlarge", teamname="owners") - - def test_get_anonymous(self): - self._run_test('GET', 401, None, None) - - def test_get_freshuser(self): - self._run_test('GET', 403, 'freshuser', None) - - def test_get_reader(self): - self._run_test('GET', 403, 'reader', None) - - def test_get_devtable(self): - self._run_test('GET', 200, 'devtable', None) - - -class TestRepositoryUserPermissionA2o9PublicPublicrepo(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(RepositoryUserPermission, username="A2O9", repository="public/publicrepo") - - def test_get_anonymous(self): - self._run_test('GET', 401, None, None) - - def test_get_freshuser(self): - self._run_test('GET', 403, 'freshuser', None) - - def test_get_reader(self): - self._run_test('GET', 403, 'reader', None) - - def test_get_devtable(self): - self._run_test('GET', 403, 'devtable', None) - - def test_put_anonymous(self): - self._run_test('PUT', 401, None, {u'role': u'read'}) - - def test_put_freshuser(self): - self._run_test('PUT', 403, 'freshuser', {u'role': u'read'}) - - def test_put_reader(self): - self._run_test('PUT', 403, 'reader', {u'role': u'read'}) - - def test_put_devtable(self): - self._run_test('PUT', 403, 'devtable', {u'role': u'read'}) - - def test_delete_anonymous(self): - self._run_test('DELETE', 401, None, None) - - def test_delete_freshuser(self): - self._run_test('DELETE', 403, 'freshuser', None) - - def test_delete_reader(self): - self._run_test('DELETE', 403, 'reader', None) - - def test_delete_devtable(self): - self._run_test('DELETE', 403, 'devtable', None) - - -class TestRepositoryUserPermissionA2o9DevtableShared(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(RepositoryUserPermission, username="A2O9", repository="devtable/shared") - - def test_get_anonymous(self): - self._run_test('GET', 401, None, None) - - def test_get_freshuser(self): - self._run_test('GET', 403, 'freshuser', None) - - def test_get_reader(self): - self._run_test('GET', 403, 'reader', None) - - def test_get_devtable(self): - self._run_test('GET', 400, 'devtable', None) - - def test_put_anonymous(self): - self._run_test('PUT', 401, None, {u'role': u'read'}) - - def test_put_freshuser(self): - self._run_test('PUT', 403, 'freshuser', {u'role': u'read'}) - - def test_put_reader(self): - self._run_test('PUT', 403, 'reader', {u'role': u'read'}) - - def test_put_devtable(self): - self._run_test('PUT', 400, 'devtable', {u'role': u'read'}) - - def test_delete_anonymous(self): - self._run_test('DELETE', 401, None, None) - - def test_delete_freshuser(self): - self._run_test('DELETE', 403, 'freshuser', None) - - def test_delete_reader(self): - self._run_test('DELETE', 403, 'reader', None) - - def test_delete_devtable(self): - self._run_test('DELETE', 400, 'devtable', None) - - -class TestRepositoryUserPermissionA2o9BuynlargeOrgrepo(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(RepositoryUserPermission, username="A2O9", repository="buynlarge/orgrepo") - - def test_get_anonymous(self): - self._run_test('GET', 401, None, None) - - def test_get_freshuser(self): - self._run_test('GET', 403, 'freshuser', None) - - def test_get_reader(self): - self._run_test('GET', 403, 'reader', None) - - def test_get_devtable(self): - self._run_test('GET', 400, 'devtable', None) - - def test_put_anonymous(self): - self._run_test('PUT', 401, None, {u'role': u'read'}) - - def test_put_freshuser(self): - self._run_test('PUT', 403, 'freshuser', {u'role': u'read'}) - - def test_put_reader(self): - self._run_test('PUT', 403, 'reader', {u'role': u'read'}) - - def test_put_devtable(self): - self._run_test('PUT', 400, 'devtable', {u'role': u'read'}) - - def test_delete_anonymous(self): - self._run_test('DELETE', 401, None, None) - - def test_delete_freshuser(self): - self._run_test('DELETE', 403, 'freshuser', None) - - def test_delete_reader(self): - self._run_test('DELETE', 403, 'reader', None) - - def test_delete_devtable(self): - self._run_test('DELETE', 400, 'devtable', None) - - -class TestRepositoryTeamPermissionReadersPublicPublicrepo(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(RepositoryTeamPermission, teamname="readers", repository="public/publicrepo") - - def test_get_anonymous(self): - self._run_test('GET', 401, None, None) - - def test_get_freshuser(self): - self._run_test('GET', 403, 'freshuser', None) - - def test_get_reader(self): - self._run_test('GET', 403, 'reader', None) - - def test_get_devtable(self): - self._run_test('GET', 403, 'devtable', None) - - def test_put_anonymous(self): - self._run_test('PUT', 401, None, {u'role': u'read'}) - - def test_put_freshuser(self): - self._run_test('PUT', 403, 'freshuser', {u'role': u'read'}) - - def test_put_reader(self): - self._run_test('PUT', 403, 'reader', {u'role': u'read'}) - - def test_put_devtable(self): - self._run_test('PUT', 403, 'devtable', {u'role': u'read'}) - - def test_delete_anonymous(self): - self._run_test('DELETE', 401, None, None) - - def test_delete_freshuser(self): - self._run_test('DELETE', 403, 'freshuser', None) - - def test_delete_reader(self): - self._run_test('DELETE', 403, 'reader', None) - - def test_delete_devtable(self): - self._run_test('DELETE', 403, 'devtable', None) - - -class TestRepositoryTeamPermissionReadersDevtableShared(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(RepositoryTeamPermission, teamname="readers", repository="devtable/shared") - - def test_get_anonymous(self): - self._run_test('GET', 401, None, None) - - def test_get_freshuser(self): - self._run_test('GET', 403, 'freshuser', None) - - def test_get_reader(self): - self._run_test('GET', 403, 'reader', None) - - def test_get_devtable(self): - self._run_test('GET', 400, 'devtable', None) - - def test_put_anonymous(self): - self._run_test('PUT', 401, None, {u'role': u'read'}) - - def test_put_freshuser(self): - self._run_test('PUT', 403, 'freshuser', {u'role': u'read'}) - - def test_put_reader(self): - self._run_test('PUT', 403, 'reader', {u'role': u'read'}) - - def test_put_devtable(self): - self._run_test('PUT', 400, 'devtable', {u'role': u'read'}) - - def test_delete_anonymous(self): - self._run_test('DELETE', 401, None, None) - - def test_delete_freshuser(self): - self._run_test('DELETE', 403, 'freshuser', None) - - def test_delete_reader(self): - self._run_test('DELETE', 403, 'reader', None) - - def test_delete_devtable(self): - self._run_test('DELETE', 400, 'devtable', None) - - -class TestRepositoryTeamPermissionReadersBuynlargeOrgrepo(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(RepositoryTeamPermission, teamname="readers", repository="buynlarge/orgrepo") - - def test_get_anonymous(self): - self._run_test('GET', 401, None, None) - - def test_get_freshuser(self): - self._run_test('GET', 403, 'freshuser', None) - - def test_get_reader(self): - self._run_test('GET', 403, 'reader', None) - - def test_get_devtable(self): - self._run_test('GET', 200, 'devtable', None) - - def test_put_anonymous(self): - self._run_test('PUT', 401, None, {u'role': u'read'}) - - def test_put_freshuser(self): - self._run_test('PUT', 403, 'freshuser', {u'role': u'read'}) - - def test_put_reader(self): - self._run_test('PUT', 403, 'reader', {u'role': u'read'}) - - def test_put_devtable(self): - self._run_test('PUT', 200, 'devtable', {u'role': u'read'}) - - def test_delete_anonymous(self): - self._run_test('DELETE', 401, None, None) - - def test_delete_freshuser(self): - self._run_test('DELETE', 403, 'freshuser', None) - - def test_delete_reader(self): - self._run_test('DELETE', 403, 'reader', None) - - def test_delete_devtable(self): - self._run_test('DELETE', 204, 'devtable', None) - - -class TestRepositoryTeamPermissionOwnersPublicPublicrepo(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(RepositoryTeamPermission, teamname="owners", repository="public/publicrepo") - - def test_get_anonymous(self): - self._run_test('GET', 401, None, None) - - def test_get_freshuser(self): - self._run_test('GET', 403, 'freshuser', None) - - def test_get_reader(self): - self._run_test('GET', 403, 'reader', None) - - def test_get_devtable(self): - self._run_test('GET', 403, 'devtable', None) - - def test_put_anonymous(self): - self._run_test('PUT', 401, None, {u'role': u'read'}) - - def test_put_freshuser(self): - self._run_test('PUT', 403, 'freshuser', {u'role': u'read'}) - - def test_put_reader(self): - self._run_test('PUT', 403, 'reader', {u'role': u'read'}) - - def test_put_devtable(self): - self._run_test('PUT', 403, 'devtable', {u'role': u'read'}) - - def test_delete_anonymous(self): - self._run_test('DELETE', 401, None, None) - - def test_delete_freshuser(self): - self._run_test('DELETE', 403, 'freshuser', None) - - def test_delete_reader(self): - self._run_test('DELETE', 403, 'reader', None) - - def test_delete_devtable(self): - self._run_test('DELETE', 403, 'devtable', None) - - -class TestRepositoryTeamPermissionOwnersDevtableShared(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(RepositoryTeamPermission, teamname="owners", repository="devtable/shared") - - def test_get_anonymous(self): - self._run_test('GET', 401, None, None) - - def test_get_freshuser(self): - self._run_test('GET', 403, 'freshuser', None) - - def test_get_reader(self): - self._run_test('GET', 403, 'reader', None) - - def test_get_devtable(self): - self._run_test('GET', 400, 'devtable', None) - - def test_put_anonymous(self): - self._run_test('PUT', 401, None, {u'role': u'read'}) - - def test_put_freshuser(self): - self._run_test('PUT', 403, 'freshuser', {u'role': u'read'}) - - def test_put_reader(self): - self._run_test('PUT', 403, 'reader', {u'role': u'read'}) - - def test_put_devtable(self): - self._run_test('PUT', 400, 'devtable', {u'role': u'read'}) - - def test_delete_anonymous(self): - self._run_test('DELETE', 401, None, None) - - def test_delete_freshuser(self): - self._run_test('DELETE', 403, 'freshuser', None) - - def test_delete_reader(self): - self._run_test('DELETE', 403, 'reader', None) - - def test_delete_devtable(self): - self._run_test('DELETE', 400, 'devtable', None) - - -class TestRepositoryTeamPermissionOwnersBuynlargeOrgrepo(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(RepositoryTeamPermission, teamname="owners", repository="buynlarge/orgrepo") - - def test_get_anonymous(self): - self._run_test('GET', 401, None, None) - - def test_get_freshuser(self): - self._run_test('GET', 403, 'freshuser', None) - - def test_get_reader(self): - self._run_test('GET', 403, 'reader', None) - - def test_get_devtable(self): - self._run_test('GET', 400, 'devtable', None) - - def test_put_anonymous(self): - self._run_test('PUT', 401, None, {u'role': u'read'}) - - def test_put_freshuser(self): - self._run_test('PUT', 403, 'freshuser', {u'role': u'read'}) - - def test_put_reader(self): - self._run_test('PUT', 403, 'reader', {u'role': u'read'}) - - def test_put_devtable(self): - self._run_test('PUT', 200, 'devtable', {u'role': u'read'}) - - def test_delete_anonymous(self): - self._run_test('DELETE', 401, None, None) - - def test_delete_freshuser(self): - self._run_test('DELETE', 403, 'freshuser', None) - - def test_delete_reader(self): - self._run_test('DELETE', 403, 'reader', None) - - def test_delete_devtable(self): - self._run_test('DELETE', 400, 'devtable', None) - - -class TestBuildTriggerActivateSwo1PublicPublicrepo(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(BuildTriggerActivate, trigger_uuid="SWO1", repository="public/publicrepo") - - def test_post_anonymous(self): - self._run_test('POST', 401, None, {}) - - def test_post_freshuser(self): - self._run_test('POST', 403, 'freshuser', {}) - - def test_post_reader(self): - self._run_test('POST', 403, 'reader', {}) - - def test_post_devtable(self): - self._run_test('POST', 403, 'devtable', {}) - - -class TestBuildTriggerActivateSwo1DevtableShared(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(BuildTriggerActivate, trigger_uuid="SWO1", repository="devtable/shared") - - def test_post_anonymous(self): - self._run_test('POST', 401, None, {}) - - def test_post_freshuser(self): - self._run_test('POST', 403, 'freshuser', {}) - - def test_post_reader(self): - self._run_test('POST', 403, 'reader', {}) - - def test_post_devtable(self): - self._run_test('POST', 404, 'devtable', {'config': {}}) - - -class TestBuildTriggerActivateSwo1BuynlargeOrgrepo(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(BuildTriggerActivate, trigger_uuid="SWO1", repository="buynlarge/orgrepo") - - def test_post_anonymous(self): - self._run_test('POST', 401, None, {}) - - def test_post_freshuser(self): - self._run_test('POST', 403, 'freshuser', {}) - - def test_post_reader(self): - self._run_test('POST', 403, 'reader', {}) - - def test_post_devtable(self): - self._run_test('POST', 404, 'devtable', {'config': {}}) - -class TestBuildTriggerFieldValuesSwo1PublicPublicrepo(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(BuildTriggerFieldValues, trigger_uuid="SWO1", repository="public/publicrepo", - field_name="test_field") - - def test_post_anonymous(self): - self._run_test('POST', 401, None, {}) - - def test_post_freshuser(self): - self._run_test('POST', 403, 'freshuser', {}) - - def test_post_reader(self): - self._run_test('POST', 403, 'reader', {}) - - def test_post_devtable(self): - self._run_test('POST', 403, 'devtable', {}) - - -class TestBuildTriggerFieldValuesSwo1DevtableShared(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(BuildTriggerFieldValues, trigger_uuid="SWO1", repository="devtable/shared", - field_name="test_field") - - def test_post_anonymous(self): - self._run_test('POST', 401, None, {}) - - def test_post_freshuser(self): - self._run_test('POST', 403, 'freshuser', {}) - - def test_post_reader(self): - self._run_test('POST', 403, 'reader', {}) - - def test_post_devtable(self): - self._run_test('POST', 404, 'devtable', {'config': {}}) - - -class TestBuildTriggerFieldValuesSwo1BuynlargeOrgrepo(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(BuildTriggerFieldValues, trigger_uuid="SWO1", repository="buynlarge/orgrepo", - field_name="test_field") - - def test_post_anonymous(self): - self._run_test('POST', 401, None, {}) - - def test_post_freshuser(self): - self._run_test('POST', 403, 'freshuser', {}) - - def test_post_reader(self): - self._run_test('POST', 403, 'reader', {}) - - def test_post_devtable(self): - self._run_test('POST', 404, 'devtable', {'config': {}}) - - -class TestBuildTriggerSources831cPublicPublicrepo(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(BuildTriggerSources, trigger_uuid="831C", repository="public/publicrepo") - - def test_post_anonymous(self): - self._run_test('POST', 401, None, None) - - def test_post_freshuser(self): - self._run_test('POST', 403, 'freshuser', None) - - def test_post_reader(self): - self._run_test('POST', 403, 'reader', None) - - def test_post_devtable(self): - self._run_test('POST', 403, 'devtable', dict(namespace="foo")) - - -class TestBuildTriggerSources831cDevtableShared(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(BuildTriggerSources, trigger_uuid="831C", repository="devtable/shared") - - def test_post_anonymous(self): - self._run_test('POST', 401, None, None) - - def test_post_freshuser(self): - self._run_test('POST', 403, 'freshuser', None) - - def test_post_reader(self): - self._run_test('POST', 403, 'reader', None) - - def test_post_devtable(self): - self._run_test('POST', 404, 'devtable', dict(namespace="foo")) - - -class TestBuildTriggerSources831cBuynlargeOrgrepo(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(BuildTriggerSources, trigger_uuid="831C", repository="buynlarge/orgrepo") - - def test_post_anonymous(self): - self._run_test('POST', 401, None, None) - - def test_post_freshuser(self): - self._run_test('POST', 403, 'freshuser', None) - - def test_post_reader(self): - self._run_test('POST', 403, 'reader', None) - - def test_post_devtable(self): - self._run_test('POST', 404, 'devtable', dict(namespace="foo")) - - -class TestBuildTriggerSubdirs4i2yPublicPublicrepo(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(BuildTriggerSubdirs, trigger_uuid="4I2Y", repository="public/publicrepo") - - def test_post_anonymous(self): - self._run_test('POST', 401, None, {}) - - def test_post_freshuser(self): - self._run_test('POST', 403, 'freshuser', {}) - - def test_post_reader(self): - self._run_test('POST', 403, 'reader', {}) - - def test_post_devtable(self): - self._run_test('POST', 403, 'devtable', {}) - - -class TestBuildTriggerSubdirs4i2yDevtableShared(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(BuildTriggerSubdirs, trigger_uuid="4I2Y", repository="devtable/shared") - - def test_post_anonymous(self): - self._run_test('POST', 401, None, {}) - - def test_post_freshuser(self): - self._run_test('POST', 403, 'freshuser', {}) - - def test_post_reader(self): - self._run_test('POST', 403, 'reader', {}) - - def test_post_devtable(self): - self._run_test('POST', 404, 'devtable', {}) - - -class TestBuildTriggerSubdirs4i2yBuynlargeOrgrepo(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(BuildTriggerSubdirs, trigger_uuid="4I2Y", repository="buynlarge/orgrepo") - - def test_post_anonymous(self): - self._run_test('POST', 401, None, {}) - - def test_post_freshuser(self): - self._run_test('POST', 403, 'freshuser', {}) - - def test_post_reader(self): - self._run_test('POST', 403, 'reader', {}) - - def test_post_devtable(self): - self._run_test('POST', 404, 'devtable', {}) - - -class TestTriggerBuildListZm1wPublicPublicrepo(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(TriggerBuildList, trigger_uuid="ZM1W", repository="public/publicrepo") - - def test_get_anonymous(self): - self._run_test('GET', 401, None, None) - - def test_get_freshuser(self): - self._run_test('GET', 403, 'freshuser', None) - - def test_get_reader(self): - self._run_test('GET', 403, 'reader', None) - - def test_get_devtable(self): - self._run_test('GET', 403, 'devtable', None) - - -class TestTriggerBuildListZm1wDevtableShared(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(TriggerBuildList, trigger_uuid="ZM1W", repository="devtable/shared") - - def test_get_anonymous(self): - self._run_test('GET', 401, None, None) - - def test_get_freshuser(self): - self._run_test('GET', 403, 'freshuser', None) - - def test_get_reader(self): - self._run_test('GET', 403, 'reader', None) - - def test_get_devtable(self): - self._run_test('GET', 200, 'devtable', None) - - -class TestTriggerBuildListZm1wBuynlargeOrgrepo(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(TriggerBuildList, trigger_uuid="ZM1W", repository="buynlarge/orgrepo") - - def test_get_anonymous(self): - self._run_test('GET', 401, None, None) - - def test_get_freshuser(self): - self._run_test('GET', 403, 'freshuser', None) - - def test_get_reader(self): - self._run_test('GET', 403, 'reader', None) - - def test_get_devtable(self): - self._run_test('GET', 200, 'devtable', None) - - -class TestActivateBuildTrigger0byePublicPublicrepo(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(ActivateBuildTrigger, trigger_uuid="0BYE", repository="public/publicrepo") - - def test_post_anonymous(self): - self._run_test('POST', 401, None, None) - - def test_post_freshuser(self): - self._run_test('POST', 403, 'freshuser', None) - - def test_post_reader(self): - self._run_test('POST', 403, 'reader', None) - - def test_post_devtable(self): - self._run_test('POST', 403, 'devtable', None) - - -class TestActivateBuildTrigger0byeDevtableShared(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(ActivateBuildTrigger, trigger_uuid="0BYE", repository="devtable/shared") - - def test_post_anonymous(self): - self._run_test('POST', 401, None, None) - - def test_post_freshuser(self): - self._run_test('POST', 403, 'freshuser', None) - - def test_post_reader(self): - self._run_test('POST', 403, 'reader', None) - - def test_post_devtable(self): - self._run_test('POST', 404, 'devtable', None) - - -class TestActivateBuildTrigger0byeBuynlargeOrgrepo(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(ActivateBuildTrigger, trigger_uuid="0BYE", repository="buynlarge/orgrepo") - - def test_post_anonymous(self): - self._run_test('POST', 401, None, None) - - def test_post_freshuser(self): - self._run_test('POST', 403, 'freshuser', None) - - def test_post_reader(self): - self._run_test('POST', 403, 'reader', None) - - def test_post_devtable(self): - self._run_test('POST', 404, 'devtable', None) - -class TestActivateBuildTrigger0byeDevtableShared(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(ActivateBuildTrigger, trigger_uuid="0BYE", repository="devtable/shared") - - def test_post_anonymous(self): - self._run_test('POST', 401, None, None) - - def test_post_freshuser(self): - self._run_test('POST', 403, 'freshuser', None) - - def test_post_reader(self): - self._run_test('POST', 403, 'reader', None) - - def test_post_devtable(self): - self._run_test('POST', 404, 'devtable', {}) - - -class TestActivateBuildTrigger0byeBuynlargeOrgrepo(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(ActivateBuildTrigger, trigger_uuid="0BYE", repository="buynlarge/orgrepo") - - def test_post_anonymous(self): - self._run_test('POST', 401, None, None) - - def test_post_freshuser(self): - self._run_test('POST', 403, 'freshuser', None) - - def test_post_reader(self): - self._run_test('POST', 403, 'reader', None) - - def test_post_devtable(self): - self._run_test('POST', 404, 'devtable', {}) - - -class TestBuildTriggerAnalyze0byePublicPublicrepo(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(BuildTriggerAnalyze, trigger_uuid="0BYE", repository="public/publicrepo") - - def test_post_anonymous(self): - self._run_test('POST', 401, None, None) - - def test_post_freshuser(self): - self._run_test('POST', 403, 'freshuser', None) - - def test_post_reader(self): - self._run_test('POST', 403, 'reader', None) - - def test_post_devtable(self): - self._run_test('POST', 403, 'devtable', {'config': {}}) - - -class TestBuildTriggerAnalyze0byeDevtableShared(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(BuildTriggerAnalyze, trigger_uuid="0BYE", repository="devtable/shared") - - def test_post_anonymous(self): - self._run_test('POST', 401, None, None) - - def test_post_freshuser(self): - self._run_test('POST', 403, 'freshuser', None) - - def test_post_reader(self): - self._run_test('POST', 403, 'reader', None) - - def test_post_devtable(self): - self._run_test('POST', 404, 'devtable', {'config': {}}) - - -class TestBuildTriggerAnalyze0byeBuynlargeOrgrepo(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(BuildTriggerAnalyze, trigger_uuid="0BYE", repository="buynlarge/orgrepo") - - def test_post_anonymous(self): - self._run_test('POST', 401, None, None) - - def test_post_freshuser(self): - self._run_test('POST', 403, 'freshuser', None) - - def test_post_reader(self): - self._run_test('POST', 403, 'reader', None) - - def test_post_devtable(self): - self._run_test('POST', 404, 'devtable', {'config': {}}) - -class TestBuildTriggerAnalyze0byeDevtableShared(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(BuildTriggerAnalyze, trigger_uuid="0BYE", repository="devtable/shared") - - def test_post_anonymous(self): - self._run_test('POST', 401, None, None) - - def test_post_freshuser(self): - self._run_test('POST', 403, 'freshuser', None) - - def test_post_reader(self): - self._run_test('POST', 403, 'reader', None) - - def test_post_devtable(self): - self._run_test('POST', 404, 'devtable', {'config': {}}) - - -class TestBuildTriggerAnalyze0byeBuynlargeOrgrepo(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(BuildTriggerAnalyze, trigger_uuid="0BYE", repository="buynlarge/orgrepo") - - def test_post_anonymous(self): - self._run_test('POST', 401, None, None) - - def test_post_freshuser(self): - self._run_test('POST', 403, 'freshuser', None) - - def test_post_reader(self): - self._run_test('POST', 403, 'reader', None) - - def test_post_devtable(self): - self._run_test('POST', 404, 'devtable', {'config': {}}) - - -class TestRepositoryBuildStatusFg86PublicPublicrepo(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(RepositoryBuildStatus, build_uuid="FG86", repository="public/publicrepo") - - def test_get_anonymous(self): - self._run_test('GET', 400, None, None) - - def test_get_freshuser(self): - self._run_test('GET', 400, 'freshuser', None) - - def test_get_reader(self): - self._run_test('GET', 400, 'reader', None) - - def test_get_devtable(self): - self._run_test('GET', 400, 'devtable', None) - - -class TestRepositoryBuildStatusFg86DevtableShared(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(RepositoryBuildStatus, build_uuid="FG86", repository="devtable/shared") - - def test_get_anonymous(self): - self._run_test('GET', 401, None, None) - - def test_get_freshuser(self): - self._run_test('GET', 403, 'freshuser', None) - - def test_get_reader(self): - self._run_test('GET', 400, 'reader', None) - - def test_get_devtable(self): - self._run_test('GET', 400, 'devtable', None) - - -class TestRepositoryBuildStatusFg86BuynlargeOrgrepo(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(RepositoryBuildStatus, build_uuid="FG86", repository="buynlarge/orgrepo") - - def test_get_anonymous(self): - self._run_test('GET', 401, None, None) - - def test_get_freshuser(self): - self._run_test('GET', 403, 'freshuser', None) - - def test_get_reader(self): - self._run_test('GET', 400, 'reader', None) - - def test_get_devtable(self): - self._run_test('GET', 400, 'devtable', None) - - -class TestRepositoryBuildResourceFg86PublicPublicrepo(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(RepositoryBuildResource, build_uuid="FG86", repository="public/publicrepo") - - def test_delete_anonymous(self): - self._run_test('DELETE', 401, None, None) - - def test_delete_freshuser(self): - self._run_test('DELETE', 403, 'freshuser', None) - - def test_delete_reader(self): - self._run_test('DELETE', 403, 'reader', None) - - def test_delete_devtable(self): - self._run_test('DELETE', 403, 'devtable', None) - - -class TestRepositoryBuildResourceFg86DevtableShared(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(RepositoryBuildResource, build_uuid="FG86", repository="devtable/shared") - - def test_delete_anonymous(self): - self._run_test('DELETE', 401, None, None) - - def test_delete_freshuser(self): - self._run_test('DELETE', 403, 'freshuser', None) - - def test_delete_reader(self): - self._run_test('DELETE', 403, 'reader', None) - - def test_delete_devtable(self): - self._run_test('DELETE', 404, 'devtable', None) - - -class TestRepositoryBuildResourceFg86BuynlargeOrgrepo(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(RepositoryBuildResource, build_uuid="FG86", repository="buynlarge/orgrepo") - - def test_delete_anonymous(self): - self._run_test('DELETE', 401, None, None) - - def test_delete_freshuser(self): - self._run_test('DELETE', 403, 'freshuser', None) - - def test_delete_reader(self): - self._run_test('DELETE', 403, 'reader', None) - - def test_delete_devtable(self): - self._run_test('DELETE', 404, 'devtable', None) - - -class TestRepositoryBuildLogsS5j8PublicPublicrepo(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(RepositoryBuildLogs, build_uuid="S5J8", repository="public/publicrepo") - - def test_get_anonymous(self): - self._run_test('GET', 401, None, None) - - def test_get_freshuser(self): - self._run_test('GET', 403, 'freshuser', None) - - def test_get_reader(self): - self._run_test('GET', 403, 'reader', None) - - def test_get_devtable(self): - self._run_test('GET', 403, 'devtable', None) - - -class TestRepositoryBuildLogsS5j8DevtableShared(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(RepositoryBuildLogs, build_uuid="S5J8", repository="devtable/shared") - - def test_get_anonymous(self): - self._run_test('GET', 401, None, None) - - def test_get_freshuser(self): - self._run_test('GET', 403, 'freshuser', None) - - def test_get_reader(self): - self._run_test('GET', 403, 'reader', None) - - def test_get_devtable(self): - self._run_test('GET', 400, 'devtable', None) - - -class TestRepositoryBuildLogsS5j8BuynlargeOrgrepo(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(RepositoryBuildLogs, build_uuid="S5J8", repository="buynlarge/orgrepo") - - def test_get_anonymous(self): - self._run_test('GET', 401, None, None) - - def test_get_freshuser(self): - self._run_test('GET', 403, 'freshuser', None) - - def test_get_reader(self): - self._run_test('GET', 403, 'reader', None) - - def test_get_devtable(self): - self._run_test('GET', 400, 'devtable', None) - - -class TestListRepositoryTagsTn96PublicPublicrepo(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(ListRepositoryTags, tag="TN96", repository="public/publicrepo") - - def test_get_anonymous(self): - self._run_test('GET', 200, None, None) - - def test_get_freshuser(self): - self._run_test('GET', 200, 'freshuser', None) - - def test_get_reader(self): - self._run_test('GET', 200, 'reader', None) - - def test_get_devtable(self): - self._run_test('GET', 200, 'devtable', None) - - -class TestListRepositoryTagsTn96DevtableShared(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(ListRepositoryTags, tag="TN96", repository="devtable/shared") - - def test_get_anonymous(self): - self._run_test('GET', 401, None, None) - - def test_get_freshuser(self): - self._run_test('GET', 403, 'freshuser', None) - - def test_get_reader(self): - self._run_test('GET', 200, 'reader', None) - - def test_get_devtable(self): - self._run_test('GET', 200, 'devtable', None) - - -class TestListRepositoryTagsTn96BuynlargeOrgrepo(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(ListRepositoryTags, tag="TN96", repository="buynlarge/orgrepo") - - def test_get_anonymous(self): - self._run_test('GET', 401, None, None) - - def test_get_freshuser(self): - self._run_test('GET', 403, 'freshuser', None) - - def test_get_reader(self): - self._run_test('GET', 200, 'reader', None) - - def test_get_devtable(self): - self._run_test('GET', 200, 'devtable', None) - - -class TestRepositoryTagImagesTn96PublicPublicrepo(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(RepositoryTagImages, tag="TN96", repository="public/publicrepo") - - def test_get_anonymous(self): - self._run_test('GET', 404, None, None) - - def test_get_freshuser(self): - self._run_test('GET', 404, 'freshuser', None) - - def test_get_reader(self): - self._run_test('GET', 404, 'reader', None) - - def test_get_devtable(self): - self._run_test('GET', 404, 'devtable', None) - - -class TestRepositoryTagImagesTn96DevtableShared(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(RepositoryTagImages, tag="TN96", repository="devtable/shared") - - def test_get_anonymous(self): - self._run_test('GET', 401, None, None) - - def test_get_freshuser(self): - self._run_test('GET', 403, 'freshuser', None) - - def test_get_reader(self): - self._run_test('GET', 404, 'reader', None) - - def test_get_devtable(self): - self._run_test('GET', 404, 'devtable', None) - - -class TestRepositoryTagImagesTn96BuynlargeOrgrepo(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(RepositoryTagImages, tag="TN96", repository="buynlarge/orgrepo") - - def test_get_anonymous(self): - self._run_test('GET', 401, None, None) - - def test_get_freshuser(self): - self._run_test('GET', 403, 'freshuser', None) - - def test_get_reader(self): - self._run_test('GET', 404, 'reader', None) - - def test_get_devtable(self): - self._run_test('GET', 404, 'devtable', None) - - -class TestPermissionPrototypeBuynlargeL24b(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(PermissionPrototype, orgname="buynlarge", prototypeid="L24B") - - def test_put_anonymous(self): - self._run_test('PUT', 401, None, {u'role': u'read'}) - - def test_put_freshuser(self): - self._run_test('PUT', 403, 'freshuser', {u'role': u'read'}) - - def test_put_reader(self): - self._run_test('PUT', 403, 'reader', {u'role': u'read'}) - - def test_put_devtable(self): - self._run_test('PUT', 404, 'devtable', {u'role': u'read'}) - - def test_delete_anonymous(self): - self._run_test('DELETE', 401, None, None) - - def test_delete_freshuser(self): - self._run_test('DELETE', 403, 'freshuser', None) - - def test_delete_reader(self): - self._run_test('DELETE', 403, 'reader', None) - - def test_delete_devtable(self): - self._run_test('DELETE', 404, 'devtable', None) - - -class TestOrganizationMemberBuynlargeDevtable(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(OrganizationMember, orgname="buynlarge", membername="someuser") - - def test_get_anonymous(self): - self._run_test('GET', 401, None, None) - - def test_get_freshuser(self): - self._run_test('GET', 403, 'freshuser', None) - - def test_get_reader(self): - self._run_test('GET', 403, 'reader', None) - - def test_get_devtable(self): - self._run_test('GET', 404, 'devtable', None) - - - def test_delete_anonymous(self): - self._run_test('DELETE', 401, None, None) - - def test_delete_freshuser(self): - self._run_test('DELETE', 403, 'freshuser', None) - - def test_delete_reader(self): - self._run_test('DELETE', 403, 'reader', None) - - def test_delete_devtable(self): - self._run_test('DELETE', 404, 'devtable', None) - - -class TestOrgRobotBuynlargeZ7pd(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(OrgRobot, orgname="buynlarge", robot_shortname="Z7PD") - - def test_get_anonymous(self): - self._run_test('GET', 401, None, None) - - def test_get_freshuser(self): - self._run_test('GET', 403, 'freshuser', None) - - def test_get_reader(self): - self._run_test('GET', 403, 'reader', None) - - def test_get_devtable(self): - self._run_test('GET', 400, 'devtable', None) - - - def test_put_anonymous(self): - self._run_test('PUT', 401, None, None) - - def test_put_freshuser(self): - self._run_test('PUT', 403, 'freshuser', None) - - def test_put_reader(self): - self._run_test('PUT', 403, 'reader', None) - - def test_put_devtable(self): - self._run_test('PUT', 400, 'devtable', None) - - - def test_delete_anonymous(self): - self._run_test('DELETE', 401, None, None) - - def test_delete_freshuser(self): - self._run_test('DELETE', 403, 'freshuser', None) - - def test_delete_reader(self): - self._run_test('DELETE', 403, 'reader', None) - - def test_delete_devtable(self): - self._run_test('DELETE', 400, 'devtable', None) - - -class TestOrganizationTeamBuynlargeReaders(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(OrganizationTeam, orgname="buynlarge", teamname="readers") - - def test_put_anonymous(self): - self._run_test('PUT', 401, None, {u'role': u'member'}) - - def test_put_freshuser(self): - self._run_test('PUT', 403, 'freshuser', {u'role': u'member'}) - - def test_put_reader(self): - self._run_test('PUT', 403, 'reader', {u'role': u'member'}) - - def test_put_devtable(self): - self._run_test('PUT', 200, 'devtable', {u'role': u'member'}) - - def test_delete_anonymous(self): - self._run_test('DELETE', 401, None, None) - - def test_delete_freshuser(self): - self._run_test('DELETE', 403, 'freshuser', None) - - def test_delete_reader(self): - self._run_test('DELETE', 403, 'reader', None) - - def test_delete_devtable(self): - self._run_test('DELETE', 204, 'devtable', None) - - -class TestOrganizationTeamBuynlargeOwners(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(OrganizationTeam, orgname="buynlarge", teamname="owners") - - def test_put_anonymous(self): - self._run_test('PUT', 401, None, {u'role': u'member'}) - - def test_put_freshuser(self): - self._run_test('PUT', 403, 'freshuser', {u'role': u'member'}) - - def test_put_reader(self): - self._run_test('PUT', 403, 'reader', {u'role': u'member'}) - - def test_put_devtable(self): - self._run_test('PUT', 400, 'devtable', {u'role': u'member'}) - - def test_delete_anonymous(self): - self._run_test('DELETE', 401, None, None) - - def test_delete_freshuser(self): - self._run_test('DELETE', 403, 'freshuser', None) - - def test_delete_reader(self): - self._run_test('DELETE', 403, 'reader', None) - - def test_delete_devtable(self): - self._run_test('DELETE', 400, 'devtable', None) - - -class TestRepositoryTeamPermissionListPublicPublicrepo(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(RepositoryTeamPermissionList, repository="public/publicrepo") - - def test_get_anonymous(self): - self._run_test('GET', 401, None, None) - - def test_get_freshuser(self): - self._run_test('GET', 403, 'freshuser', None) - - def test_get_reader(self): - self._run_test('GET', 403, 'reader', None) - - def test_get_devtable(self): - self._run_test('GET', 403, 'devtable', None) - - -class TestRepositoryTeamPermissionListDevtableShared(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(RepositoryTeamPermissionList, repository="devtable/shared") - - def test_get_anonymous(self): - self._run_test('GET', 401, None, None) - - def test_get_freshuser(self): - self._run_test('GET', 403, 'freshuser', None) - - def test_get_reader(self): - self._run_test('GET', 403, 'reader', None) - - def test_get_devtable(self): - self._run_test('GET', 200, 'devtable', None) - - -class TestRepositoryTeamPermissionListBuynlargeOrgrepo(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(RepositoryTeamPermissionList, repository="buynlarge/orgrepo") - - def test_get_anonymous(self): - self._run_test('GET', 401, None, None) - - def test_get_freshuser(self): - self._run_test('GET', 403, 'freshuser', None) - - def test_get_reader(self): - self._run_test('GET', 403, 'reader', None) - - def test_get_devtable(self): - self._run_test('GET', 200, 'devtable', None) - - -class TestRepositoryUserPermissionListPublicPublicrepo(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(RepositoryUserPermissionList, repository="public/publicrepo") - - def test_get_anonymous(self): - self._run_test('GET', 401, None, None) - - def test_get_freshuser(self): - self._run_test('GET', 403, 'freshuser', None) - - def test_get_reader(self): - self._run_test('GET', 403, 'reader', None) - - def test_get_devtable(self): - self._run_test('GET', 403, 'devtable', None) - - -class TestRepositoryUserPermissionListDevtableShared(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(RepositoryUserPermissionList, repository="devtable/shared") - - def test_get_anonymous(self): - self._run_test('GET', 401, None, None) - - def test_get_freshuser(self): - self._run_test('GET', 403, 'freshuser', None) - - def test_get_reader(self): - self._run_test('GET', 403, 'reader', None) - - def test_get_devtable(self): - self._run_test('GET', 200, 'devtable', None) - - -class TestRepositoryUserPermissionListBuynlargeOrgrepo(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(RepositoryUserPermissionList, repository="buynlarge/orgrepo") - - def test_get_anonymous(self): - self._run_test('GET', 401, None, None) - - def test_get_freshuser(self): - self._run_test('GET', 403, 'freshuser', None) - - def test_get_reader(self): - self._run_test('GET', 403, 'reader', None) - - def test_get_devtable(self): - self._run_test('GET', 200, 'devtable', None) - - -class TestBuildTriggerD6tiPublicPublicrepo(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(BuildTrigger, trigger_uuid="D6TI", repository="public/publicrepo") - - def test_get_anonymous(self): - self._run_test('GET', 401, None, None) - - def test_get_freshuser(self): - self._run_test('GET', 403, 'freshuser', None) - - def test_get_reader(self): - self._run_test('GET', 403, 'reader', None) - - def test_get_devtable(self): - self._run_test('GET', 403, 'devtable', None) - - def test_delete_anonymous(self): - self._run_test('DELETE', 401, None, None) - - def test_delete_freshuser(self): - self._run_test('DELETE', 403, 'freshuser', None) - - def test_delete_reader(self): - self._run_test('DELETE', 403, 'reader', None) - - def test_delete_devtable(self): - self._run_test('DELETE', 403, 'devtable', None) - - -class TestBuildTriggerD6tiDevtableShared(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(BuildTrigger, trigger_uuid="D6TI", repository="devtable/shared") - - def test_get_anonymous(self): - self._run_test('GET', 401, None, None) - - def test_get_freshuser(self): - self._run_test('GET', 403, 'freshuser', None) - - def test_get_reader(self): - self._run_test('GET', 403, 'reader', None) - - def test_get_devtable(self): - self._run_test('GET', 404, 'devtable', None) - - def test_delete_anonymous(self): - self._run_test('DELETE', 401, None, None) - - def test_delete_freshuser(self): - self._run_test('DELETE', 403, 'freshuser', None) - - def test_delete_reader(self): - self._run_test('DELETE', 403, 'reader', None) - - def test_delete_devtable(self): - self._run_test('DELETE', 404, 'devtable', None) - - -class TestBuildTriggerD6tiBuynlargeOrgrepo(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(BuildTrigger, trigger_uuid="D6TI", repository="buynlarge/orgrepo") - - def test_get_anonymous(self): - self._run_test('GET', 401, None, None) - - def test_get_freshuser(self): - self._run_test('GET', 403, 'freshuser', None) - - def test_get_reader(self): - self._run_test('GET', 403, 'reader', None) - - def test_get_devtable(self): - self._run_test('GET', 404, 'devtable', None) - - def test_delete_anonymous(self): - self._run_test('DELETE', 401, None, None) - - def test_delete_freshuser(self): - self._run_test('DELETE', 403, 'freshuser', None) - - def test_delete_reader(self): - self._run_test('DELETE', 403, 'reader', None) - - def test_delete_devtable(self): - self._run_test('DELETE', 404, 'devtable', None) - - -class TestRepositoryNotificationQfatPublicPublicrepo(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(RepositoryNotification, uuid="QFAT", repository="public/publicrepo") - - def test_get_anonymous(self): - self._run_test('GET', 401, None, None) - - def test_get_freshuser(self): - self._run_test('GET', 403, 'freshuser', None) - - def test_get_reader(self): - self._run_test('GET', 403, 'reader', None) - - def test_get_devtable(self): - self._run_test('GET', 403, 'devtable', None) - - def test_delete_anonymous(self): - self._run_test('DELETE', 401, None, None) - - def test_delete_freshuser(self): - self._run_test('DELETE', 403, 'freshuser', None) - - def test_delete_reader(self): - self._run_test('DELETE', 403, 'reader', None) - - def test_delete_devtable(self): - self._run_test('DELETE', 403, 'devtable', None) - - -class TestRepositoryNotificationQfatDevtableShared(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(RepositoryNotification, uuid="QFAT", repository="devtable/shared") - - def test_get_anonymous(self): - self._run_test('GET', 401, None, None) - - def test_get_freshuser(self): - self._run_test('GET', 403, 'freshuser', None) - - def test_get_reader(self): - self._run_test('GET', 403, 'reader', None) - - def test_get_devtable(self): - self._run_test('GET', 404, 'devtable', None) - - def test_delete_anonymous(self): - self._run_test('DELETE', 401, None, None) - - def test_delete_freshuser(self): - self._run_test('DELETE', 403, 'freshuser', None) - - def test_delete_reader(self): - self._run_test('DELETE', 403, 'reader', None) - - def test_delete_devtable(self): - self._run_test('DELETE', 400, 'devtable', None) - - -class TestRepositoryNotificationQfatBuynlargeOrgrepo(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(RepositoryNotification, uuid="QFAT", repository="buynlarge/orgrepo") - - def test_get_anonymous(self): - self._run_test('GET', 401, None, None) - - def test_get_freshuser(self): - self._run_test('GET', 403, 'freshuser', None) - - def test_get_reader(self): - self._run_test('GET', 403, 'reader', None) - - def test_get_devtable(self): - self._run_test('GET', 404, 'devtable', None) - - def test_delete_anonymous(self): - self._run_test('DELETE', 401, None, None) - - def test_delete_freshuser(self): - self._run_test('DELETE', 403, 'freshuser', None) - - def test_delete_reader(self): - self._run_test('DELETE', 403, 'reader', None) - - def test_delete_devtable(self): - self._run_test('DELETE', 400, 'devtable', None) - - -class TestRepositoryTokenUjqbPublicPublicrepo(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(RepositoryToken, code="UJQB", repository="public/publicrepo") - - def test_get_anonymous(self): - self._run_test('GET', 401, None, None) - - def test_get_freshuser(self): - self._run_test('GET', 403, 'freshuser', None) - - def test_get_reader(self): - self._run_test('GET', 403, 'reader', None) - - def test_get_devtable(self): - self._run_test('GET', 403, 'devtable', None) - - def test_put_anonymous(self): - self._run_test('PUT', 401, None, {u'role': u'read'}) - - def test_put_freshuser(self): - self._run_test('PUT', 403, 'freshuser', {u'role': u'read'}) - - def test_put_reader(self): - self._run_test('PUT', 403, 'reader', {u'role': u'read'}) - - def test_put_devtable(self): - self._run_test('PUT', 403, 'devtable', {u'role': u'read'}) - - def test_delete_anonymous(self): - self._run_test('DELETE', 401, None, None) - - def test_delete_freshuser(self): - self._run_test('DELETE', 403, 'freshuser', None) - - def test_delete_reader(self): - self._run_test('DELETE', 403, 'reader', None) - - def test_delete_devtable(self): - self._run_test('DELETE', 403, 'devtable', None) - - -class TestRepositoryTokenUjqbDevtableShared(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(RepositoryToken, code="UJQB", repository="devtable/shared") - - def test_get_anonymous(self): - self._run_test('GET', 401, None, None) - - def test_get_freshuser(self): - self._run_test('GET', 403, 'freshuser', None) - - def test_get_reader(self): - self._run_test('GET', 403, 'reader', None) - - def test_get_devtable(self): - self._run_test('GET', 404, 'devtable', None) - - def test_put_anonymous(self): - self._run_test('PUT', 401, None, {u'role': u'read'}) - - def test_put_freshuser(self): - self._run_test('PUT', 403, 'freshuser', {u'role': u'read'}) - - def test_put_reader(self): - self._run_test('PUT', 403, 'reader', {u'role': u'read'}) - - def test_put_devtable(self): - self._run_test('PUT', 400, 'devtable', {u'role': u'read'}) - - def test_delete_anonymous(self): - self._run_test('DELETE', 401, None, None) - - def test_delete_freshuser(self): - self._run_test('DELETE', 403, 'freshuser', None) - - def test_delete_reader(self): - self._run_test('DELETE', 403, 'reader', None) - - def test_delete_devtable(self): - self._run_test('DELETE', 400, 'devtable', None) - - -class TestRepositoryTokenUjqbBuynlargeOrgrepo(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(RepositoryToken, code="UJQB", repository="buynlarge/orgrepo") - - def test_get_anonymous(self): - self._run_test('GET', 401, None, None) - - def test_get_freshuser(self): - self._run_test('GET', 403, 'freshuser', None) - - def test_get_reader(self): - self._run_test('GET', 403, 'reader', None) - - def test_get_devtable(self): - self._run_test('GET', 404, 'devtable', None) - - def test_put_anonymous(self): - self._run_test('PUT', 401, None, {u'role': u'read'}) - - def test_put_freshuser(self): - self._run_test('PUT', 403, 'freshuser', {u'role': u'read'}) - - def test_put_reader(self): - self._run_test('PUT', 403, 'reader', {u'role': u'read'}) - - def test_put_devtable(self): - self._run_test('PUT', 400, 'devtable', {u'role': u'read'}) - - def test_delete_anonymous(self): - self._run_test('DELETE', 401, None, None) - - def test_delete_freshuser(self): - self._run_test('DELETE', 403, 'freshuser', None) - - def test_delete_reader(self): - self._run_test('DELETE', 403, 'reader', None) - - def test_delete_devtable(self): - self._run_test('DELETE', 400, 'devtable', None) - - -class TestRepositoryImage5avqPublicPublicrepo(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(RepositoryImage, image_id="5AVQ", repository="public/publicrepo") - - def test_get_anonymous(self): - self._run_test('GET', 404, None, None) - - def test_get_freshuser(self): - self._run_test('GET', 404, 'freshuser', None) - - def test_get_reader(self): - self._run_test('GET', 404, 'reader', None) - - def test_get_devtable(self): - self._run_test('GET', 404, 'devtable', None) - - -class TestRepositoryImage5avqDevtableShared(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(RepositoryImage, image_id="5AVQ", repository="devtable/shared") - - def test_get_anonymous(self): - self._run_test('GET', 401, None, None) - - def test_get_freshuser(self): - self._run_test('GET', 403, 'freshuser', None) - - def test_get_reader(self): - self._run_test('GET', 404, 'reader', None) - - def test_get_devtable(self): - self._run_test('GET', 404, 'devtable', None) - - -class TestRepositoryImage5avqBuynlargeOrgrepo(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(RepositoryImage, image_id="5AVQ", repository="buynlarge/orgrepo") - - def test_get_anonymous(self): - self._run_test('GET', 401, None, None) - - def test_get_freshuser(self): - self._run_test('GET', 403, 'freshuser', None) - - def test_get_reader(self): - self._run_test('GET', 404, 'reader', None) - - def test_get_devtable(self): - self._run_test('GET', 404, 'devtable', None) - - -class TestRestoreTagHp8rPublicPublicrepo(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(RestoreTag, tag="HP8R", repository="public/publicrepo") - - def test_post_anonymous(self): - self._run_test('POST', 401, None, {u'image': 'WXNG'}) - - def test_post_freshuser(self): - self._run_test('POST', 403, 'freshuser', {u'image': 'WXNG'}) - - def test_post_reader(self): - self._run_test('POST', 403, 'reader', {u'image': 'WXNG'}) - - def test_post_devtable(self): - self._run_test('POST', 403, 'devtable', {u'image': 'WXNG'}) - - -class TestRestoreTagHp8rDevtableShared(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(RestoreTag, tag="HP8R", repository="devtable/shared") - - def test_post_anonymous(self): - self._run_test('POST', 401, None, {u'image': 'WXNG'}) - - def test_post_freshuser(self): - self._run_test('POST', 403, 'freshuser', {u'image': 'WXNG'}) - - def test_post_reader(self): - self._run_test('POST', 403, 'reader', {u'image': 'WXNG'}) - - def test_post_devtable(self): - self._run_test('POST', 400, 'devtable', {u'image': 'WXNG'}) - - -class TestRestoreTagHp8rBuynlargeOrgrepo(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(RestoreTag, tag="HP8R", repository="buynlarge/orgrepo") - - def test_post_anonymous(self): - self._run_test('POST', 401, None, {u'image': 'WXNG'}) - - def test_post_freshuser(self): - self._run_test('POST', 403, 'freshuser', {u'image': 'WXNG'}) - - def test_post_reader(self): - self._run_test('POST', 403, 'reader', {u'image': 'WXNG'}) - - def test_post_devtable(self): - self._run_test('POST', 400, 'devtable', {u'image': 'WXNG'}) - - - -class TestRepositoryTagHp8rPublicPublicrepo(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(RepositoryTag, tag="HP8R", repository="public/publicrepo") - - def test_put_anonymous(self): - self._run_test('PUT', 401, None, {u'image': 'WXNG'}) - - def test_put_freshuser(self): - self._run_test('PUT', 403, 'freshuser', {u'image': 'WXNG'}) - - def test_put_reader(self): - self._run_test('PUT', 403, 'reader', {u'image': 'WXNG'}) - - def test_put_devtable(self): - self._run_test('PUT', 403, 'devtable', {u'image': 'WXNG'}) - - def test_delete_anonymous(self): - self._run_test('DELETE', 401, None, None) - - def test_delete_freshuser(self): - self._run_test('DELETE', 403, 'freshuser', None) - - def test_delete_reader(self): - self._run_test('DELETE', 403, 'reader', None) - - def test_delete_devtable(self): - self._run_test('DELETE', 403, 'devtable', None) - - -class TestRepositoryTagHp8rDevtableShared(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(RepositoryTag, tag="HP8R", repository="devtable/shared") - - def test_put_anonymous(self): - self._run_test('PUT', 401, None, {u'image': 'WXNG'}) - - def test_put_freshuser(self): - self._run_test('PUT', 403, 'freshuser', {u'image': 'WXNG'}) - - def test_put_reader(self): - self._run_test('PUT', 403, 'reader', {u'image': 'WXNG'}) - - def test_put_devtable(self): - self._run_test('PUT', 404, 'devtable', {u'image': 'WXNG'}) - - def test_delete_anonymous(self): - self._run_test('DELETE', 401, None, None) - - def test_delete_freshuser(self): - self._run_test('DELETE', 403, 'freshuser', None) - - def test_delete_reader(self): - self._run_test('DELETE', 403, 'reader', None) - - def test_delete_devtable(self): - self._run_test('DELETE', 400, 'devtable', None) - - -class TestRepositoryTagHp8rBuynlargeOrgrepo(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(RepositoryTag, tag="HP8R", repository="buynlarge/orgrepo") - - def test_put_anonymous(self): - self._run_test('PUT', 401, None, {u'image': 'WXNG'}) - - def test_put_freshuser(self): - self._run_test('PUT', 403, 'freshuser', {u'image': 'WXNG'}) - - def test_put_reader(self): - self._run_test('PUT', 403, 'reader', {u'image': 'WXNG'}) - - def test_put_devtable(self): - self._run_test('PUT', 404, 'devtable', {u'image': 'WXNG'}) - - def test_delete_anonymous(self): - self._run_test('DELETE', 401, None, None) - - def test_delete_freshuser(self): - self._run_test('DELETE', 403, 'freshuser', None) - - def test_delete_reader(self): - self._run_test('DELETE', 403, 'reader', None) - - def test_delete_devtable(self): - self._run_test('DELETE', 400, 'devtable', None) - - -class TestPermissionPrototypeListBuynlarge(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(PermissionPrototypeList, orgname="buynlarge") - - def test_get_anonymous(self): - self._run_test('GET', 401, None, None) - - def test_get_freshuser(self): - self._run_test('GET', 403, 'freshuser', None) - - def test_get_reader(self): - self._run_test('GET', 403, 'reader', None) - - def test_get_devtable(self): - self._run_test('GET', 200, 'devtable', None) - - def test_post_anonymous(self): - self._run_test('POST', 401, None, {u'role': u'read', - u'delegate': {u'kind': u'user', u'name': '7DGP'}}) - - def test_post_freshuser(self): - self._run_test('POST', 403, 'freshuser', {u'role': u'read', - u'delegate': {u'kind': u'user', u'name': '7DGP'}}) - - def test_post_reader(self): - self._run_test('POST', 403, 'reader', {u'role': u'read', - u'delegate': {u'kind': u'user', u'name': '7DGP'}}) - - def test_post_devtable(self): - self._run_test('POST', 400, 'devtable', {u'role': u'read', - u'delegate': {u'kind': u'user', u'name': '7DGP'}}) - - -class TestOrganizationInvoiceListBuynlarge(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(OrganizationInvoiceList, orgname="buynlarge") - - def test_get_anonymous(self): - self._run_test('GET', 401, None, None) - - def test_get_freshuser(self): - self._run_test('GET', 403, 'freshuser', None) - - def test_get_reader(self): - self._run_test('GET', 403, 'reader', None) - - def test_get_devtable(self): - self._run_test('GET', 200, 'devtable', None) - - -class TestOrgPrivateRepositoriesBuynlarge(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(OrgPrivateRepositories, orgname="buynlarge") - - def test_get_anonymous(self): - self._run_test('GET', 401, None, None) - - def test_get_freshuser(self): - self._run_test('GET', 403, 'freshuser', None) - - def test_get_reader(self): - self._run_test('GET', 403, 'reader', None) - - def test_get_devtable(self): - self._run_test('GET', 200, 'devtable', None) - - -class TestOrganizationMemberListBuynlarge(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(OrganizationMemberList, orgname="buynlarge") - - def test_get_anonymous(self): - self._run_test('GET', 401, None, None) - - def test_get_freshuser(self): - self._run_test('GET', 403, 'freshuser', None) - - def test_get_reader(self): - self._run_test('GET', 403, 'reader', None) - - def test_get_devtable(self): - self._run_test('GET', 200, 'devtable', None) - - -class TestOrgRobotListBuynlarge(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(OrgRobotList, orgname="buynlarge") - - def test_get_anonymous(self): - self._run_test('GET', 401, None, None) - - def test_get_freshuser(self): - self._run_test('GET', 403, 'freshuser', None) - - def test_get_reader(self): - self._run_test('GET', 200, 'reader', None) - - def test_get_devtable(self): - self._run_test('GET', 200, 'devtable', None) - - -class TestOrganizationCardBuynlarge(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(OrganizationCard, orgname="buynlarge") - - def test_get_anonymous(self): - self._run_test('GET', 401, None, None) - - def test_get_freshuser(self): - self._run_test('GET', 403, 'freshuser', None) - - def test_get_reader(self): - self._run_test('GET', 403, 'reader', None) - - def test_get_devtable(self): - self._run_test('GET', 200, 'devtable', None) - - def test_post_anonymous(self): - self._run_test('POST', 401, None, {u'token': '4VFR'}) - - def test_post_freshuser(self): - self._run_test('POST', 403, 'freshuser', {u'token': '4VFR'}) - - def test_post_reader(self): - self._run_test('POST', 403, 'reader', {u'token': '4VFR'}) - - -class TestOrganizationPlanBuynlarge(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(OrganizationPlan, orgname="buynlarge") - - def test_get_anonymous(self): - self._run_test('GET', 401, None, None) - - def test_get_freshuser(self): - self._run_test('GET', 403, 'freshuser', None) - - def test_get_reader(self): - self._run_test('GET', 403, 'reader', None) - - def test_get_devtable(self): - self._run_test('GET', 200, 'devtable', None) - - def test_put_anonymous(self): - self._run_test('PUT', 401, None, {u'plan': 'WWEI'}) - - def test_put_freshuser(self): - self._run_test('PUT', 403, 'freshuser', {u'plan': 'WWEI'}) - - def test_put_reader(self): - self._run_test('PUT', 403, 'reader', {u'plan': 'WWEI'}) - - -class TestOrgLogsBuynlarge(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(OrgLogs, orgname="buynlarge") - - def test_get_anonymous(self): - self._run_test('GET', 401, None, None) - - def test_get_freshuser(self): - self._run_test('GET', 403, 'freshuser', None) - - def test_get_reader(self): - self._run_test('GET', 403, 'reader', None) - - def test_get_devtable(self): - self._run_test('GET', 200, 'devtable', None) - - -class TestRepositoryVisibilityPublicPublicrepo(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(RepositoryVisibility, repository="public/publicrepo") - - def test_post_anonymous(self): - self._run_test('POST', 401, None, {u'visibility': u'public'}) - - def test_post_freshuser(self): - self._run_test('POST', 403, 'freshuser', {u'visibility': u'public'}) - - def test_post_reader(self): - self._run_test('POST', 403, 'reader', {u'visibility': u'public'}) - - def test_post_devtable(self): - self._run_test('POST', 403, 'devtable', {u'visibility': u'public'}) - - -class TestRepositoryVisibilityDevtableShared(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(RepositoryVisibility, repository="devtable/shared") - - def test_post_anonymous(self): - self._run_test('POST', 401, None, {u'visibility': u'public'}) - - def test_post_freshuser(self): - self._run_test('POST', 403, 'freshuser', {u'visibility': u'public'}) - - def test_post_reader(self): - self._run_test('POST', 403, 'reader', {u'visibility': u'public'}) - - def test_post_devtable(self): - self._run_test('POST', 200, 'devtable', {u'visibility': u'public'}) - - -class TestRepositoryVisibilityBuynlargeOrgrepo(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(RepositoryVisibility, repository="buynlarge/orgrepo") - - def test_post_anonymous(self): - self._run_test('POST', 401, None, {u'visibility': u'public'}) - - def test_post_freshuser(self): - self._run_test('POST', 403, 'freshuser', {u'visibility': u'public'}) - - def test_post_reader(self): - self._run_test('POST', 403, 'reader', {u'visibility': u'public'}) - - def test_post_devtable(self): - self._run_test('POST', 200, 'devtable', {u'visibility': u'public'}) - - -class TestBuildTriggerListPublicPublicrepo(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(BuildTriggerList, repository="public/publicrepo") - - def test_get_anonymous(self): - self._run_test('GET', 401, None, None) - - def test_get_freshuser(self): - self._run_test('GET', 403, 'freshuser', None) - - def test_get_reader(self): - self._run_test('GET', 403, 'reader', None) - - def test_get_devtable(self): - self._run_test('GET', 403, 'devtable', None) - - -class TestBuildTriggerListDevtableShared(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(BuildTriggerList, repository="devtable/shared") - - def test_get_anonymous(self): - self._run_test('GET', 401, None, None) - - def test_get_freshuser(self): - self._run_test('GET', 403, 'freshuser', None) - - def test_get_reader(self): - self._run_test('GET', 403, 'reader', None) - - def test_get_devtable(self): - self._run_test('GET', 200, 'devtable', None) - - -class TestBuildTriggerListBuynlargeOrgrepo(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(BuildTriggerList, repository="buynlarge/orgrepo") - - def test_get_anonymous(self): - self._run_test('GET', 401, None, None) - - def test_get_freshuser(self): - self._run_test('GET', 403, 'freshuser', None) - - def test_get_reader(self): - self._run_test('GET', 403, 'reader', None) - - def test_get_devtable(self): - self._run_test('GET', 200, 'devtable', None) - - -class TestRepositoryNotificationListPublicPublicrepo(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(RepositoryNotificationList, repository="public/publicrepo") - - def test_get_anonymous(self): - self._run_test('GET', 401, None, None) - - def test_get_freshuser(self): - self._run_test('GET', 403, 'freshuser', None) - - def test_get_reader(self): - self._run_test('GET', 403, 'reader', None) - - def test_get_devtable(self): - self._run_test('GET', 403, 'devtable', None) - - def test_post_anonymous(self): - self._run_test('POST', 401, None, {}) - - def test_post_freshuser(self): - self._run_test('POST', 403, 'freshuser', {}) - - def test_post_reader(self): - self._run_test('POST', 403, 'reader', {}) - - def test_post_devtable(self): - self._run_test('POST', 403, 'devtable', {}) - - -class TestRepositoryNotificationListDevtableShared(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(RepositoryNotificationList, repository="devtable/shared") - - def test_get_anonymous(self): - self._run_test('GET', 401, None, None) - - def test_get_freshuser(self): - self._run_test('GET', 403, 'freshuser', None) - - def test_get_reader(self): - self._run_test('GET', 403, 'reader', None) - - def test_get_devtable(self): - self._run_test('GET', 200, 'devtable', None) - - def test_post_anonymous(self): - self._run_test('POST', 401, None, {}) - - def test_post_freshuser(self): - self._run_test('POST', 403, 'freshuser', {}) - - def test_post_reader(self): - self._run_test('POST', 403, 'reader', {}) - - def test_post_devtable(self): - self._run_test('POST', 400, 'devtable', {'event': 'repo_push', 'method': 'email', - 'config': {'email': 'a@b.com'}}) - - -class TestRepositoryNotificationListBuynlargeOrgrepo(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(RepositoryNotificationList, repository="buynlarge/orgrepo") - - def test_get_anonymous(self): - self._run_test('GET', 401, None, None) - - def test_get_freshuser(self): - self._run_test('GET', 403, 'freshuser', None) - - def test_get_reader(self): - self._run_test('GET', 403, 'reader', None) - - def test_get_devtable(self): - self._run_test('GET', 200, 'devtable', None) - - def test_post_anonymous(self): - self._run_test('POST', 401, None, {}) - - def test_post_freshuser(self): - self._run_test('POST', 403, 'freshuser', {}) - - def test_post_reader(self): - self._run_test('POST', 403, 'reader', {}) - - def test_post_devtable(self): - self._run_test('POST', 400, 'devtable', {'event': 'repo_push', 'method': 'email', - 'config': {'email': 'a@b.com'}}) - - -class TestRepositoryAuthorizedEmailPublicPublicrepo(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(RepositoryAuthorizedEmail, repository="public/publicrepo", - email="jschorr@devtable.com") - - def test_get_anonymous(self): - self._run_test('GET', 401, None, None) - - def test_get_freshuser(self): - self._run_test('GET', 403, 'freshuser', None) - - def test_get_reader(self): - self._run_test('GET', 403, 'reader', None) - - def test_get_devtable(self): - self._run_test('GET', 403, 'devtable', None) - - def test_post_anonymous(self): - self._run_test('POST', 401, None, {}) - - def test_post_freshuser(self): - self._run_test('POST', 403, 'freshuser', {}) - - def test_post_reader(self): - self._run_test('POST', 403, 'reader', {}) - - def test_post_devtable(self): - self._run_test('POST', 403, 'devtable', {}) - - -class TestRepositoryAuthorizedEmailDevtableSharedrepo(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(RepositoryAuthorizedEmail, repository="devtable/shared", - email="jschorr@devtable.com") - - def test_get_anonymous(self): - self._run_test('GET', 401, None, None) - - def test_get_freshuser(self): - self._run_test('GET', 403, 'freshuser', None) - - def test_get_reader(self): - self._run_test('GET', 403, 'reader', None) - - def test_get_devtable(self): - self._run_test('GET', 404, 'devtable', None) - - def test_post_anonymous(self): - self._run_test('POST', 401, None, {}) - - def test_post_freshuser(self): - self._run_test('POST', 403, 'freshuser', {}) - - def test_post_reader(self): - self._run_test('POST', 403, 'reader', {}) - - def test_post_devtable(self): - self._run_test('POST', 200, 'devtable', {}) - - -class TestRepositoryAuthorizedEmailBuynlargeOrgrepo(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(RepositoryAuthorizedEmail, repository="buynlarge/orgrepo", - email="jschorr@devtable.com") - - def test_get_anonymous(self): - self._run_test('GET', 401, None, None) - - def test_get_freshuser(self): - self._run_test('GET', 403, 'freshuser', None) - - def test_get_reader(self): - self._run_test('GET', 403, 'reader', None) - - def test_get_devtable(self): - self._run_test('GET', 404, 'devtable', None) - - def test_post_anonymous(self): - self._run_test('POST', 401, None, {}) - - def test_post_freshuser(self): - self._run_test('POST', 403, 'freshuser', {}) - - def test_post_reader(self): - self._run_test('POST', 403, 'reader', {}) - - def test_post_devtable(self): - self._run_test('POST', 200, 'devtable', {}) - - - -class TestRepositoryTokenListPublicPublicrepo(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(RepositoryTokenList, repository="public/publicrepo") - - def test_get_anonymous(self): - self._run_test('GET', 401, None, None) - - def test_get_freshuser(self): - self._run_test('GET', 403, 'freshuser', None) - - def test_get_reader(self): - self._run_test('GET', 403, 'reader', None) - - def test_get_devtable(self): - self._run_test('GET', 403, 'devtable', None) - - def test_post_anonymous(self): - self._run_test('POST', 401, None, {u'friendlyName': 'R1CN'}) - - def test_post_freshuser(self): - self._run_test('POST', 403, 'freshuser', {u'friendlyName': 'R1CN'}) - - def test_post_reader(self): - self._run_test('POST', 403, 'reader', {u'friendlyName': 'R1CN'}) - - def test_post_devtable(self): - self._run_test('POST', 403, 'devtable', {u'friendlyName': 'R1CN'}) - - -class TestRepositoryTokenListDevtableShared(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(RepositoryTokenList, repository="devtable/shared") - - def test_get_anonymous(self): - self._run_test('GET', 401, None, None) - - def test_get_freshuser(self): - self._run_test('GET', 403, 'freshuser', None) - - def test_get_reader(self): - self._run_test('GET', 403, 'reader', None) - - def test_get_devtable(self): - self._run_test('GET', 200, 'devtable', None) - - def test_post_anonymous(self): - self._run_test('POST', 401, None, {u'friendlyName': 'R1CN'}) - - def test_post_freshuser(self): - self._run_test('POST', 403, 'freshuser', {u'friendlyName': 'R1CN'}) - - def test_post_reader(self): - self._run_test('POST', 403, 'reader', {u'friendlyName': 'R1CN'}) - - def test_post_devtable(self): - self._run_test('POST', 201, 'devtable', {u'friendlyName': 'R1CN'}) - - -class TestRepositoryTokenListBuynlargeOrgrepo(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(RepositoryTokenList, repository="buynlarge/orgrepo") - - def test_get_anonymous(self): - self._run_test('GET', 401, None, None) - - def test_get_freshuser(self): - self._run_test('GET', 403, 'freshuser', None) - - def test_get_reader(self): - self._run_test('GET', 403, 'reader', None) - - def test_get_devtable(self): - self._run_test('GET', 200, 'devtable', None) - - def test_post_anonymous(self): - self._run_test('POST', 401, None, {u'friendlyName': 'R1CN'}) - - def test_post_freshuser(self): - self._run_test('POST', 403, 'freshuser', {u'friendlyName': 'R1CN'}) - - def test_post_reader(self): - self._run_test('POST', 403, 'reader', {u'friendlyName': 'R1CN'}) - - def test_post_devtable(self): - self._run_test('POST', 201, 'devtable', {u'friendlyName': 'R1CN'}) - - -class TestRepositoryBuildListPublicPublicrepo(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(RepositoryBuildList, repository="public/publicrepo") - - def test_get_anonymous(self): - self._run_test('GET', 200, None, None) - - def test_get_freshuser(self): - self._run_test('GET', 200, 'freshuser', None) - - def test_get_reader(self): - self._run_test('GET', 200, 'reader', None) - - def test_get_devtable(self): - self._run_test('GET', 200, 'devtable', None) - - def test_post_anonymous(self): - self._run_test('POST', 401, None, {u'file_id': 'UX7K'}) - - def test_post_freshuser(self): - self._run_test('POST', 403, 'freshuser', {u'file_id': 'UX7K'}) - - def test_post_reader(self): - self._run_test('POST', 403, 'reader', {u'file_id': 'UX7K'}) - - def test_post_devtable(self): - self._run_test('POST', 403, 'devtable', {u'file_id': 'UX7K'}) - - -class TestRepositoryBuildListDevtableShared(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(RepositoryBuildList, repository="devtable/shared") - - def test_get_anonymous(self): - self._run_test('GET', 401, None, None) - - def test_get_freshuser(self): - self._run_test('GET', 403, 'freshuser', None) - - def test_get_reader(self): - self._run_test('GET', 200, 'reader', None) - - def test_get_devtable(self): - self._run_test('GET', 200, 'devtable', None) - - def test_post_anonymous(self): - self._run_test('POST', 401, None, {u'file_id': 'UX7K'}) - - def test_post_freshuser(self): - self._run_test('POST', 403, 'freshuser', {u'file_id': 'UX7K'}) - - def test_post_reader(self): - self._run_test('POST', 403, 'reader', {u'file_id': 'UX7K'}) - - def test_post_devtable(self): - self._run_test('POST', 201, 'devtable', {u'file_id': 'UX7K'}) - - -class TestRepositoryBuildListBuynlargeOrgrepo(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(RepositoryBuildList, repository="buynlarge/orgrepo") - - def test_get_anonymous(self): - self._run_test('GET', 401, None, None) - - def test_get_freshuser(self): - self._run_test('GET', 403, 'freshuser', None) - - def test_get_reader(self): - self._run_test('GET', 200, 'reader', None) - - def test_get_devtable(self): - self._run_test('GET', 200, 'devtable', None) - - def test_post_anonymous(self): - self._run_test('POST', 401, None, {u'file_id': 'UX7K'}) - - def test_post_freshuser(self): - self._run_test('POST', 403, 'freshuser', {u'file_id': 'UX7K'}) - - def test_post_reader(self): - self._run_test('POST', 403, 'reader', {u'file_id': 'UX7K'}) - - def test_post_devtable(self): - self._run_test('POST', 201, 'devtable', {u'file_id': 'UX7K'}) - - -class TestRepositoryImageListPublicPublicrepo(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(RepositoryImageList, repository="public/publicrepo") - - def test_get_anonymous(self): - self._run_test('GET', 200, None, None) - - def test_get_freshuser(self): - self._run_test('GET', 200, 'freshuser', None) - - def test_get_reader(self): - self._run_test('GET', 200, 'reader', None) - - def test_get_devtable(self): - self._run_test('GET', 200, 'devtable', None) - - -class TestRepositoryImageListDevtableShared(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(RepositoryImageList, repository="devtable/shared") - - def test_get_anonymous(self): - self._run_test('GET', 401, None, None) - - def test_get_freshuser(self): - self._run_test('GET', 403, 'freshuser', None) - - def test_get_reader(self): - self._run_test('GET', 200, 'reader', None) - - def test_get_devtable(self): - self._run_test('GET', 200, 'devtable', None) - - -class TestRepositoryImageListBuynlargeOrgrepo(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(RepositoryImageList, repository="buynlarge/orgrepo") - - def test_get_anonymous(self): - self._run_test('GET', 401, None, None) - - def test_get_freshuser(self): - self._run_test('GET', 403, 'freshuser', None) - - def test_get_reader(self): - self._run_test('GET', 200, 'reader', None) - - def test_get_devtable(self): - self._run_test('GET', 200, 'devtable', None) - - -class TestRepositoryLogsPublicPublicrepo(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(RepositoryLogs, repository="public/publicrepo") - - def test_get_anonymous(self): - self._run_test('GET', 401, None, None) - - def test_get_freshuser(self): - self._run_test('GET', 403, 'freshuser', None) - - def test_get_reader(self): - self._run_test('GET', 403, 'reader', None) - - def test_get_devtable(self): - self._run_test('GET', 403, 'devtable', None) - - -class TestRepositoryLogsDevtableShared(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(RepositoryLogs, repository="devtable/shared") - - def test_get_anonymous(self): - self._run_test('GET', 401, None, None) - - def test_get_freshuser(self): - self._run_test('GET', 403, 'freshuser', None) - - def test_get_reader(self): - self._run_test('GET', 403, 'reader', None) - - def test_get_devtable(self): - self._run_test('GET', 200, 'devtable', None) - - -class TestRepositoryLogsBuynlargeOrgrepo(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(RepositoryLogs, repository="buynlarge/orgrepo") - - def test_get_anonymous(self): - self._run_test('GET', 401, None, None) - - def test_get_freshuser(self): - self._run_test('GET', 403, 'freshuser', None) - - def test_get_reader(self): - self._run_test('GET', 403, 'reader', None) - - def test_get_devtable(self): - self._run_test('GET', 200, 'devtable', None) - - -class TestUserRobot5vdy(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(UserRobot, robot_shortname="robotname") - - def test_get_anonymous(self): - self._run_test('GET', 401, None, None) - - def test_get_freshuser(self): - self._run_test('GET', 400, 'freshuser', None) - - def test_get_reader(self): - self._run_test('GET', 400, 'reader', None) - - def test_get_devtable(self): - self._run_test('GET', 400, 'devtable', None) - - - def test_put_anonymous(self): - self._run_test('PUT', 401, None, None) - - def test_put_freshuser(self): - self._run_test('PUT', 201, 'freshuser', None) - - def test_put_reader(self): - self._run_test('PUT', 201, 'reader', None) - - def test_put_devtable(self): - self._run_test('PUT', 201, 'devtable', None) - - - def test_delete_anonymous(self): - self._run_test('DELETE', 401, None, None) - - def test_delete_freshuser(self): - self._run_test('DELETE', 400, 'freshuser', None) - - def test_delete_reader(self): - self._run_test('DELETE', 400, 'reader', None) - - def test_delete_devtable(self): - self._run_test('DELETE', 400, 'devtable', None) - - -class TestRegenerateUserRobot(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(RegenerateUserRobot, robot_shortname="robotname") - - def test_post_anonymous(self): - self._run_test('POST', 401, None, None) - - def test_post_freshuser(self): - self._run_test('POST', 400, 'freshuser', None) - - def test_post_reader(self): - self._run_test('POST', 400, 'reader', None) - - def test_post_devtable(self): - self._run_test('POST', 400, 'devtable', None) - - -class TestRegenerateOrgRobot(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(RegenerateOrgRobot, orgname="buynlarge", robot_shortname="robotname") - - def test_post_anonymous(self): - self._run_test('POST', 401, None, None) - - def test_post_freshuser(self): - self._run_test('POST', 403, 'freshuser', None) - - def test_post_reader(self): - self._run_test('POST', 403, 'reader', None) - - def test_post_devtable(self): - self._run_test('POST', 400, 'devtable', None) - - -class TestUserRobotPermissions(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(UserRobotPermissions, robot_shortname="robotname") - - def test_get_anonymous(self): - self._run_test('GET', 401, None, None) - - def test_get_freshuser(self): - self._run_test('GET', 400, 'freshuser', None) - - def test_get_reader(self): - self._run_test('GET', 400, 'reader', None) - - def test_get_devtable(self): - self._run_test('GET', 400, 'devtable', None) - - -class TestOrgRobotPermissions(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(OrgRobotPermissions, orgname="buynlarge", robot_shortname="robotname") - - def test_get_anonymous(self): - self._run_test('GET', 401, None, None) - - def test_get_freshuser(self): - self._run_test('GET', 403, 'freshuser', None) - - def test_get_reader(self): - self._run_test('GET', 403, 'reader', None) - - def test_get_devtable(self): - self._run_test('GET', 400, 'devtable', None) - - -class TestOrganizationBuynlarge(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(Organization, orgname="buynlarge") - - def test_get_anonymous(self): - self._run_test('GET', 200, None, None) - - def test_get_freshuser(self): - self._run_test('GET', 200, 'freshuser', None) - - def test_get_reader(self): - self._run_test('GET', 200, 'reader', None) - - def test_get_devtable(self): - self._run_test('GET', 200, 'devtable', None) - - def test_put_anonymous(self): - self._run_test('PUT', 401, None, {}) - - def test_put_freshuser(self): - self._run_test('PUT', 403, 'freshuser', {}) - - def test_put_reader(self): - self._run_test('PUT', 403, 'reader', {}) - - def test_put_devtable(self): - self._run_test('PUT', 200, 'devtable', {}) - - def test_delete_anonymous(self): - self._run_test('DELETE', 401, None, {}) - - def test_delete_freshuser(self): - self._run_test('DELETE', 403, 'freshuser', {}) - - def test_delete_reader(self): - self._run_test('DELETE', 403, 'reader', {}) - - def test_delete_devtable(self): - self._run_test('DELETE', 204, 'devtable', {}) - - -class TestRepositoryPublicPublicrepo(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(Repository, repository="public/publicrepo") - - def test_get_anonymous(self): - self._run_test('GET', 200, None, None) - - def test_get_freshuser(self): - self._run_test('GET', 200, 'freshuser', None) - - def test_get_reader(self): - self._run_test('GET', 200, 'reader', None) - - def test_get_devtable(self): - self._run_test('GET', 200, 'devtable', None) - - def test_put_anonymous(self): - self._run_test('PUT', 401, None, {u'description': 'WXNG'}) - - def test_put_freshuser(self): - self._run_test('PUT', 403, 'freshuser', {u'description': 'WXNG'}) - - def test_put_reader(self): - self._run_test('PUT', 403, 'reader', {u'description': 'WXNG'}) - - def test_put_devtable(self): - self._run_test('PUT', 403, 'devtable', {u'description': 'WXNG'}) - - def test_delete_anonymous(self): - self._run_test('DELETE', 401, None, None) - - def test_delete_freshuser(self): - self._run_test('DELETE', 403, 'freshuser', None) - - def test_delete_reader(self): - self._run_test('DELETE', 403, 'reader', None) - - def test_delete_devtable(self): - self._run_test('DELETE', 403, 'devtable', None) - - -class TestRepositoryDevtableShared(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(Repository, repository="devtable/shared") - - def test_get_anonymous(self): - self._run_test('GET', 401, None, None) - - def test_get_freshuser(self): - self._run_test('GET', 403, 'freshuser', None) - - def test_get_reader(self): - self._run_test('GET', 200, 'reader', None) - - def test_get_devtable(self): - self._run_test('GET', 200, 'devtable', None) - - def test_put_anonymous(self): - self._run_test('PUT', 401, None, {u'description': 'WXNG'}) - - def test_put_freshuser(self): - self._run_test('PUT', 403, 'freshuser', {u'description': 'WXNG'}) - - def test_put_reader(self): - self._run_test('PUT', 403, 'reader', {u'description': 'WXNG'}) - - def test_put_devtable(self): - self._run_test('PUT', 200, 'devtable', {u'description': 'WXNG'}) - - def test_delete_anonymous(self): - self._run_test('DELETE', 401, None, None) - - def test_delete_freshuser(self): - self._run_test('DELETE', 403, 'freshuser', None) - - def test_delete_reader(self): - self._run_test('DELETE', 403, 'reader', None) - - def test_delete_devtable(self): - self._run_test('DELETE', 204, 'devtable', None) - - -class TestRepositoryBuynlargeOrgrepo(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(Repository, repository="buynlarge/orgrepo") - - def test_get_anonymous(self): - self._run_test('GET', 401, None, None) - - def test_get_freshuser(self): - self._run_test('GET', 403, 'freshuser', None) - - def test_get_reader(self): - self._run_test('GET', 200, 'reader', None) - - def test_get_devtable(self): - self._run_test('GET', 200, 'devtable', None) - - def test_put_anonymous(self): - self._run_test('PUT', 401, None, {u'description': 'WXNG'}) - - def test_put_freshuser(self): - self._run_test('PUT', 403, 'freshuser', {u'description': 'WXNG'}) - - def test_put_reader(self): - self._run_test('PUT', 403, 'reader', {u'description': 'WXNG'}) - - def test_put_devtable(self): - self._run_test('PUT', 200, 'devtable', {u'description': 'WXNG'}) - - def test_delete_anonymous(self): - self._run_test('DELETE', 401, None, None) - - def test_delete_freshuser(self): - self._run_test('DELETE', 403, 'freshuser', None) - - def test_delete_reader(self): - self._run_test('DELETE', 403, 'reader', None) - - def test_delete_devtable(self): - self._run_test('DELETE', 204, 'devtable', None) - - -class TestEntitySearchR9nz(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(EntitySearch, prefix="R9NZ") - - def test_get_anonymous(self): - self._run_test('GET', 200, None, None) - - def test_get_freshuser(self): - self._run_test('GET', 200, 'freshuser', None) - - def test_get_reader(self): - self._run_test('GET', 200, 'reader', None) - - def test_get_devtable(self): - self._run_test('GET', 200, 'devtable', None) - - -class TestApplicationInformation3lgi(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(ApplicationInformation, client_id="3LGI") - - def test_get_anonymous(self): - self._run_test('GET', 404, None, None) - - def test_get_freshuser(self): - self._run_test('GET', 404, 'freshuser', None) - - def test_get_reader(self): - self._run_test('GET', 404, 'reader', None) - - def test_get_devtable(self): - self._run_test('GET', 404, 'devtable', None) - - -class TestOrganizationApplications(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(OrganizationApplications, orgname="buynlarge") - - def test_get_anonymous(self): - self._run_test('GET', 401, None, None) - - def test_get_freshuser(self): - self._run_test('GET', 403, 'freshuser', None) - - def test_get_reader(self): - self._run_test('GET', 403, 'reader', None) - - def test_get_devtable(self): - self._run_test('GET', 200, 'devtable', None) - - - def test_post_anonymous(self): - self._run_test('POST', 401, None, {u'name': 'foo'}) - - def test_post_freshuser(self): - self._run_test('POST', 403, 'freshuser', {u'name': 'foo'}) - - def test_post_reader(self): - self._run_test('POST', 403, 'reader', {u'name': 'foo'}) - - def test_post_devtable(self): - self._run_test('POST', 200, 'devtable', {u'name': 'foo'}) - - -class TestOrganizationApplicationResource(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(OrganizationApplicationResource, orgname="buynlarge", client_id="deadbeef") - - def test_get_anonymous(self): - self._run_test('GET', 401, None, None) - - def test_get_freshuser(self): - self._run_test('GET', 403, 'freshuser', None) - - def test_get_reader(self): - self._run_test('GET', 403, 'reader', None) - - def test_get_devtable(self): - self._run_test('GET', 200, 'devtable', None) - - - def test_put_anonymous(self): - self._run_test('PUT', 401, None, - {u'name': 'foo', u'application_uri': 'foo', u'redirect_uri': 'foo'}) - - def test_put_freshuser(self): - self._run_test('PUT', 403, 'freshuser', - {u'name': 'foo', u'application_uri': 'foo', u'redirect_uri': 'foo'}) - - def test_put_reader(self): - self._run_test('PUT', 403, 'reader', - {u'name': 'foo', u'application_uri': 'foo', u'redirect_uri': 'foo'}) - - def test_put_devtable(self): - self._run_test('PUT', 200, 'devtable', - {u'name': 'foo', u'application_uri': 'foo', u'redirect_uri': 'foo'}) - - - def test_delete_anonymous(self): - self._run_test('DELETE', 401, None, None) - - def test_delete_freshuser(self): - self._run_test('DELETE', 403, 'freshuser', None) - - def test_delete_reader(self): - self._run_test('DELETE', 403, 'reader', None) - - def test_delete_devtable(self): - self._run_test('DELETE', 204, 'devtable', None) - - -class TestOrganizationApplicationResetClientSecret(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(OrganizationApplicationResetClientSecret, - orgname="buynlarge", client_id="deadbeef") - - def test_post_anonymous(self): - self._run_test('POST', 401, None, None) - - def test_post_freshuser(self): - self._run_test('POST', 403, 'freshuser', None) - - def test_post_reader(self): - self._run_test('POST', 403, 'reader', None) - - def test_post_devtable(self): - self._run_test('POST', 200, 'devtable', None) - - - -class TestUserAuthorizationList(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(UserAuthorizationList) - - def test_get_anonymous(self): - self._run_test('GET', 401, None, None) - - def test_get_freshuser(self): - self._run_test('GET', 200, 'freshuser', None) - - def test_get_reader(self): - self._run_test('GET', 200, 'reader', None) - - def test_get_devtable(self): - self._run_test('GET', 200, 'devtable', None) - - - -class TestUserAuthorization(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(UserAuthorization, access_token_uuid='fake') - - def test_get_anonymous(self): - self._run_test('GET', 401, None, None) - - def test_get_freshuser(self): - self._run_test('GET', 404, 'freshuser', None) - - def test_get_reader(self): - self._run_test('GET', 404, 'reader', None) - - def test_get_devtable(self): - self._run_test('GET', 404, 'devtable', None) - - - def test_delete_anonymous(self): - self._run_test('DELETE', 401, None, None) - - def test_delete_freshuser(self): - self._run_test('DELETE', 404, 'freshuser', None) - - def test_delete_reader(self): - self._run_test('DELETE', 404, 'reader', None) - - def test_delete_devtable(self): - self._run_test('DELETE', 404, 'devtable', None) - - -class TestSuperAggregateUserLogs(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(SuperUserAggregateLogs) - - def test_get_anonymous(self): - self._run_test('GET', 401, None, None) - - def test_get_freshuser(self): - self._run_test('GET', 403, 'freshuser', None) - - def test_get_reader(self): - self._run_test('GET', 403, 'reader', None) - - def test_get_devtable(self): - self._run_test('GET', 200, 'devtable', None) - - -class TestSuperUserLogs(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(SuperUserLogs) - - def test_get_anonymous(self): - self._run_test('GET', 401, None, None) - - def test_get_freshuser(self): - self._run_test('GET', 403, 'freshuser', None) - - def test_get_reader(self): - self._run_test('GET', 403, 'reader', None) - - def test_get_devtable(self): - self._run_test('GET', 200, 'devtable', None) - - -class TestSuperUserSendRecoveryEmail(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(SuperUserSendRecoveryEmail, username='someuser') - - def test_post_anonymous(self): - self._run_test('POST', 401, None, None) - - def test_post_freshuser(self): - self._run_test('POST', 403, 'freshuser', None) - - def test_post_reader(self): - self._run_test('POST', 403, 'reader', None) - - def test_post_devtable(self): - self._run_test('POST', 404, 'devtable', None) - - -class TestSuperUserTakeOwnership(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(SuperUserTakeOwnership, namespace='invalidnamespace') - - def test_post_anonymous(self): - self._run_test('POST', 401, None, {}) - - def test_post_freshuser(self): - self._run_test('POST', 403, 'freshuser', {}) - - def test_post_reader(self): - self._run_test('POST', 403, 'reader', {}) - - def test_post_devtable(self): - self._run_test('POST', 404, 'devtable', {}) - - -class TestSuperUserServiceKeyApproval(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(SuperUserServiceKeyApproval, kid=1234) - - def test_post_anonymous(self): - self._run_test('POST', 401, None, {}) - - def test_post_freshuser(self): - self._run_test('POST', 403, 'freshuser', {}) - - def test_post_reader(self): - self._run_test('POST', 403, 'reader', {}) - - def test_post_devtable(self): - self._run_test('POST', 404, 'devtable', {}) - - -class TestSuperUserServiceKeyManagement(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(SuperUserServiceKeyManagement) - - def test_get_anonymous(self): - self._run_test('GET', 401, None, None) - - def test_get_freshuser(self): - self._run_test('GET', 403, 'freshuser', None) - - def test_get_reader(self): - self._run_test('GET', 403, 'reader', None) - - def test_get_devtable(self): - self._run_test('GET', 200, 'devtable', None) - - def test_post_anonymous(self): - self._run_test('POST', 401, None, dict(service='someservice', expiration=None)) - - def test_post_freshuser(self): - self._run_test('POST', 403, 'freshuser', dict(service='someservice', expiration=None)) - - def test_post_reader(self): - self._run_test('POST', 403, 'reader', dict(service='someservice', expiration=None)) - - def test_post_devtable(self): - self._run_test('POST', 200, 'devtable', dict(service='someservice', expiration=None)) - - -class TestSuperUserServiceKey(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(SuperUserServiceKey, kid=1234) - - def test_get_anonymous(self): - self._run_test('GET', 401, None, None) - - def test_get_freshuser(self): - self._run_test('GET', 403, 'freshuser', None) - - def test_get_reader(self): - self._run_test('GET', 403, 'reader', None) - - def test_get_devtable(self): - self._run_test('GET', 404, 'devtable', None) - - def test_delete_anonymous(self): - self._run_test('DELETE', 401, None, None) - - def test_delete_freshuser(self): - self._run_test('DELETE', 403, 'freshuser', None) - - def test_delete_reader(self): - self._run_test('DELETE', 403, 'reader', None) - - def test_delete_devtable(self): - self._run_test('DELETE', 404, 'devtable', None) - - def test_put_anonymous(self): - self._run_test('PUT', 401, None, {}) - - def test_put_freshuser(self): - self._run_test('PUT', 403, 'freshuser', {}) - - def test_put_reader(self): - self._run_test('PUT', 403, 'reader', {}) - - def test_put_devtable(self): - self._run_test('PUT', 404, 'devtable', {}) - - -class TestTeamMemberInvite(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(TeamMemberInvite, code='foobarbaz') - - def test_put_anonymous(self): - self._run_test('PUT', 401, None, None) - - def test_put_freshuser(self): - self._run_test('PUT', 400, 'freshuser', None) - - def test_put_reader(self): - self._run_test('PUT', 400, 'reader', None) - - def test_put_devtable(self): - self._run_test('PUT', 400, 'devtable', None) - - def test_delete_anonymous(self): - self._run_test('DELETE', 401, None, None) - - def test_delete_freshuser(self): - self._run_test('DELETE', 400, 'freshuser', None) - - def test_delete_reader(self): - self._run_test('DELETE', 400, 'reader', None) - - def test_delete_devtable(self): - self._run_test('DELETE', 400, 'devtable', None) - - -class TestChangeLog(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(ChangeLog) - - def test_get_anonymous(self): - self._run_test('GET', 401, None, None) - - def test_get_freshuser(self): - self._run_test('GET', 403, 'freshuser', None) - - def test_get_reader(self): - self._run_test('GET', 403, 'reader', None) - - def test_get_devtable(self): - self._run_test('GET', 200, 'devtable', None) - - -class TestSuperUserOrganizationList(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(SuperUserOrganizationList) - - def test_get_anonymous(self): - self._run_test('GET', 401, None, None) - - def test_get_freshuser(self): - self._run_test('GET', 403, 'freshuser', None) - - def test_get_reader(self): - self._run_test('GET', 403, 'reader', None) - - def test_get_devtable(self): - self._run_test('GET', 200, 'devtable', None) - - -class TestSuperUserOrganizationManagement(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(SuperUserOrganizationManagement, name='buynlarge') - - def test_put_anonymous(self): - self._run_test('PUT', 401, None, {}) - - def test_put_freshuser(self): - self._run_test('PUT', 403, 'freshuser', {}) - - def test_put_reader(self): - self._run_test('PUT', 403, 'reader', {}) - - def test_put_devtable(self): - self._run_test('PUT', 200, 'devtable', {}) - - - def test_delete_anonymous(self): - self._run_test('DELETE', 401, None, None) - - def test_delete_freshuser(self): - self._run_test('DELETE', 403, 'freshuser', None) - - def test_delete_reader(self): - self._run_test('DELETE', 403, 'reader', None) - - def test_delete_devtable(self): - self._run_test('DELETE', 204, 'devtable', None) - - - -class TestSuperUserList(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(SuperUserList) - - def test_get_anonymous(self): - self._run_test('GET', 401, None, None) - - def test_get_freshuser(self): - self._run_test('GET', 403, 'freshuser', None) - - def test_get_reader(self): - self._run_test('GET', 403, 'reader', None) - - def test_get_devtable(self): - self._run_test('GET', 200, 'devtable', None) - - -class TestSuperUserCustomCertificates(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(SuperUserCustomCertificates) - - def test_get_anonymous(self): - self._run_test('GET', 401, None, None) - - def test_get_freshuser(self): - self._run_test('GET', 403, 'freshuser', None) - - def test_get_reader(self): - self._run_test('GET', 403, 'reader', None) - - def test_get_devtable(self): - self._run_test('GET', 200, 'devtable', None) - - -class TestSuperUserCustomCertificate(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(SuperUserCustomCertificate, certpath='somecert.crt') - - def test_post_anonymous(self): - self._run_test('POST', 401, None, None) - - def test_post_freshuser(self): - self._run_test('POST', 403, 'freshuser', None) - - def test_post_reader(self): - self._run_test('POST', 403, 'reader', None) - - def test_post_devtable(self): - self._run_test('POST', 400, 'devtable', None) - - def test_delete_anonymous(self): - self._run_test('DELETE', 401, None, None) - - def test_delete_freshuser(self): - self._run_test('DELETE', 403, 'freshuser', None) - - def test_delete_reader(self): - self._run_test('DELETE', 403, 'reader', None) - - def test_delete_devtable(self): - self._run_test('DELETE', 204, 'devtable', None) - - -class TestSuperUserManagement(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(SuperUserManagement, username='freshuser') - - def test_get_anonymous(self): - self._run_test('GET', 401, None, None) - - def test_get_freshuser(self): - self._run_test('GET', 403, 'freshuser', None) - - def test_get_reader(self): - self._run_test('GET', 403, 'reader', None) - - def test_get_devtable(self): - self._run_test('GET', 200, 'devtable', None) - - - def test_put_anonymous(self): - self._run_test('PUT', 401, None, {}) - - def test_put_freshuser(self): - self._run_test('PUT', 403, 'freshuser', {}) - - def test_put_reader(self): - self._run_test('PUT', 403, 'reader', {}) - - def test_put_devtable(self): - self._run_test('PUT', 200, 'devtable', {}) - - - def test_delete_anonymous(self): - self._run_test('DELETE', 401, None, None) - - def test_delete_freshuser(self): - self._run_test('DELETE', 403, 'freshuser', None) - - def test_delete_reader(self): - self._run_test('DELETE', 403, 'reader', None) - - def test_delete_devtable(self): - self._run_test('DELETE', 204, 'devtable', None) - - -class TestSuperUserMessages(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(GlobalUserMessages) - self.message = {'message': {'content': 'msg', 'severity': 'info', 'media_type': 'text/plain'}} - - def test_post_anonymous(self): - self._run_test('POST', 401, None, None) - - def test_post_freshuser(self): - self._run_test('POST', 403, 'freshuser', self.message) - - def test_post_reader(self): - self._run_test('POST', 403, 'reader', self.message) - - def test_post_devtable(self): - self._run_test('POST', 201, 'devtable', self.message) - - -class TestSuperUserMessage(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(GlobalUserMessage, uuid='1234') - - def test_delete_anonymous(self): - self._run_test('DELETE', 401, None, None) - - def test_delete_freshuser(self): - self._run_test('DELETE', 403, 'freshuser', None) - - def test_delete_reader(self): - self._run_test('DELETE', 403, 'reader', None) - - def test_delete_devtable(self): - self._run_test('DELETE', 204, 'devtable', None) - - -class TestUserInvoiceFieldList(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(UserInvoiceFieldList) - - def test_get_anonymous(self): - self._run_test('GET', 401, None, None) - - def test_get_freshuser(self): - self._run_test('GET', 404, 'freshuser', None) - - def test_get_reader(self): - self._run_test('GET', 404, 'reader', None) - - def test_get_devtable(self): - self._run_test('GET', 200, 'devtable', None) - - - def test_post_anonymous(self): - self._run_test('POST', 401, None, None) - - def test_post_freshuser(self): - self._run_test('POST', 404, 'freshuser', dict(title='foo', value='bar')) - - def test_post_reader(self): - self._run_test('POST', 404, 'reader', dict(title='foo', value='bar')) - - def test_post_devtable(self): - self._run_test('POST', 200, 'devtable', dict(title='foo', value='bar')) - - -class TestUserInvoiceField(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(UserInvoiceField, field_uuid='1234') - - def test_get_anonymous(self): - self._run_test('DELETE', 401, None, None) - - def test_get_freshuser(self): - self._run_test('DELETE', 404, 'freshuser', None) - - def test_get_reader(self): - self._run_test('DELETE', 404, 'reader', None) - - def test_get_devtable(self): - self._run_test('DELETE', 201, 'devtable', None) - - - -class TestOrganizationInvoiceFieldList(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(OrganizationInvoiceFieldList, orgname='buynlarge') - - def test_get_anonymous(self): - self._run_test('GET', 403, None, None) - - def test_get_freshuser(self): - self._run_test('GET', 403, 'freshuser', None) - - def test_get_reader(self): - self._run_test('GET', 403, 'reader', None) - - def test_get_devtable(self): - self._run_test('GET', 200, 'devtable', None) - - - def test_post_anonymous(self): - self._run_test('POST', 403, None, dict(title='foo', value='bar')) - - def test_post_freshuser(self): - self._run_test('POST', 403, 'freshuser', dict(title='foo', value='bar')) - - def test_post_reader(self): - self._run_test('POST', 403, 'reader', dict(title='foo', value='bar')) - - def test_post_devtable(self): - self._run_test('POST', 200, 'devtable', dict(title='foo', value='bar')) - - -class TestOrganizationInvoiceField(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(OrganizationInvoiceField, orgname='buynlarge', field_uuid='1234') - - def test_delete_anonymous(self): - self._run_test('DELETE', 403, None, None) - - def test_delete_freshuser(self): - self._run_test('DELETE', 403, 'freshuser', None) - - def test_delete_reader(self): - self._run_test('DELETE', 403, 'reader', None) - - def test_delete_devtable(self): - self._run_test('DELETE', 201, 'devtable', None) - - -class TestRepositoryImageSecurity(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(RepositoryImageSecurity, repository='devtable/simple', imageid='fake') - - def test_get_anonymous(self): - self._run_test('GET', 401, None, None) - - def test_get_freshuser(self): - self._run_test('GET', 403, 'freshuser', None) - - def test_get_reader(self): - self._run_test('GET', 403, 'reader', None) - - def test_get_devtable(self): - self._run_test('GET', 404, 'devtable', None) - - -class TestRepositoryManifestSecurity(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(RepositoryManifestSecurity, repository='devtable/simple', manifestref='sha256:abcd') - - def test_get_anonymous(self): - self._run_test('GET', 401, None, None) - - def test_get_freshuser(self): - self._run_test('GET', 403, 'freshuser', None) - - def test_get_reader(self): - self._run_test('GET', 403, 'reader', None) - - def test_get_devtable(self): - self._run_test('GET', 404, 'devtable', None) - - -class TestRepositoryManifestLabels(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(RepositoryManifestLabels, repository='devtable/simple', manifestref='sha256:abcd') - - def test_get_anonymous(self): - self._run_test('GET', 401, None, None) - - def test_get_freshuser(self): - self._run_test('GET', 403, 'freshuser', None) - - def test_get_reader(self): - self._run_test('GET', 403, 'reader', None) - - def test_get_devtable(self): - self._run_test('GET', 404, 'devtable', None) - - def test_post_anonymous(self): - self._run_test('POST', 401, None, dict(key='foo', value='bar', media_type='text/plain')) - - def test_post_freshuser(self): - self._run_test('POST', 403, 'freshuser', dict(key='foo', value='bar', media_type='text/plain')) - - def test_post_reader(self): - self._run_test('POST', 403, 'reader', dict(key='foo', value='bar', media_type='text/plain')) - - def test_post_devtable(self): - self._run_test('POST', 404, 'devtable', dict(key='foo', value='bar', media_type='text/plain')) - - -class TestManageRepositoryManifestLabel(ApiTestCase): - def setUp(self): - ApiTestCase.setUp(self) - self._set_url(ManageRepositoryManifestLabel, repository='devtable/simple', - manifestref='sha256:abcd', labelid='someid') - - def test_delete_anonymous(self): - self._run_test('DELETE', 401, None, None) - - def test_delete_freshuser(self): - self._run_test('DELETE', 403, 'freshuser', None) - - def test_delete_reader(self): - self._run_test('DELETE', 403, 'reader', None) - - def test_delete_devtable(self): - self._run_test('DELETE', 404, 'devtable', None) - - -if __name__ == '__main__': - unittest.main() diff --git a/test/testconfig.py b/test/testconfig.py index 2ba731589..e7ed55b24 100644 --- a/test/testconfig.py +++ b/test/testconfig.py @@ -42,6 +42,7 @@ class TestConfig(DefaultConfig): BUILDLOGS_OPTIONS = ['devtable', 'building', 'deadbeef-dead-beef-dead-beefdeadbeef', False] USERFILES_LOCATION = 'local_us' + USERFILES_PATH= "userfiles/" FEATURE_SUPER_USERS = True FEATURE_BILLING = True