# Copyright (c) 2024 Microsoft Corporation. # Licensed under the MIT License from graphrag.config.enums import InputFileType from graphrag.config.models.input_config import InputConfig from graphrag.index.input.factory import InputReaderFactory from graphrag_storage import StorageConfig, create_storage async def test_json_loader_one_file_one_object(): config = InputConfig( storage=StorageConfig( base_dir="tests/unit/indexing/input/data/one-json-one-object", ), file_type=InputFileType.json, file_pattern=".*\\.json$", ) storage = create_storage(config.storage) documents = ( await InputReaderFactory() .create(config.file_type, {"storage": storage, "config": config}) .read_files() ) assert documents.shape == (1, 4) assert documents["title"].iloc[0] == "input.json" async def test_json_loader_one_file_multiple_objects(): config = InputConfig( storage=StorageConfig( base_dir="tests/unit/indexing/input/data/one-json-multiple-objects", ), file_type=InputFileType.json, file_pattern=".*\\.json$", ) storage = create_storage(config.storage) documents = ( await InputReaderFactory() .create(config.file_type, {"storage": storage, "config": config}) .read_files() ) print(documents) assert documents.shape == (3, 4) assert documents["title"].iloc[0] == "input.json" async def test_json_loader_one_file_with_title(): config = InputConfig( storage=StorageConfig( base_dir="tests/unit/indexing/input/data/one-json-one-object", ), file_type=InputFileType.json, file_pattern=".*\\.json$", title_column="title", ) storage = create_storage(config.storage) documents = ( await InputReaderFactory() .create(config.file_type, {"storage": storage, "config": config}) .read_files() ) assert documents.shape == (1, 4) assert documents["title"].iloc[0] == "Hello" async def test_json_loader_one_file_with_metadata(): config = InputConfig( storage=StorageConfig( base_dir="tests/unit/indexing/input/data/one-json-one-object", ), file_type=InputFileType.json, file_pattern=".*\\.json$", title_column="title", metadata=["title"], ) storage = create_storage(config.storage) documents = ( await InputReaderFactory() .create(config.file_type, {"storage": storage, "config": config}) .read_files() ) assert documents.shape == (1, 5) assert documents["metadata"][0] == {"title": "Hello"} async def test_json_loader_multiple_files(): config = InputConfig( storage=StorageConfig( base_dir="tests/unit/indexing/input/data/multiple-jsons", ), file_type=InputFileType.json, file_pattern=".*\\.json$", ) storage = create_storage(config.storage) documents = ( await InputReaderFactory() .create(config.file_type, {"storage": storage, "config": config}) .read_files() ) assert documents.shape == (4, 4)