New study status update

This commit is contained in:
Carlos Lopez 2020-07-30 21:03:11 -06:00
parent de49397549
commit 5d23223e51
11 changed files with 105 additions and 80 deletions

View File

@ -1062,9 +1062,9 @@ components:
user_uid: user_uid:
type: string type: string
example: dhf8r example: dhf8r
protocol_builder_status: status:
type: string type: string
enum: ['incomplete', 'active', 'hold', 'open', 'abandoned'] enum: ['in progress', 'hold', 'open for enrollment', 'abandoned']
example: done example: done
sponsor: sponsor:
type: string type: string

View File

@ -6,7 +6,7 @@ from sqlalchemy.exc import IntegrityError
from crc import session from crc import session
from crc.api.common import ApiError, ApiErrorSchema from crc.api.common import ApiError, ApiErrorSchema
from crc.models.protocol_builder import ProtocolBuilderStatus from crc.models.protocol_builder import ProtocolBuilderStatus
from crc.models.study import StudySchema, StudyModel, Study from crc.models.study import Study, StudyModel, StudySchema, StudyStatus
from crc.services.study_service import StudyService from crc.services.study_service import StudyService
@ -21,7 +21,7 @@ def add_study(body):
title=body['title'], title=body['title'],
primary_investigator_id=body['primary_investigator_id'], primary_investigator_id=body['primary_investigator_id'],
last_updated=datetime.now(), last_updated=datetime.now(),
protocol_builder_status=ProtocolBuilderStatus.active) status=StudyStatus.in_progress)
session.add(study_model) session.add(study_model)
errors = StudyService._add_all_workflow_specs_to_study(study_model) errors = StudyService._add_all_workflow_specs_to_study(study_model)

View File

@ -17,6 +17,7 @@ class ProtocolBuilderInvestigatorType(enum.Enum):
SCI = "Scientific Contact" SCI = "Scientific Contact"
# Deprecated: Marked for removal
class ProtocolBuilderStatus(enum.Enum): class ProtocolBuilderStatus(enum.Enum):
# • Active: found in PB and no HSR number and not hold # • Active: found in PB and no HSR number and not hold
# • Hold: store boolean value in CR Connect (add to Study Model) # • Hold: store boolean value in CR Connect (add to Study Model)

View File

