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
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"