from unittest.mock import MagicMock, patch from django.test import SimpleTestCase from apps.wpm.services import get_recent_mgroup_equipment_ids class RecentMgroupEquipmentTests(SimpleTestCase): @patch("apps.wpm.services.Mlog") def test_collects_all_equipment_fields_in_log_order_without_duplicates( self, mlog ): log_queryset = MagicMock() mlog.objects.filter.return_value = log_queryset log_queryset.order_by.return_value.values_list.return_value.__getitem__.return_value = [ ("log-new", "equipment-a", None), ("log-middle", "equipment-b", "equipment-a"), ("log-empty", None, None), ] through_queryset = MagicMock() mlog.equipments.through.objects.filter.return_value = through_queryset through_queryset.order_by.return_value.values_list.return_value = [ ("log-new", "equipment-c"), ("log-middle", "equipment-c"), ("log-middle", "equipment-d"), ] result = get_recent_mgroup_equipment_ids("mgroup-1", log_limit=50) self.assertEqual( result, ["equipment-a", "equipment-c", "equipment-b", "equipment-d"], ) log_queryset.order_by.return_value.values_list.return_value.__getitem__.assert_called_once_with( slice(None, 50, None) ) @patch("apps.wpm.services.Mlog") def test_returns_empty_when_recent_logs_have_no_equipment(self, mlog): log_queryset = MagicMock() mlog.objects.filter.return_value = log_queryset log_queryset.order_by.return_value.values_list.return_value.__getitem__.return_value = [ ("log-1", None, None), ("log-2", None, None), ] through_queryset = MagicMock() mlog.equipments.through.objects.filter.return_value = through_queryset through_queryset.order_by.return_value.values_list.return_value = [] result = get_recent_mgroup_equipment_ids("mgroup-1") self.assertEqual(result, [])