Example #1
0
def client_fixture() -> Generator:
    app = runner_create_app()
    with app.test_client() as client, app.app_context():

        assert app.config["ENV"] == "test"

        from runner.extensions import db
        from runner.model import User
        from web.seed import get_or_create, seed

        db.drop_all()
        db.session.commit()

        db.create_all()
        db.session.commit()

        seed(db.session)

        get_or_create(
            db.session,
            User,
            full_name="Mr Cool",
            first_name="Mr",
            account_name="mr-cool",
            email="*****@*****.**",
        )

        yield client
def create_demo_task(year: int = 2025, sequence: int = 0) -> Tuple[int, int]:
    """Create demo project and task."""
    from scheduler.extensions import db

    # create a project
    project = get_or_create(
        db.session,
        Project,
        name="Project 1 " + str(datetime.now()),
        cron=1,
        cron_min="1",
        cron_start_date=datetime(year, 1, 1, tzinfo=tzlocal()),
        sequence_tasks=sequence,
        intv=1,
        intv_type="w",
        intv_start_date=datetime(9999, 1, 1, tzinfo=tzlocal()),
        ooff=1,
        ooff_date=datetime(9999, 1, 1, tzinfo=tzlocal()),
    )
    # create a task
    task = get_or_create(
        db.session,
        Task,
        name="Task 1 " + str(project.id),
        source_type_id=6,
        source_code="""select getdate()""",
        project_id=project.id,
        source_query_type_id=4,
        enabled=0,
    )
    return project.id, task.id
Example #3
0
def client_fixture() -> Generator:
    app = web_create_app()
    with app.test_client() as client, app.app_context():

        assert app.config["ENV"] == "test"

        from web.extensions import db
        from web.model import User
        from web.seed import get_or_create, seed

        db.drop_all()
        db.session.commit()

        db.create_all()
        db.session.commit()

        seed(db.session)

        get_or_create(
            db.session,
            User,
            full_name="Mr Cool",
            first_name="Mr",
            account_name="mr-cool",
            email="*****@*****.**",
        )

        # tests auto login and redirect
        assert client.get("/login").status_code == 302

        client.post(
            url_for("auth_bp.login"),
            data=dict(
                user="******",
                password="",
            ),
            follow_redirects=True,
        )

        if sys.platform == "darwin":
            print("killing 5002")
            subprocess.run(
                ["lsof -i :5002 | grep 'python' | awk '{print $2}' | xargs kill -9"],
                shell=True,
            )
            print("killing 5001")
            subprocess.run(
                ["lsof -i :5001 | grep 'python' | awk '{print $2}' | xargs kill -9"],
                shell=True,
            )

        yield client
def test_add_task(client_fixture: fixture) -> None:
    p_id, t_id = create_demo_task()

    page = client_fixture.get(f"/api/add/{t_id}")
    assert page.json == {"message": "Scheduler: task job added!"}
    assert page.status_code == 200

    # check that status is now enabled
    t = Task.query.get(t_id)
    assert t.enabled == 1

    # check that job is in the scheduler
    scheduled_task = atlas_scheduler.get_job(f"{p_id}-{t.id}-cron")
    assert scheduled_task.args[0] == str(t.id)
    assert (scheduled_task.next_run_time.isoformat() == datetime(
        2025, 1, 1, 0, 1, tzinfo=tzlocal()).isoformat())

    assert "cron[minute='1']" in str(scheduled_task.trigger)

    # check next run time
    assert (t.next_run.isoformat() == scheduled_task.next_run_time.replace(
        tzinfo=None).isoformat())

    # add a non-existing job
    page = client_fixture.get(f"/api/add/-1")
    assert page.json == {"error": "Invalid job."}
    assert page.status_code == 200

    # add a non-existing job
    page = client_fixture.get(f"/api/add/asdf")
    assert page.json == {"error": "Invalid job."}
    assert page.status_code == 200

    # enable and try to add
    Task.query.get(t_id).enabled = 1
    db.session.commit()

    t = Task.query.get(t_id)
    assert t.enabled == 1

    page = client_fixture.get(f"/api/add/{t_id}")
    assert page.json == {"message": "Scheduler: task job added!"}
    assert page.status_code == 200

    # add a cron
    p = get_or_create(
        db.session,
        Project,
        name="Project 1",
        cron=1,
        cron_min="1",
        cron_start_date=datetime(2000, 1, 1, tzinfo=tzlocal()),
        intv=0,
        ooff=0,
    )
    # create a task
    t = get_or_create(
        db.session,
        Task,
        name="Task 1",
        source_type_id=6,
        source_code="""select getdate()""",
        project_id=p.id,
        source_query_type_id=4,
        enabled=0,
    )
    page = client_fixture.get(f"/api/add/{t.id}")
    assert page.json == {"message": "Scheduler: task job added!"}
    assert page.status_code == 200

    # add a intv
    p = get_or_create(
        db.session,
        Project,
        name="Project 1",
        intv=1,
        intv_type="w",
        intv_start_date=datetime(2000, 1, 1, tzinfo=tzlocal()),
        cron=0,
        ooff=0,
    )
    # create a task
    t = get_or_create(
        db.session,
        Task,
        name="Task 1",
        source_type_id=6,
        source_code="""select getdate()""",
        project_id=p.id,
        source_query_type_id=4,
        enabled=0,
    )
    page = client_fixture.get(f"/api/add/{t.id}")
    assert page.json == {"message": "Scheduler: task job added!"}
    assert page.status_code == 200

    # add a ooff
    p = get_or_create(
        db.session,
        Project,
        name="Project 1",
        ooff=1,
        ooff_date=datetime(2000, 1, 1, tzinfo=tzlocal()),
        cron=0,
        intv=0,
    )
    # create a task
    t = get_or_create(
        db.session,
        Task,
        name="Task 1",
        source_type_id=6,
        source_code="""select getdate()""",
        project_id=p.id,
        source_query_type_id=4,
        enabled=0,
    )
    page = client_fixture.get(f"/api/add/{t.id}")
    assert page.json == {"message": "Scheduler: task job added!"}
    assert page.status_code == 200
def test_get_user_id(client_fixture: fixture) -> None:
    u = get_or_create(db.session, User, email="nothing")
    assert u.get_id() == "1"