@ -1,4 +1,5 @@
import datetime import datetime
import enum
import json import json
import marshmallow import marshmallow
@ -14,12 +15,26 @@ from crc.models.workflow import WorkflowSpecCategoryModel, WorkflowState, Workfl
WorkflowModel WorkflowModel
class StudyStatus(enum.Enum):
in_progress = 'in progress'
hold = 'hold'
open_for_enrollment = 'open for enrollment'
abandoned = 'abandoned'
class IrbStatus(enum.Enum):
incomplete_in_protocol_builder = 'incomplete in protocol builder'
completed_in_protocol_builder = 'completed in protocol builder'
hsr_assigned = 'hsr number assigned'
class StudyModel(db.Model): class StudyModel(db.Model):
__tablename__ = 'study' __tablename__ = 'study'
id = db.Column(db.Integer, primary_key=True) id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String) title = db.Column(db.String)
last_updated = db.Column(db.DateTime(timezone=True), default=func.now()) last_updated = db.Column(db.DateTime(timezone=True), default=func.now())
protocol_builder_status = db.Column(db.Enum(ProtocolBuilderStatus)) status = db.Column(db.Enum(StudyStatus))
irb_status = db.Column(db.Enum(IrbStatus))
primary_investigator_id = db.Column(db.String, nullable=True) primary_investigator_id = db.Column(db.String, nullable=True)
sponsor = db.Column(db.String, nullable=True) sponsor = db.Column(db.String, nullable=True)
hsr_number = db.Column(db.String, nullable=True) hsr_number = db.Column(db.String, nullable=True)
@ -29,7 +44,6 @@ class StudyModel(db.Model):
requirements = db.Column(db.ARRAY(db.Integer), nullable=True) requirements = db.Column(db.ARRAY(db.Integer), nullable=True)
on_hold = db.Column(db.Boolean, default=False) on_hold = db.Column(db.Boolean, default=False)
enrollment_date = db.Column(db.DateTime(timezone=True), nullable=True) enrollment_date = db.Column(db.DateTime(timezone=True), nullable=True)
changes_history = db.Column(db.JSON, nullable=True)
def update_from_protocol_builder(self, pbs: ProtocolBuilderStudy): def update_from_protocol_builder(self, pbs: ProtocolBuilderStudy):
self.hsr_number = pbs.HSRNUMBER self.hsr_number = pbs.HSRNUMBER
@ -37,11 +51,13 @@ class StudyModel(db.Model):
self.user_uid = pbs.NETBADGEID self.user_uid = pbs.NETBADGEID
self.last_updated = pbs.DATE_MODIFIED self.last_updated = pbs.DATE_MODIFIED
self.protocol_builder_status = ProtocolBuilderStatus.active self.irb_status = IrbStatus.incomplete_in_protocol_builder
self.status = StudyStatus.in_progress
if pbs.HSRNUMBER: if pbs.HSRNUMBER:
self.protocol_builder_status = ProtocolBuilderStatus.open self.irb_status = IrbStatus.hsr_assigned
self.status = StudyStatus.open_for_enrollment
if self.on_hold: if self.on_hold:
self.protocol_builder_status = ProtocolBuilderStatus.hold self.status = StudyStatus.hold
class WorkflowMetadata(object): class WorkflowMetadata(object):
@ -112,15 +128,15 @@ class CategorySchema(ma.Schema):
class Study(object): class Study(object):
def __init__(self, title, last_updated, primary_investigator_id, user_uid, def __init__(self, title, last_updated, primary_investigator_id, user_uid,
id=None, id=None, status=None, irb_status=None,
protocol_builder_status=None,
sponsor="", hsr_number="", ind_number="", categories=[], sponsor="", hsr_number="", ind_number="", categories=[],
files=[], approvals=[], enrollment_date=None, **argsv): files=[], approvals=[], enrollment_date=None, **argsv):
self.id = id self.id = id
self.user_uid = user_uid self.user_uid = user_uid
self.title = title self.title = title
self.last_updated = last_updated self.last_updated = last_updated
self.protocol_builder_status = protocol_builder_status self.status = status
self.irb_status = irb_status
self.primary_investigator_id = primary_investigator_id self.primary_investigator_id = primary_investigator_id
self.sponsor = sponsor self.sponsor = sponsor
self.hsr_number = hsr_number self.hsr_number = hsr_number
@ -142,25 +158,25 @@ class Study(object):
"""As the case for update was very reduced, it's mostly and specifically """As the case for update was very reduced, it's mostly and specifically
updating only the study status and generating a history record updating only the study status and generating a history record
""" """
pb_status = ProtocolBuilderStatus(self.protocol_builder_status) status = StudyStatus(self.status)
study_model.last_updated = datetime.datetime.now() study_model.last_updated = datetime.datetime.now()
study_model.protocol_builder_status = pb_status study_model.status = status
if pb_status == ProtocolBuilderStatus.open: if status == StudyStatus.open_for_enrollment:
study_model.enrollment_date = self.enrollment_date study_model.enrollment_date = self.enrollment_date
change = { # change = {
'status': ProtocolBuilderStatus(self.protocol_builder_status).value, # 'status': ProtocolBuilderStatus(self.protocol_builder_status).value,
'comment': '' if not hasattr(self, 'comment') else self.comment, # 'comment': '' if not hasattr(self, 'comment') else self.comment,
'date': str(datetime.datetime.now()) # 'date': str(datetime.datetime.now())
} # }
if study_model.changes_history: # if study_model.changes_history:
changes_history = json.loads(study_model.changes_history) # changes_history = json.loads(study_model.changes_history)
changes_history.append(change) # changes_history.append(change)
else: # else:
changes_history = [change] # changes_history = [change]
study_model.changes_history = json.dumps(changes_history) # study_model.changes_history = json.dumps(changes_history)
def model_args(self): def model_args(self):
@ -174,7 +190,7 @@ class Study(object):
class StudyForUpdateSchema(ma.Schema): class StudyForUpdateSchema(ma.Schema):
id = fields.Integer(required=False, allow_none=True) id = fields.Integer(required=False, allow_none=True)
protocol_builder_status = EnumField(ProtocolBuilderStatus, by_value=True) status = EnumField(StudyStatus, by_value=True)
hsr_number = fields.String(allow_none=True) hsr_number = fields.String(allow_none=True)
sponsor = fields.String(allow_none=True) sponsor = fields.String(allow_none=True)
ind_number = fields.String(allow_none=True) ind_number = fields.String(allow_none=True)
@ -196,7 +212,8 @@ class StudySchema(ma.Schema):
id = fields.Integer(required=False, allow_none=True) id = fields.Integer(required=False, allow_none=True)
categories = fields.List(fields.Nested(CategorySchema), dump_only=True) categories = fields.List(fields.Nested(CategorySchema), dump_only=True)
warnings = fields.List(fields.Nested(ApiErrorSchema), dump_only=True) warnings = fields.List(fields.Nested(ApiErrorSchema), dump_only=True)
protocol_builder_status = EnumField(ProtocolBuilderStatus, by_value=True) protocol_builder_status = EnumField(StudyStatus, by_value=True)
status = EnumField(StudyStatus, by_value=True)
hsr_number = fields.String(allow_none=True) hsr_number = fields.String(allow_none=True)
sponsor = fields.String(allow_none=True) sponsor = fields.String(allow_none=True)
ind_number = fields.String(allow_none=True) ind_number = fields.String(allow_none=True)

