Select Git revision
      
  workflow_steps.py
  test_survey.py  4.32 KiB 
import json
import jsonschema
from compendium_v2.db import db
from compendium_v2.db.survey_models import Survey, SurveyStatus
from compendium_v2.routes.survey import LIST_SURVEYS_RESPONSE_SCHEMA
def test_survey_route_list_response(client, test_survey_data, mocked_admin_user):
    rv = client.get(
        '/api/survey/list',
        headers={'Accept': ['application/json']})
    assert rv.status_code == 200
    result = json.loads(rv.data.decode('utf-8'))
    jsonschema.validate(result, LIST_SURVEYS_RESPONSE_SCHEMA)
    assert result
def test_survey_route_new(app, client, test_survey_data, mocked_user):
    rv = client.post(
        '/api/survey/new',
        headers={'Accept': ['application/json']})
    assert rv.status_code == 400
    result = json.loads(rv.data.decode('utf-8'))
    assert not result.get('success')
    # mark all surveys as published
    with app.app_context():
        for survey in db.session.query(Survey).all():
            survey.status = SurveyStatus.published
        db.session.commit()
    rv = client.post(
        '/api/survey/new',
        headers={'Accept': ['application/json']})
    assert rv.status_code == 200
    result = json.loads(rv.data.decode('utf-8'))
    assert result == {'success': True}
    rv = client.post(
        '/api/survey/new',
        headers={'Accept': ['application/json']})
    assert rv.status_code != 200
def test_survey_route_open_close(app, client, test_survey_data, mocked_user):
    rv = client.post(
        '/api/survey/new',
        headers={'Accept': ['application/json']})
    assert rv.status_code == 400
    result = json.loads(rv.data.decode('utf-8'))
    assert not result.get('success')
    # mark all surveys as published
    with app.app_context():
        for survey in db.session.query(Survey).all():
            survey.status = SurveyStatus.published
        db.session.commit()
    rv = client.post(
        '/api/survey/new',
        headers={'Accept': ['application/json']})
    assert rv.status_code == 200
    result = json.loads(rv.data.decode('utf-8'))
    assert result.get('success')
    rv = client.post(
        '/api/survey/open/2024',
        headers={'Accept': ['application/json']})
    assert rv.status_code == 200
    result = json.loads(rv.data.decode('utf-8'))
    assert result == {'success': True}
    rv = client.post(
        '/api/survey/open/2024',
        headers={'Accept': ['application/json']})
    assert rv.status_code != 200
    rv = client.post(
        '/api/survey/close/2024',
        headers={'Accept': ['application/json']})
    assert rv.status_code == 200
    result = json.loads(rv.data.decode('utf-8'))
    assert result == {'success': True}
    rv = client.post(
        '/api/survey/close/2024',
        headers={'Accept': ['application/json']})
    assert rv.status_code != 200
def test_survey_route_preview(app, client, test_survey_data, mocked_admin_user, mocker):
    rv = client.post(
        '/api/survey/preview/2023',
        headers={'Accept': ['application/json']})
    assert rv.status_code == 400
    result = json.loads(rv.data.decode('utf-8'))
    assert not result.get('success')
    with app.app_context():
        survey = db.session.query(Survey).filter(Survey.year == 2023).first()
        survey.status = SurveyStatus.closed
        db.session.commit()
    mocker.patch('compendium_v2.routes.survey.publish', lambda year: None)
    rv = client.post(
        '/api/survey/preview/2023',
        headers={'Accept': ['application/json']})
    assert rv.status_code == 200
    result = json.loads(rv.data.decode('utf-8'))
    assert result.get('success')
def test_survey_route_publish(app, client, test_survey_data, mocked_admin_user, mocker):
    rv = client.post(
        '/api/survey/publish/2023',
        headers={'Accept': ['application/json']})
    assert rv.status_code == 400
    result = json.loads(rv.data.decode('utf-8'))
    assert not result.get('success')
    with app.app_context():
        survey = db.session.query(Survey).filter(Survey.year == 2023).first()
        survey.status = SurveyStatus.preview
        db.session.commit()
    mocker.patch('compendium_v2.routes.survey.publish', lambda year: None)
    rv = client.post(
        '/api/survey/publish/2023',
        headers={'Accept': ['application/json']})
    assert rv.status_code == 200
    result = json.loads(rv.data.decode('utf-8'))
    assert result.get('success')