import tempfile import unittest from pathlib import Path from unittest.mock import patch from package.scripts import publish_latest_generic_package class PackagePublishingTests(unittest.TestCase): def test_only_configured_target_archives_and_checksums_are_uploaded(self): with tempfile.TemporaryDirectory() as temporary: root = Path(temporary) archive = root / 'product-vamp-arm_64_gcc12_release.tar.gz' checksum = archive.with_name(archive.name + '.sha256') for path in (archive, checksum, root / 'product-vamp-obsolete-arm_64_gcc12_release.tar.gz'): path.write_bytes(b'fixture') self.assertEqual(publish_latest_generic_package.discover_artifacts(root, 'product-vamp', ['arm_64_gcc12_release']), [archive, checksum]) checksum.unlink() with self.assertRaisesRegex(SystemExit, 'missing artifact files'): publish_latest_generic_package.discover_artifacts(root, 'product-vamp', ['arm_64_gcc12_release']) archive.unlink() with self.assertRaisesRegex(SystemExit, 'missing artifact files'): publish_latest_generic_package.discover_artifacts(root, 'product-vamp', ['arm_64_gcc12_release']) def test_missing_artifacts_do_not_touch_the_registry(self): with tempfile.TemporaryDirectory() as temporary, patch.object(publish_latest_generic_package, 'request') as request: with self.assertRaisesRegex(SystemExit, 'missing artifact files'): publish_latest_generic_package.main(['--dist-dir', temporary, '--user', 'user', '--token', 'test-token']) request.assert_not_called() def test_publication_replaces_the_single_registry_slot(self): archive = Path('product-vamp-arm_64_gcc12_release.tar.gz') with patch.object(publish_latest_generic_package, 'discover_artifacts', return_value=[archive]), \ patch.object(publish_latest_generic_package, 'list_versions', return_value=['latest', 'obsolete']), \ patch.object(publish_latest_generic_package, 'delete_version') as delete, \ patch.object(publish_latest_generic_package, 'upload_file') as upload: self.assertEqual(publish_latest_generic_package.main(['--user', 'user', '--token', 'test-token']), 0) self.assertEqual([call.args[-2] for call in delete.call_args_list], ['latest', 'obsolete']) self.assertEqual(upload.call_args.args[2], archive) url = publish_latest_generic_package.file_upload_url('https://example.test/generic', 'product-vamp', archive) self.assertEqual(url, 'https://example.test/generic/product-vamp/latest/product-vamp-arm_64_gcc12_release.tar.gz')