Skip to content

Commit defd53e

Browse files
authored
Merge pull request #63 from ministryofjustice/dpl-3280-service-layer-tests
Dpl 3280 service layer tests
2 parents 64ab1dc + 48d9493 commit defd53e

File tree

3 files changed

+103
-30
lines changed

3 files changed

+103
-30
lines changed

tests/conftest.py

+47-5
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,18 @@
33

44
import pytest
55
from data_platform_catalogue.client import BaseCatalogueClient
6-
from data_platform_catalogue.search_types import (FacetOption, ResultType,
7-
SearchFacets, SearchResponse,
8-
SearchResult)
6+
from data_platform_catalogue.search_types import (
7+
FacetOption,
8+
ResultType,
9+
SearchFacets,
10+
SearchResponse,
11+
SearchResult,
12+
)
913
from django.test import Client
1014
from faker import Faker
15+
from home.service.search import SearchService
16+
from home.service.details import DetailsService
17+
from home.forms.search import SearchForm
1118

1219
fake = Faker()
1320

@@ -59,7 +66,8 @@ def mock_catalogue():
5966
mock_catalogue = MagicMock(spec=BaseCatalogueClient)
6067
mock_fn.return_value = mock_catalogue
6168
mock_search_response(
62-
mock_catalogue, page_results=generate_page(), total_results=100)
69+
mock_catalogue, page_results=generate_page(), total_results=100
70+
)
6371
mock_search_facets_response(mock_catalogue, domains=generate_options())
6472

6573
yield mock_catalogue
@@ -69,10 +77,44 @@ def mock_catalogue():
6977

7078
def mock_search_response(mock_catalogue, total_results=0, page_results=()):
7179
search_response = SearchResponse(
72-
total_results=total_results, page_results=page_results)
80+
total_results=total_results, page_results=page_results
81+
)
7382
mock_catalogue.search.return_value = search_response
7483

7584

7685
def mock_search_facets_response(mock_catalogue, domains):
7786
mock_catalogue.search_facets.return_value = SearchFacets(
7887
{"domains": domains})
88+
89+
90+
@pytest.fixture
91+
def valid_form():
92+
valid_form = SearchForm(
93+
data={
94+
"query": "test",
95+
"domains": ["urn:li:domain:HMCTS"],
96+
"sort": "ascending",
97+
"clear_filter": False,
98+
"clear_label": False,
99+
}
100+
)
101+
assert valid_form.is_valid()
102+
103+
return valid_form
104+
105+
106+
@pytest.fixture
107+
def search_context(valid_form):
108+
search_service = SearchService(form=valid_form, page="1")
109+
context = search_service._get_context()
110+
return context
111+
112+
113+
@pytest.fixture
114+
def detail_context(mock_catalogue):
115+
mock_catalogue.search.return_value = SearchResponse(
116+
total_results=1, page_results=generate_page(page_size=1)
117+
)
118+
details_service = DetailsService(urn="urn:li:dataProduct:test")
119+
context = details_service._get_context()
120+
return context

tests/test_forms.py

+14-25
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,4 @@
11
from home.forms.search import SearchForm
2-
import pytest
3-
4-
5-
@pytest.fixture
6-
def valid_form():
7-
valid_form = SearchForm(
8-
data={
9-
"query": "test",
10-
"domains": ["urn:li:domain:HMCTS"],
11-
"sort": "ascending",
12-
"clear_filter": False,
13-
"clear_label": False,
14-
}
15-
)
16-
assert valid_form.is_valid()
17-
18-
return valid_form
192

203

214
class TestSearchForm:
@@ -33,15 +16,21 @@ def test_all_fields_nullable(self):
3316
assert SearchForm(data={}).is_valid()
3417

3518
def test_form_encode_without_filter_for_one_filter(self, valid_form):
36-
assert (valid_form.encode_without_filter("urn:li:domain:HMCTS") ==
37-
"?query=test&sort=ascending&clear_filter=False&clear_label=False")
19+
assert (
20+
valid_form.encode_without_filter("urn:li:domain:HMCTS")
21+
== "?query=test&sort=ascending&clear_filter=False&clear_label=False"
22+
)
3823

3924
def test_form_encode_without_filter_for_two_filters(self):
40-
two_filter_form = SearchForm(data={
41-
"query": "test",
42-
"domains": ["urn:li:domain:HMCTS", "urn:li:domain:HMPPS"]
43-
})
25+
two_filter_form = SearchForm(
26+
data={
27+
"query": "test",
28+
"domains": ["urn:li:domain:HMCTS", "urn:li:domain:HMPPS"],
29+
}
30+
)
4431
two_filter_form.is_valid()
4532

46-
assert (two_filter_form.encode_without_filter("urn:li:domain:HMCTS") ==
47-
"?query=test&domains=urn%3Ali%3Adomain%3AHMPPS&sort=&clear_filter=False&clear_label=False")
33+
assert (
34+
two_filter_form.encode_without_filter("urn:li:domain:HMCTS")
35+
== "?query=test&domains=urn%3Ali%3Adomain%3AHMPPS&sort=&clear_filter=False&clear_label=False"
36+
)

tests/test_services.py

+42
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
from types import GeneratorType
2+
from data_platform_catalogue.search_types import ResultType
3+
4+
5+
class TestSearchService:
6+
def test_get_context_form(self, valid_form, search_context):
7+
assert search_context["form"] == valid_form
8+
9+
def test_get_context_search_result(self, mock_catalogue, search_context):
10+
assert search_context["results"] == mock_catalogue.search(
11+
).page_results
12+
assert search_context["total_results"] == 100
13+
14+
def test_get_context_paginator(self, search_context):
15+
assert search_context["page_obj"].number == 1
16+
assert isinstance(search_context["page_range"], GeneratorType)
17+
assert search_context["paginator"].num_pages == 5
18+
19+
def test_get_context_page_title(self, search_context):
20+
assert search_context["page_title"] == 'Search for "test" - Data catalogue'
21+
22+
def test_get_context_label_clear_href(self, search_context):
23+
assert search_context["label_clear_href"] == {
24+
"HMCTS": "?query=test&sort=ascending&clear_filter=False&clear_label=False"
25+
}
26+
27+
28+
class TestDetailsService:
29+
def test_get_context(self, detail_context, mock_catalogue):
30+
assert detail_context["result"] == mock_catalogue.search(
31+
).page_results[0]
32+
result_type = (
33+
"Data product"
34+
if mock_catalogue.search().page_results[0].result_type
35+
== ResultType.DATA_PRODUCT
36+
else "Table"
37+
)
38+
assert detail_context["result_type"] == result_type
39+
assert (
40+
detail_context["page_title"]
41+
== f"{mock_catalogue.search().page_results[0].name} - Data catalogue"
42+
)

0 commit comments

Comments
 (0)