|
6 | 6 | from django_dynamic_fixture import G
|
7 | 7 |
|
8 | 8 | from readthedocs.builds.models import Version
|
9 |
| -from readthedocs.projects.constants import PUBLIC |
| 9 | +from readthedocs.projects.constants import ( |
| 10 | + MKDOCS, |
| 11 | + MKDOCS_HTML, |
| 12 | + PUBLIC, |
| 13 | + SPHINX, |
| 14 | + SPHINX_HTMLDIR, |
| 15 | + SPHINX_SINGLEHTML, |
| 16 | +) |
10 | 17 | from readthedocs.projects.models import HTMLFile, Project
|
11 | 18 | from readthedocs.search.api import PageSearchAPIView
|
12 | 19 | from readthedocs.search.documents import PageDocument
|
@@ -324,6 +331,114 @@ def test_doc_search_hidden_versions(self, api_client, all_projects):
|
324 | 331 | first_result = data[0]
|
325 | 332 | assert first_result['project'] == subproject.slug
|
326 | 333 |
|
| 334 | + @pytest.mark.parametrize('doctype', [SPHINX, SPHINX_SINGLEHTML, MKDOCS_HTML]) |
| 335 | + def test_search_correct_link_for_normal_page_html_projects(self, api_client, doctype): |
| 336 | + project = Project.objects.get(slug='docs') |
| 337 | + project.versions.update(documentation_type=doctype) |
| 338 | + version = project.versions.all().first() |
| 339 | + |
| 340 | + search_params = { |
| 341 | + 'project': project.slug, |
| 342 | + 'version': version.slug, |
| 343 | + 'q': 'Support', |
| 344 | + } |
| 345 | + resp = self.get_search(api_client, search_params) |
| 346 | + assert resp.status_code == 200 |
| 347 | + |
| 348 | + result = resp.data['results'][0] |
| 349 | + assert result['project'] == project.slug |
| 350 | + assert result['link'].endswith('en/latest/support.html') |
| 351 | + |
| 352 | + @pytest.mark.parametrize('doctype', [SPHINX, SPHINX_SINGLEHTML, MKDOCS_HTML]) |
| 353 | + def test_search_correct_link_for_index_page_html_projects(self, api_client, doctype): |
| 354 | + project = Project.objects.get(slug='docs') |
| 355 | + project.versions.update(documentation_type=doctype) |
| 356 | + version = project.versions.all().first() |
| 357 | + |
| 358 | + search_params = { |
| 359 | + 'project': project.slug, |
| 360 | + 'version': version.slug, |
| 361 | + 'q': 'Some content from index', |
| 362 | + } |
| 363 | + resp = self.get_search(api_client, search_params) |
| 364 | + assert resp.status_code == 200 |
| 365 | + |
| 366 | + result = resp.data['results'][0] |
| 367 | + assert result['project'] == project.slug |
| 368 | + assert result['link'].endswith('en/latest/index.html') |
| 369 | + |
| 370 | + @pytest.mark.parametrize('doctype', [SPHINX, SPHINX_SINGLEHTML, MKDOCS_HTML]) |
| 371 | + def test_search_correct_link_for_index_page_subdirectory_html_projects(self, api_client, doctype): |
| 372 | + project = Project.objects.get(slug='docs') |
| 373 | + project.versions.update(documentation_type=doctype) |
| 374 | + version = project.versions.all().first() |
| 375 | + |
| 376 | + search_params = { |
| 377 | + 'project': project.slug, |
| 378 | + 'version': version.slug, |
| 379 | + 'q': 'Some content from guides/index', |
| 380 | + } |
| 381 | + resp = self.get_search(api_client, search_params) |
| 382 | + assert resp.status_code == 200 |
| 383 | + |
| 384 | + result = resp.data['results'][0] |
| 385 | + assert result['project'] == project.slug |
| 386 | + assert result['link'].endswith('en/latest/guides/index.html') |
| 387 | + |
| 388 | + @pytest.mark.parametrize('doctype', [SPHINX_HTMLDIR, MKDOCS]) |
| 389 | + def test_search_correct_link_for_normal_page_htmldir_projects(self, api_client, doctype): |
| 390 | + project = Project.objects.get(slug='docs') |
| 391 | + project.versions.update(documentation_type=doctype) |
| 392 | + version = project.versions.all().first() |
| 393 | + |
| 394 | + search_params = { |
| 395 | + 'project': project.slug, |
| 396 | + 'version': version.slug, |
| 397 | + 'q': 'Support', |
| 398 | + } |
| 399 | + resp = self.get_search(api_client, search_params) |
| 400 | + assert resp.status_code == 200 |
| 401 | + |
| 402 | + result = resp.data['results'][0] |
| 403 | + assert result['project'] == project.slug |
| 404 | + assert result['link'].endswith('en/latest/support.html') |
| 405 | + |
| 406 | + @pytest.mark.parametrize('doctype', [SPHINX_HTMLDIR, MKDOCS]) |
| 407 | + def test_search_correct_link_for_index_page_htmldir_projects(self, api_client, doctype): |
| 408 | + project = Project.objects.get(slug='docs') |
| 409 | + project.versions.update(documentation_type=doctype) |
| 410 | + version = project.versions.all().first() |
| 411 | + |
| 412 | + search_params = { |
| 413 | + 'project': project.slug, |
| 414 | + 'version': version.slug, |
| 415 | + 'q': 'Some content from index', |
| 416 | + } |
| 417 | + resp = self.get_search(api_client, search_params) |
| 418 | + assert resp.status_code == 200 |
| 419 | + |
| 420 | + result = resp.data['results'][0] |
| 421 | + assert result['project'] == project.slug |
| 422 | + assert result['link'].endswith('en/latest/') |
| 423 | + |
| 424 | + @pytest.mark.parametrize('doctype', [SPHINX_HTMLDIR, MKDOCS]) |
| 425 | + def test_search_correct_link_for_index_page_subdirectory_htmldir_projects(self, api_client, doctype): |
| 426 | + project = Project.objects.get(slug='docs') |
| 427 | + project.versions.update(documentation_type=doctype) |
| 428 | + version = project.versions.all().first() |
| 429 | + |
| 430 | + search_params = { |
| 431 | + 'project': project.slug, |
| 432 | + 'version': version.slug, |
| 433 | + 'q': 'Some content from guides/index', |
| 434 | + } |
| 435 | + resp = self.get_search(api_client, search_params) |
| 436 | + assert resp.status_code == 200 |
| 437 | + |
| 438 | + result = resp.data['results'][0] |
| 439 | + assert result['project'] == project.slug |
| 440 | + assert result['link'].endswith('en/latest/guides/') |
| 441 | + |
327 | 442 |
|
328 | 443 | class TestDocumentSearch(BaseTestDocumentSearch):
|
329 | 444 |
|
|
0 commit comments