|
8 | 8 |
|
9 | 9 | from django.core.management import call_command |
10 | 10 |
|
| 11 | +from nine.versions import DJANGO_GTE_1_10 |
| 12 | + |
11 | 13 | import pytest |
12 | 14 |
|
13 | 15 | from rest_framework import status |
|
23 | 25 | ) |
24 | 26 | from .data_mixins import AddressesMixin, BooksMixin |
25 | 27 |
|
| 28 | +if DJANGO_GTE_1_10: |
| 29 | + from django.urls import reverse |
| 30 | +else: |
| 31 | + from django.core.urlresolvers import reverse |
| 32 | + |
26 | 33 | __title__ = 'django_elasticsearch_dsl_drf.tests.test_filtering_post' |
27 | 34 | __author__ = 'Artur Barseghyan <[email protected]>' |
28 | 35 | __copyright__ = '2017-2018 Artur Barseghyan' |
@@ -472,7 +479,153 @@ def test_ids_filter(self): |
472 | 479 | # *********************************************************************** |
473 | 480 |
|
474 | 481 | # This is what's it's all about - the facets. |
475 | | - # TODO |
| 482 | + def _list_results_with_facets(self): |
| 483 | + """List results with facets.""" |
| 484 | + self.authenticate() |
| 485 | + |
| 486 | + url = reverse('bookdocument-list', kwargs={}) |
| 487 | + facet_state_url = url + '?facet=state' |
| 488 | + data = {} |
| 489 | + |
| 490 | + # ****************************************************************** |
| 491 | + # ************************ No args response ************************ |
| 492 | + # ****************************************************************** |
| 493 | + |
| 494 | + # Make request |
| 495 | + no_args_response = self.client.get(url, data) |
| 496 | + self.assertEqual(no_args_response.status_code, status.HTTP_200_OK) |
| 497 | + |
| 498 | + # Should contain 20 results |
| 499 | + self.assertEqual(len(no_args_response.data['results']), self.all_count) |
| 500 | + |
| 501 | + # Should contain 1 facets |
| 502 | + self.assertEqual(len(no_args_response.data['facets']), 1) |
| 503 | + |
| 504 | + # ****************************************************************** |
| 505 | + # ********************** With facets response ********************** |
| 506 | + # ****************************************************************** |
| 507 | + |
| 508 | + # Make request |
| 509 | + facet_state_response = self.client.get(facet_state_url, data) |
| 510 | + self.assertEqual(facet_state_response.status_code, status.HTTP_200_OK) |
| 511 | + |
| 512 | + # Should contain 20 results |
| 513 | + self.assertEqual( |
| 514 | + len(facet_state_response.data['results']), self.all_count |
| 515 | + ) |
| 516 | + |
| 517 | + # Should contain 2 facets |
| 518 | + self.assertEqual(len(facet_state_response.data['facets']), 2) |
| 519 | + |
| 520 | + self.assertIn('_filter_publisher', facet_state_response.data['facets']) |
| 521 | + self.assertIn( |
| 522 | + 'publisher', |
| 523 | + facet_state_response.data['facets']['_filter_publisher'] |
| 524 | + ) |
| 525 | + |
| 526 | + self.assertIn('_filter_state', facet_state_response.data['facets']) |
| 527 | + self.assertIn( |
| 528 | + 'state', |
| 529 | + facet_state_response.data['facets']['_filter_state'] |
| 530 | + ) |
| 531 | + self.assertIn( |
| 532 | + 'buckets', |
| 533 | + facet_state_response.data['facets']['_filter_state']['state'] |
| 534 | + ) |
| 535 | + # self.assertIn( |
| 536 | + # 'buckets', |
| 537 | + # facet_state_response.data['facets']['_filter_state']['state'] |
| 538 | + # ) |
| 539 | + self.assertIn( |
| 540 | + { |
| 541 | + "doc_count": 10, |
| 542 | + "key": "published" |
| 543 | + }, |
| 544 | + facet_state_response.data['facets'] |
| 545 | + ['_filter_state'] |
| 546 | + ['state'] |
| 547 | + ['buckets'] |
| 548 | + ) |
| 549 | + self.assertIn( |
| 550 | + { |
| 551 | + "doc_count": 10, |
| 552 | + "key": "in_progress" |
| 553 | + }, |
| 554 | + facet_state_response.data['facets'] |
| 555 | + ['_filter_state'] |
| 556 | + ['state'] |
| 557 | + ['buckets'] |
| 558 | + ) |
| 559 | + self.assertIn( |
| 560 | + { |
| 561 | + "doc_count": 7, |
| 562 | + "key": "rejected" |
| 563 | + }, |
| 564 | + facet_state_response.data['facets'] |
| 565 | + ['_filter_state'] |
| 566 | + ['state'] |
| 567 | + ['buckets'] |
| 568 | + ) |
| 569 | + |
| 570 | + # ****************************************************************** |
| 571 | + # ******************* With facets filtered response **************** |
| 572 | + # ****************************************************************** |
| 573 | + |
| 574 | + facet_state_filered_url = url + '?facet=state&state=published' |
| 575 | + # Make request |
| 576 | + facet_state_filtered_response = self.client.get( |
| 577 | + facet_state_filered_url, |
| 578 | + data |
| 579 | + ) |
| 580 | + self.assertEqual( |
| 581 | + facet_state_filtered_response.status_code, |
| 582 | + status.HTTP_200_OK |
| 583 | + ) |
| 584 | + |
| 585 | + # Should contain 20 results |
| 586 | + self.assertEqual( |
| 587 | + len(facet_state_filtered_response.data['results']), |
| 588 | + self.published_count |
| 589 | + ) |
| 590 | + |
| 591 | + # Should contain 2 facets |
| 592 | + self.assertEqual(len(facet_state_filtered_response.data['facets']), 2) |
| 593 | + |
| 594 | + # Still same facets |
| 595 | + self.assertIn( |
| 596 | + { |
| 597 | + "doc_count": 10, |
| 598 | + "key": "published" |
| 599 | + }, |
| 600 | + facet_state_response.data['facets'] |
| 601 | + ['_filter_state'] |
| 602 | + ['state'] |
| 603 | + ['buckets'] |
| 604 | + ) |
| 605 | + self.assertIn( |
| 606 | + { |
| 607 | + "doc_count": 10, |
| 608 | + "key": "in_progress" |
| 609 | + }, |
| 610 | + facet_state_response.data['facets'] |
| 611 | + ['_filter_state'] |
| 612 | + ['state'] |
| 613 | + ['buckets'] |
| 614 | + ) |
| 615 | + self.assertIn( |
| 616 | + { |
| 617 | + "doc_count": 7, |
| 618 | + "key": "rejected" |
| 619 | + }, |
| 620 | + facet_state_response.data['facets'] |
| 621 | + ['_filter_state'] |
| 622 | + ['state'] |
| 623 | + ['buckets'] |
| 624 | + ) |
| 625 | + |
| 626 | + def test_list_results_with_facets(self): |
| 627 | + """Test list results with facets.""" |
| 628 | + return self._list_results_with_facets() |
476 | 629 |
|
477 | 630 | # *********************************************************************** |
478 | 631 | # ************************* Other fields ******************************** |
|
0 commit comments