mirror of
https://gitlab.com/fdroid/fdroidserver.git
synced 2024-11-10 17:30:11 +01:00
🚥 deploy: tests for github releases deploy functions
Add test cases for github releases function in deploy.py
This commit is contained in:
parent
242490ddc3
commit
a87284cf80
@ -1138,7 +1138,10 @@ def find_release_infos(index_v2_path, repo_dir, package_names):
|
|||||||
if package_name not in release_infos:
|
if package_name not in release_infos:
|
||||||
release_infos[package_name] = {}
|
release_infos[package_name] = {}
|
||||||
ver_name = version['manifest']['versionName']
|
ver_name = version['manifest']['versionName']
|
||||||
apk_path = repo_dir / version['file']['name'][1:]
|
apk_path = version['file']['name']
|
||||||
|
if apk_path.startswith('/'):
|
||||||
|
apk_path = apk_path[1:]
|
||||||
|
apk_path = repo_dir / apk_path
|
||||||
files = [apk_path]
|
files = [apk_path]
|
||||||
asc_path = pathlib.Path(str(apk_path) + '.asc')
|
asc_path = pathlib.Path(str(apk_path) + '.asc')
|
||||||
if asc_path.is_file():
|
if asc_path.is_file():
|
||||||
@ -1158,7 +1161,7 @@ def upload_to_github_releases(repo_section, gh_config, global_gh_token):
|
|||||||
repo_dir = pathlib.Path(repo_section)
|
repo_dir = pathlib.Path(repo_section)
|
||||||
index_v2_path = repo_dir / 'index-v2.json'
|
index_v2_path = repo_dir / 'index-v2.json'
|
||||||
if not index_v2_path.is_file():
|
if not index_v2_path.is_file():
|
||||||
logging.waring(
|
logging.warning(
|
||||||
_(
|
_(
|
||||||
"Error deploying 'github_releases', {} not present. (You might "
|
"Error deploying 'github_releases', {} not present. (You might "
|
||||||
"need to run `fdroid update` first.)"
|
"need to run `fdroid update` first.)"
|
||||||
@ -1171,7 +1174,7 @@ def upload_to_github_releases(repo_section, gh_config, global_gh_token):
|
|||||||
for package_name in repo_conf.get('packages', []):
|
for package_name in repo_conf.get('packages', []):
|
||||||
package_names.append(package_name)
|
package_names.append(package_name)
|
||||||
|
|
||||||
release_infos = find_release_infos(index_v2_path, repo_dir, package_names)
|
release_infos = fdroidserver.deploy.find_release_infos(index_v2_path, repo_dir, package_names)
|
||||||
|
|
||||||
for repo_conf in gh_config:
|
for repo_conf in gh_config:
|
||||||
upload_to_github_releases_repo(repo_conf, release_infos, global_gh_token)
|
upload_to_github_releases_repo(repo_conf, release_infos, global_gh_token)
|
||||||
|
@ -1210,6 +1210,259 @@ class DeployTest(unittest.TestCase):
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class GitHubReleasesTest(unittest.TestCase):
|
||||||
|
|
||||||
|
def test_find_release_infos(self):
|
||||||
|
self.maxDiff = None
|
||||||
|
|
||||||
|
index_mock = b"""
|
||||||
|
{
|
||||||
|
"packages": {
|
||||||
|
"com.example.app": {
|
||||||
|
"versions": {
|
||||||
|
"2e6f263c1927506015bfc98bce0818247836f2e7fe29a04e1af2b33c97848750": {
|
||||||
|
"file": {
|
||||||
|
"name": "/com.example.app_123.apk"
|
||||||
|
},
|
||||||
|
"whatsNew": {
|
||||||
|
"en-US": "fake what's new"
|
||||||
|
},
|
||||||
|
"manifest": {
|
||||||
|
"versionName": "1.2.3",
|
||||||
|
"versionCode": "123"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"8a6f263c8327506015bfc98bce0815247836f2e7fe29a04e1af2bffa6409998d": {
|
||||||
|
"file": {
|
||||||
|
"name": "/com.example.app_100.apk"
|
||||||
|
},
|
||||||
|
"manifest": {
|
||||||
|
"versionName": "1.0-alpha",
|
||||||
|
"versionCode": "123"
|
||||||
|
},
|
||||||
|
"releaseChannels": ["alpha"]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"another.app": {
|
||||||
|
"versions": {
|
||||||
|
"30602ffc19a7c0601bbfa93bce00082c78a6f2ddfe29a04e1af253fc9f84eda0": {
|
||||||
|
"file": {
|
||||||
|
"name": "/another.app_1.apk"
|
||||||
|
},
|
||||||
|
"manifest": {
|
||||||
|
"versionName": "1",
|
||||||
|
"versionCode": "1"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"fildered.app": {
|
||||||
|
"versions": {
|
||||||
|
"93ae02fc19a7c0601adfa93bce0443fc78a6f2ddfe3df04e1af093fca9a1ff09": {
|
||||||
|
"file": {
|
||||||
|
"name": "/another.app_1.apk"
|
||||||
|
},
|
||||||
|
"manifest": {
|
||||||
|
"versionName": "1",
|
||||||
|
"versionCode": "1"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
"""
|
||||||
|
with unittest.mock.patch(
|
||||||
|
"fdroidserver.deploy.open", unittest.mock.mock_open(read_data=index_mock)
|
||||||
|
):
|
||||||
|
release_infos = fdroidserver.deploy.find_release_infos(
|
||||||
|
"fake_path",
|
||||||
|
Path('fake_repo'),
|
||||||
|
["com.example.app", "another.app"],
|
||||||
|
)
|
||||||
|
|
||||||
|
self.assertDictEqual(
|
||||||
|
release_infos,
|
||||||
|
{
|
||||||
|
"another.app": {
|
||||||
|
"1": {
|
||||||
|
"files": [Path('fake_repo') / "another.app_1.apk"],
|
||||||
|
"hasReleaseChannels": False,
|
||||||
|
"whatsNew": None,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
"com.example.app": {
|
||||||
|
"1.0-alpha": {
|
||||||
|
"files": [
|
||||||
|
Path("fake_repo") / "com.example.app_100.apk",
|
||||||
|
],
|
||||||
|
"hasReleaseChannels": True,
|
||||||
|
"whatsNew": None,
|
||||||
|
},
|
||||||
|
"1.2.3": {
|
||||||
|
"files": [
|
||||||
|
Path("fake_repo") / "com.example.app_123.apk",
|
||||||
|
],
|
||||||
|
"hasReleaseChannels": False,
|
||||||
|
"whatsNew": "fake what's new",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
|
def test_upload_to_github_releases(self):
|
||||||
|
gh_config = [
|
||||||
|
{
|
||||||
|
"repo": "example/app",
|
||||||
|
"packages": ["com.example.app", "another.app"],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"repo": "custom/app",
|
||||||
|
"packages": ["more.custom.app"],
|
||||||
|
"token": "custom_token",
|
||||||
|
},
|
||||||
|
]
|
||||||
|
|
||||||
|
fri_mock = unittest.mock.Mock(return_value="fri_result")
|
||||||
|
urr_mock = unittest.mock.Mock()
|
||||||
|
with unittest.mock.patch(
|
||||||
|
"fdroidserver.deploy.find_release_infos", fri_mock
|
||||||
|
), unittest.mock.patch(
|
||||||
|
"fdroidserver.deploy.upload_to_github_releases_repo", urr_mock
|
||||||
|
), tempfile.TemporaryDirectory() as tmpdir:
|
||||||
|
|
||||||
|
with open(Path(tmpdir) / "index-v2.json", "w") as f:
|
||||||
|
f.write("")
|
||||||
|
|
||||||
|
fdroidserver.deploy.upload_to_github_releases(
|
||||||
|
tmpdir, gh_config, "fake_global_token"
|
||||||
|
)
|
||||||
|
|
||||||
|
fri_mock.assert_called_once_with(
|
||||||
|
Path(tmpdir) / "index-v2.json",
|
||||||
|
Path(tmpdir),
|
||||||
|
["com.example.app", "another.app", "more.custom.app"],
|
||||||
|
)
|
||||||
|
|
||||||
|
self.assertListEqual(
|
||||||
|
urr_mock.call_args_list,
|
||||||
|
[
|
||||||
|
unittest.mock.call(
|
||||||
|
{
|
||||||
|
"repo": "example/app",
|
||||||
|
"packages": ["com.example.app", "another.app"],
|
||||||
|
},
|
||||||
|
"fri_result",
|
||||||
|
"fake_global_token",
|
||||||
|
),
|
||||||
|
unittest.mock.call(
|
||||||
|
{
|
||||||
|
"repo": "custom/app",
|
||||||
|
"packages": ["more.custom.app"],
|
||||||
|
"token": "custom_token",
|
||||||
|
},
|
||||||
|
"fri_result",
|
||||||
|
"fake_global_token",
|
||||||
|
),
|
||||||
|
],
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class Test_UploadToGithubReleasesRepo(unittest.TestCase):
|
||||||
|
|
||||||
|
def setUp(self):
|
||||||
|
self.repo_conf = {
|
||||||
|
"repo": "example/app",
|
||||||
|
"packages": ["com.example.app", "com.example.altapp", "another.app"],
|
||||||
|
}
|
||||||
|
self.release_infos = {
|
||||||
|
"com.example.app": {
|
||||||
|
"1.0.0": {
|
||||||
|
"files": [
|
||||||
|
Path("fake_repo") / "com.example.app_100100.apk",
|
||||||
|
],
|
||||||
|
"hasReleaseChannels": False,
|
||||||
|
"whatsNew": "what's new com.example.app 1.0.0",
|
||||||
|
},
|
||||||
|
"1.0.0-beta1": {
|
||||||
|
"files": [
|
||||||
|
Path("fake_repo") / "com.example.app_100007.apk",
|
||||||
|
],
|
||||||
|
"hasReleaseChannels": True,
|
||||||
|
"whatsNew": None,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
"com.example.altapp": {
|
||||||
|
"1.0.0": {
|
||||||
|
"files": [
|
||||||
|
Path("fake_repo") / "com.example.altapp_100100.apk",
|
||||||
|
Path("fake_repo") / "com.example.altapp_100100.apk.asc",
|
||||||
|
Path("fake_repo") / "com.example.altapp_100100.apk.idsig",
|
||||||
|
],
|
||||||
|
"whatsNew": "what's new com.example.altapp 1.0.0",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
self.api = unittest.mock.Mock()
|
||||||
|
self.api.list_unreleased_tags = lambda: ["1.0.0", "1.0.0-beta1"]
|
||||||
|
self.api_constructor = unittest.mock.Mock(return_value=self.api)
|
||||||
|
|
||||||
|
def test_global_token(self):
|
||||||
|
with unittest.mock.patch("fdroidserver.github.GithubApi", self.api_constructor):
|
||||||
|
fdroidserver.deploy.upload_to_github_releases_repo(
|
||||||
|
self.repo_conf,
|
||||||
|
self.release_infos,
|
||||||
|
"global_token",
|
||||||
|
)
|
||||||
|
|
||||||
|
self.api_constructor.assert_called_once_with("global_token", "example/app")
|
||||||
|
|
||||||
|
self.assertListEqual(
|
||||||
|
self.api.create_release.call_args_list,
|
||||||
|
[
|
||||||
|
unittest.mock.call(
|
||||||
|
"1.0.0",
|
||||||
|
[
|
||||||
|
Path("fake_repo/com.example.app_100100.apk"),
|
||||||
|
Path("fake_repo/com.example.altapp_100100.apk"),
|
||||||
|
Path("fake_repo/com.example.altapp_100100.apk.asc"),
|
||||||
|
Path("fake_repo/com.example.altapp_100100.apk.idsig"),
|
||||||
|
],
|
||||||
|
"what's new com.example.app 1.0.0",
|
||||||
|
),
|
||||||
|
],
|
||||||
|
)
|
||||||
|
|
||||||
|
def test_local_token(self):
|
||||||
|
self.repo_conf["token"] = "local_token"
|
||||||
|
with unittest.mock.patch("fdroidserver.github.GithubApi", self.api_constructor):
|
||||||
|
fdroidserver.deploy.upload_to_github_releases_repo(
|
||||||
|
self.repo_conf,
|
||||||
|
self.release_infos,
|
||||||
|
"global_token",
|
||||||
|
)
|
||||||
|
|
||||||
|
self.api_constructor.assert_called_once_with("local_token", "example/app")
|
||||||
|
|
||||||
|
self.assertListEqual(
|
||||||
|
self.api.create_release.call_args_list,
|
||||||
|
[
|
||||||
|
unittest.mock.call(
|
||||||
|
"1.0.0",
|
||||||
|
[
|
||||||
|
Path("fake_repo/com.example.app_100100.apk"),
|
||||||
|
Path("fake_repo/com.example.altapp_100100.apk"),
|
||||||
|
Path("fake_repo/com.example.altapp_100100.apk.asc"),
|
||||||
|
Path("fake_repo/com.example.altapp_100100.apk.idsig"),
|
||||||
|
],
|
||||||
|
"what's new com.example.app 1.0.0",
|
||||||
|
),
|
||||||
|
],
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
os.chdir(os.path.dirname(__file__))
|
os.chdir(os.path.dirname(__file__))
|
||||||
|
|
||||||
@ -1227,4 +1480,6 @@ if __name__ == "__main__":
|
|||||||
|
|
||||||
newSuite = unittest.TestSuite()
|
newSuite = unittest.TestSuite()
|
||||||
newSuite.addTest(unittest.makeSuite(DeployTest))
|
newSuite.addTest(unittest.makeSuite(DeployTest))
|
||||||
|
newSuite.addTest(unittest.makeSuite(GitHubReleasesTest))
|
||||||
|
newSuite.addTest(unittest.makeSuite(Test_UploadToGithubReleasesRepo))
|
||||||
unittest.main(failfast=False)
|
unittest.main(failfast=False)
|
||||||
|
Loading…
Reference in New Issue
Block a user