diff --git a/unittests/test_scanner.py b/unittests/test_scanner.py
index 3d0a1e042c4483af608140df521cd9c087c71c70..52aa18f4d6e3849bf4de037e1f6069e2965cb91f 100644
--- a/unittests/test_scanner.py
+++ b/unittests/test_scanner.py
@@ -167,3 +167,81 @@ def test_record_structure_generation():
     assert subc[0]["Measurement"] is False
     assert subc[0]["date"] is False
     assert subc[0]["identifier"] is False
+
+
+def test_record_generation():
+    """
+    Test the correct list of returned records by the scanner using the
+    scifolder example from the article.
+    """
+    
+    records = scan_directory(UNITTESTDIR/"test_directories" / "examples_article",
+                             UNITTESTDIR/"scifolder_cfood.yml")
+
+    def parent_filter(parent_name):
+        return [p for p in records if len(p.parents) == 1 and p.parents[0].name == parent_name]
+    
+    def check_properties(records, check_props, check_additional=True):
+        records_found = [0 for r in check_props]
+        for rec in records:
+            rec_found = 0
+            # Try each record to check
+            for i, check_prop in enumerate(check_props):
+                matches = True
+                # breakpoint()
+                # Verify that all props are in the record and have the right value
+                for pr in check_prop:
+                    if rec.get_property(pr) is None:
+                        matches = False
+                        break
+                    if check_prop[pr] is None:
+                        if rec.get_property(pr).value is not None:
+                            matches = False
+                            break
+                    else:
+                        if rec.get_property(pr).value != check_prop[pr]:
+                            matches = False
+                            break
+                if check_additional:
+                    # Verify that there are no additional props in the record
+                    for rpr in rec.properties:
+                        if rpr.name not in check_prop:
+                            matches = False
+                            break
+                if matches:
+                    records_found[i] += 1
+        return records_found
+
+    # Check projects:
+    # Ther are two projects in mixed categories: climate_model_predict and SpeedOfLight
+    projects_found = check_properties(parent_filter("Project"), [
+        {"identifier": "climate-model-predict", "date": "2020"},
+        {"identifier": "SpeedOfLight", "date": "2020"}
+    ])
+    assert projects_found == [3, 2]
+
+    measurements = parent_filter("Measurement")
+    assert len(measurements) == 11
+    measurements_found = check_properties(measurements, [
+        {"identifier": "prediction-errors", "date": "2020-02-08"},
+        {"identifier": "average-all-exp", "date": "2020-01-04"},
+        {"identifier": "average-all-exp-corr", "date": "2020-01-05"},
+        {"date": "1980-01-01", "identifier": None},
+        {"date": "1990-01-01", "identifier": None},
+        {"date": "2000-01-01", "identifier": None},
+        {"date": "2010-01-01", "identifier": None},
+        {"date": "2020-01-01", "identifier": "TimeOfFlight"},
+        {"date": "2020-01-02", "identifier": "Cavity"},
+        {"date": "2020-01-03", "identifier": None},
+        {"date": "2020-02-01", "identifier": None},
+    ], False)
+    for f in measurements_found:
+        assert f == 1
+
+    persons = parent_filter("Person")
+    check_props = [
+        {"first_name": None, "last_name": "Author" + letter} for letter in
+        ("A", "B", "C", "D", "E")]
+    persons_found = check_properties(persons, check_props)
+    for f in persons_found:
+        assert f > 0