shop product refactoring
This commit is contained in:
@@ -23,7 +23,7 @@ class TestStatsService:
|
||||
assert "unique_brands" in stats
|
||||
assert "unique_categories" in stats
|
||||
assert "unique_marketplaces" in stats
|
||||
assert "unique_shops" in stats
|
||||
assert "unique_vendors" in stats
|
||||
assert "total_stock_entries" in stats
|
||||
assert "total_inventory_quantity" in stats
|
||||
|
||||
@@ -41,7 +41,7 @@ class TestStatsService:
|
||||
brand="DifferentBrand",
|
||||
google_product_category="Different Category",
|
||||
marketplace="Amazon",
|
||||
shop_name="AmazonShop",
|
||||
vendor_name="AmazonShop",
|
||||
price="15.99",
|
||||
currency="EUR",
|
||||
),
|
||||
@@ -51,7 +51,7 @@ class TestStatsService:
|
||||
brand="ThirdBrand",
|
||||
google_product_category="Third Category",
|
||||
marketplace="eBay",
|
||||
shop_name="eBayShop",
|
||||
vendor_name="eBayShop",
|
||||
price="25.99",
|
||||
currency="USD",
|
||||
),
|
||||
@@ -61,7 +61,7 @@ class TestStatsService:
|
||||
brand="TestBrand", # Same as test_marketplace_product
|
||||
google_product_category="Different Category",
|
||||
marketplace="Letzshop", # Same as test_marketplace_product
|
||||
shop_name="DifferentShop",
|
||||
vendor_name="DifferentShop",
|
||||
price="35.99",
|
||||
currency="EUR",
|
||||
),
|
||||
@@ -75,7 +75,7 @@ class TestStatsService:
|
||||
assert stats["unique_brands"] >= 3 # TestBrand, DifferentBrand, ThirdBrand
|
||||
assert stats["unique_categories"] >= 2 # At least 2 different categories
|
||||
assert stats["unique_marketplaces"] >= 3 # Letzshop, Amazon, eBay
|
||||
assert stats["unique_shops"] >= 3 # At least 3 different shops
|
||||
assert stats["unique_vendors"] >= 3 # At least 3 different vendors
|
||||
|
||||
def test_get_comprehensive_stats_handles_nulls(self, db):
|
||||
"""Test comprehensive stats handles null/empty values correctly"""
|
||||
@@ -87,7 +87,7 @@ class TestStatsService:
|
||||
brand=None, # Null brand
|
||||
google_product_category=None, # Null category
|
||||
marketplace=None, # Null marketplace
|
||||
shop_name=None, # Null shop
|
||||
vendor_name=None, # Null vendor
|
||||
price="10.00",
|
||||
currency="EUR",
|
||||
),
|
||||
@@ -97,7 +97,7 @@ class TestStatsService:
|
||||
brand="", # Empty brand
|
||||
google_product_category="", # Empty category
|
||||
marketplace="", # Empty marketplace
|
||||
shop_name="", # Empty shop
|
||||
vendor_name="", # Empty vendor
|
||||
price="15.00",
|
||||
currency="EUR",
|
||||
),
|
||||
@@ -109,11 +109,11 @@ class TestStatsService:
|
||||
|
||||
# These products shouldn't contribute to unique counts due to null/empty values
|
||||
assert stats["total_products"] >= 2
|
||||
# Brands, categories, marketplaces, shops should not count null/empty values
|
||||
# Brands, categories, marketplaces, vendors should not count null/empty values
|
||||
assert isinstance(stats["unique_brands"], int)
|
||||
assert isinstance(stats["unique_categories"], int)
|
||||
assert isinstance(stats["unique_marketplaces"], int)
|
||||
assert isinstance(stats["unique_shops"], int)
|
||||
assert isinstance(stats["unique_vendors"], int)
|
||||
|
||||
def test_get_marketplace_breakdown_stats_basic(self, db, test_marketplace_product):
|
||||
"""Test getting marketplace breakdown stats with basic data"""
|
||||
@@ -129,7 +129,7 @@ class TestStatsService:
|
||||
)
|
||||
assert test_marketplace_stat is not None
|
||||
assert test_marketplace_stat["total_products"] >= 1
|
||||
assert test_marketplace_stat["unique_shops"] >= 1
|
||||
assert test_marketplace_stat["unique_vendors"] >= 1
|
||||
assert test_marketplace_stat["unique_brands"] >= 1
|
||||
|
||||
def test_get_marketplace_breakdown_stats_multiple_marketplaces(
|
||||
@@ -143,7 +143,7 @@ class TestStatsService:
|
||||
title="Amazon MarketplaceProduct 1",
|
||||
brand="AmazonBrand1",
|
||||
marketplace="Amazon",
|
||||
shop_name="AmazonShop1",
|
||||
vendor_name="AmazonShop1",
|
||||
price="20.00",
|
||||
currency="EUR",
|
||||
),
|
||||
@@ -152,7 +152,7 @@ class TestStatsService:
|
||||
title="Amazon MarketplaceProduct 2",
|
||||
brand="AmazonBrand2",
|
||||
marketplace="Amazon",
|
||||
shop_name="AmazonShop2",
|
||||
vendor_name="AmazonShop2",
|
||||
price="25.00",
|
||||
currency="EUR",
|
||||
),
|
||||
@@ -161,7 +161,7 @@ class TestStatsService:
|
||||
title="eBay MarketplaceProduct",
|
||||
brand="eBayBrand",
|
||||
marketplace="eBay",
|
||||
shop_name="eBayShop",
|
||||
vendor_name="eBayShop",
|
||||
price="30.00",
|
||||
currency="USD",
|
||||
),
|
||||
@@ -180,13 +180,13 @@ class TestStatsService:
|
||||
# Check Amazon stats specifically
|
||||
amazon_stat = next(stat for stat in stats if stat["marketplace"] == "Amazon")
|
||||
assert amazon_stat["total_products"] == 2
|
||||
assert amazon_stat["unique_shops"] == 2
|
||||
assert amazon_stat["unique_vendors"] == 2
|
||||
assert amazon_stat["unique_brands"] == 2
|
||||
|
||||
# Check eBay stats specifically
|
||||
ebay_stat = next(stat for stat in stats if stat["marketplace"] == "eBay")
|
||||
assert ebay_stat["total_products"] == 1
|
||||
assert ebay_stat["unique_shops"] == 1
|
||||
assert ebay_stat["unique_vendors"] == 1
|
||||
assert ebay_stat["unique_brands"] == 1
|
||||
|
||||
def test_get_marketplace_breakdown_stats_excludes_nulls(self, db):
|
||||
@@ -196,7 +196,7 @@ class TestStatsService:
|
||||
marketplace_product_id="NULLMARKET001",
|
||||
title="MarketplaceProduct without marketplace",
|
||||
marketplace=None,
|
||||
shop_name="SomeShop",
|
||||
vendor_name="SomeShop",
|
||||
brand="SomeBrand",
|
||||
price="10.00",
|
||||
currency="EUR",
|
||||
@@ -228,7 +228,7 @@ class TestStatsService:
|
||||
title="Brand MarketplaceProduct 1",
|
||||
brand="BrandA",
|
||||
marketplace="Test",
|
||||
shop_name="TestShop",
|
||||
vendor_name="TestVendor",
|
||||
price="10.00",
|
||||
currency="EUR",
|
||||
),
|
||||
@@ -237,7 +237,7 @@ class TestStatsService:
|
||||
title="Brand MarketplaceProduct 2",
|
||||
brand="BrandB",
|
||||
marketplace="Test",
|
||||
shop_name="TestShop",
|
||||
vendor_name="TestVendor",
|
||||
price="15.00",
|
||||
currency="EUR",
|
||||
),
|
||||
@@ -261,7 +261,7 @@ class TestStatsService:
|
||||
title="Category MarketplaceProduct 1",
|
||||
google_product_category="Electronics",
|
||||
marketplace="Test",
|
||||
shop_name="TestShop",
|
||||
vendor_name="TestVendor",
|
||||
price="10.00",
|
||||
currency="EUR",
|
||||
),
|
||||
@@ -270,7 +270,7 @@ class TestStatsService:
|
||||
title="Category MarketplaceProduct 2",
|
||||
google_product_category="Books",
|
||||
marketplace="Test",
|
||||
shop_name="TestShop",
|
||||
vendor_name="TestVendor",
|
||||
price="15.00",
|
||||
currency="EUR",
|
||||
),
|
||||
@@ -291,7 +291,7 @@ class TestStatsService:
|
||||
marketplace_product_id="MARKET001",
|
||||
title="Marketplace MarketplaceProduct 1",
|
||||
marketplace="Amazon",
|
||||
shop_name="AmazonShop",
|
||||
vendor_name="AmazonShop",
|
||||
price="10.00",
|
||||
currency="EUR",
|
||||
),
|
||||
@@ -299,7 +299,7 @@ class TestStatsService:
|
||||
marketplace_product_id="MARKET002",
|
||||
title="Marketplace MarketplaceProduct 2",
|
||||
marketplace="eBay",
|
||||
shop_name="eBayShop",
|
||||
vendor_name="eBayShop",
|
||||
price="15.00",
|
||||
currency="EUR",
|
||||
),
|
||||
@@ -312,23 +312,23 @@ class TestStatsService:
|
||||
assert count >= 2 # At least Amazon and eBay, plus test_marketplace_product marketplace
|
||||
assert isinstance(count, int)
|
||||
|
||||
def test_get_unique_shops_count(self, db, test_marketplace_product):
|
||||
"""Test getting unique shops count"""
|
||||
# Add products with different shop names
|
||||
def test_get_unique_vendors_count(self, db, test_marketplace_product):
|
||||
"""Test getting unique vendors count"""
|
||||
# Add products with different vendor names
|
||||
products = [
|
||||
MarketplaceProduct(
|
||||
marketplace_product_id="SHOP001",
|
||||
title="Shop MarketplaceProduct 1",
|
||||
title="Vendor MarketplaceProduct 1",
|
||||
marketplace="Test",
|
||||
shop_name="ShopA",
|
||||
vendor_name="ShopA",
|
||||
price="10.00",
|
||||
currency="EUR",
|
||||
),
|
||||
MarketplaceProduct(
|
||||
marketplace_product_id="SHOP002",
|
||||
title="Shop MarketplaceProduct 2",
|
||||
title="Vendor MarketplaceProduct 2",
|
||||
marketplace="Test",
|
||||
shop_name="ShopB",
|
||||
vendor_name="ShopB",
|
||||
price="15.00",
|
||||
currency="EUR",
|
||||
),
|
||||
@@ -336,9 +336,9 @@ class TestStatsService:
|
||||
db.add_all(products)
|
||||
db.commit()
|
||||
|
||||
count = self.service._get_unique_shops_count(db)
|
||||
count = self.service._get_unique_vendors_count(db)
|
||||
|
||||
assert count >= 2 # At least ShopA and ShopB, plus test_marketplace_product shop
|
||||
assert count >= 2 # At least ShopA and ShopB, plus test_marketplace_product vendor
|
||||
assert isinstance(count, int)
|
||||
|
||||
def test_get_stock_statistics(self, db, test_stock):
|
||||
@@ -350,14 +350,14 @@ class TestStatsService:
|
||||
location="LOCATION2",
|
||||
quantity=25,
|
||||
reserved_quantity=5,
|
||||
shop_id=test_stock.shop_id,
|
||||
vendor_id=test_stock.vendor_id,
|
||||
),
|
||||
Stock(
|
||||
gtin="1234567890125",
|
||||
location="LOCATION3",
|
||||
quantity=0, # Out of stock
|
||||
reserved_quantity=0,
|
||||
shop_id=test_stock.shop_id,
|
||||
vendor_id=test_stock.vendor_id,
|
||||
),
|
||||
]
|
||||
db.add_all(additional_stocks)
|
||||
@@ -379,7 +379,7 @@ class TestStatsService:
|
||||
title="Specific MarketplaceProduct 1",
|
||||
brand="SpecificBrand1",
|
||||
marketplace="SpecificMarket",
|
||||
shop_name="SpecificShop1",
|
||||
vendor_name="SpecificShop1",
|
||||
price="10.00",
|
||||
currency="EUR",
|
||||
),
|
||||
@@ -388,7 +388,7 @@ class TestStatsService:
|
||||
title="Specific MarketplaceProduct 2",
|
||||
brand="SpecificBrand2",
|
||||
marketplace="SpecificMarket",
|
||||
shop_name="SpecificShop2",
|
||||
vendor_name="SpecificShop2",
|
||||
price="15.00",
|
||||
currency="EUR",
|
||||
),
|
||||
@@ -397,7 +397,7 @@ class TestStatsService:
|
||||
title="Other MarketplaceProduct",
|
||||
brand="OtherBrand",
|
||||
marketplace="OtherMarket",
|
||||
shop_name="OtherShop",
|
||||
vendor_name="OtherShop",
|
||||
price="20.00",
|
||||
currency="EUR",
|
||||
),
|
||||
@@ -412,25 +412,25 @@ class TestStatsService:
|
||||
assert "SpecificBrand2" in brands
|
||||
assert "OtherBrand" not in brands
|
||||
|
||||
def test_get_shops_by_marketplace(self, db):
|
||||
"""Test getting shops for a specific marketplace"""
|
||||
def test_get_vendors_by_marketplace(self, db):
|
||||
"""Test getting vendors for a specific marketplace"""
|
||||
# Create products for specific marketplace
|
||||
marketplace_products = [
|
||||
MarketplaceProduct(
|
||||
marketplace_product_id="SHOPTEST001",
|
||||
title="Shop Test MarketplaceProduct 1",
|
||||
title="Vendor Test MarketplaceProduct 1",
|
||||
brand="TestBrand",
|
||||
marketplace="TestMarketplace",
|
||||
shop_name="TestShop1",
|
||||
vendor_name="TestVendor1",
|
||||
price="10.00",
|
||||
currency="EUR",
|
||||
),
|
||||
MarketplaceProduct(
|
||||
marketplace_product_id="SHOPTEST002",
|
||||
title="Shop Test MarketplaceProduct 2",
|
||||
title="Vendor Test MarketplaceProduct 2",
|
||||
brand="TestBrand",
|
||||
marketplace="TestMarketplace",
|
||||
shop_name="TestShop2",
|
||||
vendor_name="TestVendor2",
|
||||
price="15.00",
|
||||
currency="EUR",
|
||||
),
|
||||
@@ -438,11 +438,11 @@ class TestStatsService:
|
||||
db.add_all(marketplace_products)
|
||||
db.commit()
|
||||
|
||||
shops = self.service._get_shops_by_marketplace(db, "TestMarketplace")
|
||||
vendors =self.service._get_vendors_by_marketplace(db, "TestMarketplace")
|
||||
|
||||
assert len(shops) == 2
|
||||
assert "TestShop1" in shops
|
||||
assert "TestShop2" in shops
|
||||
assert len(vendors) == 2
|
||||
assert "TestVendor1" in vendors
|
||||
assert "TestVendor2" in vendors
|
||||
|
||||
def test_get_products_by_marketplace(self, db):
|
||||
"""Test getting product count for a specific marketplace"""
|
||||
@@ -452,7 +452,7 @@ class TestStatsService:
|
||||
marketplace_product_id="COUNT001",
|
||||
title="Count MarketplaceProduct 1",
|
||||
marketplace="CountMarketplace",
|
||||
shop_name="CountShop",
|
||||
vendor_name="CountShop",
|
||||
price="10.00",
|
||||
currency="EUR",
|
||||
),
|
||||
@@ -460,7 +460,7 @@ class TestStatsService:
|
||||
marketplace_product_id="COUNT002",
|
||||
title="Count MarketplaceProduct 2",
|
||||
marketplace="CountMarketplace",
|
||||
shop_name="CountShop",
|
||||
vendor_name="CountShop",
|
||||
price="15.00",
|
||||
currency="EUR",
|
||||
),
|
||||
@@ -468,7 +468,7 @@ class TestStatsService:
|
||||
marketplace_product_id="COUNT003",
|
||||
title="Count MarketplaceProduct 3",
|
||||
marketplace="CountMarketplace",
|
||||
shop_name="CountShop",
|
||||
vendor_name="CountShop",
|
||||
price="20.00",
|
||||
currency="EUR",
|
||||
),
|
||||
@@ -494,7 +494,7 @@ class TestStatsService:
|
||||
assert stats["unique_brands"] == 0
|
||||
assert stats["unique_categories"] == 0
|
||||
assert stats["unique_marketplaces"] == 0
|
||||
assert stats["unique_shops"] == 0
|
||||
assert stats["unique_vendors"] == 0
|
||||
assert stats["total_stock_entries"] == 0
|
||||
assert stats["total_inventory_quantity"] == 0
|
||||
|
||||
|
||||
Reference in New Issue
Block a user