File size: 1,528 Bytes
450ac2f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
"""The standalone report command works without an editable installation."""
import json
from pathlib import Path
import subprocess
import sys

import pytest

from crosswire.identity import canonical_hash, scientific_view


@pytest.mark.parametrize('tampered', [False, True])
def test_report_script_from_outside_checkout_checks_historical_integrity(tmp_path, tampered):
    payload = {'schema': 'crosswire-study-v1', 'source_hash': '1' * 64,
               'protocol_hash': canonical_hash({}), 'rows': [], 'summary': [], 'paired': []}
    payload['scientific_hash'] = canonical_hash(scientific_view(payload))
    receipt = {'schema': 'crosswire-receipt-v1', 'source_hash': payload['source_hash'],
               'payload': payload, 'payload_hash': '0' * 64 if tampered else canonical_hash(payload)}
    source = tmp_path / 'historical.json'
    source.write_text(json.dumps(receipt), encoding='utf-8')
    output = tmp_path / 'report.md'
    script = Path(__file__).resolve().parents[1] / 'tools' / 'report.py'
    completed = subprocess.run([sys.executable, '-I', str(script), str(source), '--out', str(output)],
                               cwd=tmp_path, capture_output=True, text=True, timeout=20)
    if tampered:
        assert completed.returncode != 0
        assert 'digest mismatch' in completed.stderr
        assert not output.exists()
    else:
        assert completed.returncode == 0, completed.stderr
        assert 'no target replay' in output.read_text(encoding='utf-8').lower()