From c1281cb3122f04f7432f6554e422725b2c1f065b Mon Sep 17 00:00:00 2001 From: KorenLazar Date: Mon, 16 Aug 2021 23:09:10 +0300 Subject: [PATCH] Added a test for scraping the promotions and exporting them to xlsx files. --- promotion.py | 2 + tests/test_scraping.py | 84 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 86 insertions(+) diff --git a/promotion.py b/promotion.py index 9ee2bd6..61fafbb 100644 --- a/promotion.py +++ b/promotion.py @@ -21,6 +21,8 @@ from supermarket_chain import SupermarketChain XML_FILES_PROMOTIONS_CATEGORIES = [SupermarketChain.XMLFilesCategory.PromosFull, SupermarketChain.XMLFilesCategory.Promos] +PROMOTION_COLS_NUM = 15 # The length of the list returned by get_promotion_row_for_table function + INVALID_OR_UNKNOWN_PROMOTION_FUNCTION = -1 PROMOTIONS_TABLE_HEADERS = [ diff --git a/tests/test_scraping.py b/tests/test_scraping.py index e69de29..474323e 100644 --- a/tests/test_scraping.py +++ b/tests/test_scraping.py @@ -0,0 +1,84 @@ +import logging +import os + +import pytest +from tqdm import tqdm +import pandas as pd + +from chains.bareket import Bareket +from chains.co_op import CoOp +from chains.dor_alon import DorAlon +from chains.freshmarket import Freshmarket +from chains.hazi_hinam import HaziHinam +from chains.keshet import Keshet +from chains.maayan2000 import Maayan2000 +from chains.mahsaneiHashook import MahsaneiHashook +from chains.shuk_hayir import ShukHayir +from chains.stop_market import StopMarket +from chains.tiv_taam import TivTaam +from chains.zol_vebegadol import ZolVebegadol +from promotion import PROMOTION_COLS_NUM, main_latest_promos +from supermarket_chain import SupermarketChain +from chains import ( + bareket, + mahsaneiHashook, + dor_alon, + freshmarket, + hazi_hinam, + keshet, + stop_market, + tiv_taam, + shufersal, + co_op, + victory, + yohananof, + zol_vebegadol, + rami_levi, + osher_ad, + maayan2000, + shuk_hayir, + king_store, + shefa_birkat_hashem, +) + +pytest.main(args=['-s', os.path.abspath(__file__)]) + +chain_dict = {repr(chain): chain() if callable(chain) else None for chain in SupermarketChain.__subclasses__()} + +MIN_NUM_OF_PROMOS = 3 + + +def test_scraping(): + filename = 'temp.xlsx' + for chain_name, chain in tqdm(chain_dict.items(), desc='chains'): + if chain_name in [repr(Maayan2000), repr(ZolVebegadol), repr(ShukHayir)]: + continue + logging.info(f'Test scraping promotions from {chain_name}') + if chain_name == repr(DorAlon): + store_id = 501 + elif chain_name in [repr(Keshet), repr(TivTaam), repr(Bareket), repr(ZolVebegadol)]: + store_id = 2 + elif chain_name == repr(CoOp): + store_id = 202 + elif chain_name == repr(ShukHayir): + store_id = 4 + elif chain_name == repr(StopMarket): + store_id = 5 + else: + store_id = 1 + + try: + main_latest_promos( + store_id=store_id, + output_filename=filename, + chain=chain, + load_promos=False, + load_xml=False + ) + df = pd.read_excel(filename) + except Exception as e: + logging.error(e) + logging.info(f"Failed loading excel of {chain_name}") + raise + + assert df.shape[0] > MIN_NUM_OF_PROMOS and df.shape[1] == PROMOTION_COLS_NUM, f"Failed scraping {chain_name}"