@@ -37,6 +37,29 @@ def __init__(self, content):
3737 self .content = content
3838
3939
40+ class DummyPoller :
41+ def __init__ (self , result , operation_id ):
42+ self ._result = result
43+ self .details = {"operation_id" : operation_id }
44+
45+ async def result (self ):
46+ return self ._result
47+
48+
49+ class DummyDocIntelligenceClient :
50+ async def __aenter__ (self ):
51+ return self
52+
53+ async def __aexit__ (self , exc_type , exc , tb ):
54+ pass
55+
56+ async def begin_analyze_document (self , ** kwargs ):
57+ # Create a dummy page spanning the first 5 characters.
58+ dummy_page = DummyPage (0 , 5 , 1 )
59+ dummy_result = DummyResult ("HelloWorld" , pages = [dummy_page ], figures = [])
60+ return DummyPoller (dummy_result , "dummy_op" )
61+
62+
4063class DummyFigure :
4164 def __init__ (self , id , offset , length , page_number , caption_content ):
4265 self .id = id # note: process_figures_from_extracted_content checks "if figure.id is None"
@@ -361,3 +384,54 @@ async def test_process_layout_analysis_missing_source():
361384 assert result ["data" ] is None
362385 assert result ["errors" ] is not None
363386 assert "Pass a valid source" in result ["errors" ][0 ]["message" ]
387+
388+
389+ @pytest .mark .asyncio
390+ async def test_analyse_document_success (monkeypatch , tmp_path ):
391+ # Create a temporary file with dummy content.
392+ tmp_file = tmp_path / "dummy.txt"
393+ tmp_file .write_bytes (b"dummy content" )
394+
395+ la = LayoutAnalysis (
396+ record_id = 999 ,
397+ source = "https://dummyaccount.blob.core.windows.net/container/path/to/dummy.txt" ,
398+ )
399+
400+ # Use an async function to return our dummy Document Intelligence client.
401+ async def dummy_get_doc_intelligence_client ():
402+ return DummyDocIntelligenceClient ()
403+
404+ monkeypatch .setattr (
405+ la , "get_document_intelligence_client" , dummy_get_doc_intelligence_client
406+ )
407+
408+ await la .analyse_document (str (tmp_file ))
409+
410+ assert la .result is not None
411+ assert la .operation_id == "dummy_op"
412+ # Check that the dummy result contains the expected content.
413+ assert la .result .content == "HelloWorld"
414+
415+
416+ def test_create_page_wise_content ():
417+ # Test create_page_wise_content using a dummy result with one page.
418+ la = LayoutAnalysis (record_id = 100 , source = "dummy" )
419+
420+ # Create a dummy result with content "HelloWorld"
421+ # and a page with a span from index 0 with length 5.
422+ class DummyResultContent :
423+ pass
424+
425+ dummy_result = DummyResultContent ()
426+ dummy_result .content = "HelloWorld"
427+ dummy_result .pages = [DummyPage (0 , 5 , 1 )]
428+ la .result = dummy_result
429+
430+ layouts = la .create_page_wise_content ()
431+ assert isinstance (layouts , list )
432+ assert len (layouts ) == 1
433+ layout = layouts [0 ]
434+ # The page content should be the substring "Hello"
435+ assert layout .content == "Hello"
436+ assert layout .page_number == 1
437+ assert layout .page_offsets == 0
0 commit comments