Beispiel #1
0
def test_investment_project_syncs_when_team_member_adviser_changes(
        setup_es, team_member):
    """
    Tests that when an adviser that is a team member of an investment project is updated,
    the related investment project is resynced.
    """
    adviser = team_member.adviser

    adviser.dit_team = TeamFactory()
    adviser.save()

    setup_es.indices.refresh()

    result = get_search_by_entity_query(
        term='',
        filter_data={
            'id': team_member.investment_project.pk
        },
        entity=InvestmentProject,
    ).execute()

    assert result.hits.total == 1
    assert result.hits[0]['team_members'][0]['dit_team']['id'] == str(
        adviser.dit_team.id)
    assert result.hits[0]['team_members'][0]['dit_team'][
        'name'] == adviser.dit_team.name
def test_investment_project_team_member_deleted_sync_to_es(es_with_signals, team_member):
    """Tests if investment project gets synced to Elasticsearch when a team member is deleted."""
    team_member.delete()
    es_with_signals.indices.refresh()

    results = get_search_by_entity_query(
        InvestmentProject,
        term='',
        filter_data={},
    ).execute()

    assert len(results) == 1
    result = results[0]

    assert len(result['team_members']) == 0
def test_investment_project_auto_updates_to_es(es_with_signals):
    """Tests if investment project gets synced to Elasticsearch."""
    project = InvestmentProjectFactory()
    new_test_name = 'even_harder_to_find_investment_project'
    project.name = new_test_name
    project.save()
    es_with_signals.indices.refresh()

    result = get_search_by_entity_query(
        InvestmentProject,
        term='',
        filter_data={'name': new_test_name},
    ).execute()

    assert result.hits.total == 1
def test_investment_project_auto_sync_to_es(es_with_signals):
    """Tests if investment project gets synced to Elasticsearch."""
    test_name = 'very_hard_to_find_project'
    InvestmentProjectFactory(
        name=test_name,
    )
    es_with_signals.indices.refresh()

    result = get_search_by_entity_query(
        InvestmentProject,
        term='',
        filter_data={'name': test_name},
    ).execute()

    assert result.hits.total == 1
Beispiel #5
0
def test_investment_project_team_member_added_sync_to_es(
        setup_es, team_member):
    """Tests if investment project gets synced to Elasticsearch when a team member is added."""
    setup_es.indices.refresh()

    results = get_search_by_entity_query(
        term='',
        filter_data={},
        entity=InvestmentProject,
    ).execute()

    assert len(results) == 1
    result = results[0]

    assert len(result['team_members']) == 1
    assert result['team_members'][0]['id'] == str(team_member.adviser.id)
Beispiel #6
0
    def get_base_query(self, request, validated_data):
        """Gets a filtered Elasticsearch query for the provided search parameters."""
        filter_data = self._get_filter_data(validated_data)
        permission_filters = self.search_app.get_permission_filters(request)
        ordering = _map_es_ordering(validated_data['sortby'], self.es_sort_by_remappings)

        return get_search_by_entity_query(
            self.search_app.es_model,
            term=validated_data['original_query'],
            filter_data=filter_data,
            composite_field_mapping=self.COMPOSITE_FILTERS,
            permission_filters=permission_filters,
            ordering=ordering,
            fields_to_include=self.fields_to_include,
            fields_to_exclude=self.fields_to_exclude,
        )
def test_investment_project_team_member_updated_sync_to_es(es_with_signals, team_member):
    """Tests if investment project gets synced to Elasticsearch when a team member is updated."""
    new_adviser = AdviserFactory()
    team_member.adviser = new_adviser
    team_member.save()
    es_with_signals.indices.refresh()

    results = get_search_by_entity_query(
        InvestmentProject,
        term='',
        filter_data={},
    ).execute()

    assert len(results) == 1
    result = results[0]

    assert len(result['team_members']) == 1
    assert result['team_members'][0]['id'] == str(new_adviser.id)
Beispiel #8
0
    def get_base_query(self, request, validated_data):
        """Gets a filtered Elasticsearch query for the provided search parameters."""
        filter_data = self._get_filter_data(validated_data)
        permission_filters = self.search_app.get_permission_filters(request)

        aggregation_fields = (self.REMAP_FIELDS.get(field, field)
                              for field in self.FILTER_FIELDS
                              ) if self.include_aggregations else None

        return get_search_by_entity_query(
            entity=self.entity,
            term=validated_data['original_query'],
            filter_data=filter_data,
            composite_field_mapping=self.COMPOSITE_FILTERS,
            permission_filters=permission_filters,
            ordering=validated_data['sortby'],
            aggregation_fields=aggregation_fields,
        )
Beispiel #9
0
def _get_objects(request, limit, search_app, adviser_field):
    if not has_permissions_for_app(request, search_app):
        return []

    query = get_search_by_entity_query(
        term='',
        entity=search_app.es_model,
        filter_data={
            adviser_field: request.user.id,
            'created_on_exists': True,
        },
        ordering='created_on:desc',
    )
    results = limit_search_query(
        query,
        offset=0,
        limit=limit,
    ).execute()

    return [result.to_dict() for result in results.hits]
def test_investment_project_syncs_when_adviser_changes(es_with_signals, field):
    """
    Tests that when an adviser is updated, investment projects related to that adviser are
    resynced.
    """
    adviser = AdviserFactory()
    project = InvestmentProjectFactory(**{field: adviser})

    adviser.dit_team = TeamFactory()
    adviser.save()

    es_with_signals.indices.refresh()

    result = get_search_by_entity_query(
        InvestmentProject,
        term='',
        filter_data={'id': project.pk},
    ).execute()

    assert result.hits.total == 1
    assert result.hits[0][field]['dit_team']['id'] == str(adviser.dit_team.id)
    assert result.hits[0][field]['dit_team']['name'] == adviser.dit_team.name
