additional testing for moving repositories between orgs/users (closes #9)

pull/11/head
Langenfeld 2021-11-05 13:24:46 +01:00
rodzic 13bfe16197
commit dd5b73e084
3 zmienionych plików z 64 dodań i 24 usunięć

Wyświetl plik

@ -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(

Wyświetl plik

@ -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):

Wyświetl plik

@ -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