def test_new_barrier_ids_current_user(self):
        """
        Changes made by the current user should not be included in new_barrier_ids
        """
        barrier1 = BarrierFactory(priority="LOW")
        barrier2 = BarrierFactory(priority="MEDIUM")
        barrier3 = BarrierFactory(priority="HIGH")

        user = create_test_user(sso_user_id=self.sso_user_data_1["user_id"])

        saved_search = SavedSearch.objects.create(
            user=user, name="Medium", filters={"priority": ["MEDIUM"]})
        saved_search.mark_as_seen()

        assert saved_search.new_barrier_ids == []

        # Barriers created by current user should be ignored
        api_client = self.create_api_client(user=user)
        report = ReportFactory(priority="MEDIUM", created_by=user)
        submit_url = reverse("submit-report", kwargs={"pk": report.id})
        response = api_client.put(submit_url)
        assert status.HTTP_200_OK == response.status_code

        saved_search = SavedSearch.objects.get(pk=saved_search.pk)
        assert report.pk not in saved_search.new_barrier_ids
        assert saved_search.new_barrier_ids == []

        # Barriers changed by current user should be ignored
        barrier1.priority = BarrierPriority.objects.get(code="MEDIUM")
        barrier1.modified_by = user
        barrier1.save()

        saved_search = SavedSearch.objects.get(pk=saved_search.pk)
        assert barrier1.pk not in saved_search.new_barrier_ids
        assert saved_search.new_barrier_ids == []
    def test_mark_as_seen(self):
        """
        Calling mark_as_seen should reset updated and new barrier ids
        """
        barrier1 = BarrierFactory(priority="LOW")
        barrier2 = BarrierFactory(priority="MEDIUM")

        user = create_test_user(sso_user_id=self.sso_user_data_1["user_id"])

        saved_search = SavedSearch.objects.create(
            user=user, name="Medium", filters={"priority": ["MEDIUM"]})
        saved_search.mark_as_seen()
        assert saved_search.new_barrier_ids == []
        assert saved_search.updated_barrier_ids == []

        barrier1.priority = BarrierPriority.objects.get(code="MEDIUM")
        barrier1.save()

        barrier2.summary = "New summary"
        barrier2.save()

        saved_search = SavedSearch.objects.get(pk=saved_search.pk)
        assert saved_search.new_barrier_ids == [barrier1.pk]
        assert barrier1 in saved_search.new_barriers_since_notified
        assert barrier1 not in saved_search.updated_barriers_since_notified
        assert barrier2 not in saved_search.new_barriers_since_notified
        assert barrier2 in saved_search.updated_barriers_since_notified

        saved_search = SavedSearch.objects.get(pk=saved_search.pk)
        saved_search.mark_as_seen()
        assert saved_search.new_barrier_ids == []
        assert saved_search.updated_barrier_ids == []
    def test_new_barrier_ids_other_user(self):
        """
        Changes made by other users should be included in new_barrier_ids
        """
        barrier1 = BarrierFactory(priority="LOW")
        barrier2 = BarrierFactory(priority="MEDIUM")
        barrier3 = BarrierFactory(priority="HIGH")

        user = create_test_user(sso_user_id=self.sso_user_data_1["user_id"])

        saved_search = SavedSearch.objects.create(
            user=user, name="Medium", filters={"priority": ["MEDIUM"]})
        saved_search.mark_as_seen()

        assert saved_search.new_barrier_ids == []

        # Newly created barriers should be in the list
        barrier4 = BarrierFactory(priority="MEDIUM")
        barrier5 = BarrierFactory(priority="UNKNOWN")
        saved_search = SavedSearch.objects.get(pk=saved_search.pk)
        assert saved_search.new_barrier_ids == [barrier4.id]

        # Existing barriers should be in the list
        barrier1.priority = BarrierPriority.objects.get(code="MEDIUM")
        barrier1.save()

        saved_search = SavedSearch.objects.get(pk=saved_search.pk)
        assert barrier1.pk in saved_search.new_barrier_ids
    def test_new_barriers_since_notified_other_user(self):
        """
        Changes made by other users should be included in new_barriers_since_notified
        """
        barrier1 = BarrierFactory(priority="LOW")
        barrier2 = BarrierFactory(priority="MEDIUM")
        barrier3 = BarrierFactory(priority="HIGH")

        user = create_test_user(sso_user_id=self.sso_user_data_1["user_id"])
        user2 = create_test_user(sso_user_id=self.sso_user_data_2["user_id"])

        saved_search = SavedSearch.objects.create(
            user=user, name="Medium", filters={"priority": ["MEDIUM"]})
        saved_search.mark_as_notified()

        assert saved_search.new_barriers_since_notified.exists() is False

        # Newly created barriers should be in the list
        barrier4 = BarrierFactory(priority="MEDIUM")
        barrier5 = BarrierFactory(priority="UNKNOWN")
        saved_search = SavedSearch.objects.get(pk=saved_search.pk)
        assert barrier4 in saved_search.new_barriers_since_notified
        assert saved_search.new_barriers_since_notified.count() == 1

        # Existing barriers should be in the list
        barrier1.priority = BarrierPriority.objects.get(code="MEDIUM")
        barrier1.modified_by = user2
        barrier1.save()

        saved_search = SavedSearch.objects.get(pk=saved_search.pk)
        assert barrier1 in saved_search.new_barriers_since_notified
