示例#1
0
def test_get_disco_recommendations(call_recommendation_server):
    expected_addons = [
        addon_factory(guid='101@mozilla'),
        addon_factory(guid='102@mozilla'),
        addon_factory(guid='103@mozilla'),
        addon_factory(guid='104@mozilla'),
    ]
    # Only the first one has a DiscoveryItem. The rest should still be
    # returned.

    call_recommendation_server.return_value = [
        '101@mozilla', '102@mozilla', '103@mozilla', '104@mozilla'
    ]
    recommendations = get_disco_recommendations('0', [])
    call_recommendation_server.assert_called_with(
        'https://taar.dev.mozaws.net/v1/api/recommendations/', '0', None,
        verb='post')
    assert [result.addon for result in recommendations] == expected_addons

    # only valid, public add-ons should match guids
    incomplete_addon = expected_addons.pop()
    incomplete_addon.update(status=amo.STATUS_NULL)
    # Remove this one and have recommendations return a bad guid instead.
    expected_addons.pop()
    call_recommendation_server.return_value = [
        '101@mozilla', '102@mozilla', '103@badbadguid', '104@mozilla'
    ]
    recommendations = get_disco_recommendations('0', [])
    assert [result.addon for result in recommendations] == expected_addons
示例#2
0
def test_get_disco_recommendations(call_recommendation_server):
    expected_addons = [
        addon_factory(guid='101@mozilla'),
        addon_factory(guid='102@mozilla'),
        addon_factory(guid='103@mozilla'),
        addon_factory(guid='104@mozilla'),
    ]
    # Only the first one has a DiscoveryItem. The rest should still be
    # returned.

    call_recommendation_server.return_value = [
        '101@mozilla', '102@mozilla', '103@mozilla', '104@mozilla'
    ]
    recommendations = get_disco_recommendations('0', [])
    call_recommendation_server.assert_called_with(
        'https://taar.dev.mozaws.net/api/recommendations/',
        '0',
        None,
        verb='post')
    assert [result.addon for result in recommendations] == expected_addons

    # only valid, public add-ons should match guids
    incomplete_addon = expected_addons.pop()
    incomplete_addon.update(status=amo.STATUS_NULL)
    # Remove this one and have recommendations return a bad guid instead.
    expected_addons.pop()
    call_recommendation_server.return_value = [
        '101@mozilla', '102@mozilla', '103@badbadguid', '104@mozilla'
    ]
    recommendations = get_disco_recommendations('0', [])
    assert [result.addon for result in recommendations] == expected_addons
示例#3
0
    def get_queryset(self):
        edition = self.request.GET.get('edition', 'default')
        position_field = 'position_china' if edition == 'china' else 'position'

        # Base queryset for editorial content.
        qs = (DiscoveryItem.objects.prefetch_related(
            'addon___current_version__previews').filter(
                **{
                    position_field + '__gt': 0
                }).order_by(position_field))

        # Recommendations stuff, potentially replacing some/all items in
        # the queryset with recommendations if applicable.
        if edition == 'china':
            # No TAAR for China Edition.
            telemetry_id = None
        else:
            telemetry_id = self.request.GET.get('telemetry-client-id', None)
        if switch_is_active('disco-recommendations') and (
                telemetry_id and VALID_CLIENT_ID.match(telemetry_id)):
            overrides = list(
                DiscoveryItem.objects.values_list(
                    'addon__guid', flat=True).filter(
                        position_override__gt=0).order_by('position_override'))
            recommendations = get_disco_recommendations(
                telemetry_id, overrides)
            if recommendations:
                # if we got some recommendations then replace the
                # extensions in the queryset with them.
                # Leave the non-extensions (personas) alone.
                qs = replace_extensions(qs, recommendations)

        return qs
示例#4
0
def test_get_disco_recommendations_empty(call_recommendation_server):
    call_recommendation_server.return_value = None
    recommendations = get_disco_recommendations('0', [])
    assert recommendations == []
    call_recommendation_server.assert_called_with(
        'https://taar.dev.mozaws.net/v1/api/recommendations/', '0', None,
        verb='post')
示例#5
0
def test_get_disco_recommendations_empty(call_recommendation_server):
    call_recommendation_server.return_value = None
    recommendations = get_disco_recommendations('0', [])
    assert recommendations == []
    call_recommendation_server.assert_called_with(
        'https://taar.dev.mozaws.net/v1/api/recommendations/', '0', None, verb='post'
    )
示例#6
0
def test_get_disco_recommendations_overrides(call_recommendation_server):
    call_recommendation_server.return_value = [
        '@guid1', '@guid2', '103@mozilla', '104@mozilla'
    ]
    get_disco_recommendations('xxx', ['@guid1', '@guid2', '@guid3'])
    data = {
        'options': {
            'promoted': [
                ['@guid1', 100],
                ['@guid2', 99],
                ['@guid3', 98],
            ]
        }
    }
    call_recommendation_server.assert_called_with(
        'https://taar.dev.mozaws.net/v1/api/recommendations/', 'xxx', data,
        verb='post')
示例#7
0
def test_get_disco_recommendations_overrides(call_recommendation_server):
    call_recommendation_server.return_value = [
        '@guid1', '@guid2', '103@mozilla', '104@mozilla'
    ]
    get_disco_recommendations('xxx', ['@guid1', '@guid2', '@guid3'])
    data = {
        'options': {
            'promoted': [
                ['@guid1', 100],
                ['@guid2', 99],
                ['@guid3', 98],
            ]
        }
    }
    call_recommendation_server.assert_called_with(
        'https://taar.dev.mozaws.net/v1/api/recommendations/', 'xxx', data,
        verb='post')