Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
124 changes: 124 additions & 0 deletions contentcuration/search/tests/test_savesearch.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,124 @@
import uuid

from django.urls import reverse
from search.models import SavedSearch

from contentcuration.tests import testdata
from contentcuration.tests.base import StudioAPITestCase
from contentcuration.tests.viewsets.base import generate_create_event
from contentcuration.tests.viewsets.base import generate_delete_event
from contentcuration.tests.viewsets.base import SyncTestMixin
from contentcuration.viewsets.sync.constants import SAVEDSEARCH


class SavedSearchViewsetTestCase(SyncTestMixin, StudioAPITestCase):

@property
def savedsearch_metadata(self):
return {
"id": uuid.uuid4().hex,
"name": "test",
"params": {"lang": "en", "keyword": "test"},
}

@property
def savedsearch_db_metadata(self):
return {
"id": uuid.uuid4().hex,
"name": "test",
"params": {"lang": "en", "keyword": "test"},
"saved_by": self.user,
}

def setUp(self):
super(SavedSearchViewsetTestCase, self).setUp()
self.user = testdata.user()
self.client.force_authenticate(user=self.user)

def test_create_savedsearch(self):
savedsearch = self.savedsearch_metadata
response = self.sync_changes(
[generate_create_event(savedsearch["id"], SAVEDSEARCH, savedsearch, user_id=self.user.id)],
)
self.assertEqual(response.status_code, 200, response.content)
try:
SavedSearch.objects.get(id=uuid.UUID(savedsearch["id"]))
except SavedSearch.DoesNotExist:
self.fail("SavedSearch was not created")

def test_create_savedsearchs(self):
savedsearch1 = self.savedsearch_metadata
savedsearch2 = self.savedsearch_metadata
response = self.sync_changes(
[
generate_create_event(savedsearch1["id"], SAVEDSEARCH, savedsearch1, user_id=self.user.id),
generate_create_event(savedsearch2["id"], SAVEDSEARCH, savedsearch2, user_id=self.user.id),
],
)
self.assertEqual(response.status_code, 200, response.content)
try:
SavedSearch.objects.get(id=uuid.UUID(savedsearch1["id"]))
except SavedSearch.DoesNotExist:
self.fail("SavedSearch 1 was not created")

try:
SavedSearch.objects.get(id=uuid.UUID(savedsearch2["id"]))
except SavedSearch.DoesNotExist:
self.fail("SavedSearch 2 was not created")

def test_delete_savedsearch(self):

savedsearch = SavedSearch.objects.create(**self.savedsearch_db_metadata)

response = self.sync_changes(
[generate_delete_event(savedsearch.id, SAVEDSEARCH, user_id=self.user.id)],
)
self.assertEqual(response.status_code, 200, response.content)
try:
SavedSearch.objects.get(id=uuid.UUID(savedsearch.id))
self.fail("SavedSearch was not deleted")
except SavedSearch.DoesNotExist:
pass

def test_delete_savedsearchs(self):
savedsearch1 = SavedSearch.objects.create(**self.savedsearch_db_metadata)

savedsearch2 = SavedSearch.objects.create(**self.savedsearch_db_metadata)

response = self.sync_changes(
[
generate_delete_event(savedsearch1.id, SAVEDSEARCH, user_id=self.user.id),
generate_delete_event(savedsearch2.id, SAVEDSEARCH, user_id=self.user.id),
],
)
self.assertEqual(response.status_code, 200, response.content)
try:
SavedSearch.objects.get(id=uuid.UUID(savedsearch1.id))
self.fail("SavedSearch 1 was not deleted")
except SavedSearch.DoesNotExist:
pass

try:
SavedSearch.objects.get(id=uuid.UUID(savedsearch2.id))
self.fail("SavedSearch 2 was not deleted")
except SavedSearch.DoesNotExist:
pass

def test_retrieve_savedsearch(self):
savedsearch = SavedSearch.objects.create(**self.savedsearch_db_metadata)

response = self.client.get(reverse("savedsearch-detail", kwargs={"pk": savedsearch.id}))
self.assertEqual(response.status_code, 200, response.content)
self.assertEqual(response.data["id"], savedsearch.id)

def test_list_savedsearch(self):
savedsearch1 = SavedSearch.objects.create(**self.savedsearch_db_metadata)
savedsearch2 = SavedSearch.objects.create(**self.savedsearch_db_metadata)

response = self.client.get(reverse("savedsearch-list"))
self.assertEqual(response.status_code, 200, response.content)
self.assertEqual(len(response.data), 2)
sorted_response_data = sorted(response.data, key=lambda x: x["id"])
sorted_expected_data = sorted([savedsearch1, savedsearch2], key=lambda x: x.id)
self.assertEqual(sorted_response_data[0]["id"], sorted_expected_data[0].id)
self.assertEqual(sorted_response_data[1]["id"], sorted_expected_data[1].id)
12 changes: 3 additions & 9 deletions contentcuration/search/viewsets/savedsearch.py
Original file line number Diff line number Diff line change
@@ -1,15 +1,13 @@
from rest_framework.permissions import IsAuthenticated
from rest_framework.serializers import PrimaryKeyRelatedField
from rest_framework.serializers import UUIDField
from search.models import SavedSearch

from contentcuration.models import User
from contentcuration.viewsets.base import BulkListSerializer
from contentcuration.viewsets.base import BulkModelSerializer
from contentcuration.viewsets.base import ValuesViewset


class SavedSearchSerializer(BulkModelSerializer):
saved_by = PrimaryKeyRelatedField(queryset=User.objects.all())
id = UUIDField(format="hex")

def create(self, validated_data):
if "request" in self.context:
Expand All @@ -23,12 +21,8 @@ class Meta:
fields = (
"id",
"name",
"created",
"modified",
"params",
"saved_by",
)
list_serializer_class = BulkListSerializer


class SavedSearchViewSet(ValuesViewset):
Expand All @@ -45,7 +39,7 @@ class SavedSearchViewSet(ValuesViewset):
)

field_map = {
"id": lambda x: x["id"].replace("-", ""),
"id": lambda x: x["id"].hex,
}

def get_queryset(self):
Expand Down