Coverage for tests/test_software_heritage.py: 100%

19 statements  

« prev     ^ index     » next       coverage.py v7.14.3, created at 2026-06-27 17:58 +0000

1# SPDX-FileCopyrightText: 2026 Arcangelo Massari <github@a.arcangelomassari.com> 

2# 

3# SPDX-License-Identifier: ISC 

4 

5from __future__ import annotations 

6 

7import pytest 

8import requests_mock 

9 

10from software_citation_sync.software_heritage import archive_origin 

11 

12 

13def test_archive_origin_returns_swh_url(requests_mock: requests_mock.Mocker) -> None: 

14 origin = "https://github.com/arcangelo7/ramose" 

15 save_url = ( 

16 "https://archive.softwareheritage.org/api/1/origin/save/git/url/https%3A%2F%2Fgithub.com%2Farcangelo7%2Framose/" 

17 ) 

18 request_url = "https://archive.softwareheritage.org/api/1/origin/save/2373061/" 

19 requests_mock.post( 

20 save_url, 

21 json={ 

22 "request_url": request_url, 

23 "save_task_status": "scheduled", 

24 "snapshot_swhid": "", 

25 }, 

26 ) 

27 requests_mock.get( 

28 request_url, 

29 json={ 

30 "request_url": request_url, 

31 "save_task_status": "succeeded", 

32 "snapshot_swhid": "swh:1:snp:fc0b501f594531b2b8f694469cc38aed15897bbe", 

33 }, 

34 ) 

35 

36 result = archive_origin(origin, timeout_seconds=30, poll_interval_seconds=0) 

37 

38 assert ( 

39 result == "https://archive.softwareheritage.org/swh:1:snp:fc0b501f594531b2b8f694469cc38aed15897bbe" 

40 ";origin=https://github.com/arcangelo7/ramose" 

41 ) 

42 

43 

44def test_archive_origin_requires_poll_url(requests_mock: requests_mock.Mocker) -> None: 

45 origin = "https://github.com/arcangelo7/ramose" 

46 save_url = ( 

47 "https://archive.softwareheritage.org/api/1/origin/save/git/url/https%3A%2F%2Fgithub.com%2Farcangelo7%2Framose/" 

48 ) 

49 requests_mock.post( 

50 save_url, 

51 json={ 

52 "save_task_status": "scheduled", 

53 "snapshot_swhid": "", 

54 }, 

55 ) 

56 

57 with pytest.raises(KeyError) as exc_info: 

58 archive_origin(origin, timeout_seconds=30, poll_interval_seconds=0) 

59 

60 assert exc_info.value.args == ("request_url",)