""" Module with tests for the clearmetadata preprocessor. """ # Copyright (c) IPython Development Team. # Distributed under the terms of the Modified BSD License. from .base import PreprocessorTestsBase from ..clearmetadata import ClearMetadataPreprocessor class TestClearMetadata(PreprocessorTestsBase): """Contains test functions for clearmetadata.py""" def build_notebook(self): notebook = super().build_notebook() notebook.metadata = { 'language_info': {'name': 'python', 'version': '3.6.7'}, 'kernelspec': {'language': 'python', 'name': 'python3'} } # Add a test field to the first cell if 'metadata' not in notebook.cells[0]: notebook.cells[0].metadata = {} notebook.cells[0].metadata['test_field'] = 'test_value' notebook.cells[0].metadata['test_nested'] = { 'test_keep': 'keep', 'test_filtered': 'filter' } notebook.cells[0].metadata['executeTime'] = dict([('end_time', '09:31:50'), ('start_time', '09:31:49')]) return notebook def build_preprocessor(self, **kwargs): """Make an instance of a preprocessor""" preprocessor = ClearMetadataPreprocessor(**kwargs) preprocessor.enabled = True return preprocessor def test_constructor(self): """Can a ClearMetadataPreprocessor be constructed?""" self.build_preprocessor() def test_default_output(self): """Test the output of the ClearMetadataPreprocessor""" nb = self.build_notebook() res = self.build_resources() preprocessor = self.build_preprocessor() nb, res = preprocessor(nb, res) assert not nb.cells[0].metadata # By default we only perserve the langauge name assert nb.metadata == {'language_info': {'name': 'python'}} def test_cell_only(self): """Test the output of the ClearMetadataPreprocessor""" nb = self.build_notebook() res = self.build_resources() preprocessor = self.build_preprocessor(clear_notebook_metadata=False) nb, res = preprocessor(nb, res) assert not nb.cells[0].metadata assert nb.metadata def test_notebook_only(self): """Test the output of the ClearMetadataPreprocessor""" nb = self.build_notebook() res = self.build_resources() preprocessor = self.build_preprocessor(clear_cell_metadata=False, preserve_nb_metadata_mask=set()) nb, res = preprocessor(nb, res) assert nb.cells[0].metadata assert not nb.metadata def test_selective_cell_metadata(self): """Test the output of the ClearMetadataPreprocessor""" nb = self.build_notebook() res = self.build_resources() preprocessor = self.build_preprocessor( preserve_cell_metadata_mask=['test_field'], preserve_nb_metadata_mask=set() ) nb, res = preprocessor(nb, res) assert nb.cells[0].metadata == { 'test_field': 'test_value' } assert not nb.metadata def test_selective_cell_tuple_metadata(self): """Test the output of the ClearMetadataPreprocessor""" nb = self.build_notebook() res = self.build_resources() # Ensure that a tuple length 1 works as well as a string key preprocessor = self.build_preprocessor( preserve_cell_metadata_mask=[('test_field',)], preserve_nb_metadata_mask=set() ) nb, res = preprocessor(nb, res) assert nb.cells[0].metadata == { 'test_field': 'test_value' } assert not nb.metadata def test_nested_cell_metadata(self): """Test the output of the ClearMetadataPreprocessor""" nb = self.build_notebook() res = self.build_resources() preprocessor = self.build_preprocessor( preserve_cell_metadata_mask=[('test_nested', 'test_keep')], preserve_nb_metadata_mask=set() ) nb, res = preprocessor(nb, res) assert nb.cells[0].metadata == { 'test_nested': { 'test_keep': 'keep' } } assert not nb.metadata def test_nested_cell_tuple_metadata(self): """Test the output of the ClearMetadataPreprocessor""" nb = self.build_notebook() res = self.build_resources() # Ensure that a tuple length 1 works as well as a string key preprocessor = self.build_preprocessor( preserve_cell_metadata_mask=[('test_nested', ('test_keep',))], preserve_nb_metadata_mask=set() ) nb, res = preprocessor(nb, res) assert nb.cells[0].metadata == { 'test_nested': { 'test_keep': 'keep' } } assert not nb.metadata def test_selective_notebook_metadata(self): """Test the output of the ClearMetadataPreprocessor""" nb = self.build_notebook() res = self.build_resources() preprocessor = self.build_preprocessor(preserve_nb_metadata_mask=['kernelspec']) nb, res = preprocessor(nb, res) assert not nb.cells[0].metadata assert nb.metadata == { 'kernelspec': { 'language': 'python', 'name': 'python3' } }