def test_cart_with_elements_object_try_to_get_cart_object(cart, submitter, experiment, dummy_request, threadlocals, testapp):
    testapp.patch_json(
        cart['@id'],
        {'elements': [experiment['@id']]}
    )
    from encoded.cart_view import CartWithElements
    c = CartWithElements(dummy_request, uuids=[cart['uuid']])
    cart_object = c._try_to_get_cart_object(cart['uuid'])
    assert cart_object.get('@id') == cart['@id']
    with pytest.raises(HTTPBadRequest):
        c._try_to_get_cart_object('abc')
def test_cart_with_elements_object_init(dummy_request):
    from encoded.cart_view import CartWithElements
    cart = CartWithElements(dummy_request)
    assert isinstance(cart, CartWithElements)
    assert cart.request == dummy_request
    assert cart.uuids == []
    assert cart.max_cart_elements == 8000
    cart = CartWithElements(
        dummy_request,
        max_cart_elements=5
    )
    cart.max_cart_elements == 5
示例#3
0
def cart_search(context, request):
    '''
    Like search but takes cart params.
    '''
    # Note the order of rendering matters for some fields, e.g. AllResponseField and
    # NotificationResponseField depend on results from CartSearchWithFacetsResponseField.
    fr = FieldedResponse(_meta={'params_parser': ParamsParser(request)},
                         response_fields=[
                             TitleResponseField(title='Cart search'),
                             TypeResponseField(at_type=[SEARCH_TITLE]),
                             IDResponseField(),
                             ContextResponseField(),
                             CartSearchWithFacetsResponseField(
                                 default_item_types=DEFAULT_ITEM_TYPES,
                                 cart=CartWithElements(request),
                             ),
                             AllResponseField(),
                             NotificationResponseField(),
                             CartFiltersResponseField(),
                             ClearFiltersResponseFieldWithCarts(),
                             ColumnsResponseField(),
                             SortResponseField(),
                             DebugQueryResponseField()
                         ])
    return fr.render()
def test_cart_with_elements_object_try_to_get_elements_from_cart(cart, submitter, experiment, dummy_request, threadlocals, testapp):
    testapp.patch_json(
        cart['@id'],
        {'elements': [experiment['@id']]}
    )
    from encoded.cart_view import CartWithElements
    c = CartWithElements(dummy_request, uuids=[cart['uuid']])
    assert c.max_cart_elements == 8000
    assert c.uuids == [cart['uuid']]
    elements = c._try_to_get_elements_from_cart(cart['uuid'])
    assert elements == [experiment['@id']]
    testapp.patch_json(
        cart['@id'],
        {'elements': []}
    )
    with pytest.raises(HTTPBadRequest):
        c._try_to_get_elements_from_cart(cart['uuid'])
示例#5
0
def test_searches_queries_cart_search_query_factory_init(params_parser):
    from encoded.cart_view import CartWithElements
    from encoded.searches.queries import CartQueryMixin
    from encoded.searches.queries import CartSearchQueryFactory
    csqf = CartSearchQueryFactory(params_parser,
                                  cart=CartWithElements(
                                      params_parser._request))
    assert isinstance(csqf, CartSearchQueryFactory)
    assert isinstance(csqf, CartQueryMixin)
    assert csqf.params_parser == params_parser
    assert hasattr(csqf, '_get_post_filters_with_carts')
示例#6
0
def cart_search_generator(request):
    '''
    For internal use (no view). Like search_quick but returns raw generator
    of cart search hits in @graph field.
    '''
    fgr = FieldedGeneratorResponse(
        _meta={'params_parser': ParamsParser(request)},
        response_fields=[
            CartSearchResponseField(
                default_item_types=DEFAULT_ITEM_TYPES,
                cart=CartWithElements(request),
            )
        ])
    return fgr.render()
def test_cart_with_object_validate_cart_size(cart, submitter, experiment, dummy_request, threadlocals, testapp):
    from pyramid.exceptions import HTTPBadRequest
    testapp.patch_json(
        cart['@id'],
        {'elements': [experiment['@id']]}
    )
    from encoded.cart_view import CartWithElements
    dummy_request.environ['QUERY_STRING'] = (
        f'cart={cart["@id"]}'
    )
    c = CartWithElements(dummy_request, max_cart_elements=3)
    c._elements = [experiment['@id']]
    assert c.max_cart_elements == 3
    c._validate_cart_size()
    c._elements = ['a', 'b', 'c', 'd']
    with pytest.raises(HTTPBadRequest):
        c._validate_cart_size()
示例#8
0
def cart_matrix(context, request):
    fr = FieldedResponse(
        _meta={'params_parser': ParamsParser(request)},
        response_fields=[
            TitleResponseField(title='Cart matrix'),
            TypeResponseField(at_type=[MATRIX_TITLE]),
            IDResponseField(),
            SearchBaseResponseField(search_base='/cart-search/'),
            ContextResponseField(),
            CartMatrixWithFacetsResponseField(
                default_item_types=DEFAULT_ITEM_TYPES,
                cart=CartWithElements(request),
            ),
            NotificationResponseField(),
            CartFiltersResponseField(),
            TypeOnlyClearFiltersResponseFieldWithCarts(),
            DebugQueryResponseField()
        ])
    return fr.render()
示例#9
0
def cart_report(context, request):
    fr = FieldedResponse(
        _meta={'params_parser': ParamsParser(request)},
        response_fields=[
            TitleResponseField(title='Cart report'),
            TypeResponseField(at_type=[REPORT_TITLE]),
            IDResponseField(),
            ContextResponseField(),
            CartReportWithFacetsResponseField(cart=CartWithElements(request)),
            AllResponseField(),
            NotificationResponseField(),
            CartFiltersResponseField(),
            TypeOnlyClearFiltersResponseFieldWithCarts(),
            ColumnsResponseField(),
            NonSortableResponseField(),
            SortResponseField(),
            DebugQueryResponseField()
        ])
    return fr.render()
示例#10
0
 def _maybe_add_cart_elements_to_param_list(self):
     # Don't need to limit max_cart_elements here since
     # search is batched.
     cart = CartWithElements(self.request, max_cart_elements=None)
     self.param_list['@id'].extend(cart.elements)
     self.param_list.pop('cart', None)