Skip to content

Commit 220174d

Browse files
committed
test(boards): wire video record storage into multiuser test fixtures
After the board cover/count fix started reading from `video_records` and `board_video_records`, the multiuser test fixtures that still set both to `None` started erroring out — the boards router's catch-all turned the AttributeError into a 404, cascading through every test that PATCHes or GETs a board (auth, workflows, data-isolation suites). Swap the `None` placeholders for real SqliteVideoRecordStorage / SqliteBoardVideoRecordStorage instances (paralleling the existing image storage setup), and pin sane defaults on the MagicMocks in `test_videos_multiuser.py` so the get_dto cover/count lookups don't trip Pydantic validation.
1 parent 0628ef5 commit 220174d

4 files changed

Lines changed: 17 additions & 6 deletions

File tree

tests/app/routers/test_multiuser_authorization.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,12 +68,14 @@ def client():
6868
def mock_services() -> InvocationServices:
6969
from invokeai.app.services.board_image_records.board_image_records_sqlite import SqliteBoardImageRecordStorage
7070
from invokeai.app.services.board_records.board_records_sqlite import SqliteBoardRecordStorage
71+
from invokeai.app.services.board_video_records.board_video_records_sqlite import SqliteBoardVideoRecordStorage
7172
from invokeai.app.services.boards.boards_default import BoardService
7273
from invokeai.app.services.bulk_download.bulk_download_default import BulkDownloadService
7374
from invokeai.app.services.client_state_persistence.client_state_persistence_sqlite import (
7475
ClientStatePersistenceSqlite,
7576
)
7677
from invokeai.app.services.image_records.image_records_sqlite import SqliteImageRecordStorage
78+
from invokeai.app.services.video_records.video_records_sqlite import SqliteVideoRecordStorage
7779
from invokeai.app.services.images.images_default import ImageService
7880
from invokeai.app.services.invocation_cache.invocation_cache_memory import MemoryInvocationCache
7981
from invokeai.app.services.invocation_stats.invocation_stats_default import InvocationStatsService
@@ -118,8 +120,8 @@ def mock_services() -> InvocationServices:
118120
external_generation=None, # type: ignore
119121
videos=None, # type: ignore
120122
video_files=None, # type: ignore
121-
video_records=None, # type: ignore
122-
board_video_records=None, # type: ignore
123+
video_records=SqliteVideoRecordStorage(db=db),
124+
board_video_records=SqliteBoardVideoRecordStorage(db=db),
123125
gallery=None, # type: ignore
124126
)
125127

tests/app/routers/test_videos_multiuser.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,12 @@ def enable_multiuser_for_videos(monkeypatch: Any, mock_invoker: Invoker):
8383
# board_video_records is touched by remove_video_from_board; not exercised by the
8484
# list tests but stub it defensively so unrelated routes don't blow up.
8585
mock_invoker.services.board_video_records = MagicMock()
86+
# The board service computes video_count + cover_video_name on every get_dto/update;
87+
# an unconfigured MagicMock returns nested MagicMocks that fail Pydantic validation and
88+
# the boards route swallows the exception as a 404. Pin sane defaults.
89+
mock_invoker.services.board_video_records.get_video_count_for_board.return_value = 0
8690
mock_invoker.services.video_records = MagicMock()
91+
mock_invoker.services.video_records.get_most_recent_video_for_board.return_value = None
8792
mock_invoker.services.board_images = MagicMock()
8893
mock_invoker.services.board_images.get_all_board_image_names_for_board.return_value = []
8994

tests/app/routers/test_workflows_multiuser.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,12 +59,14 @@ def client():
5959
def mock_services() -> InvocationServices:
6060
from invokeai.app.services.board_image_records.board_image_records_sqlite import SqliteBoardImageRecordStorage
6161
from invokeai.app.services.board_records.board_records_sqlite import SqliteBoardRecordStorage
62+
from invokeai.app.services.board_video_records.board_video_records_sqlite import SqliteBoardVideoRecordStorage
6263
from invokeai.app.services.boards.boards_default import BoardService
6364
from invokeai.app.services.bulk_download.bulk_download_default import BulkDownloadService
6465
from invokeai.app.services.client_state_persistence.client_state_persistence_sqlite import (
6566
ClientStatePersistenceSqlite,
6667
)
6768
from invokeai.app.services.image_records.image_records_sqlite import SqliteImageRecordStorage
69+
from invokeai.app.services.video_records.video_records_sqlite import SqliteVideoRecordStorage
6870
from invokeai.app.services.images.images_default import ImageService
6971
from invokeai.app.services.invocation_cache.invocation_cache_memory import MemoryInvocationCache
7072
from invokeai.app.services.invocation_stats.invocation_stats_default import InvocationStatsService
@@ -109,8 +111,8 @@ def mock_services() -> InvocationServices:
109111
external_generation=None, # type: ignore
110112
videos=None, # type: ignore
111113
video_files=None, # type: ignore
112-
video_records=None, # type: ignore
113-
board_video_records=None, # type: ignore
114+
video_records=SqliteVideoRecordStorage(db=db),
115+
board_video_records=SqliteBoardVideoRecordStorage(db=db),
114116
gallery=None, # type: ignore
115117
)
116118

tests/conftest.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,15 @@
1111
import pytest
1212

1313
from invokeai.app.services.board_image_records.board_image_records_sqlite import SqliteBoardImageRecordStorage
14+
from invokeai.app.services.board_video_records.board_video_records_sqlite import SqliteBoardVideoRecordStorage
1415
from invokeai.app.services.board_records.board_records_sqlite import SqliteBoardRecordStorage
1516
from invokeai.app.services.boards.boards_default import BoardService
1617
from invokeai.app.services.bulk_download.bulk_download_default import BulkDownloadService
1718
from invokeai.app.services.client_state_persistence.client_state_persistence_sqlite import ClientStatePersistenceSqlite
1819
from invokeai.app.services.config.config_default import InvokeAIAppConfig
1920
from invokeai.app.services.external_generation.external_generation_default import ExternalGenerationService
2021
from invokeai.app.services.image_records.image_records_sqlite import SqliteImageRecordStorage
22+
from invokeai.app.services.video_records.video_records_sqlite import SqliteVideoRecordStorage
2123
from invokeai.app.services.images.images_default import ImageService
2224
from invokeai.app.services.invocation_cache.invocation_cache_memory import MemoryInvocationCache
2325
from invokeai.app.services.invocation_services import InvocationServices
@@ -71,8 +73,8 @@ def mock_services() -> InvocationServices:
7173
users=UserService(db),
7274
videos=None, # type: ignore
7375
video_files=None, # type: ignore
74-
video_records=None, # type: ignore
75-
board_video_records=None, # type: ignore
76+
video_records=SqliteVideoRecordStorage(db=db),
77+
board_video_records=SqliteBoardVideoRecordStorage(db=db),
7678
gallery=None, # type: ignore
7779
)
7880

0 commit comments

Comments
 (0)