def testParseProjectAccess_AllowedChoice(self): project = project_pb2.MakeProject('proj') access = project_helpers.ParseProjectAccess(project, '1') self.assertEqual(project_pb2.ProjectAccess.ANYONE, access) access = project_helpers.ParseProjectAccess(project, '3') self.assertEqual(project_pb2.ProjectAccess.MEMBERS_ONLY, access)
def testProjectWithLogo(self): bucket_name = 'testbucket' logo_gcs_id = '123' logo_file_name = 'logo.png' project_pb = project_pb2.MakeProject('testProject', logo_gcs_id=logo_gcs_id, logo_file_name=logo_file_name) self.mox.StubOutWithMock(app_identity, 'get_default_gcs_bucket_name') app_identity.get_default_gcs_bucket_name().AndReturn(bucket_name) self.mox.StubOutWithMock(gcs_helpers, 'SignUrl') gcs_helpers.SignUrl(bucket_name, logo_gcs_id + '-thumbnail').AndReturn('signed/url') gcs_helpers.SignUrl(bucket_name, logo_gcs_id).AndReturn('signed/url') self.mox.ReplayAll() view = tracker_views.LogoView(project_pb) self.mox.VerifyAll() self.assertEquals('logo.png', view.filename) self.assertEquals('image/png', view.mimetype) self.assertEquals('signed/url', view.thumbnail_url) self.assertEquals( 'signed/url&response-content-displacement=attachment%3B' '+filename%3Dlogo.png', view.viewurl)
def testMakeProject_Everything(self): project = project_pb2.MakeProject( 'proj', project_id=789, state=project_pb2.ProjectState.ARCHIVED, access=project_pb2.ProjectAccess.MEMBERS_ONLY, summary='sum', description='desc', moved_to='example.com', cached_content_timestamp=1234567890, owner_ids=[111L], committer_ids=[222L], contributor_ids=[333L], read_only_reason='being migrated', home_page='example.com', docs_url='example.com/docs', source_url='example.com/src', logo_gcs_id='logo_id', logo_file_name='logo.gif') self.assertEqual('proj', project.project_name) self.assertEqual(789, project.project_id) self.assertEqual(project_pb2.ProjectState.ARCHIVED, project.state) self.assertEqual(project_pb2.ProjectAccess.MEMBERS_ONLY, project.access) self.assertEqual('sum', project.summary) self.assertEqual('desc', project.description) self.assertEqual('example.com', project.moved_to) self.assertEqual(1234567890, project.cached_content_timestamp) self.assertEqual([111L], project.owner_ids) self.assertEqual([222L], project.committer_ids) self.assertEqual([333L], project.contributor_ids) self.assertEqual('being migrated', project.read_only_reason) self.assertEqual('example.com', project.home_page) self.assertEqual('example.com/docs', project.docs_url) self.assertEqual('example.com/src', project.source_url) self.assertEqual('logo_id', project.logo_gcs_id) self.assertEqual('logo.gif', project.logo_file_name)
def testBuildProjectMembers(self): project = project_pb2.MakeProject('proj', owner_ids=[111L], committer_ids=[222L], contributor_ids=[333L]) page_data = project_helpers.BuildProjectMembers( self.cnxn, project, self.services.user) self.assertEqual(111L, page_data['owners'][0].user_id) self.assertEqual(222L, page_data['committers'][0].user_id) self.assertEqual(333L, page_data['contributors'][0].user_id) self.assertEqual(3, len(page_data['all_members']))
def testUsersWithPermsInProject_StandardPermission(self): project = project_pb2.MakeProject('proj', committer_ids=[111]) perms_needed = {permissions.VIEW, permissions.EDIT_ISSUE} actual = project_helpers.UsersWithPermsInProject( project, perms_needed, self.users_by_id, self.effective_ids_by_user) self.assertEqual( { permissions.VIEW: {111, 222, 333}, permissions.EDIT_ISSUE: {111} }, actual)
def testUsersWithPermsInProject_CustomPermission(self): project = project_pb2.MakeProject('proj') project.extra_perms = [ project_pb2.Project.ExtraPerms(member_id=111, perms=['FooPerm', 'BarPerm']), project_pb2.Project.ExtraPerms(member_id=222, perms=['BarPerm']) ] perms_needed = {'FooPerm', 'BarPerm'} actual = project_helpers.UsersWithPermsInProject( project, perms_needed, self.users_by_id, self.effective_ids_by_user) self.assertEqual({'FooPerm': {111}, 'BarPerm': {111, 222}}, actual)
def testUsersWithPermsInProject_IndirectPermission(self): perms_needed = {permissions.EDIT_ISSUE} # User 111 has the EDIT_ISSUE permission. project = project_pb2.MakeProject('proj', committer_ids=[111]) # User 222 has the EDIT_ISSUE permission, because 111 is included in its # effective IDs. self.effective_ids_by_user[222] = {111} # User 333 doesn't have the EDIT_ISSUE permission, since only direct # effective IDs are taken into account. self.effective_ids_by_user[333] = {222} actual = project_helpers.UsersWithPermsInProject( project, perms_needed, self.users_by_id, self.effective_ids_by_user) self.assertEqual({permissions.EDIT_ISSUE: {111, 222}}, actual)
def CreateProject( self, cnxn, project_name, owner_ids, committer_ids, contributor_ids, summary, description, state=project_pb2.ProjectState.LIVE, access=None, read_only_reason=None, home_page=None, docs_url=None, source_url=None, logo_gcs_id=None, logo_file_name=None): """Create and store a Project with the given attributes. Args: cnxn: connection to SQL database. project_name: a valid project name, all lower case. owner_ids: a list of user IDs for the project owners. committer_ids: a list of user IDs for the project members. contributor_ids: a list of user IDs for the project contributors. summary: one-line explanation of the project. description: one-page explanation of the project. state: a project state enum defined in project_pb2. access: optional project access enum defined in project.proto. read_only_reason: if given, provides a status message and marks the project as read-only. home_page: home page of the project docs_url: url to redirect to for wiki/documentation links source_url: url to redirect to for source browser links logo_gcs_id: google storage object id of the project's logo logo_file_name: uploaded file name of the project's logo Returns: The int project_id of the new project. Raises: ProjectAlreadyExists: if a project with that name already exists. """ assert framework_bizobj.IsValidProjectName(project_name) if self.LookupProjectIDs(cnxn, [project_name]): raise exceptions.ProjectAlreadyExists() project = project_pb2.MakeProject( project_name, state=state, access=access, description=description, summary=summary, owner_ids=owner_ids, committer_ids=committer_ids, contributor_ids=contributor_ids, read_only_reason=read_only_reason, home_page=home_page, docs_url=docs_url, source_url=source_url, logo_gcs_id=logo_gcs_id, logo_file_name=logo_file_name) project.project_id = self._InsertProject(cnxn, project) return project.project_id
def MakeProject(prefix): return project_pb2.MakeProject( project_name='%s-project' % prefix, summary='%s-summary' % prefix, description='%s-description' % prefix, )
def testMakeProject_Defaults(self): project = project_pb2.MakeProject('proj') self.assertEqual('proj', project.project_name) self.assertEqual(project_pb2.ProjectState.LIVE, project.state) self.assertEqual(project_pb2.ProjectAccess.ANYONE, project.access) self.assertFalse(project.read_only_reason)
def testParseProjectAccess_BogusChoice(self): project = project_pb2.MakeProject('proj') access = project_helpers.ParseProjectAccess(project, '9') self.assertEqual(None, access)
def testParseProjectAccess_NotOffered(self): project = project_pb2.MakeProject('proj') access = project_helpers.ParseProjectAccess(project, None) self.assertEqual(None, access)
def testProjectWithNoLogo(self): project_pb = project_pb2.MakeProject('testProject') view = tracker_views.LogoView(project_pb) self.assertEquals('', view.thumbnail_url) self.assertEquals('', view.viewurl)