Ejemplo n.º 1
0
def test_snapshot_recent():
    pkg0 = Package.create(steamid='12', kind='game')
    pkg1 = Package.create(steamid='13', kind='game')
    apidata0 = {
        'price': {
            'currency': 'EUR',
            'final': 1500,
        },
        'platforms': {
            'linux': True,
        },
        'release_date': {
            'date': '02 September, 2015',
            'coming_soon': True
        }
    }
    apidata1 = apidata0.copy()
    apidata1.update(price={'currency': 'EUR', 'final': 2000})

    apidata2 = apidata0.copy()
    apidata2.update(price={'currency': 'EUR', 'final': 3000})

    apidata3 = apidata0.copy()
    apidata3.update(price={'currency': 'EUR', 'final': 4000})

    ss0 = pkg0.record_snapshot(apidata0)
    ss1 = pkg1.record_snapshot(apidata1)
    ss2 = pkg0.record_snapshot(apidata2)
    ss3 = pkg1.record_snapshot(apidata3)

    recent = Snapshot.recent(limit=3)
    assert len(recent) == 3
    assert recent[0].timestamp > recent[1].timestamp
Ejemplo n.º 2
0
def test_snapshot_recent():
    pkg0 = Package.create(steamid='12', kind='game')
    pkg1 = Package.create(steamid='13', kind='game')
    apidata0 = {
        'price': {
            'currency': 'EUR',
            'final': 1500,
        },
        'platforms': {
            'linux': True,
        },
        'release_date': {
            'date': '02 September, 2015',
            'coming_soon': True
        }
    }
    apidata1 = apidata0.copy()
    apidata1.update(price={'currency': 'EUR', 'final': 2000})

    apidata2 = apidata0.copy()
    apidata2.update(price={'currency': 'EUR', 'final': 3000})

    apidata3 = apidata0.copy()
    apidata3.update(price={'currency': 'EUR', 'final': 4000})

    ss0 = pkg0.record_snapshot(apidata0)
    ss1 = pkg1.record_snapshot(apidata1)
    ss2 = pkg0.record_snapshot(apidata2)
    ss3 = pkg1.record_snapshot(apidata3)

    recent = Snapshot.recent(limit=3)
    assert len(recent) == 3
    assert recent[0].timestamp > recent[1].timestamp
Ejemplo n.º 3
0
def test_app_package_link():
    app = App.create(steamid='6', kind='game')
    pkg0 = Package.create(steamid='6')
    pkg1 = Package.create(steamid='7')

    pkg0.link(app)
    pkg1.link(app)

    assert pkg0 in app.packages
    assert pkg1 in app.packages
    assert app in pkg0.apps
    assert app in pkg1.apps
Ejemplo n.º 4
0
def test_app_package_link():
    app = App.create(steamid='6', kind='game')
    pkg0 = Package.create(steamid='6')
    pkg1 = Package.create(steamid='7')

    pkg0.link(app)
    pkg1.link(app)

    assert pkg0 in app.packages
    assert pkg1 in app.packages
    assert app in pkg0.apps
    assert app in pkg1.apps
Ejemplo n.º 5
0
def test_snapshot_diff():
    pkg = Package.create(steamid='11', kind='game')
    apidata0 = {
        'price': {
            'currency': 'EUR',
            'final': 1500,
        },
        'platforms': {
            'linux': True,
        },
        'release_date': {
            'date': '02 September, 2015',
            'coming_soon': True
        }
    }
    ss0 = Snapshot.from_apidata(pkg, apidata0)

    apidata1 = {
        'price': {
            'currency': 'EUR',
            'final': 1500,
        },
        'platforms': {
            'linux': False,
        },
        'release_date': {
            'date': '02 September, 2015',
            'coming_soon': True
        }
    }
    ss1 = Snapshot.from_apidata(pkg, apidata1)
    assert ss0.is_different(ss1)

    ss2 = Snapshot.from_apidata(pkg, apidata1)
    assert not ss1.is_different(ss1)
