| """ |
| Tests for zip_extract.py |
| """ |
|
|
| from pathlib import Path |
| import zipfile |
| from click.testing import CliRunner |
| from .zip_extract import run |
|
|
|
|
| def test_run_no_args(): |
| runner = CliRunner() |
| result = runner.invoke(run, []) |
| assert result.exit_code == 2 |
| assert 'Missing option' in result.output |
|
|
| def test_run_missing_index_file(): |
| runner = CliRunner() |
| result = runner.invoke(run, ['-i', 'no_index_file.txt']) |
| assert result.exit_code == 2 |
| assert 'does not exist' in result.output |
|
|
| def test_run_basic_usage(tmpdir): |
| |
| runner = CliRunner() |
| with runner.isolated_filesystem(temp_dir=tmpdir): |
|
|
| mock_index_fname = 'mock_index.txt' |
| mock_pdb_fname = 'mock_afid.pdb' |
| mock_zip_fname = 'mock_zip.zip' |
| mock_out_dir = 'out' |
| mock_pdb_contents = 'MOCK_PDB_CONTENTS\n' |
|
|
| test_pdb_path = Path(mock_pdb_fname).absolute() |
| test_index_path = Path(mock_index_fname).absolute() |
|
|
| mock_index_cols = [ |
| mock_pdb_fname.replace('.pdb', ''), |
| 'mock_nres', |
| 'mock_md5', |
| mock_zip_fname.replace('.zip', '')] |
|
|
| with test_index_path.open('w') as f: |
| f.write('\t'.join(mock_index_cols) + '\n') |
| with test_pdb_path.open('w') as f: |
| f.write(mock_pdb_contents) |
| with zipfile.ZipFile(mock_zip_fname, 'w') as tmpzip: |
| tmpzip.write(mock_pdb_fname) |
|
|
| test_pdb_path.unlink() |
| assert test_pdb_path.exists() is False |
|
|
| out_dir = Path.cwd() / mock_out_dir |
| out_dir.mkdir() |
|
|
| cmd_args = ['-i', mock_index_fname, '--zip_dir', '.', '--out_dir', str(out_dir)] |
| result = runner.invoke(run, cmd_args) |
| print(f"ARGS: {cmd_args}") |
| print(f"OUT: {result.output}") |
| print(f"ERR: {result.exception}") |
|
|
| assert result.exit_code == 0 |
| assert f'extracting: {mock_pdb_fname}' in result.output |
|
|
| out_pdb_path = out_dir / mock_pdb_fname |
| assert out_pdb_path.exists() is True |
| with out_pdb_path.open('r') as f: |
| assert f.read() == mock_pdb_contents |