|
55 | 55 | from pyatlan.model.group import GroupRequest
|
56 | 56 | from pyatlan.model.lineage import LineageListRequest
|
57 | 57 | from pyatlan.model.response import AssetMutationResponse
|
58 |
| -from pyatlan.model.search import Bool, Term, TermAttributes |
| 58 | +from pyatlan.model.search import DSL, Bool, IndexSearchRequest, Term, TermAttributes |
59 | 59 | from pyatlan.model.search_log import SearchLogRequest
|
60 | 60 | from pyatlan.model.typedef import EnumDef
|
61 | 61 | from pyatlan.model.user import AtlanUser, UserRequest
|
@@ -1606,7 +1606,7 @@ def test_index_search_with_no_aggregation_results(
|
1606 | 1606 | mock_api_caller.reset_mock()
|
1607 | 1607 |
|
1608 | 1608 |
|
1609 |
| -def test_type_name_in_asset_search(mock_api_caller): |
| 1609 | +def test_type_name_in_asset_search_bool_filter(mock_api_caller): |
1610 | 1610 | # When the type name is not present in the request
|
1611 | 1611 | request = (FluentSearch().where(CompoundQuery.active_assets())).to_request()
|
1612 | 1612 | client = AssetClient(mock_api_caller)
|
@@ -1656,6 +1656,58 @@ def test_type_name_in_asset_search(mock_api_caller):
|
1656 | 1656 | assert has_type_filter is False
|
1657 | 1657 |
|
1658 | 1658 |
|
| 1659 | +def test_type_name_in_asset_search_bool_must(mock_api_caller): |
| 1660 | + # When the type name is not present in the request |
| 1661 | + query = Bool(must=[Term.with_state("ACTIVE")]) |
| 1662 | + request = IndexSearchRequest(dsl=DSL(query=query)) |
| 1663 | + |
| 1664 | + client = AssetClient(mock_api_caller) |
| 1665 | + client._ensure_type_filter_present(request) |
| 1666 | + |
| 1667 | + assert request.dsl.query and request.dsl.query.must |
| 1668 | + assert isinstance(request.dsl.query.must, list) |
| 1669 | + |
| 1670 | + has_type_filter = any( |
| 1671 | + isinstance(f, Term) and f.field == TermAttributes.SUPER_TYPE_NAMES.value |
| 1672 | + for f in request.dsl.query.must |
| 1673 | + ) |
| 1674 | + assert has_type_filter is True |
| 1675 | + |
| 1676 | + # When the type name is present in the request (no need to add super type filter) |
| 1677 | + query = Bool(must=[Term.with_state("ACTIVE"), Term.with_type_name("AtlasGlossary")]) |
| 1678 | + request = IndexSearchRequest(dsl=DSL(query=query)) |
| 1679 | + client._ensure_type_filter_present(request) |
| 1680 | + |
| 1681 | + assert request.dsl.query and request.dsl.query.must |
| 1682 | + assert isinstance(request.dsl.query.must, list) |
| 1683 | + |
| 1684 | + has_type_filter = any( |
| 1685 | + isinstance(f, Term) and f.field == TermAttributes.SUPER_TYPE_NAMES.value |
| 1686 | + for f in request.dsl.query.must |
| 1687 | + ) |
| 1688 | + assert has_type_filter is False |
| 1689 | + |
| 1690 | + # When multiple type name(s) is present in the request (no need to add super type filter) |
| 1691 | + query = Bool( |
| 1692 | + must=[ |
| 1693 | + Term.with_state("ACTIVE"), |
| 1694 | + Term.with_type_name("AtlasGlossary"), |
| 1695 | + Term.with_type_name("AtlasGlossaryTerm"), |
| 1696 | + ] |
| 1697 | + ) |
| 1698 | + request = IndexSearchRequest(dsl=DSL(query=query)) |
| 1699 | + client._ensure_type_filter_present(request) |
| 1700 | + |
| 1701 | + assert request.dsl.query and request.dsl.query.must |
| 1702 | + assert isinstance(request.dsl.query.must, list) |
| 1703 | + |
| 1704 | + has_type_filter = any( |
| 1705 | + isinstance(f, Term) and f.field == TermAttributes.SUPER_TYPE_NAMES.value |
| 1706 | + for f in request.dsl.query.must |
| 1707 | + ) |
| 1708 | + assert has_type_filter is False |
| 1709 | + |
| 1710 | + |
1659 | 1711 | def _assert_search_results(results, response_json, sorts, bulk=False):
|
1660 | 1712 | for i, result in enumerate(results):
|
1661 | 1713 | assert result and response_json["entities"][i]
|
|
0 commit comments