def test_product_select(db_session): assert db_session.query(Product).one_or_none() is None ProductFactory.create_batch(5) db_session.commit() assert len(db_session.query(Product).all()) == 5
def test_product_insert_same_uuid(db_session): test_uuid = uuid4() with pytest.raises(IntegrityError): ProductFactory.create(uuid=test_uuid) db_session.commit() ProductFactory.create(uuid=test_uuid) db_session.commit()
def test_product_insert_es_id(db_session): test_es_id = "asdfasdf" with pytest.raises(IntegrityError): ProductFactory.create(es_id=test_es_id) db_session.commit() ProductFactory.create(es_id=test_es_id) db_session.commit()
def test_session_service_select(service, es_object): session_obj = SessionFactory.create() session_obj.save(using=es_object.connection) prod_list = ProductFactory.create_batch(2, sessionid=session_obj.meta["id"]) [prod_obj.save(using=es_object.connection) for prod_obj in prod_list] Index("store", using=es_object.connection).refresh() results = service.select() assert len(results) > 0 session_gender = "I_test_session_service_select" session_name = str(uuid4()) session_obj = SessionFactory.create(gender=session_gender, name=session_name) session_obj.save(using=es_object.connection) prod_list = ProductFactory.create_batch(2, sessionid=session_obj.meta["id"]) [prod_obj.save(using=es_object.connection) for prod_obj in prod_list] Index("store", using=es_object.connection).refresh() results = service.select(gender=session_gender) assert len(results) == 1 assert results[0]["total"] == 2 results = service.select(name=session_name) assert len(results) == 1 assert results[0]["total"] == 2 with pytest.raises(NoContentError): service.select(gender=str(uuid4())) with pytest.raises(NoContentError): service.select(name=str(uuid4()))
def test_search(domain_url, es_object, token_session): query = str(uuid4()) prod_list = [ ProductFactory.create(name=query), ProductFactory.create(gender=query), ProductFactory.create(kind=query), ProductFactory.create(brand=query) ] [prod_obj.save(using=es_object.connection) for prod_obj in prod_list] Index("store", using=es_object.connection).refresh() response = token_session.post( domain_url + "/api/search/%s" % query ) data = response.json() SearchResultsSchema().load(data) assert response.status_code == 200 assert data["total"] == 4 response = token_session.post( domain_url + "/api/search/%s" % query, json={ "pricerange": { "min": 1, "max": 500 } } ) data = response.json() SearchResultsSchema().load(data) assert response.status_code == 200 assert data["total"] == 4 response = token_session.post( domain_url + "/api/search/%s" % query, json={ "pricerange": { "min": 10000, "max": 20000 } } ) with pytest.raises(JSONDecodeError): response.json() assert response.status_code == 204 response = token_session.post( domain_url + "/api/search/%s" % str(uuid4()) ) with pytest.raises(JSONDecodeError): response.json() assert response.status_code == 204
def test_search_products_controller(token_app, es_object): query = str(uuid4()) prod_list = [ ProductFactory.create(name=query), ProductFactory.create(gender=query), ProductFactory.create(kind=query), ProductFactory.create(brand=query) ] [prod_obj.save(using=es_object.connection) for prod_obj in prod_list] Index("store", using=es_object.connection).refresh() with token_app.test_client() as client: response = client.post("api/search/%s/1" % query) data = json.loads(response.data) SearchProductsResultsSchema().load(data) assert response.status_code == 200 assert len(data["products"]) == 4 with token_app.test_client() as client: response = client.post("api/search/%s/1" % query, json={ "pricerange": { "min": 1, "max": 500 }, "pagesize": 1 }) data = json.loads(response.data) SearchProductsResultsSchema().load(data) assert response.status_code == 200 assert len(data["products"]) == 1 with token_app.test_client() as client: response = client.post( "api/search/%s/1" % query, json={"pricerange": { "min": 10000, "max": 20000 }}) with pytest.raises(JSONDecodeError): json.loads(response.data) assert response.status_code == 204 with token_app.test_client() as client: response = client.post("api/search/%s/1" % str(uuid4())) with pytest.raises(JSONDecodeError): json.loads(response.data) assert response.status_code == 204
def test_product_insert(db_session): obj = ProductFactory.create() db_session.commit() assert db_session.query(Product).one() assert db_session.query(Product).filter(Product.id == obj.id).one() assert db_session.query(Product).filter(Product.uuid == obj.uuid).one() assert db_session.query(Product).filter(Product.es_id == obj.es_id).one() test_uuid = uuid4() obj = ProductFactory.create(uuid=test_uuid) db_session.commit() assert obj.uuid == test_uuid
def test_order_update_set_items(db_session): obj = OrderFactory.create() db_session.commit() assert not obj.items assert db_session.query(Product).one_or_none() is None assert db_session.query(OrderProduct).one_or_none() is None prod_list = ProductFactory.create_batch(5) for p in prod_list: OrderProduct(order=obj, product=p, amount=2) db_session.commit() assert len(obj.items) == 5 assert type(obj.items[0]) == OrderProduct assert len(db_session.query(Product).all()) == 5 assert len(db_session.query(OrderProduct).all()) == 5 obj = OrderFactory.create() for p in prod_list[0:3]: OrderProduct(order=obj, product=p, amount=1) db_session.commit() assert len(obj.items) == 3 assert type(obj.items[0]) == OrderProduct assert len(db_session.query(Product).all()) == 5 assert len(db_session.query(OrderProduct).all()) == 8
def test_order_dict(db_session): obj = OrderFactory.create() db_session.commit() obj_dict = obj.to_dict() for key in [ "slug", "created_at", "updated_at", "product_types", "items_amount" ]: assert key in obj_dict assert len(obj_dict.keys()) == 5 assert obj_dict["product_types"] == 0 assert obj_dict["items_amount"] == 0 prod_list = ProductFactory.create_batch(5) for p in prod_list: OrderProduct(order=obj, product=p, amount=2) db_session.commit() obj_dict = obj.to_dict() assert obj_dict["product_types"] == 5 assert obj_dict["items_amount"] == 10 item = obj.items[0] item_dict = item.to_dict() for key in ["item_id", "amount"]: assert key in item_dict assert item_dict["item_id"] == item.product.es_id assert item_dict["amount"] == 2
def test_order_delete(db_session): obj = OrderFactory.create() db_session.commit() assert not obj.items assert db_session.query(Product).one_or_none() is None assert db_session.query(OrderProduct).one_or_none() is None prod_list = ProductFactory.create_batch(5) for p in prod_list: OrderProduct(order=obj, product=p, amount=2) db_session.commit() assert len(obj.items) == 5 assert type(obj.items[0]) == OrderProduct assert len(db_session.query(Product).all()) == 5 assert len(db_session.query(OrderProduct).all()) == 5 result = db_session.query(Order).filter(Order.id == obj.id).delete() assert result == 1 db_session.commit() assert db_session.query(Order).one_or_none() is None assert len(db_session.query(Product).all()) == 5 assert db_session.query(OrderProduct).one_or_none() is None
def test_product_list_controller(token_app, es_object): price = {"outlet": 10.0, "retail": 20.0} prod_list = ProductFactory.create_batch(2, price=price) [prod_obj.save(using=es_object.connection) for prod_obj in prod_list] Index("store", using=es_object.connection).refresh() prod_item_list = [{ "item_id": p.meta["id"], "amount": 3 } for p in prod_list] with token_app.test_client() as client: response = client.post("api/product/list", json={ "item_list": prod_item_list, }) data = json.loads(response.data) ProductsListSchema().load(data) assert response.status_code == 200 assert len(data["products"]) == 2 assert data["total"]["outlet"] == 60.0 assert data["total"]["retail"] == 120.0 fake_item_list = [{"item_id": str(uuid4()), "amount": 1} for p in range(2)] with token_app.test_client() as client: response = client.post("api/product/list", json={ "id_list": prod_item_list + fake_item_list, }) data = json.loads(response.data) ErrorSchema().load(data) assert response.status_code == 400
def test_gender_controller(domain_url, es_object, token_session): session_obj = SessionFactory.create(gender="Women") session_obj.save(using=es_object.connection) prod_list = ProductFactory.create_batch(2, gender="Women", sessionid=session_obj.meta["id"]) [prod_obj.save(using=es_object.connection) for prod_obj in prod_list] Index("store", using=es_object.connection).refresh() response = token_session.post(domain_url + "/api/gender/women") data = response.json() GenderResultsSchema().load(data) assert response.status_code == 200 assert len(data["discounts"]) >= 2 response = token_session.post(domain_url + "/api/gender/women", json={"amount": 1}) data = response.json() GenderResultsSchema().load(data) assert response.status_code == 200 assert len(data["discounts"]) == 1 response = token_session.post(domain_url + "/api/gender/%s" % str(uuid4())) with pytest.raises(JSONDecodeError): response.json() assert response.status_code == 204
def test_product_list(domain_url, es_object, token_session): price = {"outlet": 10.0, "retail": 20.0} prod_list = ProductFactory.create_batch(2, price=price) [prod_obj.save(using=es_object.connection) for prod_obj in prod_list] Index("store", using=es_object.connection).refresh() prod_item_list = [{ "item_id": p.meta["id"], "amount": 3 } for p in prod_list] response = token_session.post(domain_url + "/api/product/list", json={ "item_list": prod_item_list, }) data = response.json() ProductsListSchema().load(data) assert response.status_code == 200 assert len(data["products"]) == 2 assert data["total"]["outlet"] == 60.0 assert data["total"]["retail"] == 120.0 fake_item_list = [{"item_id": str(uuid4()), "amount": 1} for p in range(2)] response = token_session.post(domain_url + "/api/product/list", json={ "item_list": prod_item_list + fake_item_list, }) data = response.json() ErrorSchema().load(data) assert response.status_code == 400
def test_product_service_select_by_item_list(service, es_object): price = {"outlet": 10.0, "retail": 20.0} item_list = [] for i in range(3): obj = ProductFactory.create(price=price) obj.save(using=es_object.connection) item_list.append({"item_id": obj.meta["id"], "amount": i + 1}) Index("store", using=es_object.connection).refresh() results, total = service.select_by_item_list(item_list) assert len(results) == len(item_list) item_id_list = [item["item_id"] for item in item_list] for obj in results: assert type(obj) == Product assert obj.meta["id"] in item_id_list assert total["outlet"] == 60.0 assert total["retail"] == 120.0 fake_item_list = [{"item_id": str(uuid4()), "amount": 2} for x in range(2)] over_item_list = item_list + fake_item_list with pytest.raises(ValidationError): service.select_by_item_list(over_item_list)
def test_product_service_products_count(service, es_object): prod_list = ProductFactory.create_batch(2) [prod_obj.save(using=es_object.connection) for prod_obj in prod_list] Index("store", using=es_object.connection).refresh() result = service.products_count() assert result > 0
def test_count_products(service, es_object): session_id = str(uuid4()) prod_list = ProductFactory.create_batch(2, sessionid=session_id) [prod_obj.save(using=es_object.connection) for prod_obj in prod_list] Index("store", using=es_object.connection).refresh() result = service._SessionService__count_products(session_id) assert result == 2
def test_brand_controller(token_app, es_object): brand = str(uuid4()) prod_list = ProductFactory.create_batch(2, brand=brand) [prod_obj.save(using=es_object.connection) for prod_obj in prod_list] Index("store", using=es_object.connection).refresh() with token_app.test_client() as client: response = client.post( "api/brand/%s" % brand ) data = json.loads(response.data) SearchResultsSchema().load(data) assert response.status_code == 200 assert data["total"] == 2 with token_app.test_client() as client: response = client.post( "api/brand/%s" % brand, json={ "pricerange": { "min": 1, "max": 500 } } ) data = json.loads(response.data) SearchResultsSchema().load(data) assert response.status_code == 200 assert data["total"] == 2 with token_app.test_client() as client: response = client.post( "api/brand/%s" % brand, json={ "pricerange": { "min": 10000, "max": 20000 } } ) with pytest.raises(JSONDecodeError): json.loads(response.data) assert response.status_code == 204 with token_app.test_client() as client: response = client.post( "api/brand/%s" % str(uuid4()) ) with pytest.raises(JSONDecodeError): json.loads(response.data) assert response.status_code == 204
def test_session_products(domain_url, es_object, token_session): session_obj = SessionFactory.create(gender="Women") session_obj.save(using=es_object.connection) session_id = session_obj.meta["id"] prod_list = ProductFactory.create_batch(2, gender="Women", sessionid=session_id) [prod_obj.save(using=es_object.connection) for prod_obj in prod_list] Index("store", using=es_object.connection).refresh() response = token_session.post( domain_url + "/api/session/%s/1" % session_id ) data = response.json() SearchProductsResultsSchema().load(data) assert response.status_code == 200 assert len(data["products"]) == 2 response = token_session.post( domain_url + "/api/session/%s/1" % session_id, json={ "pricerange": { "min": 1, "max": 500 }, "pagesize": 1 } ) data = response.json() SearchProductsResultsSchema().load(data) assert response.status_code == 200 assert len(data["products"]) == 1 response = token_session.post( domain_url + "/api/session/%s/1" % session_id, json={ "pricerange": { "min": 10000, "max": 20000 } } ) with pytest.raises(JSONDecodeError): response.json() assert response.status_code == 204 response = token_session.post( domain_url + "/api/session/%s/1" % str(uuid4()) ) with pytest.raises(JSONDecodeError): response.json() assert response.status_code == 204
def test_delete_controller(token_app, db_perm_session, prod_list): user_slug = uuid_to_slug(uuid4()) obj = OrderFactory.create(user_slug=user_slug) db_perm_session.commit() order_slug = obj.uuid_slug prod_id_list = [p.meta["id"] for p in prod_list] for es_id in prod_id_list: product = ProductFactory.create(es_id=es_id) OrderProductFactory.create(order=obj, product=product, amount=2) db_perm_session.commit() assert len(db_perm_session.query(Order).all()) == 1 assert len(db_perm_session.query(Product).all()) == 5 assert len(db_perm_session.query(OrderProduct).all()) == 5 fake_user_slug = uuid_to_slug(uuid4()) with token_app.test_client() as client: response = client.delete( "api/order/delete/%s/%s" % (fake_user_slug, order_slug) ) data = json.loads(response.data) assert data == {} assert response.status_code == 404 assert len(db_perm_session.query(Order).all()) == 1 assert len(db_perm_session.query(Product).all()) == 5 assert len(db_perm_session.query(OrderProduct).all()) == 5 with token_app.test_client() as client: response = client.delete( "api/order/delete/%s/%s" % (user_slug, order_slug) ) data = json.loads(response.data) assert data == {} assert response.status_code == 200 assert len(db_perm_session.query(Order).all()) == 0 assert len(db_perm_session.query(Product).all()) == 5 assert len(db_perm_session.query(OrderProduct).all()) == 0 with token_app.test_client() as client: response = client.delete( "api/order/delete/%s/%s" % (user_slug, order_slug) ) data = json.loads(response.data) assert data == {} assert response.status_code == 404 assert len(db_perm_session.query(Order).all()) == 0 assert len(db_perm_session.query(Product).all()) == 5 assert len(db_perm_session.query(OrderProduct).all()) == 0
def test_product_get(es_object): obj = ProductFactory.create() obj.save(using=es_object.connection) res = Product.get(using=es_object.connection, id=obj.meta["id"]) assert res is not None assert type(res) is Product assert res.meta["id"] == obj.meta["id"] assert res.meta["index"] == "store" assert res.meta["doc_type"] == "products"
def test_product_service_super_discounts(service, es_object): prod_list = ProductFactory.create_batch(2) [prod_obj.save(using=es_object.connection) for prod_obj in prod_list] Index("store", using=es_object.connection).refresh() results = service.super_discounts() assert len(results) > 0 assert type(results[0]) == Product test_alt_id = "I_test_product_service_super_discounts" ProductFactory.create(gender=test_alt_id).save(using=es_object.connection) Index("store", using=es_object.connection).refresh() results = service.super_discounts(gender=test_alt_id) assert len(results) == 1 assert type(results[0]) == Product with pytest.raises(NoContentError): results = service.super_discounts(gender=str(uuid4()))
def test_session_products_controller(token_app, es_object): session_obj = SessionFactory.create(gender="Women") session_obj.save(using=es_object.connection) session_id = session_obj.meta["id"] prod_list = ProductFactory.create_batch(2, gender="Women", sessionid=session_id) [prod_obj.save(using=es_object.connection) for prod_obj in prod_list] Index("store", using=es_object.connection).refresh() with token_app.test_client() as client: response = client.post("api/session/%s/1" % session_id) data = json.loads(response.data) SearchProductsResultsSchema().load(data) assert response.status_code == 200 assert len(data["products"]) == 2 with token_app.test_client() as client: response = client.post("api/session/%s/1" % session_id, json={ "pricerange": { "min": 1, "max": 500 }, "pagesize": 1 }) data = json.loads(response.data) SearchProductsResultsSchema().load(data) assert response.status_code == 200 assert len(data["products"]) == 1 with token_app.test_client() as client: response = client.post( "api/session/%s/1" % session_id, json={"pricerange": { "min": 10000, "max": 20000 }}) with pytest.raises(JSONDecodeError): json.loads(response.data) assert response.status_code == 204 with token_app.test_client() as client: response = client.post("api/session/%s/1" % str(uuid4())) with pytest.raises(JSONDecodeError): json.loads(response.data) assert response.status_code == 204
def test_start_controller(token_app, es_object): prod_list = ProductFactory.create_batch(2) [prod_obj.save(using=es_object.connection) for prod_obj in prod_list] Index("store", using=es_object.connection).refresh() with token_app.test_client() as client: response = client.get("api/start") data = json.loads(response.data) ProductsCountSchema().load(data) assert response.status_code == 200 assert data["count"] > 0
def test_start(domain_url, es_object, token_session): prod_list = ProductFactory.create_batch(2) [prod_obj.save(using=es_object.connection) for prod_obj in prod_list] Index("store", using=es_object.connection).refresh() response = token_session.get( domain_url + "/api/start" ) data = response.json() ProductsCountSchema().load(data) assert response.status_code == 200 assert data["count"] > 0
def test_product_dict_min(es_object): obj = ProductFactory.create() obj.save(using=es_object.connection) res = Product.get(using=es_object.connection, id=obj.meta["id"]) obj_dict_min = res.get_dict_min() for key in ["id", "name", "image", "price", "discount"]: assert key in obj_dict_min assert len(obj_dict_min.keys()) == 5 for pkey in ["outlet", "retail", "symbol"]: assert pkey in obj_dict_min["price"] assert len(obj_dict_min["price"].keys()) == 3
def test_order_service_insert(service, db_perm_session): user_slug = uuid_to_slug(uuid4()) with pytest.raises(NoContentError): service.select_by_user_slug(user_slug=user_slug) item_list = [{"item_id": str(uuid_to_slug(uuid4())), "amount": 2} for i in range(2)] ins = service.insert(user_slug=user_slug, item_list=item_list) assert ins is True assert len(db_perm_session.query(Order).all()) == 1 assert len(db_perm_session.query(Product).all()) == 2 assert len(db_perm_session.query(OrderProduct).all()) == 2 result = service.select_by_user_slug(user_slug=user_slug) assert len(result["orders"]) == 1 order_info = result["orders"][0].to_dict() assert order_info["product_types"] == 2 assert order_info["items_amount"] == 4 product_list = ProductFactory.create_batch(5) db_perm_session.commit() item_list = [{"item_id": p.es_id, "amount": 3} for p in product_list] ins = service.insert(user_slug=user_slug, item_list=item_list) assert ins is True assert len(db_perm_session.query(Order).all()) == 2 assert len(db_perm_session.query(Product).all()) == 7 assert len(db_perm_session.query(OrderProduct).all()) == 7 result = service.select_by_user_slug(user_slug=user_slug) assert len(result["orders"]) == 2 order_info = result["orders"][0].to_dict() assert order_info["product_types"] == 5 assert order_info["items_amount"] == 15 user_slug = uuid_to_slug(uuid4()) ins = service.insert(user_slug=user_slug, item_list=item_list) assert ins is True assert len(db_perm_session.query(Order).all()) == 3 assert len(db_perm_session.query(Product).all()) == 7 assert len(db_perm_session.query(OrderProduct).all()) == 12 result = service.select_by_user_slug(user_slug=user_slug) assert len(result["orders"]) == 1
def test_select_by_slug_controller(token_app, db_perm_session, prod_list): user_slug = uuid_to_slug(uuid4()) obj = OrderFactory.create(user_slug=user_slug) db_perm_session.commit() order_slug = obj.uuid_slug prod_id_list = [p.meta["id"] for p in prod_list] amount = 1 for es_id in prod_id_list: product = ProductFactory.create(es_id=es_id) OrderProductFactory.create(order=obj, product=product, amount=amount) amount += 1 db_perm_session.commit() with token_app.test_client() as client: response = client.get( "api/order/%s/%s" % (user_slug, order_slug) ) data = json.loads(response.data) OrderSchema().load(data) assert response.status_code == 200 assert data["slug"] == order_slug assert data["product_types"] == len(prod_list) assert data["items_amount"] == ((1 + len(prod_list)) * len(prod_list)) / 2 assert len(data["products"]) == len(prod_list) for item in [item.to_dict() for item in obj.items]: product = next(p for p in data["products"] if p["id"] == item["item_id"]) assert product["amount"] == item["amount"] with token_app.test_client() as client: response = client.get( "api/order/WILLrogerPEREIRAslugBR/WILLrogerPEREIRAslugBR" ) data = json.loads(response.data) assert data == {} assert response.status_code == 404 with token_app.test_client() as client: response = client.get( "api/order/WILLrogerPEREIRAslugBR/%s" % order_slug ) data = json.loads(response.data) assert data == {} assert response.status_code == 404
def test_delete(domain_url, db_perm_session, token_session, prod_list): user_slug = uuid_to_slug(uuid4()) obj = OrderFactory.create(user_slug=user_slug) db_perm_session.commit() order_slug = obj.uuid_slug prod_id_list = [p.meta["id"] for p in prod_list] for es_id in prod_id_list: product = ProductFactory.create(es_id=es_id) OrderProductFactory.create(order=obj, product=product, amount=2) db_perm_session.commit() assert len(db_perm_session.query(Order).all()) == 1 assert len(db_perm_session.query(Product).all()) == 5 assert len(db_perm_session.query(OrderProduct).all()) == 5 fake_user_slug = uuid_to_slug(uuid4()) response = token_session.delete(domain_url + "/api/order/delete/%s/%s" % (fake_user_slug, order_slug)) data = response.json() assert data == {} assert response.status_code == 404 assert len(db_perm_session.query(Order).all()) == 1 assert len(db_perm_session.query(Product).all()) == 5 assert len(db_perm_session.query(OrderProduct).all()) == 5 response = token_session.delete(domain_url + "/api/order/delete/%s/%s" % (user_slug, order_slug)) data = response.json() assert data == {} assert response.status_code == 200 assert len(db_perm_session.query(Order).all()) == 0 assert len(db_perm_session.query(Product).all()) == 5 assert len(db_perm_session.query(OrderProduct).all()) == 0 response = token_session.delete(domain_url + "/api/order/delete/%s/%s" % (user_slug, order_slug)) data = response.json() assert data == {} assert response.status_code == 404 assert len(db_perm_session.query(Order).all()) == 0 assert len(db_perm_session.query(Product).all()) == 5 assert len(db_perm_session.query(OrderProduct).all()) == 0
def test_product_service_select_by_id(service, es_object): obj = ProductFactory.create() obj.save(using=es_object.connection) Index("store", using=es_object.connection).refresh() obj_id = obj.meta["id"] results = service.select_by_id(obj_id) assert type(results) == Product assert results.meta["id"] == obj_id fake_id = str(uuid4()) with pytest.raises(NotFoundError): service.select_by_id(fake_id)
def test_product_dict(es_object): obj = ProductFactory.create() obj.save(using=es_object.connection) res = Product.get(using=es_object.connection, id=obj.meta["id"]) obj_dict = res.get_dict() for key in [ "id", "name", "link", "kind", "brand", "details", "care", "about", "images", "sessionid", "sessionname", "gender", "price" ]: assert key in obj_dict assert len(obj_dict.keys()) == 13 for pkey in ["outlet", "retail", "symbol"]: assert pkey in obj_dict["price"] assert len(obj_dict["price"].keys()) == 3