View File

@ -12,7 +12,7 @@ from crc.api.common import ApiError
from crc.models.file import FileModel, FileModelSchema, File from crc.models.file import FileModel, FileModelSchema, File
from crc.models.ldap import LdapSchema from crc.models.ldap import LdapSchema
from crc.models.protocol_builder import ProtocolBuilderStudy, ProtocolBuilderStatus from crc.models.protocol_builder import ProtocolBuilderStudy, ProtocolBuilderStatus
from crc.models.study import StudyModel, Study, Category, WorkflowMetadata from crc.models.study import StudyModel, Study, StudyStatus, Category, WorkflowMetadata
from crc.models.task_event import TaskEventModel, TaskEvent from crc.models.task_event import TaskEventModel, TaskEvent
from crc.models.workflow import WorkflowSpecCategoryModel, WorkflowModel, WorkflowSpecModel, WorkflowState, \ from crc.models.workflow import WorkflowSpecCategoryModel, WorkflowModel, WorkflowSpecModel, WorkflowState, \
WorkflowStatus WorkflowStatus
@ -64,7 +64,7 @@ class StudyService(object):
# Calling this line repeatedly is very very slow. It creates the # Calling this line repeatedly is very very slow. It creates the
# master spec and runs it. Don't execute this for Abandoned studies, as # master spec and runs it. Don't execute this for Abandoned studies, as
# we don't have the information to process them. # we don't have the information to process them.
if study.protocol_builder_status != ProtocolBuilderStatus.abandoned: if study.status != StudyStatus.abandoned:
status = StudyService.__get_study_status(study_model) status = StudyService.__get_study_status(study_model)
study.warnings = StudyService.__update_status_of_workflow_meta(workflow_metas, status) study.warnings = StudyService.__update_status_of_workflow_meta(workflow_metas, status)
@ -265,7 +265,7 @@ class StudyService(object):
for study in db_studies: for study in db_studies:
pb_study = next((pbs for pbs in pb_studies if pbs.STUDYID == study.id), None) pb_study = next((pbs for pbs in pb_studies if pbs.STUDYID == study.id), None)
if not pb_study: if not pb_study:
study.protocol_builder_status = ProtocolBuilderStatus.abandoned study.status = StudyStatus.abandoned
db.session.commit() db.session.commit()

View File

@ -0,0 +1,36 @@
"""empty message
Revision ID: 1c3f88dbccc3
Revises: 2e7b377cbc7b
Create Date: 2020-07-30 18:51:01.816284
"""
from alembic import op
import sqlalchemy as sa
from sqlalchemy.dialects import postgresql
# revision identifiers, used by Alembic.
revision = '1c3f88dbccc3'
down_revision = '2e7b377cbc7b'
branch_labels = None
depends_on = None
def upgrade():
op.execute("CREATE TYPE irbstatus AS ENUM('incomplete_in_protocol_builder', 'completed_in_protocol_builder', 'hsr_assigned')")
op.execute("CREATE TYPE studystatus AS ENUM('in_progress', 'hold', 'open_for_enrollment', 'abandoned')")
# ### commands auto generated by Alembic - please adjust! ###
op.add_column('study', sa.Column('irb_status', sa.Enum('incomplete_in_protocol_builder', 'completed_in_protocol_builder', 'hsr_assigned', name='irbstatus'), nullable=True))
op.add_column('study', sa.Column('status', sa.Enum('in_progress', 'hold', 'open_for_enrollment', 'abandoned', name='studystatus'), nullable=True))
op.drop_column('study', 'protocol_builder_status')
# ### end Alembic commands ###
def downgrade():
# ### commands auto generated by Alembic - please adjust! ###
op.add_column('study', sa.Column('protocol_builder_status', postgresql.ENUM('incomplete', 'active', 'hold', 'open', 'abandoned', name='protocolbuilderstatus'), autoincrement=False, nullable=True))
op.drop_column('study', 'status')
op.drop_column('study', 'irb_status')
# ### end Alembic commands ###
op.execute('DROP TYPE studystatus')
op.execute('DROP TYPE irbstatus')

