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
from endpoints.api.tag import RepositoryTagImages, RepositoryTag, ListRepositoryTags, RevertTag
from endpoints.api.search import FindRepositories, EntitySearch
from endpoints.api.image import RepositoryImageChanges, 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)
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)


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 TestFindRepositories(ApiTestCase):
  def setUp(self):
    ApiTestCase.setUp(self)
    self._set_url(FindRepositories)

  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 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', 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', 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', 400, None, {u'email': '826S'})

  def test_post_freshuser(self):
    self._run_test('POST', 400, 'freshuser', {u'email': '826S'})

  def test_post_reader(self):
    self._run_test('POST', 400, 'reader', {u'email': '826S'})

  def test_post_devtable(self):
    self._run_test('POST', 400, '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 TestDetachExternal(ApiTestCase):
  def setUp(self):
    ApiTestCase.setUp(self)
    self._set_url(DetachExternal, servicename='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 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 TestRepositoryUserTransitivePermissionA2o9PublicPublicrepo(ApiTestCase):
  def setUp(self):
    ApiTestCase.setUp(self)
    self._set_url(RepositoryUserTransitivePermission, 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)

class TestRepositoryUserTransitivePermissionA2o9DevtableShared(ApiTestCase):
  def setUp(self):
    ApiTestCase.setUp(self)
    self._set_url(RepositoryUserTransitivePermission, 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', 404, 'devtable', None)

class TestRepositoryUserTransitivePermissionA2o9BuynlargeOrgrepo(ApiTestCase):
  def setUp(self):
    ApiTestCase.setUp(self)
    self._set_url(RepositoryUserTransitivePermission, 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', 404, '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_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 TestBuildTriggerSources831cDevtableShared(ApiTestCase):
  def setUp(self):
    ApiTestCase.setUp(self)
    self._set_url(BuildTriggerSources, trigger_uuid="831C", 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)


class TestBuildTriggerSources831cBuynlargeOrgrepo(ApiTestCase):
  def setUp(self):
    ApiTestCase.setUp(self)
    self._set_url(BuildTriggerSources, trigger_uuid="831C", 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)


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 TestRepositoryImageChangesPtsgPublicPublicrepo(ApiTestCase):
  def setUp(self):
    ApiTestCase.setUp(self)
    self._set_url(RepositoryImageChanges, image_id="PTSG", 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 TestRepositoryImageChangesPtsgDevtableShared(ApiTestCase):
  def setUp(self):
    ApiTestCase.setUp(self)
    self._set_url(RepositoryImageChanges, image_id="PTSG", 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 TestRepositoryImageChangesPtsgBuynlargeOrgrepo(ApiTestCase):
  def setUp(self):
    ApiTestCase.setUp(self)
    self._set_url(RepositoryImageChanges, image_id="PTSG", 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 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', 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 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', 403, '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', 403, '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_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 TestRevertTagHp8rPublicPublicrepo(ApiTestCase):
  def setUp(self):
    ApiTestCase.setUp(self)
    self._set_url(RevertTag, 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 TestRevertTagHp8rDevtableShared(ApiTestCase):
  def setUp(self):
    ApiTestCase.setUp(self)
    self._set_url(RevertTag, 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', 404, 'devtable', {u'image': 'WXNG'})


class TestRevertTagHp8rBuynlargeOrgrepo(ApiTestCase):
  def setUp(self):
    ApiTestCase.setUp(self)
    self._set_url(RevertTag, 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', 404, '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', {})


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 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 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 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 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_get_anonymous(self):
    self._run_test('DELETE', 403, None, None)

  def test_get_freshuser(self):
    self._run_test('DELETE', 403, 'freshuser', None)

  def test_get_reader(self):
    self._run_test('DELETE', 403, 'reader', None)

  def test_get_devtable(self):
    self._run_test('DELETE', 201, 'devtable', None)


if __name__ == '__main__':
  unittest.main()