Ejemplo n.º 6
0
def test_package_record_snapshot():
    package = Package.create(steamid='04', kind='game')
    apidata0 = {
        'price': {
            'currency': 'EUR',
            'final': 1500,
        },
        'platforms': {
            'linux': True,
        },
        'release_date': {
            'date': '02 September, 2015',
            'coming_soon': True
        }
    }
    apidata1 = {
        'price': {
            'currency': 'EUR',
            'final': 1500,
        },
        'platforms': {
            'linux': False,
        },
        'release_date': {
            'date': '02 September, 2015',
            'coming_soon': True
        }
    }

    assert package.snapshots.count() == 0  # precondition
    package.record_snapshot(apidata0)
    package.record_snapshot(apidata0)  # twice
    assert package.snapshots.count() == 1
    package.record_snapshot(apidata1)
    assert package.snapshots.count() == 2
Ejemplo n.º 7
0
def test_recent_snapshots():
    package = Package.create(steamid='05', kind='game')
    apidata0 = {
        'price': {
            'currency': 'EUR',
            'final': 1500,
        },
        'platforms': {
            'linux': True,
        },
        'release_date': {
            'date': '02 September, 2015',
            'coming_soon': True
        }
    }
    apidata1 = apidata0.copy()
    apidata1.update(price={'currency': 'EUR', 'final': 2000})
    apidata2 = apidata0.copy()
    apidata2.update(price={'currency': 'EUR', 'final': 2500})

    ss0 = package.record_snapshot(apidata0)
    ss1 = package.record_snapshot(apidata1)
    ss2 = package.record_snapshot(apidata2)

    assert ss0.timestamp != ss1.timestamp != ss2.timestamp  # precondition

    recent = package.recent_snapshots(limit=2)
    assert len(recent) == 2
    assert recent[0].timestamp > recent[1].timestamp
    assert recent[0].price == 2500
Ejemplo n.º 8
0
def test_snapshot_diff():
    pkg = Package.create(steamid='11', kind='game')
    apidata0 = {
        'price': {
            'currency': 'EUR',
            'final': 1500,
        },
        'platforms': {
            'linux': True,
        },
        'release_date': {
            'date': '02 September, 2015',
            'coming_soon': True
        }
    }
    ss0 = Snapshot.from_apidata(pkg, apidata0)

    apidata1 = {
        'price': {
            'currency': 'EUR',
            'final': 1500,
        },
        'platforms': {
            'linux': False,
        },
        'release_date': {
            'date': '02 September, 2015',
            'coming_soon': True
        }
    }
    ss1 = Snapshot.from_apidata(pkg, apidata1)
    assert ss0.is_different(ss1)

    ss2 = Snapshot.from_apidata(pkg, apidata1)
    assert not ss1.is_different(ss1)
Ejemplo n.º 9
0
def test_recent_snapshots():
    package = Package.create(steamid='05', kind='game')
    apidata0 = {
        'price': {
            'currency': 'EUR',
            'final': 1500,
        },
        'platforms': {
            'linux': True,
        },
        'release_date': {
            'date': '02 September, 2015',
            'coming_soon': True
        }
    }
    apidata1 = apidata0.copy()
    apidata1.update(price={'currency': 'EUR', 'final': 2000})
    apidata2 = apidata0.copy()
    apidata2.update(price={'currency': 'EUR', 'final': 2500})

    ss0 = package.record_snapshot(apidata0)
    ss1 = package.record_snapshot(apidata1)
    ss2 = package.record_snapshot(apidata2)

    assert ss0.timestamp != ss1.timestamp != ss2.timestamp  # precondition

    recent = package.recent_snapshots(limit=2)
    assert len(recent) == 2
    assert recent[0].timestamp > recent[1].timestamp
    assert recent[0].price == 2500
Ejemplo n.º 10
0
def test_package_record_snapshot():
    package = Package.create(steamid='04', kind='game')
    apidata0 = {
        'price': {
            'currency': 'EUR',
            'final': 1500,
        },
        'platforms': {
            'linux': True,
        },
        'release_date': {
            'date': '02 September, 2015',
            'coming_soon': True
        }
    }
    apidata1 = {
        'price': {
            'currency': 'EUR',
            'final': 1500,
        },
        'platforms': {
            'linux': False,
        },
        'release_date': {
            'date': '02 September, 2015',
            'coming_soon': True
        }
    }

    assert package.snapshots.count() == 0  # precondition
    package.record_snapshot(apidata0)
    package.record_snapshot(apidata0)  # twice
    assert package.snapshots.count() == 1
    package.record_snapshot(apidata1)
    assert package.snapshots.count() == 2
