mirror of
https://github.com/f-droid/fdroidserver.git
synced 2025-11-12 10:10:30 +03:00
metadata: refactor into one function to do YAML post processing
It used to be that there had to be separate post processing steps depending on whether it was parsing .txt or .yml. The .txt format is long gone! !772
This commit is contained in:
parent
3869e1374b
commit
a8531a03a6
4 changed files with 142 additions and 111 deletions
|
|
@ -2,17 +2,20 @@
|
|||
|
||||
# http://www.drdobbs.com/testing/unit-testing-with-python/240165163
|
||||
|
||||
import git
|
||||
import logging
|
||||
import optparse
|
||||
import os
|
||||
import shutil
|
||||
import sys
|
||||
import tempfile
|
||||
import unittest
|
||||
import yaml
|
||||
from unittest import mock
|
||||
from pathlib import Path
|
||||
|
||||
import requests
|
||||
from testcommon import TmpCwd
|
||||
from testcommon import TmpCwd, mkdtemp
|
||||
|
||||
localmodule = Path(__file__).resolve().parent.parent
|
||||
print('localmodule: ' + str(localmodule))
|
||||
|
|
@ -22,6 +25,7 @@ if localmodule not in sys.path:
|
|||
import fdroidserver.common
|
||||
import fdroidserver.import_subcommand
|
||||
import fdroidserver.metadata
|
||||
from fdroidserver.exception import FDroidException
|
||||
|
||||
|
||||
class ImportTest(unittest.TestCase):
|
||||
|
|
@ -32,6 +36,13 @@ class ImportTest(unittest.TestCase):
|
|||
self.basedir = localmodule / 'tests'
|
||||
fdroidserver.import_subcommand.options = mock.Mock()
|
||||
fdroidserver.import_subcommand.options.rev = None
|
||||
os.chdir(self.basedir)
|
||||
self._td = mkdtemp()
|
||||
self.testdir = self._td.name
|
||||
|
||||
def tearDown(self):
|
||||
os.chdir(self.basedir)
|
||||
self._td.cleanup()
|
||||
|
||||
def test_import_gitlab(self):
|
||||
with tempfile.TemporaryDirectory() as testdir, TmpCwd(testdir):
|
||||
|
|
@ -122,6 +133,32 @@ class ImportTest(unittest.TestCase):
|
|||
with self.assertRaises(ValueError):
|
||||
fdroidserver.import_subcommand.get_app_from_url(url)
|
||||
|
||||
@mock.patch('sys.argv', ['fdroid import', '-u', 'https://example.com/mystery/url'])
|
||||
@mock.patch('fdroidserver.import_subcommand.clone_to_tmp_dir', lambda a: None)
|
||||
def test_unrecognized_url(self):
|
||||
"""Test whether error is thrown when the RepoType was not found.
|
||||
|
||||
clone_to_tmp_dir is mocked out to prevent this test from using
|
||||
the network, if it gets past the code that throws the error.
|
||||
|
||||
"""
|
||||
with self.assertRaises(FDroidException):
|
||||
fdroidserver.import_subcommand.main()
|
||||
|
||||
@mock.patch('sys.argv', ['fdroid import', '-u', 'https://fake/git/url.git'])
|
||||
@mock.patch('fdroidserver.import_subcommand.clone_to_tmp_dir', lambda a: Path('td'))
|
||||
def test_main_local_git(self):
|
||||
os.chdir(self.testdir)
|
||||
git.Repo.init('td')
|
||||
with Path('td/build.gradle').open('w') as fp:
|
||||
fp.write('android { defaultConfig { applicationId "com.example" } }')
|
||||
fdroidserver.import_subcommand.main()
|
||||
with open('metadata/com.example.yml') as fp:
|
||||
data = yaml.safe_load(fp)
|
||||
self.assertEqual(data['Repo'], sys.argv[2])
|
||||
self.assertEqual(data['RepoType'], 'git')
|
||||
self.assertEqual(1, len(data['Builds']))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
parser = optparse.OptionParser()
|
||||
|
|
|
|||
|
|
@ -1178,15 +1178,11 @@ class PostMetadataParseTest(unittest.TestCase):
|
|||
def _post_metadata_parse_app_list(self, from_yaml, expected):
|
||||
app = {'AntiFeatures': from_yaml}
|
||||
metadata.post_parse_yaml_metadata(app)
|
||||
metadata.post_metadata_parse(app)
|
||||
del app['Builds']
|
||||
return {'AntiFeatures': expected}, app
|
||||
|
||||
def _post_metadata_parse_app_string(self, from_yaml, expected):
|
||||
app = {'Repo': from_yaml}
|
||||
metadata.post_parse_yaml_metadata(app)
|
||||
metadata.post_metadata_parse(app)
|
||||
del app['Builds']
|
||||
return {'Repo': expected}, app
|
||||
|
||||
def _post_metadata_parse_build_bool(self, from_yaml, expected):
|
||||
|
|
@ -1194,7 +1190,6 @@ class PostMetadataParseTest(unittest.TestCase):
|
|||
app = {'Builds': [{'versionCode': 1, tested_key: from_yaml}]}
|
||||
post = copy.deepcopy(app)
|
||||
metadata.post_parse_yaml_metadata(post)
|
||||
metadata.post_metadata_parse(post)
|
||||
del app['Builds'][0]['versionCode']
|
||||
del post['Builds'][0]['versionCode']
|
||||
for build in post['Builds']:
|
||||
|
|
@ -1209,7 +1204,6 @@ class PostMetadataParseTest(unittest.TestCase):
|
|||
app = {'Builds': [{'versionCode': from_yaml}]}
|
||||
post = copy.deepcopy(app)
|
||||
metadata.post_parse_yaml_metadata(post)
|
||||
metadata.post_metadata_parse(post)
|
||||
for build in post['Builds']:
|
||||
for k in list(build):
|
||||
if k != tested_key:
|
||||
|
|
@ -1222,7 +1216,6 @@ class PostMetadataParseTest(unittest.TestCase):
|
|||
app = {'Builds': [{'versionCode': 1, tested_key: from_yaml}]}
|
||||
post = copy.deepcopy(app)
|
||||
metadata.post_parse_yaml_metadata(post)
|
||||
metadata.post_metadata_parse(post)
|
||||
del app['Builds'][0]['versionCode']
|
||||
del post['Builds'][0]['versionCode']
|
||||
for build in post['Builds']:
|
||||
|
|
@ -1237,7 +1230,6 @@ class PostMetadataParseTest(unittest.TestCase):
|
|||
app = {'Builds': [{'versionCode': 1, tested_key: from_yaml}]}
|
||||
post = copy.deepcopy(app)
|
||||
metadata.post_parse_yaml_metadata(post)
|
||||
metadata.post_metadata_parse(post)
|
||||
del app['Builds'][0]['versionCode']
|
||||
del post['Builds'][0]['versionCode']
|
||||
for build in post['Builds']:
|
||||
|
|
@ -1252,7 +1244,6 @@ class PostMetadataParseTest(unittest.TestCase):
|
|||
app = {'Builds': [{'versionCode': 1, tested_key: from_yaml}]}
|
||||
post = copy.deepcopy(app)
|
||||
metadata.post_parse_yaml_metadata(post)
|
||||
metadata.post_metadata_parse(post)
|
||||
del app['Builds'][0]['versionCode']
|
||||
del post['Builds'][0]['versionCode']
|
||||
for build in post['Builds']:
|
||||
|
|
@ -1269,8 +1260,8 @@ class PostMetadataParseTest(unittest.TestCase):
|
|||
self.assertEqual(*self._post_metadata_parse_app_string(123456, '123456'))
|
||||
self.assertEqual(*self._post_metadata_parse_build_bool(123456, 123456))
|
||||
self.assertEqual(*self._post_metadata_parse_build_int(123456, 123456))
|
||||
self.assertEqual(*self._post_metadata_parse_build_list(123456, 123456))
|
||||
self.assertEqual(*self._post_metadata_parse_build_script(123456, 123456))
|
||||
self.assertEqual(*self._post_metadata_parse_build_list(123456, ['123456']))
|
||||
self.assertEqual(*self._post_metadata_parse_build_script(123456, ['123456']))
|
||||
self.assertEqual(*self._post_metadata_parse_build_string(123456, '123456'))
|
||||
|
||||
def test_post_metadata_parse_int_0(self):
|
||||
|
|
@ -1279,8 +1270,8 @@ class PostMetadataParseTest(unittest.TestCase):
|
|||
self.assertEqual(*self._post_metadata_parse_app_string(0, 0))
|
||||
self.assertEqual(*self._post_metadata_parse_build_bool(0, 0))
|
||||
self.assertEqual(*self._post_metadata_parse_build_int(0, 0))
|
||||
self.assertEqual(*self._post_metadata_parse_build_list(0, 0))
|
||||
self.assertEqual(*self._post_metadata_parse_build_script(0, 0))
|
||||
self.assertEqual(*self._post_metadata_parse_build_list(0, ['0']))
|
||||
self.assertEqual(*self._post_metadata_parse_build_script(0, ['0']))
|
||||
self.assertEqual(*self._post_metadata_parse_build_string(0, '0'))
|
||||
|
||||
def test_post_metadata_parse_float_0_0(self):
|
||||
|
|
@ -1373,9 +1364,9 @@ class PostMetadataParseTest(unittest.TestCase):
|
|||
self.assertEqual(*self._post_metadata_parse_app_string(False, False))
|
||||
self.assertEqual(*self._post_metadata_parse_build_bool(False, False))
|
||||
self.assertEqual(*self._post_metadata_parse_build_int(False, False))
|
||||
self.assertEqual(*self._post_metadata_parse_build_list(False, False))
|
||||
self.assertEqual(*self._post_metadata_parse_build_script(False, False))
|
||||
self.assertEqual(*self._post_metadata_parse_build_string(False, 'False'))
|
||||
self.assertEqual(*self._post_metadata_parse_build_list(False, ['false']))
|
||||
self.assertEqual(*self._post_metadata_parse_build_script(False, ['false']))
|
||||
self.assertEqual(*self._post_metadata_parse_build_string(False, 'false'))
|
||||
|
||||
def test_post_metadata_parse_true(self):
|
||||
with self.assertRaises(TypeError):
|
||||
|
|
@ -1383,9 +1374,9 @@ class PostMetadataParseTest(unittest.TestCase):
|
|||
self.assertEqual(*self._post_metadata_parse_app_string(True, 'true'))
|
||||
self.assertEqual(*self._post_metadata_parse_build_bool(True, True))
|
||||
self.assertEqual(*self._post_metadata_parse_build_int(True, True))
|
||||
self.assertEqual(*self._post_metadata_parse_build_list(True, True))
|
||||
self.assertEqual(*self._post_metadata_parse_build_script(True, True))
|
||||
self.assertEqual(*self._post_metadata_parse_build_string(True, 'True'))
|
||||
self.assertEqual(*self._post_metadata_parse_build_list(True, ['true']))
|
||||
self.assertEqual(*self._post_metadata_parse_build_script(True, ['true']))
|
||||
self.assertEqual(*self._post_metadata_parse_build_string(True, 'true'))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue