diff --git a/netbox/circuits/tests/test_filtersets.py b/netbox/circuits/tests/test_filtersets.py index 9b107fc2f..4880a8388 100644 --- a/netbox/circuits/tests/test_filtersets.py +++ b/netbox/circuits/tests/test_filtersets.py @@ -5,10 +5,10 @@ from circuits.filtersets import * from circuits.models import * from dcim.models import Cable, Region, Site, SiteGroup from tenancy.models import Tenant, TenantGroup -from utilities.testing import BaseFilterSetTests +from utilities.testing import ChangeLoggedFilterSetTests -class ProviderTestCase(TestCase, BaseFilterSetTests): +class ProviderTestCase(TestCase, ChangeLoggedFilterSetTests): queryset = Provider.objects.all() filterset = ProviderFilterSet @@ -100,7 +100,7 @@ class ProviderTestCase(TestCase, BaseFilterSetTests): self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) -class CircuitTypeTestCase(TestCase, BaseFilterSetTests): +class CircuitTypeTestCase(TestCase, ChangeLoggedFilterSetTests): queryset = CircuitType.objects.all() filterset = CircuitTypeFilterSet @@ -122,7 +122,7 @@ class CircuitTypeTestCase(TestCase, BaseFilterSetTests): self.assertEqual(self.filterset(params, self.queryset).qs.count(), 1) -class CircuitTestCase(TestCase, BaseFilterSetTests): +class CircuitTestCase(TestCase, ChangeLoggedFilterSetTests): queryset = Circuit.objects.all() filterset = CircuitFilterSet @@ -277,7 +277,7 @@ class CircuitTestCase(TestCase, BaseFilterSetTests): self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) -class CircuitTerminationTestCase(TestCase, BaseFilterSetTests): +class CircuitTerminationTestCase(TestCase, ChangeLoggedFilterSetTests): queryset = CircuitTermination.objects.all() filterset = CircuitTerminationFilterSet @@ -371,7 +371,7 @@ class CircuitTerminationTestCase(TestCase, BaseFilterSetTests): self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) -class ProviderNetworkTestCase(TestCase, BaseFilterSetTests): +class ProviderNetworkTestCase(TestCase, ChangeLoggedFilterSetTests): queryset = ProviderNetwork.objects.all() filterset = ProviderNetworkFilterSet diff --git a/netbox/dcim/tests/test_filtersets.py b/netbox/dcim/tests/test_filtersets.py index bf9c39695..154ec0847 100644 --- a/netbox/dcim/tests/test_filtersets.py +++ b/netbox/dcim/tests/test_filtersets.py @@ -6,11 +6,11 @@ from dcim.filtersets import * from dcim.models import * from ipam.models import IPAddress from tenancy.models import Tenant, TenantGroup -from utilities.testing import BaseFilterSetTests +from utilities.testing import ChangeLoggedFilterSetTests from virtualization.models import Cluster, ClusterType -class RegionTestCase(TestCase, BaseFilterSetTests): +class RegionTestCase(TestCase, ChangeLoggedFilterSetTests): queryset = Region.objects.all() filterset = RegionFilterSet @@ -56,7 +56,7 @@ class RegionTestCase(TestCase, BaseFilterSetTests): self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) -class SiteGroupTestCase(TestCase, BaseFilterSetTests): +class SiteGroupTestCase(TestCase, ChangeLoggedFilterSetTests): queryset = SiteGroup.objects.all() filterset = SiteGroupFilterSet @@ -102,7 +102,7 @@ class SiteGroupTestCase(TestCase, BaseFilterSetTests): self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) -class SiteTestCase(TestCase, BaseFilterSetTests): +class SiteTestCase(TestCase, ChangeLoggedFilterSetTests): queryset = Site.objects.all() filterset = SiteFilterSet @@ -216,7 +216,7 @@ class SiteTestCase(TestCase, BaseFilterSetTests): self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) -class LocationTestCase(TestCase, BaseFilterSetTests): +class LocationTestCase(TestCase, ChangeLoggedFilterSetTests): queryset = Location.objects.all() filterset = LocationFilterSet @@ -303,7 +303,7 @@ class LocationTestCase(TestCase, BaseFilterSetTests): self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) -class RackRoleTestCase(TestCase, BaseFilterSetTests): +class RackRoleTestCase(TestCase, ChangeLoggedFilterSetTests): queryset = RackRole.objects.all() filterset = RackRoleFilterSet @@ -330,7 +330,7 @@ class RackRoleTestCase(TestCase, BaseFilterSetTests): self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) -class RackTestCase(TestCase, BaseFilterSetTests): +class RackTestCase(TestCase, ChangeLoggedFilterSetTests): queryset = Rack.objects.all() filterset = RackFilterSet @@ -500,7 +500,7 @@ class RackTestCase(TestCase, BaseFilterSetTests): self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) -class RackReservationTestCase(TestCase, BaseFilterSetTests): +class RackReservationTestCase(TestCase, ChangeLoggedFilterSetTests): queryset = RackReservation.objects.all() filterset = RackReservationFilterSet @@ -594,7 +594,7 @@ class RackReservationTestCase(TestCase, BaseFilterSetTests): self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) -class ManufacturerTestCase(TestCase, BaseFilterSetTests): +class ManufacturerTestCase(TestCase, ChangeLoggedFilterSetTests): queryset = Manufacturer.objects.all() filterset = ManufacturerFilterSet @@ -621,7 +621,7 @@ class ManufacturerTestCase(TestCase, BaseFilterSetTests): self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) -class DeviceTypeTestCase(TestCase, BaseFilterSetTests): +class DeviceTypeTestCase(TestCase, ChangeLoggedFilterSetTests): queryset = DeviceType.objects.all() filterset = DeviceTypeFilterSet @@ -753,7 +753,7 @@ class DeviceTypeTestCase(TestCase, BaseFilterSetTests): self.assertEqual(self.filterset(params, self.queryset).qs.count(), 1) -class ConsolePortTemplateTestCase(TestCase, BaseFilterSetTests): +class ConsolePortTemplateTestCase(TestCase, ChangeLoggedFilterSetTests): queryset = ConsolePortTemplate.objects.all() filterset = ConsolePortTemplateFilterSet @@ -785,7 +785,7 @@ class ConsolePortTemplateTestCase(TestCase, BaseFilterSetTests): self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) -class ConsoleServerPortTemplateTestCase(TestCase, BaseFilterSetTests): +class ConsoleServerPortTemplateTestCase(TestCase, ChangeLoggedFilterSetTests): queryset = ConsoleServerPortTemplate.objects.all() filterset = ConsoleServerPortTemplateFilterSet @@ -817,7 +817,7 @@ class ConsoleServerPortTemplateTestCase(TestCase, BaseFilterSetTests): self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) -class PowerPortTemplateTestCase(TestCase, BaseFilterSetTests): +class PowerPortTemplateTestCase(TestCase, ChangeLoggedFilterSetTests): queryset = PowerPortTemplate.objects.all() filterset = PowerPortTemplateFilterSet @@ -857,7 +857,7 @@ class PowerPortTemplateTestCase(TestCase, BaseFilterSetTests): self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) -class PowerOutletTemplateTestCase(TestCase, BaseFilterSetTests): +class PowerOutletTemplateTestCase(TestCase, ChangeLoggedFilterSetTests): queryset = PowerOutletTemplate.objects.all() filterset = PowerOutletTemplateFilterSet @@ -893,7 +893,7 @@ class PowerOutletTemplateTestCase(TestCase, BaseFilterSetTests): self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) -class InterfaceTemplateTestCase(TestCase, BaseFilterSetTests): +class InterfaceTemplateTestCase(TestCase, ChangeLoggedFilterSetTests): queryset = InterfaceTemplate.objects.all() filterset = InterfaceTemplateFilterSet @@ -935,7 +935,7 @@ class InterfaceTemplateTestCase(TestCase, BaseFilterSetTests): self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) -class FrontPortTemplateTestCase(TestCase, BaseFilterSetTests): +class FrontPortTemplateTestCase(TestCase, ChangeLoggedFilterSetTests): queryset = FrontPortTemplate.objects.all() filterset = FrontPortTemplateFilterSet @@ -978,7 +978,7 @@ class FrontPortTemplateTestCase(TestCase, BaseFilterSetTests): self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) -class RearPortTemplateTestCase(TestCase, BaseFilterSetTests): +class RearPortTemplateTestCase(TestCase, ChangeLoggedFilterSetTests): queryset = RearPortTemplate.objects.all() filterset = RearPortTemplateFilterSet @@ -1018,7 +1018,7 @@ class RearPortTemplateTestCase(TestCase, BaseFilterSetTests): self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) -class DeviceBayTemplateTestCase(TestCase, BaseFilterSetTests): +class DeviceBayTemplateTestCase(TestCase, ChangeLoggedFilterSetTests): queryset = DeviceBayTemplate.objects.all() filterset = DeviceBayTemplateFilterSet @@ -1050,7 +1050,7 @@ class DeviceBayTemplateTestCase(TestCase, BaseFilterSetTests): self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) -class DeviceRoleTestCase(TestCase, BaseFilterSetTests): +class DeviceRoleTestCase(TestCase, ChangeLoggedFilterSetTests): queryset = DeviceRole.objects.all() filterset = DeviceRoleFilterSet @@ -1083,7 +1083,7 @@ class DeviceRoleTestCase(TestCase, BaseFilterSetTests): self.assertEqual(self.filterset(params, self.queryset).qs.count(), 1) -class PlatformTestCase(TestCase, BaseFilterSetTests): +class PlatformTestCase(TestCase, ChangeLoggedFilterSetTests): queryset = Platform.objects.all() filterset = PlatformFilterSet @@ -1128,7 +1128,7 @@ class PlatformTestCase(TestCase, BaseFilterSetTests): self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) -class DeviceTestCase(TestCase, BaseFilterSetTests): +class DeviceTestCase(TestCase, ChangeLoggedFilterSetTests): queryset = Device.objects.all() filterset = DeviceFilterSet @@ -1470,7 +1470,7 @@ class DeviceTestCase(TestCase, BaseFilterSetTests): self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) -class ConsolePortTestCase(TestCase, BaseFilterSetTests): +class ConsolePortTestCase(TestCase, ChangeLoggedFilterSetTests): queryset = ConsolePort.objects.all() filterset = ConsolePortFilterSet @@ -1582,7 +1582,7 @@ class ConsolePortTestCase(TestCase, BaseFilterSetTests): self.assertEqual(self.filterset(params, self.queryset).qs.count(), 1) -class ConsoleServerPortTestCase(TestCase, BaseFilterSetTests): +class ConsoleServerPortTestCase(TestCase, ChangeLoggedFilterSetTests): queryset = ConsoleServerPort.objects.all() filterset = ConsoleServerPortFilterSet @@ -1694,7 +1694,7 @@ class ConsoleServerPortTestCase(TestCase, BaseFilterSetTests): self.assertEqual(self.filterset(params, self.queryset).qs.count(), 1) -class PowerPortTestCase(TestCase, BaseFilterSetTests): +class PowerPortTestCase(TestCase, ChangeLoggedFilterSetTests): queryset = PowerPort.objects.all() filterset = PowerPortFilterSet @@ -1814,7 +1814,7 @@ class PowerPortTestCase(TestCase, BaseFilterSetTests): self.assertEqual(self.filterset(params, self.queryset).qs.count(), 1) -class PowerOutletTestCase(TestCase, BaseFilterSetTests): +class PowerOutletTestCase(TestCase, ChangeLoggedFilterSetTests): queryset = PowerOutlet.objects.all() filterset = PowerOutletFilterSet @@ -1930,7 +1930,7 @@ class PowerOutletTestCase(TestCase, BaseFilterSetTests): self.assertEqual(self.filterset(params, self.queryset).qs.count(), 1) -class InterfaceTestCase(TestCase, BaseFilterSetTests): +class InterfaceTestCase(TestCase, ChangeLoggedFilterSetTests): queryset = Interface.objects.all() filterset = InterfaceFilterSet @@ -2101,7 +2101,7 @@ class InterfaceTestCase(TestCase, BaseFilterSetTests): self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) -class FrontPortTestCase(TestCase, BaseFilterSetTests): +class FrontPortTestCase(TestCase, ChangeLoggedFilterSetTests): queryset = FrontPort.objects.all() filterset = FrontPortFilterSet @@ -2218,7 +2218,7 @@ class FrontPortTestCase(TestCase, BaseFilterSetTests): self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) -class RearPortTestCase(TestCase, BaseFilterSetTests): +class RearPortTestCase(TestCase, ChangeLoggedFilterSetTests): queryset = RearPort.objects.all() filterset = RearPortFilterSet @@ -2329,7 +2329,7 @@ class RearPortTestCase(TestCase, BaseFilterSetTests): self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) -class DeviceBayTestCase(TestCase, BaseFilterSetTests): +class DeviceBayTestCase(TestCase, ChangeLoggedFilterSetTests): queryset = DeviceBay.objects.all() filterset = DeviceBayFilterSet @@ -2417,7 +2417,7 @@ class DeviceBayTestCase(TestCase, BaseFilterSetTests): self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) -class InventoryItemTestCase(TestCase, BaseFilterSetTests): +class InventoryItemTestCase(TestCase, ChangeLoggedFilterSetTests): queryset = InventoryItem.objects.all() filterset = InventoryItemFilterSet @@ -2551,7 +2551,7 @@ class InventoryItemTestCase(TestCase, BaseFilterSetTests): self.assertEqual(self.filterset(params, self.queryset).qs.count(), 1) -class VirtualChassisTestCase(TestCase, BaseFilterSetTests): +class VirtualChassisTestCase(TestCase, ChangeLoggedFilterSetTests): queryset = VirtualChassis.objects.all() filterset = VirtualChassisFilterSet @@ -2643,7 +2643,7 @@ class VirtualChassisTestCase(TestCase, BaseFilterSetTests): self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) -class CableTestCase(TestCase, BaseFilterSetTests): +class CableTestCase(TestCase, ChangeLoggedFilterSetTests): queryset = Cable.objects.all() filterset = CableFilterSet @@ -2763,7 +2763,7 @@ class CableTestCase(TestCase, BaseFilterSetTests): self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) -class PowerPanelTestCase(TestCase, BaseFilterSetTests): +class PowerPanelTestCase(TestCase, ChangeLoggedFilterSetTests): queryset = PowerPanel.objects.all() filterset = PowerPanelFilterSet @@ -2839,7 +2839,7 @@ class PowerPanelTestCase(TestCase, BaseFilterSetTests): self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) -class PowerFeedTestCase(TestCase, BaseFilterSetTests): +class PowerFeedTestCase(TestCase, ChangeLoggedFilterSetTests): queryset = PowerFeed.objects.all() filterset = PowerFeedFilterSet diff --git a/netbox/extras/filtersets.py b/netbox/extras/filtersets.py index 84522c0ad..92c0dc9a6 100644 --- a/netbox/extras/filtersets.py +++ b/netbox/extras/filtersets.py @@ -70,6 +70,7 @@ class ExportTemplateFilterSet(BaseFilterSet): class ImageAttachmentFilterSet(BaseFilterSet): + created = django_filters.DateTimeFilter() content_type = ContentTypeFilter() class Meta: diff --git a/netbox/extras/tests/test_filtersets.py b/netbox/extras/tests/test_filtersets.py index a4a75b377..eb08f5930 100644 --- a/netbox/extras/tests/test_filtersets.py +++ b/netbox/extras/tests/test_filtersets.py @@ -1,4 +1,5 @@ import uuid +from datetime import datetime, timezone from django.contrib.auth.models import User from django.contrib.contenttypes.models import ContentType @@ -10,7 +11,7 @@ from extras.filtersets import * from extras.models import * from ipam.models import IPAddress from tenancy.models import Tenant, TenantGroup -from utilities.testing import BaseFilterSetTests +from utilities.testing import BaseFilterSetTests, ChangeLoggedFilterSetTests from virtualization.models import Cluster, ClusterGroup, ClusterType @@ -239,8 +240,14 @@ class ImageAttachmentTestCase(TestCase, BaseFilterSetTests): } self.assertEqual(self.filterset(params, self.queryset).qs.count(), 1) + def test_created(self): + pk_list = self.queryset.values_list('pk', flat=True)[:2] + self.queryset.filter(pk__in=pk_list).update(created=datetime(2021, 1, 1, 0, 0, 0, tzinfo=timezone.utc)) + params = {'created': '2021-01-01T00:00:00'} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) -class JournalEntryTestCase(TestCase, BaseFilterSetTests): + +class JournalEntryTestCase(TestCase, ChangeLoggedFilterSetTests): queryset = JournalEntry.objects.all() filterset = JournalEntryFilterSet @@ -329,8 +336,17 @@ class JournalEntryTestCase(TestCase, BaseFilterSetTests): params = {'kind': [JournalEntryKindChoices.KIND_INFO, JournalEntryKindChoices.KIND_SUCCESS]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) + def test_created(self): + pk_list = self.queryset.values_list('pk', flat=True)[:2] + self.queryset.filter(pk__in=pk_list).update(created=datetime(2021, 1, 1, 0, 0, 0, tzinfo=timezone.utc)) + params = { + 'created_after': '2020-12-31T00:00:00', + 'created_before': '2021-01-02T00:00:00', + } + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) -class ConfigContextTestCase(TestCase, BaseFilterSetTests): + +class ConfigContextTestCase(TestCase, ChangeLoggedFilterSetTests): queryset = ConfigContext.objects.all() filterset = ConfigContextFilterSet @@ -507,7 +523,7 @@ class ConfigContextTestCase(TestCase, BaseFilterSetTests): self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) -class TagTestCase(TestCase, BaseFilterSetTests): +class TagTestCase(TestCase, ChangeLoggedFilterSetTests): queryset = Tag.objects.all() filterset = TagFilterSet diff --git a/netbox/ipam/tests/test_filtersets.py b/netbox/ipam/tests/test_filtersets.py index e17c9bb99..f43a44c62 100644 --- a/netbox/ipam/tests/test_filtersets.py +++ b/netbox/ipam/tests/test_filtersets.py @@ -4,12 +4,12 @@ from dcim.models import Device, DeviceRole, DeviceType, Interface, Location, Man from ipam.choices import * from ipam.filtersets import * from ipam.models import Aggregate, IPAddress, Prefix, RIR, Role, RouteTarget, Service, VLAN, VLANGroup, VRF -from utilities.testing import BaseFilterSetTests +from utilities.testing import ChangeLoggedFilterSetTests from virtualization.models import Cluster, ClusterGroup, ClusterType, VirtualMachine, VMInterface from tenancy.models import Tenant, TenantGroup -class VRFTestCase(TestCase, BaseFilterSetTests): +class VRFTestCase(TestCase, ChangeLoggedFilterSetTests): queryset = VRF.objects.all() filterset = VRFFilterSet @@ -97,7 +97,7 @@ class VRFTestCase(TestCase, BaseFilterSetTests): self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) -class RouteTargetTestCase(TestCase, BaseFilterSetTests): +class RouteTargetTestCase(TestCase, ChangeLoggedFilterSetTests): queryset = RouteTarget.objects.all() filterset = RouteTargetFilterSet @@ -179,7 +179,7 @@ class RouteTargetTestCase(TestCase, BaseFilterSetTests): self.assertEqual(self.filterset(params, self.queryset).qs.count(), 8) -class RIRTestCase(TestCase, BaseFilterSetTests): +class RIRTestCase(TestCase, ChangeLoggedFilterSetTests): queryset = RIR.objects.all() filterset = RIRFilterSet @@ -215,7 +215,7 @@ class RIRTestCase(TestCase, BaseFilterSetTests): self.assertEqual(self.filterset(params, self.queryset).qs.count(), 3) -class AggregateTestCase(TestCase, BaseFilterSetTests): +class AggregateTestCase(TestCase, ChangeLoggedFilterSetTests): queryset = Aggregate.objects.all() filterset = AggregateFilterSet @@ -289,7 +289,7 @@ class AggregateTestCase(TestCase, BaseFilterSetTests): self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) -class RoleTestCase(TestCase, BaseFilterSetTests): +class RoleTestCase(TestCase, ChangeLoggedFilterSetTests): queryset = Role.objects.all() filterset = RoleFilterSet @@ -312,7 +312,7 @@ class RoleTestCase(TestCase, BaseFilterSetTests): self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) -class PrefixTestCase(TestCase, BaseFilterSetTests): +class PrefixTestCase(TestCase, ChangeLoggedFilterSetTests): queryset = Prefix.objects.all() filterset = PrefixFilterSet @@ -505,7 +505,7 @@ class PrefixTestCase(TestCase, BaseFilterSetTests): self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) -class IPAddressTestCase(TestCase, BaseFilterSetTests): +class IPAddressTestCase(TestCase, ChangeLoggedFilterSetTests): queryset = IPAddress.objects.all() filterset = IPAddressFilterSet @@ -681,7 +681,7 @@ class IPAddressTestCase(TestCase, BaseFilterSetTests): self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) -class VLANGroupTestCase(TestCase, BaseFilterSetTests): +class VLANGroupTestCase(TestCase, ChangeLoggedFilterSetTests): queryset = VLANGroup.objects.all() filterset = VLANGroupFilterSet @@ -765,7 +765,7 @@ class VLANGroupTestCase(TestCase, BaseFilterSetTests): self.assertEqual(self.filterset(params, self.queryset).qs.count(), 1) -class VLANTestCase(TestCase, BaseFilterSetTests): +class VLANTestCase(TestCase, ChangeLoggedFilterSetTests): queryset = VLAN.objects.all() filterset = VLANFilterSet @@ -1006,7 +1006,7 @@ class VLANTestCase(TestCase, BaseFilterSetTests): self.assertEqual(self.filterset(params, self.queryset).qs.count(), 6) # 5 scoped + 1 global -class ServiceTestCase(TestCase, BaseFilterSetTests): +class ServiceTestCase(TestCase, ChangeLoggedFilterSetTests): queryset = Service.objects.all() filterset = ServiceFilterSet diff --git a/netbox/secrets/tests/test_filtersets.py b/netbox/secrets/tests/test_filtersets.py index e4833c0fb..d06c56598 100644 --- a/netbox/secrets/tests/test_filtersets.py +++ b/netbox/secrets/tests/test_filtersets.py @@ -3,11 +3,11 @@ from django.test import TestCase from dcim.models import Device, DeviceRole, DeviceType, Manufacturer, Site from secrets.filtersets import * from secrets.models import Secret, SecretRole -from utilities.testing import BaseFilterSetTests +from utilities.testing import ChangeLoggedFilterSetTests from virtualization.models import Cluster, ClusterType, VirtualMachine -class SecretRoleTestCase(TestCase, BaseFilterSetTests): +class SecretRoleTestCase(TestCase, ChangeLoggedFilterSetTests): queryset = SecretRole.objects.all() filterset = SecretRoleFilterSet @@ -30,7 +30,7 @@ class SecretRoleTestCase(TestCase, BaseFilterSetTests): self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) -class SecretTestCase(TestCase, BaseFilterSetTests): +class SecretTestCase(TestCase, ChangeLoggedFilterSetTests): queryset = Secret.objects.all() filterset = SecretFilterSet diff --git a/netbox/tenancy/tests/test_filtersets.py b/netbox/tenancy/tests/test_filtersets.py index 483cdf110..fd4a0bd76 100644 --- a/netbox/tenancy/tests/test_filtersets.py +++ b/netbox/tenancy/tests/test_filtersets.py @@ -2,10 +2,10 @@ from django.test import TestCase from tenancy.filtersets import * from tenancy.models import Tenant, TenantGroup -from utilities.testing import BaseFilterSetTests +from utilities.testing import ChangeLoggedFilterSetTests -class TenantGroupTestCase(TestCase, BaseFilterSetTests): +class TenantGroupTestCase(TestCase, ChangeLoggedFilterSetTests): queryset = TenantGroup.objects.all() filterset = TenantGroupFilterSet @@ -48,7 +48,7 @@ class TenantGroupTestCase(TestCase, BaseFilterSetTests): self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) -class TenantTestCase(TestCase, BaseFilterSetTests): +class TenantTestCase(TestCase, ChangeLoggedFilterSetTests): queryset = Tenant.objects.all() filterset = TenantFilterSet diff --git a/netbox/utilities/testing/filtersets.py b/netbox/utilities/testing/filtersets.py index 3745c6c47..98bb0d1ac 100644 --- a/netbox/utilities/testing/filtersets.py +++ b/netbox/utilities/testing/filtersets.py @@ -1,5 +1,9 @@ +from datetime import date, datetime, timezone + + __all__ = ( 'BaseFilterSetTests', + 'ChangeLoggedFilterSetTests', ) @@ -14,3 +18,18 @@ class BaseFilterSetTests: params = {'id': self.queryset.values_list('pk', flat=True)[:2]} self.assertGreater(self.queryset.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) + + +class ChangeLoggedFilterSetTests(BaseFilterSetTests): + + def test_created(self): + pk_list = self.queryset.values_list('pk', flat=True)[:2] + self.queryset.filter(pk__in=pk_list).update(created=date(2021, 1, 1)) + params = {'created': '2021-01-01'} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) + + def test_last_updated(self): + pk_list = self.queryset.values_list('pk', flat=True)[:2] + self.queryset.filter(pk__in=pk_list).update(last_updated=datetime(2021, 1, 1, 0, 0, 0, tzinfo=timezone.utc)) + params = {'last_updated': '2021-01-01T00:00:00'} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) diff --git a/netbox/virtualization/tests/test_filtersets.py b/netbox/virtualization/tests/test_filtersets.py index b35faba91..0ca6364a5 100644 --- a/netbox/virtualization/tests/test_filtersets.py +++ b/netbox/virtualization/tests/test_filtersets.py @@ -3,13 +3,13 @@ from django.test import TestCase from dcim.models import DeviceRole, Platform, Region, Site, SiteGroup from ipam.models import IPAddress from tenancy.models import Tenant, TenantGroup -from utilities.testing import BaseFilterSetTests +from utilities.testing import ChangeLoggedFilterSetTests from virtualization.choices import * from virtualization.filtersets import * from virtualization.models import Cluster, ClusterGroup, ClusterType, VirtualMachine, VMInterface -class ClusterTypeTestCase(TestCase, BaseFilterSetTests): +class ClusterTypeTestCase(TestCase, ChangeLoggedFilterSetTests): queryset = ClusterType.objects.all() filterset = ClusterTypeFilterSet @@ -36,7 +36,7 @@ class ClusterTypeTestCase(TestCase, BaseFilterSetTests): self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) -class ClusterGroupTestCase(TestCase, BaseFilterSetTests): +class ClusterGroupTestCase(TestCase, ChangeLoggedFilterSetTests): queryset = ClusterGroup.objects.all() filterset = ClusterGroupFilterSet @@ -63,7 +63,7 @@ class ClusterGroupTestCase(TestCase, BaseFilterSetTests): self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) -class ClusterTestCase(TestCase, BaseFilterSetTests): +class ClusterTestCase(TestCase, ChangeLoggedFilterSetTests): queryset = Cluster.objects.all() filterset = ClusterFilterSet @@ -183,7 +183,7 @@ class ClusterTestCase(TestCase, BaseFilterSetTests): self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) -class VirtualMachineTestCase(TestCase, BaseFilterSetTests): +class VirtualMachineTestCase(TestCase, ChangeLoggedFilterSetTests): queryset = VirtualMachine.objects.all() filterset = VirtualMachineFilterSet @@ -394,7 +394,7 @@ class VirtualMachineTestCase(TestCase, BaseFilterSetTests): self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) -class VMInterfaceTestCase(TestCase, BaseFilterSetTests): +class VMInterfaceTestCase(TestCase, ChangeLoggedFilterSetTests): queryset = VMInterface.objects.all() filterset = VMInterfaceFilterSet