Ejemplo n.º 11
0
def test_package():
    pkg = Package.create(
        steamid='01',
        name='My Package'
    )
    assert pkg.id is not None
    assert pkg.steamid == '01'
    assert pkg.name == 'My Package'
Ejemplo n.º 12
0
    def fetch(self, app):
        '''Fetch updates for the given game.

        Emit the ``xxx_changed`` signals if a game's property is updated.

        :param object app:
            The :class:`App` to be updated.
        '''
        if not app.enabled:
            LOG.warning('{a!r} is disabled and will not be updated.'.format(
                a=app))
            # TODO returning w/o saying anything is not ok
            # raise error or update anyway (and skip disabled in fetch_all)
            return

        appdata = storeapi.appdetails(
            app.steamid,
            country_code=self.country_code
        )
        # `packages` may be string or int
        found = [str(x) for x in appdata.get('packages', [])]
        existing = {p.steamid: p for p in app.packages}
        for packageid in found:
            try:
                pkgdata = storeapi.packagedetails(
                    packageid,
                    country_code=self.country_code
                )
                if packageid in existing:
                    pkg = existing[packageid]
                else:
                    # might be present but not linked to this app
                    pkg = Package.by_steamid(packageid)
                    if not pkg:
                        # not yet in db - create it
                        pkg = Package.from_apidata(packageid, pkgdata)
                    pkg.link(app)
                    self._signal(SIGNAL_PACKAGE_LINKED, package=pkg, app=app)

                snapshot = pkg.record_snapshot(pkgdata)
                if snapshot:
                    self._signal_changes(snapshot)
            except GameNotFoundError:
                LOG.warning('Game not %s found.', packageid)
                continue
Ejemplo n.º 13
0
def test_package_from_apidata():
    d = {
        'name': 'My Package',
    }
    pkg = Package.from_apidata('02', d)

    assert pkg.id is not None
    assert pkg.steamid == '02'
    assert pkg.name == 'My Package'
Ejemplo n.º 14
0
def test_package_from_apidata():
    d = {
        'name': 'My Package',
    }
    pkg = Package.from_apidata('02', d)

    assert pkg.id is not None
    assert pkg.steamid == '02'
    assert pkg.name == 'My Package'
Ejemplo n.º 15
0
    def fetch(self, app):
        '''Fetch updates for the given game.

        Emit the ``xxx_changed`` signals if a game's property is updated.

        :param object app:
            The :class:`App` to be updated.
        '''
        if not app.enabled:
            LOG.warning(
                '{a!r} is disabled and will not be updated.'.format(a=app))
            # TODO returning w/o saying anything is not ok
            # raise error or update anyway (and skip disabled in fetch_all)
            return

        appdata = storeapi.appdetails(app.steamid,
                                      country_code=self.country_code)
        # `packages` may be string or int
        found = [str(x) for x in appdata.get('packages', [])]
        existing = {p.steamid: p for p in app.packages}
        for packageid in found:
            try:
                pkgdata = storeapi.packagedetails(
                    packageid, country_code=self.country_code)
                if packageid in existing:
                    pkg = existing[packageid]
                else:
                    # might be present but not linked to this app
                    pkg = Package.by_steamid(packageid)
                    if not pkg:
                        # not yet in db - create it
                        pkg = Package.from_apidata(packageid, pkgdata)
                    pkg.link(app)
                    self._signal(SIGNAL_PACKAGE_LINKED, package=pkg, app=app)

                snapshot = pkg.record_snapshot(pkgdata)
                if snapshot:
                    self._signal_changes(snapshot)
            except GameNotFoundError:
                LOG.warning('Game not %s found.', packageid)
                continue
