feat: Update test mocks for google-genai SDK (#231) #235
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Relates to #231
Update
ocr/tests/test_gemini_engine.pyto match new SDK internals:engine._model/engine._generation_configmocks withengine._client/engine._model_nameengine._client.models.generate_contentinstead ofmock_model.generate_contentsys.modulespatches: replacevertexai/google.cloud.aiplatformwithgoogle.genaitest_missing_sdk_raises_unavailableto testgoogle.genaiimport failureAcceptance Criteria
test_vin_decode.pyandtest_manual_extractor.pyconfirmed unchanged (they mock at router/engine-instance level)File
ocr/tests/test_gemini_engine.pyPlan: M4 -- Update tests (#235)
Phase: Planning | Agent: Planner | Status: APPROVED
Parent: #231 | Revision: v4
Context
The test file
ocr/tests/test_gemini_engine.pymocks the oldvertexai.generative_modelsSDK internals. After M2 (#233) and M3 (#234) change the production code, these mocks must be updated to match the newgoogle.genaiSDK patterns.Codebase Analysis
ocr/tests/test_gemini_engine.pysys.modulespatches with old module names; others setengine._modeldirectlyocr/tests/test_vin_decode.pyocr/tests/test_manual_extractor.pyocr/tests/test_resolve_vin_year.pyresolve_vin_yearonly (pure function, no SDK)Internal State Changes (old -> new mock targets)
Tests that set
engine._modelandengine._generation_configmust change to:Implementation
ocr/tests/test_gemini_engine.pyengine._modelandengine._generation_config-> setengine._client(MagicMock with.models.generate_contentreturn value) andengine._model_name = "gemini-2.5-flash"test_valid_pdf_returns_structured_schedules: update BOTH thesys.modulespatch (replacevertexai/google.cloud.aiplatformentries withgoogle.genaientries) AND theengine._model->engine._client/engine._model_namefield reassignments. Clean up deadif Falsebranch (L162).test_missing_sdk_raises_unavailable: change patch topatch.dict("sys.modules", {"google.genai": None})to simulate missing new SDKtest_vin_decode.py,test_manual_extractor.py, andtest_resolve_vin_year.pypass unchangedReview Findings
QR plan-completeness:
test_resolve_vin_year.pyacknowledged -- commit before M1 branch operationsTW plan-scrub:
test_valid_pdf_returns_structured_schedulesneeds BOTHsys.modulespatch update ANDengine._model->engine._clientfield reassignments -- clarifiedtest_missing_sdk_raises_unavailableexact patch:patch.dict("sys.modules", {"google.genai": None})-- specifiedQR plan-code:
if Falsebranch at L162 -- clean up during this milestoneQR plan-docs:
Verdict: APPROVED | Next: Execute (depends on M2 #233 and M3 #234)
Milestone: M4 Complete -- Update test mocks
Phase: Execution | Agent: Developer | Status: PASS
Changes
ocr/tests/test_gemini_engine.py: Updated all mock patterns for new SDKengine._model->engine._client(MagicMock with.models.generate_content)engine._generation_config->engine._model_name = "gemini-2.5-flash"test_valid_pdf_returns_structured_schedules: Replaced old sys.modules patch withgoogle.genaientries, removed deadif Falsebranchtest_missing_sdk_raises_unavailable: Patchesgoogleandgoogle.genaias Nonetest_model_is_none_after_construction->test_client_is_none_after_constructiontest_model_reused_on_second_call->test_client_reused_on_second_callPropertyMockimportTest Results
All 18 gemini engine tests pass. All VIN decode and manual extractor tests pass unchanged (they mock at router/engine-instance level).
Acceptance Criteria
test_vin_decode.pyandtest_manual_extractor.pyconfirmed unchangedVerdict: PASS | Next: M5 -- Doc-sync