diff --git a/Makefile b/Makefile index adff3746..baf412dd 100644 --- a/Makefile +++ b/Makefile @@ -59,3 +59,25 @@ test: test_with_es ## run tests and generate coverage report install-local: ## installs your local edx-search into the LMS and CMS python virtualenvs docker exec -t edx.devstack.lms bash -c '. /edx/app/edxapp/venvs/edxapp/bin/activate && cd /edx/app/edxapp/edx-platform && pip uninstall -y edx-search && pip install -e /edx/src/edx-search && pip freeze | grep edx-search' docker exec -t edx.devstack.cms bash -c '. /edx/app/edxapp/venvs/edxapp/bin/activate && cd /edx/app/edxapp/edx-platform && pip uninstall -y edx-search && pip install -e /edx/src/edx-search && pip freeze | grep edx-search' + +test-meili: meili-up + @echo "Running Meilisearch tests..." + @MEILISEARCH_MASTER_KEY=test_master_key \ + MEILISEARCH_URL=http://localhost:7700 \ + pytest -v \ + search/tests/test_meilisearch.py \ + search/tests/test_course_discovery.py -k Meilisearch \ + search/tests/test_course_discovery_views.py -k Meilisearch || true + @$(MAKE) meili-down + +meili-up: + @echo "Starting Meilisearch..." + @docker compose up -d test_meilisearch + @echo "Waiting for Meilisearch to be healthy..." + @timeout 15 bash -c \ + 'until curl -sf http://localhost:7700/health > /dev/null; do echo "Waiting..."; sleep 1; done' + + +meili-down: + @echo "Shutting down Meilisearch..." + @docker compose down -v test_meilisearch diff --git a/docker-compose.yml b/docker-compose.yml index 2be4003b..ff4cd4b4 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -19,6 +19,22 @@ services: ports: - "9200:9200" + test_meilisearch: + image: getmeili/meilisearch:v1.7 + container_name: test_meilisearch + ports: + - "7700:7700" + environment: + MEILISEARCH_MASTER_KEY: test_master_key + MEILISEARCH_URL: http://localhost:7700 + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost:7700/health"] + interval: 2s + timeout: 1s + retries: 10 + +version: '3.8' + volumes: data01: driver: local diff --git a/edxsearch/settings.py b/edxsearch/settings.py index e200eaff..d414fcbc 100644 --- a/edxsearch/settings.py +++ b/edxsearch/settings.py @@ -26,7 +26,7 @@ # This is just a container for running tests DEBUG = True -ALLOWED_HOSTS = [] +ALLOWED_HOSTS = ['testserver', 'localhost', '127.0.0.1'] TEMPLATES = [ { @@ -128,3 +128,6 @@ } } } + +MEILISEARCH_API_KEY = os.environ.get("MEILISEARCH_MASTER_KEY", "test_master_key") +MEILISEARCH_URL = os.environ.get("MEILISEARCH_URL", "http://meilisearch") diff --git a/search/api.py b/search/api.py index 43d2ed18..233f8414 100644 --- a/search/api.py +++ b/search/api.py @@ -122,7 +122,7 @@ def emit_api_timing_event(search_term, course_id, filter_generation_timer, proce }) -def course_discovery_search(search_term=None, size=20, from_=0, field_dictionary=None): +def course_discovery_search(search_term=None, size=20, from_=0, field_dictionary=None, is_multivalue=False): """ Course Discovery activities against the search engine index of course details """ @@ -155,6 +155,7 @@ def course_discovery_search(search_term=None, size=20, from_=0, field_dictionary filter_dictionary={"enrollment_end": DateRange(datetime.utcnow(), None)}, exclude_dictionary=exclude_dictionary, aggregation_terms=course_discovery_aggregations(), + is_multivalue=is_multivalue, ) return results diff --git a/search/elastic.py b/search/elastic.py index 6a942ce5..e707f01c 100644 --- a/search/elastic.py +++ b/search/elastic.py @@ -22,7 +22,7 @@ RESERVED_CHARACTERS = "+=>