new request statues events should be associated with latest revision
This commit is contained in:
parent
59fdad8554
commit
1e0523ebf6
@ -0,0 +1,30 @@
|
|||||||
|
"""add relationship between revision and status event
|
||||||
|
|
||||||
|
Revision ID: e66a49285f23
|
||||||
|
Revises: 090e1bd0d7ce
|
||||||
|
Create Date: 2018-09-04 14:01:31.548665
|
||||||
|
|
||||||
|
"""
|
||||||
|
from alembic import op
|
||||||
|
import sqlalchemy as sa
|
||||||
|
from sqlalchemy.dialects import postgresql
|
||||||
|
|
||||||
|
# revision identifiers, used by Alembic.
|
||||||
|
revision = 'e66a49285f23'
|
||||||
|
down_revision = '090e1bd0d7ce'
|
||||||
|
branch_labels = None
|
||||||
|
depends_on = None
|
||||||
|
|
||||||
|
|
||||||
|
def upgrade():
|
||||||
|
# ### commands auto generated by Alembic - please adjust! ###
|
||||||
|
op.add_column('request_status_events', sa.Column('request_revision_id', postgresql.UUID(as_uuid=True), nullable=False))
|
||||||
|
op.create_foreign_key(None, 'request_status_events', 'request_revisions', ['request_revision_id'], ['id'])
|
||||||
|
# ### end Alembic commands ###
|
||||||
|
|
||||||
|
|
||||||
|
def downgrade():
|
||||||
|
# ### commands auto generated by Alembic - please adjust! ###
|
||||||
|
op.drop_constraint(None, 'request_status_events', type_='foreignkey')
|
||||||
|
op.drop_column('request_status_events', 'request_revision_id')
|
||||||
|
# ### end Alembic commands ###
|
@ -143,7 +143,9 @@ class Requests(object):
|
|||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def set_status(cls, request: Request, status: RequestStatus):
|
def set_status(cls, request: Request, status: RequestStatus):
|
||||||
status_event = RequestStatusEvent(new_status=status)
|
status_event = RequestStatusEvent(
|
||||||
|
new_status=status, revision=request.latest_revision
|
||||||
|
)
|
||||||
request.status_events.append(status_event)
|
request.status_events.append(status_event)
|
||||||
return request
|
return request
|
||||||
|
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
from enum import Enum
|
from enum import Enum
|
||||||
from sqlalchemy import Column, func, ForeignKey, Enum as SQLAEnum
|
from sqlalchemy import Column, func, ForeignKey, Enum as SQLAEnum
|
||||||
|
from sqlalchemy.orm import relationship
|
||||||
from sqlalchemy.types import DateTime, BigInteger
|
from sqlalchemy.types import DateTime, BigInteger
|
||||||
from sqlalchemy.schema import Sequence
|
from sqlalchemy.schema import Sequence
|
||||||
from sqlalchemy.dialects.postgresql import UUID
|
from sqlalchemy.dialects.postgresql import UUID
|
||||||
@ -31,6 +32,8 @@ class RequestStatusEvent(Base):
|
|||||||
sequence = Column(
|
sequence = Column(
|
||||||
BigInteger, Sequence("request_status_events_sequence_seq"), nullable=False
|
BigInteger, Sequence("request_status_events_sequence_seq"), nullable=False
|
||||||
)
|
)
|
||||||
|
request_revision_id = Column(ForeignKey("request_revisions.id"), nullable=False)
|
||||||
|
revision = relationship("RequestRevision")
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def displayname(self):
|
def displayname(self):
|
||||||
|
@ -66,7 +66,9 @@ def test_should_allow_submission():
|
|||||||
assert Requests.should_allow_submission(new_request)
|
assert Requests.should_allow_submission(new_request)
|
||||||
|
|
||||||
RequestStatusEventFactory.create(
|
RequestStatusEventFactory.create(
|
||||||
request=new_request, new_status=RequestStatus.CHANGES_REQUESTED
|
request=new_request,
|
||||||
|
new_status=RequestStatus.CHANGES_REQUESTED,
|
||||||
|
revision=new_request.latest_revision,
|
||||||
)
|
)
|
||||||
assert Requests.should_allow_submission(new_request)
|
assert Requests.should_allow_submission(new_request)
|
||||||
|
|
||||||
@ -101,6 +103,7 @@ def test_status_count(session):
|
|||||||
RequestStatusEventFactory.create(
|
RequestStatusEventFactory.create(
|
||||||
sequence=2,
|
sequence=2,
|
||||||
request_id=request2.id,
|
request_id=request2.id,
|
||||||
|
revision=request2.latest_revision,
|
||||||
new_status=RequestStatus.PENDING_FINANCIAL_VERIFICATION,
|
new_status=RequestStatus.PENDING_FINANCIAL_VERIFICATION,
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -169,3 +172,9 @@ def test_update_financial_verification_with_invalid_task_order():
|
|||||||
request.body["financial_verification"]["task_order_number"]
|
request.body["financial_verification"]["task_order_number"]
|
||||||
== request_financial_data["task_order_number"]
|
== request_financial_data["task_order_number"]
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def test_set_status_sets_revision():
|
||||||
|
request = RequestFactory.create()
|
||||||
|
Requests.set_status(request, RequestStatus.APPROVED)
|
||||||
|
assert request.latest_revision == request.status_events[-1].revision
|
||||||
|
@ -56,17 +56,28 @@ class RequestFactory(factory.alchemy.SQLAlchemyModelFactory):
|
|||||||
model = Request
|
model = Request
|
||||||
|
|
||||||
id = factory.Sequence(lambda x: uuid4())
|
id = factory.Sequence(lambda x: uuid4())
|
||||||
status_events = factory.RelatedFactory(
|
|
||||||
RequestStatusEventFactory, "request", new_status=RequestStatus.STARTED
|
|
||||||
)
|
|
||||||
creator = factory.SubFactory(UserFactory)
|
creator = factory.SubFactory(UserFactory)
|
||||||
revisions = factory.LazyAttribute(
|
revisions = factory.LazyAttribute(
|
||||||
lambda r: [RequestFactory.create_initial_revision(r)]
|
lambda r: [RequestFactory.create_initial_revision(r)]
|
||||||
)
|
)
|
||||||
|
status_events = factory.RelatedFactory(
|
||||||
|
RequestStatusEventFactory,
|
||||||
|
"request",
|
||||||
|
new_status=RequestStatus.STARTED,
|
||||||
|
revision=factory.LazyAttribute(lambda se: se.factory_parent.revisions[-1]),
|
||||||
|
)
|
||||||
|
|
||||||
class Params:
|
class Params:
|
||||||
initial_revision = None
|
initial_revision = None
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def create_initial_status_event(cls, request):
|
||||||
|
return RequestStatusEventFactory(
|
||||||
|
request=request,
|
||||||
|
new_status=RequestStatus.STARTED,
|
||||||
|
revision=request.revisions,
|
||||||
|
)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def create_initial_revision(cls, request, dollar_value=1000000):
|
def create_initial_revision(cls, request, dollar_value=1000000):
|
||||||
user = request.creator
|
user = request.creator
|
||||||
|
Loading…
x
Reference in New Issue
Block a user