Skip to content
Snippets Groups Projects
Select Git revision
  • 134432b5f9421f0432260fe6bba554d75e77f1c0
  • main default protected
  • dev
  • f-spss-value-label-name
  • f-unmod
  • f-checkidentical
  • f-simple-breakpoint
  • f-new-debug-tree
  • f-existing-file-id
  • f-no-ident
  • f-collect-problems
  • f-refactor-debug-tree
  • v0.13.0
  • v0.12.0
  • v0.11.0
  • v0.10.1
  • v0.10.0
  • v0.9.1
  • v0.9.0
  • v0.8.0
  • v0.7.1
  • v0.7.0
  • v0.6.0
  • v0.5.0
  • v0.4.0
  • v0.3.0
  • v0.2.0
  • v0.1.0
28 results

test_tool.py

Blame
  • Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    test_tool.py 5.61 KiB
    #!/bin/python
    # Tests for the tool using pytest
    # Adapted from check-sfs
    # A. Schlemmer, 06/2021
    
    from newcrawler import Crawler
    from newcrawler.converters import MarkdownFileConverter
    from newcrawler.structure_elements import File, DictTextElement, DictListElement
    from os.path import join, dirname, basename
    import caosdb as db
    
    def rfp(*pathcomponents):
        """
        Return full path.
        Shorthand convenience function.
        """
        return join(dirname(__file__), *pathcomponents)
    
    def dircheckstr(*pathcomponents):
        """
        Return the debug tree identifier for a given path.
        """
        return "newcrawler.structure_elements.Directory: " + basename(join(*pathcomponents)) + ", " + rfp("test_directories", "examples_article", *pathcomponents)
    
    def test_crawler():
        crawler = Crawler(debug=True)
        crawler.crawl_directory(rfp("test_directories", "examples_article"),
                  rfp("scifolder_cfood.yml"))
        
        subd = crawler.debug_tree[dircheckstr("DataAnalysis")]
        subc = crawler.debug_copied[dircheckstr("DataAnalysis")]
        assert len(subd) == 2
        assert len(subd[0]) == 0
        assert len(subd[1]) == 0
        assert len(subc) == 2
        assert len(subc[0]) == 0
        assert len(subc[1]) == 0
        
        subd = crawler.debug_tree[dircheckstr("DataAnalysis", "2020_climate-model-predict")]
        subc = crawler.debug_copied[dircheckstr("DataAnalysis", "2020_climate-model-predict")]
        
        assert len(subd[1]) == 1
        assert len(subd[1]["Project"].get_parents()) == 1
        assert subd[1]["Project"].get_parents()[0].name == "Project"
        assert subd[1]["Project"].get_property("date").value == "2020"
        assert subd[1]["Project"].get_property("identifier").value == "climate-model-predict"
        
        assert len(subd[0]) == 3
        assert subd[0]["date"] == "2020"
        assert subd[0]["identifier"] == "climate-model-predict"
        assert subd[0]["Project"].__class__ == db.Record
    
        # Check the copy flags for the first level in the hierarchy:
        assert len(subc[0]) == 3
        assert len(subc[1]) == 1
        assert subc[1]["Project"] is False
        assert subc[0]["Project"] is False
        assert subc[0]["date"] is False
        assert subc[0]["identifier"] is False
    
        
    
        subd = crawler.debug_tree[dircheckstr("DataAnalysis",
                                              "2020_climate-model-predict",
                                              "2020-02-08_prediction-errors")]
        subc = crawler.debug_copied[dircheckstr("DataAnalysis",
                                              "2020_climate-model-predict",
                                              "2020-02-08_prediction-errors")]
        assert len(subd[0]) == 4
        assert subd[0]["date"] == "2020-02-08"
        assert subd[0]["identifier"] == "prediction-errors"
        assert subd[0]["Project"].__class__ == db.Record
        assert subd[0]["Measurement"].__class__ == db.Record
    
        assert len(subd[1]) == 2
        
        assert len(subd[1]["Project"].get_parents()) == 1
        assert subd[1]["Project"].get_parents()[0].name == "Project"
        assert subd[1]["Project"].get_property("date").value == "2020"
        assert subd[1]["Project"].get_property("identifier").value == "climate-model-predict"
    
        assert len(subd[1]["Measurement"].get_parents()) == 1
        assert subd[1]["Measurement"].get_parents()[0].name == "Measurement"
        assert subd[1]["Measurement"].get_property("date").value == "2020-02-08"
        assert subd[1]["Measurement"].get_property("identifier").value == "prediction-errors"
        assert subd[1]["Measurement"].get_property("project").value != "$Project"
        assert subd[1]["Measurement"].get_property("project").value.__class__ == db.Record
        assert subd[1]["Measurement"].get_property("project").value == subd[0]["Project"]
    
        # Check the copy flags for the second level in the hierarchy:
        assert subc[1]["Project"] is True
        assert subc[0]["Project"] is True
        assert subc[1]["Measurement"] is False
        assert subc[0]["Measurement"] is False
        assert subc[0]["date"] is False
        assert subc[0]["identifier"] is False
    
    def test_markdown_converter():
        test_readme = File("README.md", rfp(
            "test_directories", "examples_article", "DataAnalysis",
            "2020_climate-model-predict", "2020-02-08_prediction-errors", "README.md"))
        
        converter = MarkdownFileConverter({
            "match": "(.*)"
        }, "TestMarkdownFileConverter")
    
        m = converter.match(File("test_tool.py", rfp(
            "test_tool.py")))
        assert m is None
    
        m = converter.match(test_readme)
        assert m is not None
        assert m.__class__ == dict
        assert len(m) == 0
    
        converter = MarkdownFileConverter({
            "match": "README.md"
        }, "TestMarkdownFileConverter")
    
        m = converter.match(test_readme)
        assert m is not None
        assert len(m) == 0
    
        children = converter.create_children(None, test_readme)
        assert len(children) == 5
        assert children[1].__class__ == DictTextElement
        assert children[1].name == "description"
        assert children[1].value.__class__ == str
    
        assert children[0].__class__ == DictTextElement
        assert children[0].name == "responsible"
        assert children[0].value.__class__ == str
    
        test_readme2 = File("README.md", rfp("test_directories", "examples_article", "ExperimentalData", "2020_SpeedOfLight", "2020-01-01_TimeOfFlight", "README.md"))
    
        m = converter.match(test_readme2)
        assert m is not None
        assert len(m) == 0
    
        children = converter.create_children(None, test_readme2)
        assert len(children) == 2
        assert children[1].__class__ == DictTextElement
        assert children[1].name == "description"
        assert children[1].value.__class__ == str
    
        assert children[0].__class__ == DictListElement
        assert children[0].name == "responsible"
        assert children[0].value.__class__ == list