from __future__ import annotations from datetime import UTC, datetime, timedelta from itertools import product from typing import TYPE_CHECKING import pandas as pd import pytest from dask.distributed import Client as DaskClient from generalresearch.incite.mergers.foundations.user_id_product import ( UserIdProductMergeItem, ) if TYPE_CHECKING: # noinspection PyUnresolvedReferences from generalresearch.incite.mergers.foundations.user_id_product import ( UserIdProductMerge, ) @pytest.mark.parametrize( argnames="offset, duration, start", argvalues=list( product( ["12h", "3D"], [timedelta(days=5)], [(datetime.now(tz=UTC) - timedelta(days=35)).replace(microsecond=0)], ) ), ) class TestUserIDProduct: @pytest.mark.skip def test_base( self, client_no_amm: DaskClient, user_id_product_merge: UserIdProductMerge ): ddf = user_id_product_merge.ddf() df = client_no_amm.compute(collections=ddf, sync=True) assert isinstance(df, pd.DataFrame) assert not df.empty @pytest.mark.skip def test_base_item( self, client_no_amm: DaskClient, user_id_product_merge: UserIdProductMerge, user_collection, ): assert len(user_id_product_merge.items) == 1 for item in user_id_product_merge.items: assert isinstance(item, UserIdProductMergeItem) path = item.path try: modified_time1 = path.stat().st_mtime except OSError: modified_time1 = 0 user_id_product_merge.build(client=client_no_amm, user_coll=user_collection) modified_time2 = path.stat().st_mtime assert modified_time2 > modified_time1 @pytest.mark.skip def test_read( self, client_no_amm: DaskClient, user_id_product_merge: UserIdProductMerge ): users_ddf = user_id_product_merge.ddf() df = client_no_amm.compute(collections=users_ddf, sync=True) assert isinstance(df, pd.DataFrame) assert len(df.columns) == 1 assert str(df.product_id.dtype) == "category"