Skip to content

Commit

Permalink
Fix existing tests so they work with new models
Browse files Browse the repository at this point in the history
  • Loading branch information
Robin5605 committed Feb 22, 2024
1 parent 8589638 commit 5d0e528
Show file tree
Hide file tree
Showing 7 changed files with 171 additions and 144 deletions.
23 changes: 9 additions & 14 deletions tests/conftest.py
Original file line number Diff line number Diff line change
@@ -1,21 +1,20 @@
import logging
from copy import deepcopy
from datetime import datetime, timedelta
from typing import Generator
from unittest.mock import MagicMock

import pytest
import requests
from letsbuilda.pypi import PyPIServices
from letsbuilda.pypi.models import Package
from letsbuilda.pypi.models import Package as PyPIPackage
from letsbuilda.pypi.models.models_package import Distribution, Release
from msgraph.core import GraphClient
from sqlalchemy import Engine, create_engine
from sqlalchemy.orm import Session, sessionmaker

from mainframe.constants import mainframe_settings
from mainframe.json_web_token import AuthenticationData
from mainframe.models.orm import Base, Scan
from mainframe.models.orm import Base, Package
from mainframe.rules import Rules

from .test_data import data
Expand All @@ -34,19 +33,15 @@ def engine() -> Engine:
return create_engine(mainframe_settings.db_url)


@pytest.fixture(params=data, scope="session")
def test_data(request: pytest.FixtureRequest) -> list[Scan]:
return request.param


@pytest.fixture(scope="session", autouse=True)
def initial_populate_db(engine: Engine, sm: sessionmaker[Session], test_data: list[Scan]):
@pytest.fixture(params=data, scope="session", autouse=True)
def initial_populate_db(request: pytest.FixtureRequest, engine: Engine, sm: sessionmaker[Session]):
Base.metadata.drop_all(engine)
Base.metadata.create_all(engine)

packages: list[Package] = request.param

session = sm()
for scan in test_data:
session.add(deepcopy(scan))
session.add_all(packages)
session.commit()


Expand Down Expand Up @@ -86,8 +81,8 @@ def pypi_client() -> PyPIServices:
session = requests.Session()
pypi_client = PyPIServices(session)

