kopia lustrzana https://github.com/Langenfeld/py-gitea
additional testing for moving repositories between orgs/users (closes #9)
rodzic
13bfe16197
commit
dd5b73e084
|
@ -1,7 +1,7 @@
|
|||
import json
|
||||
import logging
|
||||
from datetime import datetime
|
||||
from typing import List, Tuple, Dict, Sequence, Optional, Union
|
||||
from typing import List, Tuple, Dict, Sequence, Optional, Union, Set
|
||||
|
||||
import requests
|
||||
from httpcache import CachingHTTPAdapter
|
||||
|
@ -128,7 +128,7 @@ class User(GiteaApiObject):
|
|||
return self._emails
|
||||
|
||||
@classmethod
|
||||
def request(cls, gitea, name) -> GiteaApiObject:
|
||||
def request(cls, gitea, name) -> "User":
|
||||
api_object = cls._request(gitea, {"name": name})
|
||||
return api_object
|
||||
|
||||
|
@ -401,13 +401,14 @@ class Repository(GiteaApiObject):
|
|||
url = f"/repos/{self.owner.username}/{self.name}/collaborators/{user_name}"
|
||||
self.gitea.requests_delete(url)
|
||||
|
||||
def transfer_ownership(self, new_owner: Union["User","Organization"], new_teams: List["Team"]):
|
||||
url = Repository.REPO_TRANSFER.format(owner = self.owner.username, repo = self.name)
|
||||
new_team_ids = [team.id for team in new_teams if isinstance(new_owner,User) or team in new_owner.get_teams()]
|
||||
self.gitea.requests_post(
|
||||
url, data={"new_owner": new_owner.username, "team_ids": new_team_ids}
|
||||
)
|
||||
#TODO: make sure this instance is either updated or discarded
|
||||
def transfer_ownership(self, new_owner: Union["User", "Organization"], new_teams: Set["Team"] = frozenset()):
|
||||
url = Repository.REPO_TRANSFER.format(owner=self.owner.username, repo=self.name)
|
||||
data = {"new_owner": new_owner.username}
|
||||
if isinstance(new_owner, Organization):
|
||||
new_team_ids = [team.id for team in new_teams if team in new_owner.get_teams()]
|
||||
data["team_ids"] = new_team_ids
|
||||
self.gitea.requests_post(url, data=data)
|
||||
# TODO: make sure this instance is either updated or discarded
|
||||
|
||||
def delete(self):
|
||||
self.gitea.requests_delete(
|
||||
|
|
|
@ -125,16 +125,6 @@ def test_create_repo_orgowned(instance):
|
|||
assert repo.name == test_repo
|
||||
assert not repo.private
|
||||
|
||||
def test_list_repos(instance):
|
||||
org = Organization.request(instance, test_org)
|
||||
repos = org.get_repositories()
|
||||
assert len(repos) > 0
|
||||
# test a number of repository listings larger than the pagination number (default 30)
|
||||
for i in range(1, 34):
|
||||
instance.create_repo(org, test_repo + "_" + str(i), str(i))
|
||||
repos = org.get_repositories()
|
||||
assert len(repos) >= 33
|
||||
|
||||
def test_list_branches(instance):
|
||||
org = Organization.request(instance, test_org)
|
||||
repo = org.get_repository(test_repo)
|
||||
|
@ -207,15 +197,25 @@ def test_delete_repo_orgowned(instance):
|
|||
Repository.request(instance, test_user, test_repo)
|
||||
|
||||
|
||||
def test_change_repo_ownership(instance):
|
||||
def test_change_repo_ownership_org(instance):
|
||||
old_org = Organization.request(instance, test_org)
|
||||
user = User.request(instance, test_user)
|
||||
new_org = instance.create_org(user,test_org+"_repomove", "Org for testing moving repositories")
|
||||
new_team = instance.create_team(new_org, test_team + "_repomove", "descr")
|
||||
repo = instance.create_repo(old_org, test_repo+"_repomove", "descr")
|
||||
repo.transfer_ownership(new_org, [new_team])
|
||||
assert len(new_org.get_teams()) > 1
|
||||
assert test_repo + "_repomove" in [team.name for team in new_org.get_repositories()]
|
||||
repo_name = test_repo+"_repomove"
|
||||
repo = instance.create_repo(old_org, repo_name , "descr")
|
||||
repo.transfer_ownership(new_org, set([new_team]))
|
||||
assert repo_name not in [repo.name for repo in old_org.get_repositories()]
|
||||
assert repo_name in [repo.name for repo in new_org.get_repositories()]
|
||||
|
||||
def test_change_repo_ownership_user(instance):
|
||||
old_org = Organization.request(instance, test_org)
|
||||
user = User.request(instance, test_user)
|
||||
repo_name = test_repo+"_repomove"
|
||||
repo = instance.create_repo(old_org, repo_name, "descr")
|
||||
repo.transfer_ownership(user)
|
||||
assert repo_name not in [repo.name for repo in old_org.get_repositories()]
|
||||
assert repo_name in [repo.name for repo in user.get_repositories()]
|
||||
|
||||
|
||||
def test_delete_team(instance):
|
||||
|
|
|
@ -0,0 +1,39 @@
|
|||
import pytest
|
||||
import uuid
|
||||
|
||||
from gitea import Gitea, User, Organization, Team, Repository, Issue
|
||||
from gitea import NotFoundException, AlreadyExistsException
|
||||
|
||||
# put a ".token" file into your directory containg only the token for gitea
|
||||
@pytest.fixture
|
||||
def instance(scope="module"):
|
||||
try:
|
||||
g = Gitea("http://localhost:3000", open(".token", "r").read().strip())
|
||||
print("Gitea Version: " + g.get_version())
|
||||
print("API-Token belongs to user: " + g.get_user().username)
|
||||
return g
|
||||
except:
|
||||
assert (
|
||||
False
|
||||
), "Gitea could not load. \
|
||||
- Instance running at http://localhost:3000 \
|
||||
- Token at .token \
|
||||
?"
|
||||
|
||||
# make up some fresh names for the tests run
|
||||
test_org = "org_" + uuid.uuid4().hex[:8]
|
||||
test_user = "user_" + uuid.uuid4().hex[:8]
|
||||
test_team = "team_" + uuid.uuid4().hex[:8] # team names seem to have a rather low max lenght
|
||||
test_repo = "repo_" + uuid.uuid4().hex[:8]
|
||||
|
||||
|
||||
def test_list_repos(instance):
|
||||
user = instance.create_user(test_user, test_user + "@example.org", "abcdefg1.23AB", send_notify=False)
|
||||
org = instance.create_org(user, test_org, "some Description for longtests")
|
||||
repos = org.get_repositories()
|
||||
assert len(repos) == 0
|
||||
# test a number of repository listings larger than the pagination number (default 30)
|
||||
for i in range(1, 34):
|
||||
instance.create_repo(org, test_repo + "_" + str(i), str(i))
|
||||
repos = org.get_repositories()
|
||||
assert len(repos) >= 33
|
Ładowanie…
Reference in New Issue