Example #5
0
    def test_changed_filter(self):
        url = f'{reverse("list-barriers")}?public_view=changed'
        barrier1 = BarrierFactory(
            public_barrier___public_view_status=PublicBarrierStatus.PUBLISHED,
            public_barrier__last_published_on="2020-08-01",
            priority="LOW",
            source="COMPANY",
        )
        barrier2 = BarrierFactory(
            public_barrier___public_view_status=PublicBarrierStatus.PUBLISHED,
            public_barrier__last_published_on="2020-08-01",
        )
        barrier3 = BarrierFactory(
            public_barrier___public_view_status=PublicBarrierStatus.PUBLISHED,
            public_barrier__last_published_on="2020-08-01",
        )
        CachedHistoryItem.objects.all().delete()

        # No barriers should have 'changed' since being published
        response = self.api_client.get(url)
        assert status.HTTP_200_OK == response.status_code
        assert 0 == response.data["count"]

        # Change some fields that do not affect the public barrier
        barrier1.source = "TRADE"
        barrier1.priority = BarrierPriority.objects.get(code="MEDIUM")
        barrier1.save()

        # No barriers should have 'changed' since being published
        response = self.api_client.get(url)
        assert status.HTTP_200_OK == response.status_code
        assert 0 == response.data["count"]

        # Change a field that does affect the public barrier
        barrier1.summary = "New summary"
        barrier1.save()

        # barrier1 should now be in the search results for changed barriers
        response = self.api_client.get(url)
        assert status.HTTP_200_OK == response.status_code
        assert 1 == response.data["count"]
        barrier_ids = set(
            [result["id"] for result in response.data["results"]])
        assert set([str(barrier1.id)]) == barrier_ids

        # Change a field that does affect the public barrier
        barrier2.sectors = ["9f38cecc-5f95-e211-a939-e4115bead28a"]
        barrier2.save()

        # barrier2 should now also be in the search results for changed barriers
        response = self.api_client.get(url)
        assert status.HTTP_200_OK == response.status_code
        assert 2 == response.data["count"]
        barrier_ids = set(
            [result["id"] for result in response.data["results"]])
        assert set([str(barrier1.id), str(barrier2.id)]) == barrier_ids
    def test_should_notify(self):
        barrier1 = BarrierFactory(priority="LOW")
        barrier2 = BarrierFactory(priority="MEDIUM")

        user = create_test_user(sso_user_id=self.sso_user_data_1["user_id"])

        saved_search = SavedSearch.objects.create(
            user=user,
            name="Medium",
            filters={"priority": ["MEDIUM"]},
        )
        saved_search.mark_as_notified()

        assert saved_search.should_notify() is False

        saved_search.notify_about_additions = True
        saved_search.save()
        assert saved_search.should_notify() is False

        # An addition to the saved search
        barrier1.priority = BarrierPriority.objects.get(code="MEDIUM")
        barrier1.save()

        saved_search = SavedSearch.objects.get(pk=saved_search.pk)
        assert saved_search.should_notify() is True

        saved_search.notify_about_additions = False
        saved_search.notify_about_updates = True
        saved_search.save()
        assert saved_search.should_notify() is False

        # An update to a barrier in search search
        barrier2.summary = "New summary"
        barrier2.save()
        saved_search = SavedSearch.objects.get(pk=saved_search.pk)
        assert saved_search.should_notify() is True

        saved_search.notify_about_additions = True
        saved_search.mark_as_notified()
        saved_search = SavedSearch.objects.get(pk=saved_search.pk)
        assert saved_search.should_notify() is False