Create Request.creator relationship
- Rename creator_id to user_id
This commit is contained in:
parent
2030b4d318
commit
e99ddd491a
43
alembic/versions/05d6272bdb43_rename_request_creator_.py
Normal file
43
alembic/versions/05d6272bdb43_rename_request_creator_.py
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
"""rename request creator
|
||||||
|
|
||||||
|
Revision ID: 05d6272bdb43
|
||||||
|
Revises: 77b065750596
|
||||||
|
Create Date: 2018-08-07 20:21:22.559283
|
||||||
|
|
||||||
|
"""
|
||||||
|
from alembic import op
|
||||||
|
import sqlalchemy as sa
|
||||||
|
from sqlalchemy.dialects import postgresql
|
||||||
|
|
||||||
|
# revision identifiers, used by Alembic.
|
||||||
|
revision = '05d6272bdb43'
|
||||||
|
down_revision = '77b065750596'
|
||||||
|
branch_labels = None
|
||||||
|
depends_on = None
|
||||||
|
|
||||||
|
|
||||||
|
def upgrade():
|
||||||
|
db = op.get_bind()
|
||||||
|
|
||||||
|
# ### commands auto generated by Alembic - please adjust! ###
|
||||||
|
op.add_column('requests', sa.Column('user_id', postgresql.UUID(as_uuid=True), nullable=True))
|
||||||
|
op.create_foreign_key('requests_user_id_fk', 'requests', 'users', ['user_id'], ['id'])
|
||||||
|
# ### end Alembic commands ###
|
||||||
|
|
||||||
|
db.execute("UPDATE requests SET user_id = creator")
|
||||||
|
|
||||||
|
op.alter_column('requests', 'user_id', nullable=False)
|
||||||
|
op.drop_column('requests', 'creator')
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def downgrade():
|
||||||
|
db = op.get_bind()
|
||||||
|
|
||||||
|
# ### commands auto generated by Alembic - please adjust! ###
|
||||||
|
op.add_column('requests', sa.Column('creator', postgresql.UUID(), autoincrement=False, nullable=True))
|
||||||
|
op.drop_constraint('requests_user_id_fk', 'requests', type_='foreignkey')
|
||||||
|
# ### end Alembic commands ###
|
||||||
|
|
||||||
|
db.execute("UPDATE requests SET creator = user_id")
|
||||||
|
op.drop_column('requests', 'user_id')
|
@ -58,10 +58,10 @@ class Requests(object):
|
|||||||
return request
|
return request
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def get_many(cls, creator_id=None):
|
def get_many(cls, creator=None):
|
||||||
filters = []
|
filters = []
|
||||||
if creator_id:
|
if creator:
|
||||||
filters.append(Request.creator == creator_id)
|
filters.append(Request.creator == creator)
|
||||||
|
|
||||||
requests = (
|
requests = (
|
||||||
db.session.query(Request)
|
db.session.query(Request)
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
from sqlalchemy import Column, func
|
from sqlalchemy import Column, func, ForeignKey
|
||||||
from sqlalchemy.types import DateTime
|
from sqlalchemy.types import DateTime
|
||||||
from sqlalchemy.dialects.postgresql import JSONB, UUID
|
from sqlalchemy.dialects.postgresql import JSONB
|
||||||
from sqlalchemy.orm import relationship
|
from sqlalchemy.orm import relationship
|
||||||
|
|
||||||
from atst.models import Base
|
from atst.models import Base
|
||||||
@ -11,13 +11,15 @@ class Request(Base):
|
|||||||
__tablename__ = "requests"
|
__tablename__ = "requests"
|
||||||
|
|
||||||
id = Id()
|
id = Id()
|
||||||
creator = Column(UUID(as_uuid=True))
|
|
||||||
time_created = Column(DateTime(timezone=True), server_default=func.now())
|
time_created = Column(DateTime(timezone=True), server_default=func.now())
|
||||||
body = Column(JSONB)
|
body = Column(JSONB)
|
||||||
status_events = relationship(
|
status_events = relationship(
|
||||||
"RequestStatusEvent", backref="request", order_by="RequestStatusEvent.sequence"
|
"RequestStatusEvent", backref="request", order_by="RequestStatusEvent.sequence"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
user_id = Column(ForeignKey("users.id"), nullable=False)
|
||||||
|
creator = relationship("User")
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def status(self):
|
def status(self):
|
||||||
return self.status_events[-1].new_status
|
return self.status_events[-1].new_status
|
||||||
|
@ -28,7 +28,7 @@ def requests_index():
|
|||||||
):
|
):
|
||||||
requests = Requests.get_many()
|
requests = Requests.get_many()
|
||||||
else:
|
else:
|
||||||
requests = Requests.get_many(creator_id=g.current_user.id)
|
requests = Requests.get_many(creator=g.current_user)
|
||||||
|
|
||||||
mapped_requests = [map_request(g.current_user, r) for r in requests]
|
mapped_requests = [map_request(g.current_user, r) for r in requests]
|
||||||
|
|
||||||
|
@ -124,5 +124,5 @@ class JEDIRequestFlow(object):
|
|||||||
if self.request_id:
|
if self.request_id:
|
||||||
Requests.update(self.request_id, request_data)
|
Requests.update(self.request_id, request_data)
|
||||||
else:
|
else:
|
||||||
request = Requests.create(self.current_user.id, request_data)
|
request = Requests.create(self.current_user, request_data)
|
||||||
self.request_id = request.id
|
self.request_id = request.id
|
||||||
|
@ -5,7 +5,7 @@ from atst.domain.exceptions import NotFoundError
|
|||||||
from atst.domain.requests import Requests
|
from atst.domain.requests import Requests
|
||||||
from atst.models.request_status_event import RequestStatus
|
from atst.models.request_status_event import RequestStatus
|
||||||
|
|
||||||
from tests.factories import RequestFactory
|
from tests.factories import RequestFactory, UserFactory
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture(scope="function")
|
@pytest.fixture(scope="function")
|
||||||
@ -25,7 +25,7 @@ def test_nonexistent_request_raises():
|
|||||||
|
|
||||||
|
|
||||||
def test_new_request_has_started_status():
|
def test_new_request_has_started_status():
|
||||||
request = Requests.create(uuid4(), {})
|
request = Requests.create(UserFactory.build(), {})
|
||||||
assert request.status == RequestStatus.STARTED
|
assert request.status == RequestStatus.STARTED
|
||||||
|
|
||||||
|
|
||||||
|
@ -9,31 +9,6 @@ from atst.models.user import User
|
|||||||
from atst.models.role import Role
|
from atst.models.role import Role
|
||||||
|
|
||||||
|
|
||||||
class RequestStatusFactory(factory.alchemy.SQLAlchemyModelFactory):
|
|
||||||
class Meta:
|
|
||||||
model = RequestStatusEvent
|
|
||||||
|
|
||||||
|
|
||||||
class RequestFactory(factory.alchemy.SQLAlchemyModelFactory):
|
|
||||||
class Meta:
|
|
||||||
model = Request
|
|
||||||
|
|
||||||
id = factory.Sequence(lambda x: uuid4())
|
|
||||||
status_events = factory.RelatedFactory(
|
|
||||||
RequestStatusFactory, "request", new_status=RequestStatus.STARTED
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
class PENumberFactory(factory.alchemy.SQLAlchemyModelFactory):
|
|
||||||
class Meta:
|
|
||||||
model = PENumber
|
|
||||||
|
|
||||||
|
|
||||||
class TaskOrderFactory(factory.alchemy.SQLAlchemyModelFactory):
|
|
||||||
class Meta:
|
|
||||||
model = TaskOrder
|
|
||||||
|
|
||||||
|
|
||||||
class RoleFactory(factory.alchemy.SQLAlchemyModelFactory):
|
class RoleFactory(factory.alchemy.SQLAlchemyModelFactory):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Role
|
model = Role
|
||||||
@ -50,3 +25,29 @@ class UserFactory(factory.alchemy.SQLAlchemyModelFactory):
|
|||||||
first_name = "Fake"
|
first_name = "Fake"
|
||||||
last_name = "User"
|
last_name = "User"
|
||||||
atat_role = factory.SubFactory(RoleFactory)
|
atat_role = factory.SubFactory(RoleFactory)
|
||||||
|
|
||||||
|
|
||||||
|
class RequestStatusFactory(factory.alchemy.SQLAlchemyModelFactory):
|
||||||
|
class Meta:
|
||||||
|
model = RequestStatusEvent
|
||||||
|
|
||||||
|
|
||||||
|
class RequestFactory(factory.alchemy.SQLAlchemyModelFactory):
|
||||||
|
class Meta:
|
||||||
|
model = Request
|
||||||
|
|
||||||
|
id = factory.Sequence(lambda x: uuid4())
|
||||||
|
status_events = factory.RelatedFactory(
|
||||||
|
RequestStatusFactory, "request", new_status=RequestStatus.STARTED
|
||||||
|
)
|
||||||
|
creator = factory.SubFactory(UserFactory)
|
||||||
|
|
||||||
|
|
||||||
|
class PENumberFactory(factory.alchemy.SQLAlchemyModelFactory):
|
||||||
|
class Meta:
|
||||||
|
model = PENumber
|
||||||
|
|
||||||
|
|
||||||
|
class TaskOrderFactory(factory.alchemy.SQLAlchemyModelFactory):
|
||||||
|
class Meta:
|
||||||
|
model = TaskOrder
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
from tests.factories import RequestFactory
|
from tests.factories import RequestFactory, UserFactory
|
||||||
from atst.domain.requests import Requests, RequestStatus
|
from atst.domain.requests import Requests, RequestStatus
|
||||||
|
|
||||||
|
|
||||||
@ -19,3 +19,10 @@ def test_pending_ccpo_approval_requires_ccpo():
|
|||||||
request = Requests.set_status(request, RequestStatus.PENDING_CCPO_APPROVAL)
|
request = Requests.set_status(request, RequestStatus.PENDING_CCPO_APPROVAL)
|
||||||
|
|
||||||
assert Requests.action_required_by(request) == "ccpo"
|
assert Requests.action_required_by(request) == "ccpo"
|
||||||
|
|
||||||
|
|
||||||
|
def test_request_has_creator():
|
||||||
|
user = UserFactory.create()
|
||||||
|
request = RequestFactory.create(creator=user)
|
||||||
|
|
||||||
|
assert request.creator == user
|
||||||
|
Loading…
x
Reference in New Issue
Block a user