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 json
|
||||||
import logging
|
import logging
|
||||||
from datetime import datetime
|
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
|
import requests
|
||||||
from httpcache import CachingHTTPAdapter
|
from httpcache import CachingHTTPAdapter
|
||||||
|
@ -128,7 +128,7 @@ class User(GiteaApiObject):
|
||||||
return self._emails
|
return self._emails
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def request(cls, gitea, name) -> GiteaApiObject:
|
def request(cls, gitea, name) -> "User":
|
||||||
api_object = cls._request(gitea, {"name": name})
|
api_object = cls._request(gitea, {"name": name})
|
||||||
return api_object
|
return api_object
|
||||||
|
|
||||||
|
@ -401,13 +401,14 @@ class Repository(GiteaApiObject):
|
||||||
url = f"/repos/{self.owner.username}/{self.name}/collaborators/{user_name}"
|
url = f"/repos/{self.owner.username}/{self.name}/collaborators/{user_name}"
|
||||||
self.gitea.requests_delete(url)
|
self.gitea.requests_delete(url)
|
||||||
|
|
||||||
def transfer_ownership(self, new_owner: Union["User","Organization"], new_teams: List["Team"]):
|
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)
|
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()]
|
data = {"new_owner": new_owner.username}
|
||||||
self.gitea.requests_post(
|
if isinstance(new_owner, Organization):
|
||||||
url, data={"new_owner": new_owner.username, "team_ids": new_team_ids}
|
new_team_ids = [team.id for team in new_teams if team in new_owner.get_teams()]
|
||||||
)
|
data["team_ids"] = new_team_ids
|
||||||
#TODO: make sure this instance is either updated or discarded
|
self.gitea.requests_post(url, data=data)
|
||||||
|
# TODO: make sure this instance is either updated or discarded
|
||||||
|
|
||||||
def delete(self):
|
def delete(self):
|
||||||
self.gitea.requests_delete(
|
self.gitea.requests_delete(
|
||||||
|
|
|
@ -125,16 +125,6 @@ def test_create_repo_orgowned(instance):
|
||||||
assert repo.name == test_repo
|
assert repo.name == test_repo
|
||||||
assert not repo.private
|
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):
|
def test_list_branches(instance):
|
||||||
org = Organization.request(instance, test_org)
|
org = Organization.request(instance, test_org)
|
||||||
repo = org.get_repository(test_repo)
|
repo = org.get_repository(test_repo)
|
||||||
|
@ -207,15 +197,25 @@ def test_delete_repo_orgowned(instance):
|
||||||
Repository.request(instance, test_user, test_repo)
|
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)
|
old_org = Organization.request(instance, test_org)
|
||||||
user = User.request(instance, test_user)
|
user = User.request(instance, test_user)
|
||||||
new_org = instance.create_org(user,test_org+"_repomove", "Org for testing moving repositories")
|
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")
|
new_team = instance.create_team(new_org, test_team + "_repomove", "descr")
|
||||||
repo = instance.create_repo(old_org, test_repo+"_repomove", "descr")
|
repo_name = test_repo+"_repomove"
|
||||||
repo.transfer_ownership(new_org, [new_team])
|
repo = instance.create_repo(old_org, repo_name , "descr")
|
||||||
assert len(new_org.get_teams()) > 1
|
repo.transfer_ownership(new_org, set([new_team]))
|
||||||
assert test_repo + "_repomove" in [team.name for team in new_org.get_repositories()]
|
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):
|
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