/** * @param ProductSearchCriteria $criteria * * @return $this */ public function fetchProductSearch(ProductSearchCriteria $criteria) { $this->checkBasketId($criteria->getSessionId()); $this->query[] = array('product_search' => $criteria->toArray()); return $this; }
public function testToArray() { $criteria = $this->getCriteria(); $this->assertInstanceOf('\\AboutYou\\SDK\\Criteria\\CriteriaInterface', $criteria); $this->assertInstanceOf('\\AboutYou\\SDK\\Criteria\\ProductSearchCriteria', $criteria); $this->assertEquals('{"session_id":"my"}', json_encode($criteria->toArray())); $criteria = $this->getCriteria()->setLimit(11, 12); $this->assertEquals('{"session_id":"my","result":{"limit":11,"offset":12}}', json_encode($criteria->toArray())); $criteria = $this->getCriteria()->boostProducts(array(1, 2, 3)); $this->assertEquals('{"session_id":"my","result":{"boosts":[1,2,3]}}', json_encode($criteria->toArray())); $criteria = $this->getCriteria()->selectCategories(); $this->assertEquals('{"session_id":"my","result":{"categories":true}}', json_encode($criteria->toArray())); $criteria = $this->getCriteria()->selectPriceRanges(); $this->assertEquals('{"session_id":"my","result":{"price":true}}', json_encode($criteria->toArray())); $criteria = $this->getCriteria()->selectSales(); $this->assertEquals('{"session_id":"my","result":{"sale":true}}', json_encode($criteria->toArray())); $criteria = $this->getCriteria()->sortBy(ProductSearchCriteria::SORT_TYPE_PRICE, ProductSearchCriteria::SORT_DESC); $this->assertEquals('{"session_id":"my","result":{"sort":{"by":"price","direction":"desc"}}}', json_encode($criteria->toArray())); $criteria = $this->getCriteria()->selectFacetsByGroupId(206, 3); $this->assertEquals('{"session_id":"my","result":{"facets":{"206":{"limit":3}}}}', json_encode($criteria->toArray())); $criteria = $this->getCriteria()->selectAllFacets(2); $this->assertEquals('{"session_id":"my","result":{"facets":{"_all":{"limit":2}}}}', json_encode($criteria->toArray())); $criteria = $this->getCriteria()->selectFacetsByFacetGroup(new FacetGroup(0, 'brand'), 4); $this->assertEquals('{"session_id":"my","result":{"facets":{"0":{"limit":4}}}}', json_encode($criteria->toArray())); $criteria = $this->getCriteria()->selectFacetsByFacetGroup(new Facet(1234, '', '', 1, 'brand'), 3); $this->assertEquals('{"session_id":"my","result":{"facets":{"1":{"limit":3}}}}', json_encode($criteria->toArray())); $criteria = $this->getCriteria()->selectFacetsByFacetGroup(new FacetGroup('0', 'brand'), 4)->selectFacetsByGroupId(206, 5); $this->assertEquals('{"session_id":"my","result":{"facets":{"0":{"limit":4},"206":{"limit":5}}}}', json_encode($criteria->toArray())); $criteria = $this->getCriteria()->selectProductFacetsByGroupId(443); $this->assertEquals('{"session_id":"my","result":{"product_facets":{"443":{"size":0,"sort":{}}}}}', json_encode($criteria->toArray())); $criteria = $this->getCriteria()->selectProductFacetsByGroupId(443, 10); $this->assertEquals('{"session_id":"my","result":{"product_facets":{"443":{"size":10,"sort":{}}}}}', json_encode($criteria->toArray())); $criteria = $this->getCriteria()->selectProductFacetsByGroupId(443, 10, ProductSearchCriteria::SORT_TYPE_COUNT); $this->assertEquals('{"session_id":"my","result":{"product_facets":{"443":{"size":10,"sort":{"by":"count"}}}}}', json_encode($criteria->toArray())); $criteria = $this->getCriteria()->selectProductFacetsByGroupId(443, 10, ProductSearchCriteria::SORT_TYPE_DEFAULT, ProductSearchCriteria::SORT_DESC); $this->assertEquals('{"session_id":"my","result":{"product_facets":{"443":{"size":10,"sort":{"direction":"desc"}}}}}', json_encode($criteria->toArray())); $criteria = $this->getCriteria()->selectProductFields(array(ProductFields::IS_ACTIVE)); $this->assertEquals('{"session_id":"my","result":{"fields":["active","new_in_since_date"]}}', json_encode($criteria->toArray())); $criteria = $this->getCriteria()->selectProductFields(array(ProductFields::BRAND, ProductFields::IS_ACTIVE)); $this->assertEquals('{"session_id":"my","result":{"fields":["brand_id","active","attributes_merged","new_in_since_date"]}}', json_encode($criteria->toArray())); $criteria = $this->getCriteria()->selectProductFields(array(ProductFields::VARIANTS)); $this->assertEquals('{"session_id":"my","result":{"fields":["variants","attributes_merged","new_in_since_date"]}}', json_encode($criteria->toArray())); $criteria = $this->getCriteria()->selectProductFields(array(ProductFields::DEFAULT_VARIANT)); $this->assertEquals('{"session_id":"my","result":{"fields":["default_variant","attributes_merged","new_in_since_date"]}}', json_encode($criteria->toArray())); $criteria = $this->getCriteria()->selectProductFields(array(ProductFields::BRAND, ProductFields::IS_ACTIVE, ProductFields::BRAND)); $this->assertEquals('{"session_id":"my","result":{"fields":["brand_id","active","attributes_merged","new_in_since_date"]}}', json_encode($criteria->toArray())); $criteria = $this->getCriteria()->selectProductFields(array(ProductFields::BRAND, ProductFields::ATTRIBUTES_MERGED, ProductFields::IS_ACTIVE)); $this->assertEquals('{"session_id":"my","result":{"fields":["brand_id","attributes_merged","active","new_in_since_date"]}}', json_encode($criteria->toArray())); $criteria = new ProductSearchCriteria('12345'); $this->assertEquals(array('session_id' => '12345'), $criteria->toArray()); $criteria = ProductSearchCriteria::create('12345')->filterBySale(false); $this->assertEquals(array('session_id' => '12345', 'filter' => array('sale' => false)), $criteria->toArray()); $this->assertEquals(false, $criteria->getSaleFilter()); $criteria = ProductSearchCriteria::create('12345')->filterByCategoryIds(array(123, 456)); $this->assertEquals(array('session_id' => '12345', 'filter' => array('categories' => array(123, 456))), $criteria->toArray()); $this->assertEquals('{"session_id":"12345","filter":{"categories":[123,456]}}', json_encode($criteria->toArray())); $criteria->filterByCategoryIds(array(789, 456)); $this->assertEquals(array('session_id' => '12345', 'filter' => array('categories' => array(789, 456))), $criteria->toArray()); $this->assertEquals('{"session_id":"12345","filter":{"categories":[789,456]}}', json_encode($criteria->toArray())); $criteria->filterByCategoryIds(array(123, 456), true); $this->assertEquals(array('session_id' => '12345', 'filter' => array('categories' => array(789, 456, 123))), $criteria->toArray()); $this->assertEquals('{"session_id":"12345","filter":{"categories":[789,456,123]}}', json_encode($criteria->toArray())); $this->assertEquals(array(789, 456, 123), $criteria->getCategoryFilter()); $criteria->filterByCategoryIds(array(123, 456, 123, 789)); $this->assertEquals(array('session_id' => '12345', 'filter' => array('categories' => array(123, 456, 789))), $criteria->toArray()); $this->assertEquals('{"session_id":"12345","filter":{"categories":[123,456,789]}}', json_encode($criteria->toArray())); $criteria = ProductSearchCriteria::create('12345')->filterByPriceRange(123); $this->assertEquals(array('session_id' => '12345', 'filter' => array('prices' => array('from' => 123))), $criteria->toArray()); $criteria = ProductSearchCriteria::create('12345')->filterByPriceRange(0, 123); $this->assertEquals(array('session_id' => '12345', 'filter' => array('prices' => array('to' => 123))), $criteria->toArray()); $criteria = ProductSearchCriteria::create('12345')->filterByPriceRange(123, 456); $this->assertEquals(array('session_id' => '12345', 'filter' => array('prices' => array('from' => 123, 'to' => 456))), $criteria->toArray()); $this->assertEquals('{"session_id":"12345","filter":{"prices":{"from":123,"to":456}}}', json_encode($criteria->toArray())); $this->assertEquals(array('to' => 456, 'from' => 123), $criteria->getPriceRangeFilter()); $criteria = ProductSearchCriteria::create('12345')->filterByPriceRange(-1); $this->assertEquals(array('session_id' => '12345', 'filter' => array('prices' => array())), $criteria->toArray()); $criteria = ProductSearchCriteria::create('12345')->filterByPriceRange(123, -1); $this->assertEquals(array('session_id' => '12345', 'filter' => array('prices' => array('from' => 123))), $criteria->toArray()); $criteria = ProductSearchCriteria::create('12345')->filterBySearchword('word1 word2'); $this->assertEquals(array('session_id' => '12345', 'filter' => array('searchword' => 'word1 word2')), $criteria->toArray()); $this->assertEquals('word1 word2', $criteria->getSearchwordFilter()); $criteria = ProductSearchCriteria::create('12345')->boostProducts(array(123, "456", 123, 789)); $this->assertEquals('{"session_id":"12345","result":{"boosts":[123,456,789]}}', json_encode($criteria->toArray())); $criteria = ProductSearchCriteria::create('12345')->filterBySearchword('word')->filterBySale(null); $this->assertEquals(array('session_id' => '12345', 'filter' => array('searchword' => 'word', 'sale' => null)), $criteria->toArray()); $criteria = ProductSearchCriteria::create('12345')->filterByNewInSinceDate(1234, 5678); $this->assertEquals(['session_id' => '12345', 'filter' => ['new_in_since_date' => ['from' => 1234, 'to' => 5678]]], $criteria->toArray()); }