def METHOD_NAME(self, project):
    run_dbt(["seed"])
    results = run_dbt(["run"])
    assert len(results) == 1
    # Add docs file customers.md
    write_file(customers1_md, project.project_root, "models", "customers.md")
    results = run_dbt(["--partial-parse", "run"])
    manifest = get_manifest(project.project_root)
    assert len(manifest.docs) == 2
    # Add schema file with 'docs' description
    write_file(schema1_yml, project.project_root, "models", "schema.yml")
    results = run_dbt(["--partial-parse", "run"])
    manifest = get_manifest(project.project_root)
    assert len(manifest.docs) == 2
    doc_id = "doc.test.customer_table"
    assert doc_id in manifest.docs
    doc = manifest.docs[doc_id]
    doc_file_id = doc.file_id
    assert doc_file_id in manifest.files
    source_file = manifest.files[doc_file_id]
    assert len(source_file.nodes) == 1
    model_one_id = "model.test.model_one"
    assert model_one_id in source_file.nodes
    model_node = manifest.nodes[model_one_id]
    assert model_node.description == "This table contains customer data"
    # Update the doc file
    write_file(customers2_md, project.project_root, "models", "customers.md")
    results = run_dbt(["--partial-parse", "run"])
    manifest = get_manifest(project.project_root)
    assert len(manifest.docs) == 2
    assert model_one_id in manifest.nodes
    model_node = manifest.nodes[model_one_id]
    assert "LOTS" in model_node.description
    # Add a macro patch, source and exposure with doc
    write_file(schema2_yml, project.project_root, "models", "schema.yml")
    results = run_dbt(["--partial-parse", "run"])
    assert len(results) == 1
    manifest = get_manifest(project.project_root)
    doc_file = manifest.files[doc_file_id]
    expected_nodes = [
        "model.test.model_one",
        "source.test.seed_sources.raw_customers",
        "macro.test.my_macro",
        "exposure.test.proxy_for_dashboard",
    ]
    assert expected_nodes == doc_file.nodes
    source_id = "source.test.seed_sources.raw_customers"
    assert manifest.sources[source_id].source_description == "LOTS of customer data"
    macro_id = "macro.test.my_macro"
    assert manifest.macros[macro_id].description == "LOTS of customer data"
    exposure_id = "exposure.test.proxy_for_dashboard"
    assert manifest.exposures[exposure_id].description == "LOTS of customer data"
    # update the doc file again
    write_file(customers1_md, project.project_root, "models", "customers.md")
    results = run_dbt(["--partial-parse", "run"])
    manifest = get_manifest(project.project_root)
    source_file = manifest.files[doc_file_id]
    assert model_one_id in source_file.nodes
    model_node = manifest.nodes[model_one_id]
    assert model_node.description == "This table contains customer data"
    assert (
        manifest.sources[source_id].source_description == "This table contains customer data"
    )
    assert manifest.macros[macro_id].description == "This table contains customer data"
    assert manifest.exposures[exposure_id].description == "This table contains customer data"
    # check that _lock is working
    with manifest._lock:
        assert manifest._lock