def side_effect(name: str, version: str) -> Package:
return Package(
def side_effect(name: str, version: str) -> PyPIPackage:
return PyPIPackage(
title=name,
releases=[Release(version=version, distributions=[Distribution(filename="test", url="test")])],
)
Expand Down
79 changes: 42 additions & 37 deletions tests/test_data/first_safe_second_malicious.py
Original file line number Diff line number Diff line change
@@ -1,44 +1,49 @@
from datetime import datetime

from mainframe.models.orm import Rule, Scan, Status
from mainframe.models.orm import Package, Rule, Scan, Status

data = [
Scan(
Package(
name="a",
version="0.1.0",
status=Status.FINISHED,
score=0,
inspector_url=None,
queued_at=datetime.fromisoformat("2023-05-12T18:00:00+00:00"),
queued_by="remmy",
pending_at=datetime.fromisoformat("2023-05-12T18:30:00+00:00"),
pending_by="remmy",
finished_at=datetime.fromisoformat("2023-05-12T19:00:00+00:00"),
finished_by="remmy",
reported_at=None,
reported_by=None,
rules=[],
download_urls=[],
commit_hash=None,
fail_reason=None,
),
Scan(
name="a",
version="0.2.0",
status=Status.FINISHED,
score=10,
inspector_url="some inspector URL",
queued_at=datetime.fromisoformat("2023-05-12T19:00:00+00:00"),
queued_by="remmy",
pending_at=datetime.fromisoformat("2023-05-12T19:30:00+00:00"),
pending_by="remmy",
finished_at=datetime.fromisoformat("2023-05-12T20:00:00+00:00"),
finished_by="remmy",
reported_at=None,
reported_by=None,
download_urls=[],
rules=[Rule(name="test rule 1")],
commit_hash="test commit hash",
fail_reason=None,
scans=[
Scan(
name="a",
version="0.1.0",
status=Status.FINISHED,
score=0,
inspector_url=None,
queued_at=datetime.fromisoformat("2023-05-12T18:00:00+00:00"),
queued_by="remmy",
pending_at=datetime.fromisoformat("2023-05-12T18:30:00+00:00"),
pending_by="remmy",
finished_at=datetime.fromisoformat("2023-05-12T19:00:00+00:00"),
finished_by="remmy",
reported_at=None,
reported_by=None,
rules=[],
download_urls=[],
commit_hash=None,
fail_reason=None,
),
Scan(
name="a",
version="0.2.0",
status=Status.FINISHED,
score=10,
inspector_url="some inspector URL",
queued_at=datetime.fromisoformat("2023-05-12T19:00:00+00:00"),
queued_by="remmy",
pending_at=datetime.fromisoformat("2023-05-12T19:30:00+00:00"),
pending_by="remmy",
finished_at=datetime.fromisoformat("2023-05-12T20:00:00+00:00"),
finished_by="remmy",
reported_at=None,
reported_by=None,
download_urls=[],
rules=[Rule(name="test rule 1")],
commit_hash="test commit hash",
fail_reason=None,
),
],
),
]
156 changes: 83 additions & 73 deletions tests/test_data/sample.py
Original file line number Diff line number Diff line change
@@ -1,82 +1,92 @@
from datetime import datetime

from mainframe.models.orm import Scan, Status
from mainframe.models.orm import Package, Scan, Status

data = [
Scan(
Package(
name="a",
version="0.1.0",
status=Status.FINISHED,
score=0,
inspector_url=None,
queued_at=datetime.fromisoformat("2023-05-12T18:00:00+00:00"),
queued_by="remmy",
pending_at=datetime.fromisoformat("2023-05-12T18:30:00+00:00"),
pending_by="remmy",
finished_at=datetime.fromisoformat("2023-05-12T19:00:00+00:00"),
finished_by="remmy",
reported_at=None,
reported_by=None,
rules=[],
download_urls=[],
commit_hash=None,
fail_reason=None,
scans=[
Scan(
name="a",
version="0.1.0",
status=Status.FINISHED,
score=0,
inspector_url=None,
queued_at=datetime.fromisoformat("2023-05-12T18:00:00+00:00"),
queued_by="remmy",
pending_at=datetime.fromisoformat("2023-05-12T18:30:00+00:00"),
pending_by="remmy",
finished_at=datetime.fromisoformat("2023-05-12T19:00:00+00:00"),
finished_by="remmy",
reported_at=None,
reported_by=None,
rules=[],
download_urls=[],
commit_hash=None,
fail_reason=None,
),
Scan(
name="a",
version="0.2.0",
status=Status.QUEUED,
score=None,
inspector_url=None,
queued_at=datetime.fromisoformat("2023-05-12T17:00:00+00:00"),
queued_by="remmy",
pending_at=None,
pending_by=None,
finished_at=None,
finished_by=None,
reported_at=None,
reported_by=None,
rules=[],
download_urls=[],
commit_hash=None,
fail_reason=None,
),
],
),
Scan(
Package(
name="b",
version="0.1.0",
status=Status.FINISHED,
score=0,
inspector_url=None,
queued_at=datetime.fromisoformat("2023-05-12T15:00:00+00:00"),
queued_by="remmy",
pending_at=datetime.fromisoformat("2023-05-12T16:00:00+00:00"),
pending_by="remmy",
finished_at=datetime.fromisoformat("2023-05-12T16:30:00+00:00"),
finished_by="remmy",
reported_at=None,
reported_by=None,
rules=[],
download_urls=[],
commit_hash="test commit hash",
fail_reason=None,
),
Scan(
name="a",
version="0.2.0",
status=Status.QUEUED,
score=None,
inspector_url=None,
queued_at=datetime.fromisoformat("2023-05-12T17:00:00+00:00"),
queued_by="remmy",
pending_at=None,
pending_by=None,
finished_at=None,
finished_by=None,
reported_at=None,
reported_by=None,
rules=[],
download_urls=[],
commit_hash=None,
fail_reason=None,
),
Scan(
name="b",
version="0.2.0",
status=Status.PENDING,
score=None,
inspector_url=None,
queued_at=datetime.fromisoformat("2023-05-12T19:00:00+00:00"),
queued_by="remmy",
pending_at=datetime.fromisoformat("2023-05-12T20:00:00+00:00"),
pending_by="remmy",
finished_at=None,
finished_by=None,
reported_at=None,
reported_by=None,
rules=[],
download_urls=[],
commit_hash=None,
fail_reason=None,
scans=[
Scan(
name="b",
version="0.1.0",
status=Status.FINISHED,
score=0,
inspector_url=None,
queued_at=datetime.fromisoformat("2023-05-12T15:00:00+00:00"),
queued_by="remmy",
pending_at=datetime.fromisoformat("2023-05-12T16:00:00+00:00"),
pending_by="remmy",
finished_at=datetime.fromisoformat("2023-05-12T16:30:00+00:00"),
finished_by="remmy",
reported_at=None,
reported_by=None,
rules=[],
download_urls=[],
commit_hash="test commit hash",
fail_reason=None,
),
Scan(
name="b",
version="0.2.0",
status=Status.PENDING,
score=None,
inspector_url=None,
queued_at=datetime.fromisoformat("2023-05-12T19:00:00+00:00"),
queued_by="remmy",
pending_at=datetime.fromisoformat("2023-05-12T20:00:00+00:00"),
pending_by="remmy",
finished_at=None,
finished_by=None,
reported_at=None,
reported_by=None,
rules=[],
download_urls=[],
commit_hash=None,
fail_reason=None,
),
],
),
]
12 changes: 8 additions & 4 deletions tests/test_job.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,8 @@ def oldest_queued_package(db_session: Session):
return db_session.scalar(select(func.min(Scan.queued_at)).where(Scan.status == Status.QUEUED))


def test_min_queue_date_of_queued_rows(test_data: list[Scan], db_session: Session):
def test_min_queue_date_of_queued_rows(db_session: Session):
test_data = db_session.scalars(select(Scan)).all()
queued_at_times = [
scan.queued_at for scan in test_data if scan.status is Status.QUEUED and scan.queued_at is not None
]
Expand All @@ -28,12 +29,14 @@ def fetch_queue_time(name: str, version: str, db_session: Session) -> dt.datetim
return db_session.scalar(select(Scan.queued_at).where(Scan.name == name).where(Scan.version == version))


def test_fetch_queue_time(test_data: list[Scan], db_session: Session):
def test_fetch_queue_time(db_session: Session):
test_data = db_session.scalars(select(Scan)).all()
for scan in test_data:
assert scan.queued_at == fetch_queue_time(scan.name, scan.version, db_session)


def test_job(test_data: list[Scan], db_session: Session, auth: AuthenticationData, rules_state: Rules):
def test_job(db_session: Session, auth: AuthenticationData, rules_state: Rules):
test_data = db_session.scalars(select(Scan)).all()
job = get_jobs(db_session, auth, rules_state, batch=1)
if job:
job = job[0]
Expand All @@ -47,7 +50,8 @@ def test_job(test_data: list[Scan], db_session: Session, auth: AuthenticationDat
assert all(scan.status != Status.QUEUED for scan in test_data)


def test_batch_job(test_data: list[Scan], db_session: Session, auth: AuthenticationData, rules_state: Rules):
def test_batch_job(db_session: Session, auth: AuthenticationData, rules_state: Rules):
test_data = db_session.scalars(select(Scan)).all()
jobs = {(job.name, job.version) for job in get_jobs(db_session, auth, rules_state, batch=len(test_data))}

# check if each returned job should have actually been returned
Expand Down
Loading

0 comments on commit 5d0e528

Please sign in to comment.