View File

@ -1,28 +0,0 @@
"""empty message
Revision ID: 369d65dcb269
Revises: c4ddb69e7ef4
Create Date: 2020-07-27 20:05:29.524553
"""
from alembic import op
import sqlalchemy as sa
# revision identifiers, used by Alembic.
revision = '369d65dcb269'
down_revision = 'c4ddb69e7ef4'
branch_labels = None
depends_on = None
def upgrade():
# ### commands auto generated by Alembic - please adjust! ###
op.add_column('study', sa.Column('changes_history', sa.JSON(), nullable=True))
# ### end Alembic commands ###
def downgrade():
# ### commands auto generated by Alembic - please adjust! ###
op.drop_column('study', 'changes_history')
# ### end Alembic commands ###

View File

@ -15,9 +15,8 @@ from crc import app, db, session
from crc.models.api_models import WorkflowApiSchema, MultiInstanceType from crc.models.api_models import WorkflowApiSchema, MultiInstanceType
from crc.models.approval import ApprovalModel, ApprovalStatus from crc.models.approval import ApprovalModel, ApprovalStatus
from crc.models.file import FileModel, FileDataModel, CONTENT_TYPES from crc.models.file import FileModel, FileDataModel, CONTENT_TYPES
from crc.models.protocol_builder import ProtocolBuilderStatus
from crc.models.task_event import TaskEventModel from crc.models.task_event import TaskEventModel
from crc.models.study import StudyModel from crc.models.study import StudyModel, StudyStatus
from crc.models.user import UserModel from crc.models.user import UserModel
from crc.models.workflow import WorkflowSpecModel, WorkflowSpecModelSchema, WorkflowModel, WorkflowSpecCategoryModel from crc.models.workflow import WorkflowSpecModel, WorkflowSpecModelSchema, WorkflowModel, WorkflowSpecCategoryModel
from crc.services.file_service import FileService from crc.services.file_service import FileService
@ -60,7 +59,7 @@ class BaseTest(unittest.TestCase):
'id':0, 'id':0,
'title':'The impact of fried pickles on beer consumption in bipedal software developers.', 'title':'The impact of fried pickles on beer consumption in bipedal software developers.',
'last_updated':datetime.datetime.now(), 'last_updated':datetime.datetime.now(),
'protocol_builder_status':ProtocolBuilderStatus.active, 'status':StudyStatus.in_progress,
'primary_investigator_id':'dhf8r', 'primary_investigator_id':'dhf8r',
'sponsor':'Sartography Pharmaceuticals', 'sponsor':'Sartography Pharmaceuticals',
'ind_number':'1234', 'ind_number':'1234',
@ -70,7 +69,7 @@ class BaseTest(unittest.TestCase):
'id':1, 'id':1,
'title':'Requirement of hippocampal neurogenesis for the behavioral effects of soft pretzels', 'title':'Requirement of hippocampal neurogenesis for the behavioral effects of soft pretzels',
'last_updated':datetime.datetime.now(), 'last_updated':datetime.datetime.now(),
'protocol_builder_status':ProtocolBuilderStatus.active, 'status':StudyStatus.in_progress,
'primary_investigator_id':'dhf8r', 'primary_investigator_id':'dhf8r',
'sponsor':'Makerspace & Co.', 'sponsor':'Makerspace & Co.',
'ind_number':'5678', 'ind_number':'5678',
@ -241,7 +240,7 @@ class BaseTest(unittest.TestCase):
study = session.query(StudyModel).filter_by(user_uid=uid).filter_by(title=title).first() study = session.query(StudyModel).filter_by(user_uid=uid).filter_by(title=title).first()
if study is None: if study is None:
user = self.create_user(uid=uid) user = self.create_user(uid=uid)
study = StudyModel(title=title, protocol_builder_status=ProtocolBuilderStatus.active, study = StudyModel(title=title, status=StudyStatus.in_progress,
user_uid=user.uid, primary_investigator_id=primary_investigator_id) user_uid=user.uid, primary_investigator_id=primary_investigator_id)
db.session.add(study) db.session.add(study)
db.session.commit() db.session.commit()