def test_get_search_by_entity_query(
    term,
    filter_data,
    composite_field_mapping,
    permission_filters,
    ordering,
    fields_to_include,
    fields_to_exclude,
    expected_query,
):
    """Tests for the get_search_by_entity_query function."""
    query = get_search_by_entity_query(
        SimpleModelSearchApp.es_model,
        term=term,
        filter_data=filter_data,
        composite_field_mapping=composite_field_mapping,
        permission_filters=permission_filters,
        ordering=ordering,
        fields_to_include=fields_to_include,
        fields_to_exclude=fields_to_exclude,
    )
    assert query.to_dict() == expected_query
    assert query._index == [SimpleModelSearchApp.es_model.get_read_alias()]
def test_get_limited_search_by_entity_query():
    """Tests search by entity."""
    date = '2017-06-13T09:44:31.062870'
    filter_data = {
        'name': 'Woodside',
        'address_country.id': ['80756b9a-5d95-e211-a939-e4115bead28a'],
        'archived_before': date,
        'archived_after': date,
    }
    query = get_search_by_entity_query(
        ESContact,
        term='test',
        filter_data=filter_data,
    )
    query = limit_search_query(
        query,
        offset=5,
        limit=5,
    )

    assert query.to_dict() == {
        'query': {
            'bool': {
                'must': [
                    {
                        'term': {
                            '_type': 'contact',
                        },
                    },
                    {
                        'bool': {
                            'should': [
                                {
                                    'match': {
                                        'name.keyword': {
                                            'query': 'test',
                                            'boost': 2,
                                        },
                                    },
                                },
                                {
                                    'multi_match': {
                                        'query':
                                        'test',
                                        'fields': (
                                            'id',
                                            'name',
                                            'name.trigram',
                                            'email',
                                            'email_alternative',
                                            'company.name',
                                            'company.name.trigram',
                                        ),
                                        'type':
                                        'cross_fields',
                                        'operator':
                                        'and',
                                    },
                                },
                            ],
                        },
                    },
                ],
                'filter': [
                    {
                        'bool': {
                            'must': [
                                {
                                    'match': {
                                        'name': {
                                            'query': 'Woodside',
                                            'operator': 'and',
                                        },
                                    },
                                },
                                {
                                    'bool': {
                                        'should': [
                                            {
                                                'match': {
                                                    'address_country.id': {
                                                        'query':
                                                        '80756b9a-5d95-e211-a939-e4115bead28a',
                                                        'operator': 'and',
                                                    },
                                                },
                                            },
                                        ],
                                        'minimum_should_match':
                                        1,
                                    },
                                },
                                {
                                    'range': {
                                        'archived': {
                                            'gte':
                                            '2017-06-13T09:44:31.062870',
                                            'lte':
                                            '2017-06-13T09:44:31.062870',
                                        },
                                    },
                                },
                            ],
                        },
                    },
                ],
            },
        },
        'sort': [
            '_score',
            'id',
        ],
        'from': 5,
        'size': 5,
    }
Beispiel #13
0
def test_limited_get_search_by_entity_query():
    """Tests search by entity."""
    date = '2017-06-13T09:44:31.062870'
    filter_data = {
        'address_town': ['Woodside'],
        'trading_address_country.id': ['80756b9a-5d95-e211-a939-e4115bead28a'],
        'estimated_land_date_before': date,
        'estimated_land_date_after': date,
    }
    query = get_search_by_entity_query(
        term='test',
        filter_data=filter_data,
        entity=ESCompany,
    )
    query = limit_search_query(
        query,
        offset=5,
        limit=5,
    )

    assert query.to_dict() == {
        'query': {
            'bool': {
                'must': [
                    {
                        'term': {
                            '_type': 'company',
                        },
                    },
                    {
                        'bool': {
                            'should': [
                                {
                                    'match_phrase': {
                                        'name_keyword': {
                                            'query': 'test',
                                            'boost': 2,
                                        },
                                    },
                                },
                                {
                                    'match_phrase': {
                                        'id': 'test',
                                    },
                                },
                                {
                                    'multi_match': {
                                        'query': 'test',
                                        'fields': (
                                            'name',
                                            'name_trigram',
                                            'company_number',
                                            'trading_name',
                                            'trading_name_trigram',
                                            'reference_code',
                                            'registered_address_country.name_trigram',
                                            'registered_address_postcode_trigram',
                                            'trading_address_country.name_trigram',
                                            'trading_address_postcode_trigram',
                                            'uk_region.name_trigram',
                                        ),
                                        'type': 'cross_fields',
                                        'operator': 'and',
                                    },
                                },
                            ],
                        },
                    },
                ],
            },
        },
        'post_filter': {
            'bool': {
                'must': [
                    {
                        'bool': {
                            'should': [
                                {
                                    'match': {
                                        'address_town': {
                                            'query': 'Woodside',
                                            'operator': 'and',
                                        },
                                    },
                                },
                            ],
                            'minimum_should_match': 1,
                        },
                    },
                    {
                        'bool': {
                            'should': [
                                {
                                    'match_phrase': {
                                        'trading_address_country.id':
                                            '80756b9a-5d95-e211-a939-e4115bead28a',
                                    },
                                },
                            ],
                            'minimum_should_match': 1,
                        },
                    },
                    {
                        'range': {
                            'estimated_land_date': {
                                'gte': '2017-06-13T09:44:31.062870',
                                'lte': '2017-06-13T09:44:31.062870',
                            },
                        },
                    },
                ],
            },
        },
        'from': 5,
        'size': 5,
        'sort': [
            '_score',
            'id',
        ],
    }