falkben / steam-to-sqlite

Public Steam app and achievement data in a sqlite database
https://steam-to-sqlite.fly.dev
MIT License
2 stars 0 forks source link

sqlmodel compat #149

Open falkben opened 6 months ago

falkben commented 6 months ago

newer versions of sqlmodel fail the test suite. occurred when going from sqlmodel 0.0.11 to 0.0.12, which is when sqlalchemy 2.0 support was added

falkben commented 6 months ago

output from failing tests

session = <sqlmodel.orm.session.Session object at 0x7f0b3e1eda50>

    def test_ingest_item_twice(session: Session):
        appid = "620"
        app_data = get_apps_data([appid])[0]

        app = handler.import_single_app(session, app_data)
        apps_achievements_data = get_apps_achievements([app])
        handler.store_apps_achievements(session, apps_achievements_data)

        # now ingest the data again
        app_double = handler.import_single_app(session, app_data)
        apps_achievements_data = get_apps_achievements([app])
        handler.store_apps_achievements(session, apps_achievements_data)

        # assert that the two instances are the same
        assert app == app_double

        #  app is only in db once
        apps = session.exec(
            select(models.SteamApp).filter(models.SteamApp.appid == app.appid)
        ).all()
        assert len(apps) == 1

        # genres
        genres = session.exec(
            select(models.Genre).filter(models.Genre.steam_apps.any(appid=appid))
        ).all()
        assert len(genres) == len(app.genres)

        achievements = session.exec(
            select(models.Achievement).filter(models.Achievement.steam_app == app)
        ).all()
>       assert len(achievements) == app.achievements_total
E       AssertionError: assert 0 == 51
E        +  where 0 = len([])
E        +  and   51 = SteamApp(updated=datetime.datetime(2023, 12, 28, 20, 0, 42, 881386), appid=620, initial_price=999, recommendations=215...core=95, is_free=False, created=datetime.datetime(2023, 12, 28, 20, 0, 42, 802579), achievements_total=51, type='game').achievements_total

tests/test_handler.py:113: AssertionError
____________________ test_updates_on_diff_achievement_data _____________________

session = <sqlmodel.orm.session.Session object at 0x7f0b3dd5e010>
portal_app = SteamApp(updated=datetime.datetime(2023, 12, 28, 20, 0, 43, 68428), appid=620, initial_price=999, recommendations=2159...score=95, is_free=False, created=datetime.datetime(2023, 12, 28, 20, 0, 43, 69890), achievements_total=51, type='game')
portal_achievements = None

    def test_updates_on_diff_achievement_data(
        session: Session, portal_app: models.SteamApp, portal_achievements
    ):
        """assert updates on diff achievement data"""
        apps_achievements_data = get_apps_achievements([portal_app])
        portal_achievements_data = apps_achievements_data[0]
        modified_achievement_name = portal_achievements_data[1][0]["name"]
        portal_achievements_data[1][0]["percent"] = 100
        handler.store_apps_achievements(session, [portal_achievements_data])

        modified_achievement = next(
            (
                achievement
                for achievement in portal_app.achievements
                if achievement.name == modified_achievement_name
            ),
            None,
        )
>       assert modified_achievement
E       assert None

tests/test_handler.py:149: AssertionError
______________________ test_duplicate_achievements_on_app ______________________

session = <sqlmodel.orm.session.Session object at 0x7f0b3e17fa90>
portal_app = SteamApp(updated=datetime.datetime(2023, 12, 28, 20, 0, 43, 231675), appid=620, initial_price=999, recommendations=215...core=95, is_free=False, created=datetime.datetime(2023, 12, 28, 20, 0, 43, 233092), achievements_total=51, type='game')
portal_achievements = None

    def test_duplicate_achievements_on_app(
        session: Session, portal_app: models.SteamApp, portal_achievements
    ):
        """App with duplicated achievements
        assert clear out achievements with updates
        """

        # duplicate the first achievement
>       first_achievement = portal_app.achievements[0]
E       IndexError: list index out of range

tests/test_handler.py:161: IndexError
=============================== warnings summary ===============================
tests/test_handler.py: 264 warnings
tests/test_main.py: 32 warnings
  /home/runner/work/steam-to-sqlite/steam-to-sqlite/steam2sqlite/handler.py:22: DeprecationWarning: 
          🚨 You probably want to use `session.exec()` instead of `session.query()`.

          `session.exec()` is SQLModel's own short version with increased type
          annotations.

          Or otherwise you might want to use `session.execute()` instead of
          `session.query()`.

    instance = session.query(model).filter_by(**kwargs).first()

tests/test_handler.py::test_ingest_item_twice
tests/test_handler.py::test_updates_on_diff_achievement_data
tests/test_handler.py::test_duplicate_achievements_on_app
tests/test_main.py::test_main
  /opt/hostedtoolcache/Python/3.11.7/x64/lib/python3.11/site-packages/sqlmodel/orm/session.py:68: SAWarning: Object of type <Achievement> not in session, add operation along 'SteamApp.achievements' will not proceed (This warning originated from the Session 'autoflush' process, which was invoked automatically in response to a user-initiated operation.)
    results = super().execute(

tests/test_handler.py::test_ingest_item_twice
tests/test_handler.py::test_updates_on_diff_achievement_data
tests/test_handler.py::test_duplicate_achievements_on_app
tests/test_main.py::test_main
  /home/runner/work/steam-to-sqlite/steam-to-sqlite/steam2sqlite/handler.py:62: SAWarning: Object of type <Achievement> not in session, add operation along 'SteamApp.achievements' will not proceed
    session.commit()

-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html

---------- coverage: platform linux, python 3.11.7-final-0 -----------
Coverage XML written to file coverage.xml

=========================== short test summary info ============================
FAILED tests/test_handler.py::test_ingest_item_twice - AssertionError: assert 0 == 51
 +  where 0 = len([])
 +  and   51 = SteamApp(updated=datetime.datetime(2023, 12, 28, 20, 0, 42, 881386), appid=620, initial_price=999, recommendations=215...core=95, is_free=False, created=datetime.datetime(2023, 12, 28, 20, 0, 42, 802579), achievements_total=51, type='game').achievements_total
FAILED tests/test_handler.py::test_updates_on_diff_achievement_data - assert None
FAILED tests/test_handler.py::test_duplicate_achievements_on_app - IndexError: list index out of range
================== 3 failed, 9 passed, 304 warnings in 9.31s ===================