View File

@ -11,7 +11,7 @@ from crc.models.protocol_builder import ProtocolBuilderStatus, \
ProtocolBuilderStudySchema ProtocolBuilderStudySchema
from crc.models.approval import ApprovalStatus from crc.models.approval import ApprovalStatus
from crc.models.task_event import TaskEventModel from crc.models.task_event import TaskEventModel
from crc.models.study import StudyModel, StudySchema from crc.models.study import StudyModel, StudySchema, StudyStatus
from crc.models.workflow import WorkflowSpecModel, WorkflowModel from crc.models.workflow import WorkflowSpecModel, WorkflowModel
from crc.services.file_service import FileService from crc.services.file_service import FileService
from crc.services.workflow_processor import WorkflowProcessor from crc.services.workflow_processor import WorkflowProcessor
@ -30,7 +30,7 @@ class TestStudyApi(BaseTest):
def add_test_study(self): def add_test_study(self):
study_schema = StudySchema().dump(self.TEST_STUDY) study_schema = StudySchema().dump(self.TEST_STUDY)
study_schema['protocol_builder_status'] = ProtocolBuilderStatus.active.value study_schema['status'] = StudyStatus.in_progress.value
rv = self.app.post('/v1.0/study', rv = self.app.post('/v1.0/study',
content_type="application/json", content_type="application/json",
headers=self.logged_in_headers(), headers=self.logged_in_headers(),
@ -137,7 +137,7 @@ class TestStudyApi(BaseTest):
study: StudyModel = session.query(StudyModel).first() study: StudyModel = session.query(StudyModel).first()
study.title = "Pilot Study of Fjord Placement for Single Fraction Outcomes to Cortisol Susceptibility" study.title = "Pilot Study of Fjord Placement for Single Fraction Outcomes to Cortisol Susceptibility"
study_schema = StudySchema().dump(study) study_schema = StudySchema().dump(study)
study_schema['protocol_builder_status'] = ProtocolBuilderStatus.active.value study_schema['status'] = StudyStatus.in_progress.value
rv = self.app.put('/v1.0/study/%i' % study.id, rv = self.app.put('/v1.0/study/%i' % study.id,
content_type="application/json", content_type="application/json",
headers=self.logged_in_headers(), headers=self.logged_in_headers(),
@ -145,7 +145,7 @@ class TestStudyApi(BaseTest):
self.assert_success(rv) self.assert_success(rv)
json_data = json.loads(rv.get_data(as_text=True)) json_data = json.loads(rv.get_data(as_text=True))
self.assertEqual(study.title, json_data['title']) self.assertEqual(study.title, json_data['title'])
self.assertEqual(study.protocol_builder_status.value, json_data['protocol_builder_status']) self.assertEqual(study.status.value, json_data['status'])
@patch('crc.services.protocol_builder.ProtocolBuilderService.get_investigators') # mock_studies @patch('crc.services.protocol_builder.ProtocolBuilderService.get_investigators') # mock_studies
@patch('crc.services.protocol_builder.ProtocolBuilderService.get_required_docs') # mock_docs @patch('crc.services.protocol_builder.ProtocolBuilderService.get_required_docs') # mock_docs
@ -183,15 +183,15 @@ class TestStudyApi(BaseTest):
num_incomplete = 0 num_incomplete = 0
num_abandoned = 0 num_abandoned = 0
num_active = 0 num_in_progress = 0
num_open = 0 num_open = 0
for study in json_data: for study in json_data:
if study['protocol_builder_status'] == 'abandoned': # One study does not exist in user_studies.json if study['status'] == 'abandoned': # One study does not exist in user_studies.json
num_abandoned += 1 num_abandoned += 1
if study['protocol_builder_status'] == 'active': # One study is marked complete without HSR Number if study['status'] == 'in progress': # One study is marked complete without HSR Number
num_active += 1 num_in_progress += 1
if study['protocol_builder_status'] == 'open': # One study is marked complete and has an HSR Number if study['status'] == 'open for enrollment': # One study is marked complete and has an HSR Number
num_open += 1 num_open += 1
db_studies_after = session.query(StudyModel).all() db_studies_after = session.query(StudyModel).all()
@ -199,10 +199,10 @@ class TestStudyApi(BaseTest):
self.assertGreater(num_db_studies_after, num_db_studies_before) self.assertGreater(num_db_studies_after, num_db_studies_before)
self.assertEqual(num_abandoned, 1) self.assertEqual(num_abandoned, 1)
self.assertEqual(num_open, 1) self.assertEqual(num_open, 1)
self.assertEqual(num_active, 2) self.assertEqual(num_in_progress, 2)
self.assertEqual(num_incomplete, 0) self.assertEqual(num_incomplete, 0)
self.assertEqual(len(json_data), num_db_studies_after) self.assertEqual(len(json_data), num_db_studies_after)
self.assertEqual(num_open + num_active + num_incomplete + num_abandoned, num_db_studies_after) self.assertEqual(num_open + num_in_progress + num_incomplete + num_abandoned, num_db_studies_after)
@patch('crc.services.protocol_builder.ProtocolBuilderService.get_investigators') # mock_studies @patch('crc.services.protocol_builder.ProtocolBuilderService.get_investigators') # mock_studies
@patch('crc.services.protocol_builder.ProtocolBuilderService.get_required_docs') # mock_docs @patch('crc.services.protocol_builder.ProtocolBuilderService.get_required_docs') # mock_docs
@ -230,7 +230,7 @@ class TestStudyApi(BaseTest):
json_data = json.loads(rv.get_data(as_text=True)) json_data = json.loads(rv.get_data(as_text=True))
self.assertEqual(study.id, json_data['id']) self.assertEqual(study.id, json_data['id'])
self.assertEqual(study.title, json_data['title']) self.assertEqual(study.title, json_data['title'])
self.assertEqual(study.protocol_builder_status.value, json_data['protocol_builder_status']) self.assertEqual(study.status.value, json_data['status'])
self.assertEqual(study.primary_investigator_id, json_data['primary_investigator_id']) self.assertEqual(study.primary_investigator_id, json_data['primary_investigator_id'])
self.assertEqual(study.sponsor, json_data['sponsor']) self.assertEqual(study.sponsor, json_data['sponsor'])
self.assertEqual(study.ind_number, json_data['ind_number']) self.assertEqual(study.ind_number, json_data['ind_number'])

View File

@ -6,7 +6,7 @@ from tests.base_test import BaseTest
from crc import db, app from crc import db, app
from crc.models.protocol_builder import ProtocolBuilderStatus from crc.models.protocol_builder import ProtocolBuilderStatus
from crc.models.study import StudyModel from crc.models.study import StudyModel, StudyStatus
from crc.models.user import UserModel from crc.models.user import UserModel
from crc.models.workflow import WorkflowModel, WorkflowStatus, \ from crc.models.workflow import WorkflowModel, WorkflowStatus, \
WorkflowSpecCategoryModel WorkflowSpecCategoryModel
@ -40,7 +40,7 @@ class TestStudyService(BaseTest):
for study in db.session.query(StudyModel).all(): for study in db.session.query(StudyModel).all():
StudyService().delete_study(study.id) StudyService().delete_study(study.id)
study = StudyModel(title="My title", protocol_builder_status=ProtocolBuilderStatus.active, user_uid=user.uid) study = StudyModel(title="My title", status=StudyStatus.in_progress, user_uid=user.uid)
db.session.add(study) db.session.add(study)
self.load_test_spec("random_fact", category_id=cat.id) self.load_test_spec("random_fact", category_id=cat.id)

View File

@ -8,7 +8,7 @@ from tests.base_test import BaseTest
from crc import db, app from crc import db, app
from crc.api.common import ApiError from crc.api.common import ApiError
from crc.models.protocol_builder import ProtocolBuilderStatus from crc.models.protocol_builder import ProtocolBuilderStatus
from crc.models.study import StudySchema, StudyModel from crc.models.study import StudySchema, StudyModel, StudyStatus
from crc.models.user import UserModel from crc.models.user import UserModel
@ -220,7 +220,7 @@ class TestAuthentication(BaseTest):
return { return {
"title": "blah", "title": "blah",
"last_updated": datetime.now(tz=timezone.utc), "last_updated": datetime.now(tz=timezone.utc),
"protocol_builder_status": ProtocolBuilderStatus.active, "status": StudyStatus.in_progress,
"primary_investigator_id": uid, "primary_investigator_id": uid,
"user_uid": uid, "user_uid": uid,
} }