Changeset View
Changeset View
Standalone View
Standalone View
swh/lister/rubygems/tests/test_lister.py
| # Copyright (C) 2022 The Software Heritage developers | # Copyright (C) 2022 The Software Heritage developers | ||||
| # See the AUTHORS file at the top-level directory of this distribution | # See the AUTHORS file at the top-level directory of this distribution | ||||
| # License: GNU General Public License version 3, or any later version | # License: GNU General Public License version 3, or any later version | ||||
| # See top-level LICENSE file for more information | # See top-level LICENSE file for more information | ||||
| # flake8: noqa: B950 | |||||
| from pathlib import Path | |||||
| import iso8601 | |||||
| import pytest | |||||
| from swh.lister.rubygems.lister import RubyGemsLister | from swh.lister.rubygems.lister import RubyGemsLister | ||||
| from swh.scheduler.model import ListedOrigin | |||||
| DUMP_FILEPATH = "production/public_postgresql/2022.10.06.06.10.05/public_postgresql.tar" | |||||
| expected_origins = [ | |||||
| "https://rubygems.org/gems/mercurial-ruby", | @pytest.fixture | ||||
| "https://rubygems.org/gems/mercurial-wrapper", | def expected_listed_origins(): | ||||
| "https://rubygems.org/gems/mercurius", | return [ | ||||
| { | |||||
| "url": "https://rubygems.org/gems/haar_joke", | |||||
| "visit_type": "rubygems", | |||||
| "last_update": iso8601.parse_date("2016-11-05T00:00:00+00:00"), | |||||
| "extra_loader_arguments": { | |||||
| "artifacts": [ | |||||
| { | |||||
| "url": "https://rubygems.org/downloads/haar_joke-0.0.2.gem", | |||||
| "length": 8704, | |||||
| "version": "0.0.2", | |||||
| "filename": "haar_joke-0.0.2.gem", | |||||
| "checksums": { | |||||
| "sha256": "85a8cf5f41890e9605265eeebfe9e99aa0350a01a3c799f9f55a0615a31a2f5f" | |||||
| }, | |||||
| }, | |||||
| { | |||||
| "url": "https://rubygems.org/downloads/haar_joke-0.0.1.gem", | |||||
| "length": 8704, | |||||
| "version": "0.0.1", | |||||
| "filename": "haar_joke-0.0.1.gem", | |||||
| "checksums": { | |||||
| "sha256": "a2ee7052fb8ffcfc4ec0fdb77fae9a36e473f859af196a36870a0f386b5ab55e" | |||||
| }, | |||||
| }, | |||||
| ], | |||||
| "rubygem_metadata": [ | |||||
| { | |||||
| "date": "2016-11-05T00:00:00+00:00", | |||||
| "authors": "Gemma Gotch", | |||||
| "version": "0.0.2", | |||||
| "extrinsic_metadata_url": "https://rubygems.org/api/v2/rubygems/haar_joke/versions/0.0.2.json", | |||||
| }, | |||||
| { | |||||
| "date": "2016-07-23T00:00:00+00:00", | |||||
| "authors": "Gemma Gotch", | |||||
| "version": "0.0.1", | |||||
| "extrinsic_metadata_url": "https://rubygems.org/api/v2/rubygems/haar_joke/versions/0.0.1.json", | |||||
| }, | |||||
| ], | |||||
| }, | |||||
| }, | |||||
| { | |||||
| "url": "https://rubygems.org/gems/l33tify", | |||||
| "visit_type": "rubygems", | |||||
| "last_update": iso8601.parse_date("2014-11-14T00:00:00+00:00"), | |||||
| "extra_loader_arguments": { | |||||
| "artifacts": [ | |||||
| { | |||||
| "url": "https://rubygems.org/downloads/l33tify-0.0.2.gem", | |||||
| "length": 6144, | |||||
| "version": "0.0.2", | |||||
| "filename": "l33tify-0.0.2.gem", | |||||
| "checksums": { | |||||
| "sha256": "0087a21fb6161bba8892df40de3b5e27404f941658084413b8fde49db2bc7c9f" | |||||
| }, | |||||
| }, | |||||
| { | |||||
| "url": "https://rubygems.org/downloads/l33tify-0.0.3.gem", | |||||
| "length": 6144, | |||||
| "version": "0.0.3", | |||||
| "filename": "l33tify-0.0.3.gem", | |||||
| "checksums": { | |||||
| "sha256": "4502097ddf2657d561ce0f527ef1f49f1658c8a0968ab8cc853273138f8382a2" | |||||
| }, | |||||
| }, | |||||
| { | |||||
| "url": "https://rubygems.org/downloads/l33tify-0.0.1.gem", | |||||
| "length": 6144, | |||||
| "version": "0.0.1", | |||||
| "filename": "l33tify-0.0.1.gem", | |||||
| "checksums": { | |||||
| "sha256": "5abfb737ce5cf561726f2f7cc1ba0f0e4f865f8b7283192e05eb3f246d3dbbca" | |||||
| }, | |||||
| }, | |||||
| ], | |||||
| "rubygem_metadata": [ | |||||
| { | |||||
| "date": "2014-11-14T00:00:00+00:00", | |||||
| "authors": "E Alexander Liedtke", | |||||
| "version": "0.0.2", | |||||
| "extrinsic_metadata_url": "https://rubygems.org/api/v2/rubygems/l33tify/versions/0.0.2.json", | |||||
| }, | |||||
| { | |||||
| "date": "2014-11-14T00:00:00+00:00", | |||||
| "authors": "E Alexander Liedtke", | |||||
| "version": "0.0.3", | |||||
| "extrinsic_metadata_url": "https://rubygems.org/api/v2/rubygems/l33tify/versions/0.0.3.json", | |||||
| }, | |||||
| { | |||||
| "date": "2014-11-14T00:00:00+00:00", | |||||
| "authors": "E Alexander Liedtke", | |||||
| "version": "0.0.1", | |||||
| "extrinsic_metadata_url": "https://rubygems.org/api/v2/rubygems/l33tify/versions/0.0.1.json", | |||||
| }, | |||||
| ], | |||||
| }, | |||||
| }, | |||||
| ] | ] | ||||
| def test_rubygems_lister(datadir, requests_mock_datadir, swh_scheduler): | @pytest.fixture(autouse=True) | ||||
| def network_requests_mock(datadir, requests_mock): | |||||
| requests_mock.get( | |||||
| RubyGemsLister.RUBY_GEMS_POSTGRES_DUMP_LIST_URL, | |||||
| content=Path(datadir, "rubygems_dumps.xml").read_bytes(), | |||||
| ) | |||||
| content = Path(datadir, "rubygems_pgsql_dump.tar").read_bytes() | |||||
| requests_mock.get( | |||||
| f"{RubyGemsLister.RUBY_GEMS_POSTGRES_DUMP_BASE_URL}/{DUMP_FILEPATH}", | |||||
| content=content, | |||||
| headers={"content-length": str(len(content))}, | |||||
| ) | |||||
| @pytest.mark.db | |||||
| def test_rubygems_lister(swh_scheduler, expected_listed_origins): | |||||
| lister = RubyGemsLister(scheduler=swh_scheduler) | lister = RubyGemsLister(scheduler=swh_scheduler) | ||||
| res = lister.run() | res = lister.run() | ||||
| assert res.pages == 3 | assert res.pages == 2 | ||||
| assert res.origins == 1 + 1 + 1 | assert res.origins == 2 | ||||
| scheduler_origins = swh_scheduler.get_listed_origins(lister.lister_obj.id).results | scheduler_origins = swh_scheduler.get_listed_origins(lister.lister_obj.id).results | ||||
| assert len(scheduler_origins) == len(expected_origins) | assert [ | ||||
| { | |||||
| for origin in scheduler_origins: | "url": origin.url, | ||||
| assert origin.visit_type == "rubygems" | "visit_type": origin.visit_type, | ||||
| assert origin.url in expected_origins | "last_update": origin.last_update, | ||||
| "extra_loader_arguments": origin.extra_loader_arguments, | |||||
| } | |||||
| for origin in scheduler_origins | |||||
| ] == expected_listed_origins |