From 67604eb61d3b79f4e2c12c2ba90ed0a8614e3b50 Mon Sep 17 00:00:00 2001 From: Josh Hawkins <32435876+hawkeye217@users.noreply.github.com> Date: Mon, 16 Mar 2026 07:31:36 -0500 Subject: [PATCH] fix test pollution test_maintainer was injecting MagicMock() into sys.modules["frigate.config.camera.updater"] at module load time and never restoring it. When the profile tests later imported CameraConfigUpdateEnum and CameraConfigUpdateTopic from that module, they got mock objects instead of the real dataclass/enum, so equality comparisons always failed --- frigate/test/test_maintainer.py | 23 ++++++++++++++++++----- test.db-journal | Bin 0 -> 12824 bytes 2 files changed, 18 insertions(+), 5 deletions(-) create mode 100644 test.db-journal diff --git a/frigate/test/test_maintainer.py b/frigate/test/test_maintainer.py index d978cfd9f..49712749e 100644 --- a/frigate/test/test_maintainer.py +++ b/frigate/test/test_maintainer.py @@ -2,16 +2,29 @@ import sys import unittest from unittest.mock import MagicMock, patch -# Mock complex imports before importing maintainer -sys.modules["frigate.comms.inter_process"] = MagicMock() -sys.modules["frigate.comms.detections_updater"] = MagicMock() -sys.modules["frigate.comms.recordings_updater"] = MagicMock() -sys.modules["frigate.config.camera.updater"] = MagicMock() +# Mock complex imports before importing maintainer, saving originals so we can +# restore them after import and avoid polluting sys.modules for other tests. +_MOCKED_MODULES = [ + "frigate.comms.inter_process", + "frigate.comms.detections_updater", + "frigate.comms.recordings_updater", + "frigate.config.camera.updater", +] +_originals = {name: sys.modules.get(name) for name in _MOCKED_MODULES} +for name in _MOCKED_MODULES: + sys.modules[name] = MagicMock() # Now import the class under test from frigate.config import FrigateConfig # noqa: E402 from frigate.record.maintainer import RecordingMaintainer # noqa: E402 +# Restore original modules (or remove mock if there was no original) +for name, orig in _originals.items(): + if orig is None: + sys.modules.pop(name, None) + else: + sys.modules[name] = orig + class TestMaintainer(unittest.IsolatedAsyncioTestCase): async def test_move_files_survives_bad_filename(self): diff --git a/test.db-journal b/test.db-journal new file mode 100644 index 0000000000000000000000000000000000000000..9d13ac887a1124877686e4f2e60cfb8b90c099d1 GIT binary patch literal 12824 zcmeGiU2oggm9%MnSdx`AX_+Q*CMyUME=$Z0krI=+sp@L38{1hNXKh++94*l{8%dN& zI!&@CrOAK*1v(5HFks!o2IOVf)86*dVGr9dVB1?)6noj8hW&tH=z?K8yqA|071B%4 zq*zc1uu0x~&pr2i-gC~qAAdOUN$JPUk0^>7U%vOOPT?1YSMqE5qs#~SA7=hEc7FUE z^@p)N)EmkCxwF5P-geV$^*G(%Yj#`4b=$aR8gFZkvDq=YuGZ8$hOOg9zwOZcYNNi^ zC@rqM+<3iIjs+-}F07C)AFNzDQO2{Cxmz#VY4-SW`t~_jUvC?c=_4P{`?%KXFD*4< zCNx{+(%0&%^RLubPe?phTDh=RTDiQmRQl@b;&OfUO6h##%9lz6Z!lCG7z*8vtJ|*T znjNEDdKpMtTU>4gQ$fGcZ4LE8xR+Q@PZ9k$>PddW1+D+2X#4i)3 zakq9l>sn8Dx56Q!EQh4Pn3nG9<0>Phuymq`{=?5nBuW&$JSlb>Xu8Oq)R~$ zH@lr;=ckj{MQGFn@^;|%mXT&zmcBcSm;_?%y69gj${y7A2)t?Q>qdJ()KN|J4dk&Z zs%!N$r)k-s+#XMWNgI0GF|?lLn67yZnti>6o|{(JaE4S3nvs%rbrTl8)_5IE%r`UW zdN@Me~Q+5i40xO#-_83d!y~4QG&s|NkhYr#Gj&Gcs;6NSQK#zS<{`##00t$#6=y5gFpK>8af_ffLsHTSn7`4I$hiIu_nu z!Yj1@b50nnIeL1#yqZi#z0U=6^_d7ol?f2|mqAfMtFdi{6Ai z5CXIiPdX6~8M_N6PkjcX$;PF5Xd*;&(rk)dm`Msl!Zm0RvJoXJg3X?I7^`^X80YgC z2wE0oJD>>rh7}+7_9j6Qfy!h`x@}d8D2T@#KDvrNs&T&vWcrthJIuU z2wK?T!P2->?G#%-lx$vTNAqk8z3lIEbeiQj`c?tC_Kvv;$%CL zw3E1b-=ziN@z5^VgHtrw4&ar;nr#zutzj<+itBYcUA^aQS>W7a24IhjGXNOBZe0)Fq4)^J zFCPZ_Y{S*fuI6n?8)g@LVH=8TF;hA_>)KGUMc`3}hAKosF{IbtaUjVK9Wzejq7{>l z)iT-|kTFoDlSD7wYZ)$t$d)~n@!?Jk7R?2Hu$YqGs19I*q(^lCuLvJRg zfLDP$E_!9+@cItfvvD-Yi=1)Ws17iAdJ~xcU>zX;9>qLN9RMBNeMZ$Wi0kvHT6fXx zjxt^UKs1ovlgo5(y^5=nx3y7K5?s@#s!DQCNgV)e?XV4XfM3DOSONZ(Ge4n%3Ia^j1qVuJ~}04-@vC;-Ccw#WqDC8Bs( zK@^Rl8UhY*Egm8=vP+lHzzs;FL%gA-I)5e4-iVydX1MRwsD zz=qjGckMu)SB-8geS#{eK;iQYRR#KFf)bIK$WfuDsFEZfV5qYIR3SjV0_*}N)|A>Q zmZ44pn1q(;pY+92RaHevn0t<)&ckq#U?C#&@4qHvtIASMu0G39=KwrV7jl0vSzm;z z0C?5?n47$REe3Oc;5ayT$%?G1lClp8P*B4q<8#gAwJLl~kiYm0LmjL0LJe`IwZ0KA zF}W&Ks{CGt5@2jKvOFUJLK47E_aGSy3Y=rFqmmAg(?!uWf9= z9Sh5jCB9Or2vubY6JPNm@TDS0gY!^rqZbP&NtK#dEg(S&fjc1=#dZ;t2&PsM^9&^e zC$KLWyz3H+Oi-)9y&NV>co^;p5{Oiq#N6YNZ19mpN8j{r|HY!=Rd7~n7U>X=-3C6k z*EYv24Nz3N(KD!^1bhK{{^q?10(