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
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'])
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')
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()
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()
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()
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)