search function basics

This commit is contained in:
Sam
2021-02-03 14:20:55 +00:00
parent ae043b24fc
commit ea8cd97baf
3 changed files with 74 additions and 0 deletions

View File

@@ -2,8 +2,10 @@ import random
import string
import json
import datetime
from urllib.parse import quote
from django.utils import timezone
from django.test import TestCase
from rest_framework.test import APITestCase
from rest_framework import status
@@ -334,3 +336,35 @@ class LoadCoopProductsTestCase(APITestCase):
# check for object creation
self.assertEqual(0, self.model.objects.count())
class ProductSearchTest(TestCase):
def setUp(self):
"""Tests setup
"""
self.endpoint = '/api/v1/search_products/'
self.model = Product
self.factory = ProductFactory
# create admin user
self.admin_email = f"admin_user@mail.com"
self.password = ''.join(random.choices(string.ascii_uppercase, k = 10))
self.admin_user = CustomUserFactory(email=self.admin_email, password=self.password, is_staff=True, is_active=True)
# create regular user
self.reg_email = f"user@mail.com"
self.user = CustomUserFactory(email=self.reg_email, is_active=True)
self.user.set_password(self.password)
self.user.save()
def test_anon_user_can_search(self):
query_string = quote("zapatos rojos")
url = f"{self.endpoint}?query_string={query_string}"
# send in request
response = self.client.get(url)
import ipdb; ipdb.set_trace()
# check re sponse
self.assertEqual(response.status_code, 200)
# check for object creation
self.assertEquals(5, self.model.objects.count())

View File

@@ -100,3 +100,42 @@ def load_coop_products(request):
return Response({"errors": {"details": str(type(e))}})
@api_view(['GET',]) # include allowed methods
def product_search(request):
"""
Takes a string of data, return relevant products
"""
query_string = request.GET.get('query_string', None)
if query_string is None:
return Response({"errors": {"details": "No query string to parse"}})
try:
chunks = query_string.split(' ')
result_set = set()
import ipdb; ipdb.set_trace()
for chunk in chunks:
import ipdb; ipdb.set_trace()
# search in name
products = Product.objects.filter(name__in=chunk)
for item in products:
result_set.add(item)
# search in description
products = Product.objects.filter(description__in=chunk)
for item in products:
result_set.add(item)
# search in tags
products = Product.objects.filter(tags__in=chunk)
for item in products:
result_set.add(item)
# search in category
products = Product.objects.filter(category__in=chunk)
for item in products:
result_set.add(item)
# search in attributes
products = Product.objects.filter(attributes__in=chunk)
for item in products:
result_set.add(item)
return Response(data=result_set)
except Exception as e:
return Response({"errors": {"details": str(type(e))}})