Skip to content

Commit

Permalink
Update the test framework (#52)
Browse files Browse the repository at this point in the history
* Add validation directory (moved from rms-webtools repo)

* Add command line tool to show opus products output with the given
absolute path of a filespec.

* - Update test framework for opus products on COCIRS.
- Add '--update' param in pytest command line to create the golden copy
  by using the current opus products output.
- Fixed the output of show_opus_products.py

* Update opus_products test for pds3file to use the new test framework
that read and compare with golden copies of expected results. All
golden copies can be updated using '--update' param when calling pytest
or coverage.

* Update run_tests_coverage.sh to take in '--update' param. When
'--udpate' is passed in, the script will update the opus products
golden copies.

* - Update pds4file opus products test framework to compare results with
the expected golden copies.
- Add '--update' param in pytest to update the golden copies based on
the current opus products output.

* Update show_opus_products.py to print pretty results in table format
using tabulate package.

* Create these top level functions in PdsFile class to set parameters in
the subclasses: use_shelves_only, require_shelves, set_logger,
set_easylogger

* Reorganize the code by creating read_or_update_golden_copy function to
either read or update the golden copy of the test results.

* Add test_associated_abspaths with the new test framework for all pds3
rules.

* Refractor the code by moving the general pdsfile test functions or
helpers that can be applied to both Pds3File and Pds4File testings to
pdsfile/pdsfile_test_helper.py.

* Add test_opus_id_to_primary_logical_path to pds3file rules/VG_28xx.py

* Convert all golden copies of test results from .py to .txt files.

* Write the golden copies of test results using pprint so that each file
of a category is in its own line in the file.

* In show_opus_products.py, add these options
- "--logical-path": pass in logical path for pdsfile instantiation.
- "-pds3": a flag to instantiate a Pds3File instance
- "-pds4": a flag to instantiate a Pds4File instance
- "--pprint": a flag to display output using pprint

* Update the param descriptions in show_opus_products.py

* Update the display table by removing the horizontal line between each
product of the same category. Now each product file of the same opus
type will be in different lines with no horizontal separator lines
between them.

* Add "--opus-types" options for show_opus_products.py, it will display
the opus products output belong to the given opus types. If wrong opus
types are given, it will desplay warning.

* Clean up the code style in show_opus_products.py

* Clean up the string quotations in show_opus_products.py

* Fixed typo in the error messages in show_opus_products.py

* Fixed COISS_2001.targz & COISS_2001_previews.targz input cases for
from_path function.

* Fixed input case for checksums/archives/whatever to properly cache the
category 'checksums-archives-.*' in the preload stage (inside _complete)

* Fixed the input case COISS_0xxx/v1 for from_path, it will now return
volumes/COISS_0xxx_v1 instead of volumes/COISS_0xxx/v1

* Update test for from_path

* Remove unused print in pdsfile.py

* Clean up uranus_occs_earthbased.py and remove redundant COCIRS folder

* Modify require_shelves and use_shelves_only under pdsfile.py to take in
only one status parameter to set both Pds3File and Pds4File attributes
to the same status.

* Update show_opus_products to take in multiple file paths, could be
absolute paths or logical paths and could be pds3 or pds4, and display
all their outputs. Also add an option to display output in narrow table
so that files with long name won't break the table in narrow screen.

* Add tests or comment to fix the untested code revealed by code coverage
in these files:
- Bug fixed in test_opus_id_to_primary_logical_path in rules/COCIRS_xxx.py
- Tests and comments added in DATA_SET_ID in rules/COUVIS_0xxx.py
- Tests added in OPUS_ID_TO_PRIMARY_LOGICAL_PATH in rules/COVIMS_0xxx.py

* Add tests to test_filename_keylen in test_pds3file_whitebox.py and fixed
a bug in FILENAME_KEYLEN in rules/COISS_xxxx.py

* Update all test/test_.* files to have 100% coverage

* Remove functions not used, and Remove the code branch that will never
be reach.

* Update comments from line 3446-3440 in pdsfile.py

* Removed commented out code at line 4250 in from_path function.

* Clean up show_opus_products.py and add .flake8

* Remove test_opus_products_count tests.

---------

Co-authored-by: Robert French <[email protected]>
  • Loading branch information
juzen2003 and rfrenchseti authored Sep 5, 2024
1 parent f0c6842 commit fe5ed96
Show file tree
Hide file tree
Showing 77 changed files with 2,353 additions and 3,328 deletions.
2 changes: 0 additions & 2 deletions .coveragerc
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
[run]
branch = True
omit =
**/tests/*.py

[html]
Title = Coverage Report for PdsFile
Expand Down
6 changes: 6 additions & 0 deletions .flake8
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
[flake8]
max-line-length: 90

per-file-ignores =
# continuation line under-indented for visual indent
show_opus_products.py: E128
1 change: 1 addition & 0 deletions conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
##########################################################################################
def pytest_addoption(parser):
parser.addoption("--mode", action="store")
parser.addoption("--update", action="store_true")

def turn_on_logger(filename):
LOGGER = pdslogger.PdsLogger(filename)
Expand Down
201 changes: 19 additions & 182 deletions pdsfile/pds3file/rules/COCIRS_xxxx.py
Original file line number Diff line number Diff line change
Expand Up @@ -863,191 +863,28 @@ def test_associations_to_diagrams():
'input_path,expected',
[
('volumes/COCIRS_5xxx/COCIRS_5408/DATA/POIDATA/POI0408010000_FP1.LBL',
{('Cassini CIRS',
0,
'cocirs_spec',
'Calibrated Interferograms',
True): ['volumes/COCIRS_5xxx/COCIRS_5408/DATA/APODSPEC/SPEC0408010000_FP1.DAT',
'volumes/COCIRS_5xxx/COCIRS_5408/DATA/APODSPEC/SPEC0408010000_FP1.LBL'],
('Cassini CIRS',
110,
'cocirs_geo',
'System Geometry',
True): ['volumes/COCIRS_5xxx/COCIRS_5408/DATA/GEODATA/GEO0408010000_699.TAB',
'volumes/COCIRS_5xxx/COCIRS_5408/DATA/GEODATA/GEO0408010000_699.LBL',
'volumes/COCIRS_5xxx/COCIRS_5408/DATA/GEODATA/GEODATA.FMT',
'volumes/COCIRS_5xxx/COCIRS_5408/DATA/GEODATA/GEO0408010000_617.TAB',
'volumes/COCIRS_5xxx/COCIRS_5408/DATA/GEODATA/GEO0408010000_617.LBL',
'volumes/COCIRS_5xxx/COCIRS_5408/DATA/GEODATA/GEODATA.FMT',
'volumes/COCIRS_5xxx/COCIRS_5408/DATA/GEODATA/GEO0408010000_611.TAB',
'volumes/COCIRS_5xxx/COCIRS_5408/DATA/GEODATA/GEO0408010000_611.LBL',
'volumes/COCIRS_5xxx/COCIRS_5408/DATA/GEODATA/GEODATA.FMT'],
('Cassini CIRS',
120,
'cocirs_ispm',
'Observation Metadata',
True): ['volumes/COCIRS_5xxx/COCIRS_5408/DATA/ISPMDATA/ISPM0408010000_FP1.TAB',
'volumes/COCIRS_5xxx/COCIRS_5408/DATA/ISPMDATA/ISPM0408010000_FP1.LBL',
'volumes/COCIRS_5xxx/COCIRS_5408/DATA/ISPMDATA/ISPMDATA.FMT'],
('Cassini CIRS',
130,
'cocirs_poi',
'Footprint Geometry on Bodies',
True): ['volumes/COCIRS_5xxx/COCIRS_5408/DATA/POIDATA/POI0408010000_FP1.TAB',
'volumes/COCIRS_5xxx/COCIRS_5408/DATA/POIDATA/POI0408010000_FP1.LBL',
'volumes/COCIRS_5xxx/COCIRS_5408/DATA/POIDATA/POIDATA.FMT'],
('Cassini CIRS',
140,
'cocirs_rin',
'Footprint Geometry on Rings',
True): ['volumes/COCIRS_5xxx/COCIRS_5408/DATA/RINDATA/RIN0408010000_FP1.TAB',
'volumes/COCIRS_5xxx/COCIRS_5408/DATA/RINDATA/RIN0408010000_FP1.LBL',
'volumes/COCIRS_5xxx/COCIRS_5408/DATA/RINDATA/RINDATA.FMT'],
('Cassini CIRS',
150,
'cocirs_tar',
'Target Body Identifications',
True): ['volumes/COCIRS_5xxx/COCIRS_5408/DATA/TARDATA/TAR0408010000_FP1.TAB',
'volumes/COCIRS_5xxx/COCIRS_5408/DATA/TARDATA/TAR0408010000_FP1.LBL',
'volumes/COCIRS_5xxx/COCIRS_5408/DATA/TARDATA/TARDATA.FMT'],
('Cassini CIRS',
510,
'cocirs_browse_target',
'Extra Browse Diagram (Default)',
True): ['volumes/COCIRS_5xxx/COCIRS_5408/BROWSE/TARGETS/IMG0408010000_FP1.PNG',
'volumes/COCIRS_5xxx/COCIRS_5408/BROWSE/TARGETS/IMG0408010000_FP1.LBL'],
('Cassini CIRS',
520,
'cocirs_browse_saturn',
'Extra Browse Diagram (Saturn)',
True): ['volumes/COCIRS_5xxx/COCIRS_5408/BROWSE/SATURN/POI0408010000_FP1.PNG',
'volumes/COCIRS_5xxx/COCIRS_5408/BROWSE/SATURN/POI0408010000_FP1.LBL'],
('Cassini CIRS',
530,
'cocirs_browse_rings',
'Extra Browse Diagram (Rings)',
True): ['volumes/COCIRS_5xxx/COCIRS_5408/BROWSE/S_RINGS/RIN0408010000_FP1.PNG',
'volumes/COCIRS_5xxx/COCIRS_5408/BROWSE/S_RINGS/RIN0408010000_FP1.LBL'],
('diagram',
40,
'diagram_full',
'Browse Diagram (full)',
True): ['diagrams/COCIRS_5xxx/COCIRS_5408/BROWSE/S_RINGS/RIN0408010000_FP1_full.jpg',
'diagrams/COCIRS_5xxx/COCIRS_5408/BROWSE/SATURN/POI0408010000_FP1_full.jpg'],
('diagram',
30,
'diagram_medium',
'Browse Diagram (medium)',
False): ['diagrams/COCIRS_5xxx/COCIRS_5408/BROWSE/S_RINGS/RIN0408010000_FP1_med.jpg',
'diagrams/COCIRS_5xxx/COCIRS_5408/BROWSE/SATURN/POI0408010000_FP1_med.jpg'],
('diagram',
20,
'diagram_small',
'Browse Diagram (small)',
False): ['diagrams/COCIRS_5xxx/COCIRS_5408/BROWSE/S_RINGS/RIN0408010000_FP1_small.jpg',
'diagrams/COCIRS_5xxx/COCIRS_5408/BROWSE/SATURN/POI0408010000_FP1_small.jpg'],
('diagram',
10,
'diagram_thumb',
'Browse Diagram (thumbnail)',
False): ['diagrams/COCIRS_5xxx/COCIRS_5408/BROWSE/S_RINGS/RIN0408010000_FP1_thumb.jpg',
'diagrams/COCIRS_5xxx/COCIRS_5408/BROWSE/SATURN/POI0408010000_FP1_thumb.jpg'],
('browse',
30,
'browse_medium',
'Browse Image (medium)',
False): ['diagrams/COCIRS_5xxx/COCIRS_5408/BROWSE/TARGETS/IMG0408010000_FP1_med.jpg'],
('browse',
10,
'browse_thumb',
'Browse Image (thumbnail)',
False): ['diagrams/COCIRS_5xxx/COCIRS_5408/BROWSE/TARGETS/IMG0408010000_FP1_thumb.jpg'],
('browse',
20,
'browse_small',
'Browse Image (small)',
False): ['diagrams/COCIRS_5xxx/COCIRS_5408/BROWSE/TARGETS/IMG0408010000_FP1_small.jpg'],
('browse',
40,
'browse_full',
'Browse Image (full)',
True): ['diagrams/COCIRS_5xxx/COCIRS_5408/BROWSE/TARGETS/IMG0408010000_FP1_full.jpg'],
('Cassini CIRS',
700,
'cocirs_documentation',
'Documentation',
False): ['documents/COCIRS_5xxx/FOV-Overview.pdf',
'documents/COCIRS_5xxx/Cassini-CIRS-Final-Report.pdf',
'documents/COCIRS_5xxx/CIRS-Users-Guide.pdf',
'documents/COCIRS_5xxx/CIRS-Diagram-Interpretation-Guide.txt']}
),
'COCIRS_xxxx/opus_products/POI0408010000_FP1.txt'),
# COCIRS_0xxx
('volumes/COCIRS_0xxx/COCIRS_0406/DATA/CUBE/POINT_PERSPECTIVE/000IA_PRESOI001____RI____699_F4_038P.LBL',
{('Cassini CIRS',
10,
'cocirs_cube',
'Spectral Image Cube',
True): ['volumes/COCIRS_0xxx/COCIRS_0406/DATA/CUBE/POINT_PERSPECTIVE/000IA_PRESOI001____RI____699_F4_038P.tar.gz',
'volumes/COCIRS_0xxx/COCIRS_0406/DATA/CUBE/POINT_PERSPECTIVE/000IA_PRESOI001____RI____699_F4_038P.LBL', 'volumes/COCIRS_0xxx_v3/COCIRS_0406/DATA/CUBE/POINT_PERSPECTIVE/000IA_PRESOI001____RI____699_F4_038P.tar.gz',
'volumes/COCIRS_0xxx_v3/COCIRS_0406/DATA/CUBE/POINT_PERSPECTIVE/000IA_PRESOI001____RI____699_F4_038P.LBL'],
('Cassini CIRS',
20,
'cocirs_extra',
'Extra Cube Preview Image',
False): ['volumes/COCIRS_0xxx/COCIRS_0406/EXTRAS/CUBE_OVERVIEW/POINT_PERSPECTIVE/000IA_PRESOI001____RI____699_F4_038P.JPG',
'volumes/COCIRS_0xxx/COCIRS_0406/EXTRAS/CUBE_OVERVIEW/POINT_PERSPECTIVE/000IA_PRESOI001____RI____699_F4_038P.LBL',
'volumes/COCIRS_0xxx_v3/COCIRS_0406/EXTRAS/CUBE_OVERVIEW/POINT_PERSPECTIVE/000IA_PRESOI001____RI____699_F4_038P.JPG',
'volumes/COCIRS_0xxx_v3/COCIRS_0406/EXTRAS/CUBE_OVERVIEW/POINT_PERSPECTIVE/000IA_PRESOI001____RI____699_F4_038P.LBL'],
('browse',
40,
'browse_full',
'Browse Image (full)',
True): ['previews/COCIRS_0xxx/COCIRS_0406/DATA/CUBE/POINT_PERSPECTIVE/000IA_PRESOI001____RI____699_F4_038P_full.jpg'],
('browse',
30,
'browse_medium',
'Browse Image (medium)',
False): ['previews/COCIRS_0xxx/COCIRS_0406/DATA/CUBE/POINT_PERSPECTIVE/000IA_PRESOI001____RI____699_F4_038P_med.jpg'],
('browse',
20,
'browse_small',
'Browse Image (small)',
False): ['previews/COCIRS_0xxx/COCIRS_0406/DATA/CUBE/POINT_PERSPECTIVE/000IA_PRESOI001____RI____699_F4_038P_small.jpg'],
('browse',
10,
'browse_thumb',
'Browse Image (thumbnail)',
False): ['previews/COCIRS_0xxx/COCIRS_0406/DATA/CUBE/POINT_PERSPECTIVE/000IA_PRESOI001____RI____699_F4_038P_thumb.jpg'],
('metadata',
4,
'cube_index',
'Cube Index',
False): ['metadata/COCIRS_0xxx/COCIRS_0406/COCIRS_0406_cube_point_index.tab',
'metadata/COCIRS_0xxx/COCIRS_0406/COCIRS_0406_cube_point_index.lbl'],
('metadata',
8,
'supplemental_index',
'Supplemental Index',
False): ['metadata/COCIRS_0xxx/COCIRS_0406/COCIRS_0406_cube_point_supplemental_index.tab',
'metadata/COCIRS_0xxx/COCIRS_0406/COCIRS_0406_cube_point_supplemental_index.lbl'],
('Cassini CIRS',
700,
'cocirs_documentation',
'Documentation',
False): ['documents/COCIRS_0xxx/Volume-SIS.pdf',
'documents/COCIRS_0xxx/Spectral-Cube-SIS.pdf',
'documents/COCIRS_0xxx/FOV-Overview.pdf',
'documents/COCIRS_0xxx/Data-Product-SIS.pdf',
'documents/COCIRS_0xxx/Chan-etal-2015.pdf',
'documents/COCIRS_0xxx/Cassini-CIRS-Final-Report.pdf',
'documents/COCIRS_0xxx/Calibration-Equations.pdf',
'documents/COCIRS_0xxx/CIRS-Users-Guide.pdf',
'documents/COCIRS_0xxx/CIRS-Interference.pdf']}
)
'COCIRS_xxxx/opus_products/000IA_PRESOI001____RI____699_F4_038P.txt')
]
)
def test_opus_products(input_path, expected):
opus_products_test(input_path, expected)
def test_opus_products(request, input_path, expected):
update = request.config.option.update
opus_products_test(pds3file.Pds3File, input_path, TEST_RESULTS_DIR+expected, update)

@pytest.mark.parametrize(
'input_path,category,expected',
[
('volumes/COCIRS_5xxx/COCIRS_5408/DATA/POIDATA/POI0408010000_FP1.LBL',
'volumes',
'COCIRS_xxxx/associated_abspaths/volumes_POI0408010000_FP1.txt')
]
)
def test_associated_abspaths(request, input_path, category, expected):
update = request.config.option.update
associated_abspaths_test(pds3file.Pds3File, input_path, category,
TEST_RESULTS_DIR+expected, update)

def test_opus_id_to_primary_logical_path():
TESTS = [
Expand Down Expand Up @@ -1097,7 +934,7 @@ def test_opus_id_to_primary_logical_path():
opus_id_abspaths.add(pdsf.abspath)

parts = pdsf.abspath.split('_FP')
fpx = '_FP' + parts[1][1]
fpx = '_FP' + parts[1][0]
for pdsf in product_pdsfiles:
# Every version is in the product set
for version_pdsf in pdsf.all_versions().values():
Expand Down
115 changes: 18 additions & 97 deletions pdsfile/pds3file/rules/COISS_xxxx.py
Original file line number Diff line number Diff line change
Expand Up @@ -398,7 +398,7 @@ class COISS_xxxx(pds3file.Pds3File):
ASSOCIATIONS['documents'] += associations_to_documents

def FILENAME_KEYLEN(self):
if self.volset[:10] == 'COISS_3xxx':
if self.bundleset[:10] == 'COISS_3xxx':
return 0
else:
return 11 # trim off suffixes
Expand All @@ -424,104 +424,25 @@ def FILENAME_KEYLEN(self):
'input_path,expected',
[
('volumes/COISS_1xxx/COISS_1001/data/1294561143_1295221348/W1294561202_1.IMG',
{('Cassini ISS',
0,
'coiss_raw',
'Raw Image',
True): ['volumes/COISS_1xxx/COISS_1001/data/1294561143_1295221348/W1294561202_1.IMG',
'volumes/COISS_1xxx/COISS_1001/data/1294561143_1295221348/W1294561202_1.LBL',
'volumes/COISS_1xxx/COISS_1001/label/prefix.fmt',
'volumes/COISS_1xxx/COISS_1001/label/tlmtab.fmt'],
('Cassini ISS',
110,
'coiss_thumb',
'Extra Preview (thumbnail)',
False): ['volumes/COISS_1xxx/COISS_1001/extras/thumbnail/1294561143_1295221348/W1294561202_1.IMG.jpeg_small'],
('Cassini ISS',
120,
'coiss_medium',
'Extra Preview (medium)',
False): ['volumes/COISS_1xxx/COISS_1001/extras/browse/1294561143_1295221348/W1294561202_1.IMG.jpeg'],
('Cassini ISS',
10,
'coiss_calib',
'Calibrated Image',
True): ['calibrated/COISS_1xxx/COISS_1001/data/1294561143_1295221348/W1294561202_1_CALIB.IMG',
'calibrated/COISS_1xxx/COISS_1001/data/1294561143_1295221348/W1294561202_1_CALIB.LBL',
'calibrated/COISS_1xxx_v1/COISS_1001/data/1294561143_1295221348/W1294561202_1_CALIB.IMG',
'calibrated/COISS_1xxx_v1/COISS_1001/data/1294561143_1295221348/W1294561202_1_CALIB.LBL',
'calibrated/COISS_1xxx_v2/COISS_1001/data/1294561143_1295221348/W1294561202_1_CALIB.IMG',
'calibrated/COISS_1xxx_v2/COISS_1001/data/1294561143_1295221348/W1294561202_1_CALIB.LBL'],
('browse',
10,
'browse_thumb',
'Browse Image (thumbnail)',
False): ['previews/COISS_1xxx/COISS_1001/data/1294561143_1295221348/W1294561202_1_thumb.jpg'],
('browse',
20,
'browse_small',
'Browse Image (small)',
False): ['previews/COISS_1xxx/COISS_1001/data/1294561143_1295221348/W1294561202_1_small.jpg'],
('browse',
30,
'browse_medium',
'Browse Image (medium)',
False): ['previews/COISS_1xxx/COISS_1001/data/1294561143_1295221348/W1294561202_1_med.jpg'],
('browse',
40,
'browse_full',
'Browse Image (full)',
True): ['previews/COISS_1xxx/COISS_1001/data/1294561143_1295221348/W1294561202_1_full.png'],
('metadata',
20,
'planet_geometry',
'Planet Geometry Index',
False): ['metadata/COISS_1xxx/COISS_1001/COISS_1001_jupiter_summary.tab',
'metadata/COISS_1xxx/COISS_1001/COISS_1001_jupiter_summary.lbl'],
('metadata',
30,
'moon_geometry',
'Moon Geometry Index',
False): ['metadata/COISS_1xxx/COISS_1001/COISS_1001_moon_summary.tab',
'metadata/COISS_1xxx/COISS_1001/COISS_1001_moon_summary.lbl'],
('metadata',
40,
'ring_geometry',
'Ring Geometry Index',
False): ['metadata/COISS_1xxx/COISS_1001/COISS_1001_ring_summary.tab',
'metadata/COISS_1xxx/COISS_1001/COISS_1001_ring_summary.lbl'],
('metadata',
10,
'inventory',
'Target Body Inventory',
False): ['metadata/COISS_1xxx/COISS_1001/COISS_1001_inventory.csv',
'metadata/COISS_1xxx/COISS_1001/COISS_1001_inventory.lbl'],
('metadata',
5,
'rms_index',
'RMS Node Augmented Index',
False): ['metadata/COISS_1xxx/COISS_1001/COISS_1001_index.tab',
'metadata/COISS_1xxx/COISS_1001/COISS_1001_index.lbl'],
('Cassini ISS',
140,
'coiss_documentation',
'Documentation',
False): ['documents/COISS_0xxx/VICAR-File-Format.pdf',
'documents/COISS_0xxx/ISS-Users-Guide.pdf',
'documents/COISS_0xxx/ISS-Users-Guide.docx',
'documents/COISS_0xxx/Data-Product-SIS.txt',
'documents/COISS_0xxx/Data-Product-SIS.pdf',
'documents/COISS_0xxx/Cassini-ISS-Final-Report.pdf',
'documents/COISS_0xxx/Calibration-Theoretical-Basis.pdf',
'documents/COISS_0xxx/Calibration-Plan.pdf',
'documents/COISS_0xxx/CISSCAL-Users-Guide.pdf',
'documents/COISS_0xxx/Archive-SIS.txt',
'documents/COISS_0xxx/Archive-SIS.pdf']}
),
'COISS_xxxx/opus_products/W1294561202_1.txt')
]
)
def test_opus_products(input_path, expected):
opus_products_test(input_path, expected)
def test_opus_products(request, input_path, expected):
update = request.config.option.update
opus_products_test(pds3file.Pds3File, input_path, TEST_RESULTS_DIR+expected, update)

@pytest.mark.parametrize(
'input_path,category,expected',
[
('volumes/COISS_1xxx/COISS_1001/data/1294561143_1295221348/W1294561202_1.IMG',
'volumes',
'COISS_xxxx/associated_abspaths/volumes_W1294561202_1.txt')
]
)
def test_associated_abspaths(request, input_path, category, expected):
update = request.config.option.update
associated_abspaths_test(pds3file.Pds3File, input_path, category,
TEST_RESULTS_DIR+expected, update)

def test_opus_id_to_primary_logical_path():
TESTS = [
Expand Down
Loading

0 comments on commit fe5ed96

Please sign in to comment.