Ejemplo n.º 16
0
def test_snapshot_previous():
    pkg = Package.create(steamid='9', kind='game')
    other_pkg = Package.create(steamid='10', kind='game')
    unrelated = Snapshot.create(
        package=other_pkg,
        timestamp=datetime.datetime(2015, 9, 19, 9, 0, 0),  # before first
        currency='EUR',
        price=123,
        supports_linux=True,
    )
    first = Snapshot.create(
        package=pkg,
        timestamp=datetime.datetime(2015, 9, 19, 10, 0, 0),  # different
        currency='EUR',
        price=123,
        supports_linux=True,
    )
    second = Snapshot.create(
        package=pkg,
        timestamp=datetime.datetime(2015, 9, 19, 11, 0, 0),  # different
        currency='EUR',
        price=123,
        supports_linux=True,
    )
    third = Snapshot.create(
        package=pkg,
        timestamp=datetime.datetime(2015, 9, 19, 12, 0, 0),  # different
        currency='EUR',
        price=123,
        supports_linux=True,
    )

    assert first.previous is None
    assert second.previous == first
    assert third.previous == second

    assert second.previous.package == first.package
Ejemplo n.º 17
0
def test_snapshot_previous():
    pkg = Package.create(steamid='9', kind='game')
    other_pkg = Package.create(steamid='10', kind='game')
    unrelated = Snapshot.create(
        package=other_pkg,
        timestamp=datetime.datetime(2015,9,19,9,0,0),  # before first
        currency='EUR',
        price=123,
        supports_linux=True,
    )
    first = Snapshot.create(
        package=pkg,
        timestamp=datetime.datetime(2015,9,19,10,0,0),  # different
        currency='EUR',
        price=123,
        supports_linux=True,
    )
    second = Snapshot.create(
        package=pkg,
        timestamp=datetime.datetime(2015,9,19,11,0,0),  # different
        currency='EUR',
        price=123,
        supports_linux=True,
    )
    third = Snapshot.create(
        package=pkg,
        timestamp=datetime.datetime(2015,9,19,12,0,0),  # different
        currency='EUR',
        price=123,
        supports_linux=True,
    )

    assert first.previous is None
    assert second.previous == first
    assert third.previous == second

    assert second.previous.package == first.package
Ejemplo n.º 18
0
def test_snapshot_create():
    pkg = Package.create(steamid='8', kind='game')
    apidata = {
        'price': {
            'currency': 'EUR',
            'final': 1500,
        },
        'platforms': {
            'linux': True,
        },
        'release_date': {
            'date': '02 September, 2015',
            'coming_soon': True
        }
    }
    ss = Snapshot.from_apidata(pkg, apidata)
    assert ss.price == 1500
    assert ss.currency == 'EUR'
    assert ss.supports_linux
    assert ss.release_date == datetime.date(2015,9,2)
    assert ss.coming_soon
    assert ss.timestamp is not None
    assert ss.id is None
Ejemplo n.º 19
0
def test_snapshot_create():
    pkg = Package.create(steamid='8', kind='game')
    apidata = {
        'price': {
            'currency': 'EUR',
            'final': 1500,
        },
        'platforms': {
            'linux': True,
        },
        'release_date': {
            'date': '02 September, 2015',
            'coming_soon': True
        }
    }
    ss = Snapshot.from_apidata(pkg, apidata)
    assert ss.price == 1500
    assert ss.currency == 'EUR'
    assert ss.supports_linux
    assert ss.release_date == datetime.date(2015, 9, 2)
    assert ss.coming_soon
    assert ss.timestamp is not None
    assert ss.id is None
Ejemplo n.º 20
0
def test_package_integrity():
    Package.create(steamid='03', kind='game')
    with pytest.raises(IntegrityError):
        Package.create(steamid='03', kind='game')
Ejemplo n.º 21
0
def test_package_integrity():
    Package.create(steamid='03', kind='game')
    with pytest.raises(IntegrityError):
        Package.create(steamid='03', kind='game')
Ejemplo n.º 22
0
def test_package():
    pkg = Package.create(steamid='01', name='My Package')
    assert pkg.id is not None
    assert pkg.steamid == '01'
    assert pkg.name == 'My Package'
Ejemplo n.º 23
0
def test_app_package_create():
    app = App.create(steamid='5', kind='game')
    pkg = Package.create(steamid='5')
    app_pkg = AppPackage.create(app=app, package=pkg)
    assert app_pkg.app.id == app.id
    assert app_pkg.package.id == pkg.id
Ejemplo n.º 24
0
def test_app_package_create():
    app = App.create(steamid='5', kind='game')
    pkg = Package.create(steamid='5')
    app_pkg = AppPackage.create(app=app, package=pkg)
    assert app_pkg.app.id == app.id
    assert app_pkg.package.id == pkg.id