diff --git a/atst/models/attachment.py b/atst/models/attachment.py index b4177c29..9838ea05 100644 --- a/atst/models/attachment.py +++ b/atst/models/attachment.py @@ -30,3 +30,6 @@ class Attachment(Base, mixins.TimestampsMixin): db.session.commit() return attachment + + def __repr__(self): + return "".format(self.filename, self.id) diff --git a/atst/models/audit_event.py b/atst/models/audit_event.py index 53b4a45e..0c6403b9 100644 --- a/atst/models/audit_event.py +++ b/atst/models/audit_event.py @@ -29,3 +29,8 @@ class AuditEvent(Base, TimestampsMixin): attrs = inspect(self).dict connection.execute(self.__table__.insert(), **attrs) + + def __repr__(self): + return "".format( + self.display_name, self.action, self.id + ) diff --git a/atst/models/environment.py b/atst/models/environment.py index 61b5c910..7fa079ac 100644 --- a/atst/models/environment.py +++ b/atst/models/environment.py @@ -29,3 +29,12 @@ class Environment(Base, mixins.TimestampsMixin, mixins.AuditableMixin): def auditable_workspace_id(self): return self.project.workspace_id + + def __repr__(self): + return "".format( + self.name, + self.num_users, + self.project.name, + self.project.workspace.name, + self.id, + ) diff --git a/atst/models/environment_role.py b/atst/models/environment_role.py index 594b46f3..b236617d 100644 --- a/atst/models/environment_role.py +++ b/atst/models/environment_role.py @@ -24,6 +24,11 @@ class EnvironmentRole(Base, mixins.TimestampsMixin): user_id = Column(UUID(as_uuid=True), ForeignKey("users.id"), nullable=False) user = relationship("User", backref="environment_roles") + def __repr__(self): + return "".format( + self.role, self.user.full_name, self.environment.name, self.id + ) + Index( "environments_role_user_environment", diff --git a/atst/models/project.py b/atst/models/project.py index 4d795fea..c8d256b2 100644 --- a/atst/models/project.py +++ b/atst/models/project.py @@ -20,3 +20,8 @@ class Project(Base, mixins.TimestampsMixin, mixins.AuditableMixin): @property def displayname(self): return self.name + + def __repr__(self): + return "".format( + self.name, self.description, self.workspace.name, self.id + ) diff --git a/atst/models/request.py b/atst/models/request.py index ddb84762..36a6b78e 100644 --- a/atst/models/request.py +++ b/atst/models/request.py @@ -223,3 +223,13 @@ class Request(Base, mixins.TimestampsMixin, mixins.AuditableMixin): @property def contracting_officer_email(self): return self.latest_revision.email_co + + def __repr__(self): + return "".format( + self.status_displayname, + self.displayname, + self.creator.full_name, + self.is_approved, + self.time_created, + self.id, + ) diff --git a/atst/models/request_internal_comment.py b/atst/models/request_internal_comment.py index 5d1c3440..45f332e1 100644 --- a/atst/models/request_internal_comment.py +++ b/atst/models/request_internal_comment.py @@ -15,3 +15,8 @@ class RequestInternalComment(Base, mixins.TimestampsMixin): request_id = Column(ForeignKey("requests.id", ondelete="CASCADE"), nullable=False) request = relationship("Request") + + def __repr__(self): + return "".format( + self.text, self.user.full_name, self.request_id, self.id + ) diff --git a/atst/models/request_review.py b/atst/models/request_review.py index a69d62d2..2bc7587c 100644 --- a/atst/models/request_review.py +++ b/atst/models/request_review.py @@ -32,3 +32,8 @@ class RequestReview(Base, mixins.TimestampsMixin, mixins.AuditableMixin): @property def full_name_ccpo(self): return "{} {}".format(self.fname_ccpo, self.lname_ccpo) + + def __repr__(self): + return "".format( + self.status.log_name, self.comment, self.full_name_reviewer, self.id + ) diff --git a/atst/models/request_revision.py b/atst/models/request_revision.py index be333eea..1d2da465 100644 --- a/atst/models/request_revision.py +++ b/atst/models/request_revision.py @@ -77,3 +77,8 @@ class RequestRevision(Base, mixins.TimestampsMixin, mixins.AuditableMixin): uii_ids = Column(ARRAY(String)) treasury_code = Column(String) ba_code = Column(String) + + def __repr__(self): + return "".format( + self.request_id, self.id + ) diff --git a/atst/models/request_status_event.py b/atst/models/request_status_event.py index 68b60729..90ec2532 100644 --- a/atst/models/request_status_event.py +++ b/atst/models/request_status_event.py @@ -55,3 +55,8 @@ class RequestStatusEvent(Base, mixins.TimestampsMixin, mixins.AuditableMixin): return "Accepted" else: return self.displayname + + def __repr__(self): + return "".format( + self.log_name, self.request_id, self.id + ) diff --git a/atst/models/role.py b/atst/models/role.py index 7f229a48..9bf81d7e 100644 --- a/atst/models/role.py +++ b/atst/models/role.py @@ -25,3 +25,8 @@ class Role(Base, mixins.TimestampsMixin): perms_set.discard(permission) self.permissions = list(perms_set) flag_modified(self, "permissions") + + def __repr__(self): + return "".format( + self.name, self.description, self.permissions, self.id + ) diff --git a/atst/models/task_order.py b/atst/models/task_order.py index 23ec6af1..af1736bf 100644 --- a/atst/models/task_order.py +++ b/atst/models/task_order.py @@ -63,3 +63,13 @@ class TaskOrder(Base, mixins.TimestampsMixin): ], ) ) + + def __repr__(self): + return "".format( + self.number, + self.verified, + self.budget, + self.expiration_date, + self.pdf, + self.id, + ) diff --git a/atst/models/user.py b/atst/models/user.py index 8729cba9..48570937 100644 --- a/atst/models/user.py +++ b/atst/models/user.py @@ -42,3 +42,13 @@ class User(Base, mixins.TimestampsMixin, mixins.AuditableMixin): @property def displayname(self): return self.full_name + + def __repr__(self): + return "".format( + self.full_name, + self.dod_id, + self.email, + self.atat_role_name, + self.has_workspaces, + self.id, + ) diff --git a/atst/models/workspace.py b/atst/models/workspace.py index 492880c8..11f32e27 100644 --- a/atst/models/workspace.py +++ b/atst/models/workspace.py @@ -47,3 +47,8 @@ class Workspace(Base, mixins.TimestampsMixin, mixins.AuditableMixin): def auditable_workspace_id(self): return self.id + + def __repr__(self): + return "".format( + self.name, self.request_id, self.task_order.number, self.user_count, self.id + ) diff --git a/atst/models/workspace_role.py b/atst/models/workspace_role.py index e95ce350..87c8f46f 100644 --- a/atst/models/workspace_role.py +++ b/atst/models/workspace_role.py @@ -22,6 +22,11 @@ class WorkspaceRole(Base, mixins.TimestampsMixin, mixins.AuditableMixin): UUID(as_uuid=True), ForeignKey("users.id"), index=True, nullable=False ) + def __repr__(self): + return "".format( + self.role.name, self.workspace.name, self.user_id, self.id + ) + Index( "workspace_role_user_workspace", diff --git a/atst/models/workspace_user.py b/atst/models/workspace_user.py index e704dc3d..4e106455 100644 --- a/atst/models/workspace_user.py +++ b/atst/models/workspace_user.py @@ -59,3 +59,11 @@ class WorkspaceUser(object): @property def has_environment_roles(self): return self.num_environment_roles > 0 + + def __repr__(self): + return "".format( + self.user_name, + self.role.name, + self.workspace.name, + self.num_environment_roles, + ) diff --git a/tests/models/test_attachment.py b/tests/models/test_attachment.py index e1690aa4..00c54b88 100644 --- a/tests/models/test_attachment.py +++ b/tests/models/test_attachment.py @@ -16,3 +16,9 @@ def test_attach_raises(): fs = FileStorage(fp, content_type="something/else") with pytest.raises(AttachmentError): Attachment.attach(fs) + + +def test_repr(pdf_upload): + attachment = Attachment.attach(pdf_upload) + assert attachment.filename in str(attachment) + assert str(attachment.id) in str(attachment) diff --git a/tests/models/test_environments.py b/tests/models/test_environments.py index 32faeef2..5d62739f 100644 --- a/tests/models/test_environments.py +++ b/tests/models/test_environments.py @@ -16,3 +16,7 @@ def test_add_user_to_environment(): dev_environment = Environments.add_member(dev_environment, developer, "developer") assert developer in dev_environment.users + + +def test_repr(): + pass diff --git a/tests/test_auth.py b/tests/test_auth.py index 87e90f77..099dc4ec 100644 --- a/tests/test_auth.py +++ b/tests/test_auth.py @@ -116,6 +116,19 @@ def test_unprotected_routes_set_user_if_logged_in(client, app, user_session): assert user.full_name in resp.data.decode() +def test_unprotected_routes_set_user_if_logged_in(client, app, user_session): + user = UserFactory.create() + + resp = client.get(url_for("atst.helpdocs")) + assert resp.status_code == 200 + assert user.full_name not in resp.data.decode() + + user_session(user) + resp = client.get(url_for("atst.helpdocs")) + assert resp.status_code == 200 + assert user.full_name in resp.data.decode() + + # this implicitly relies on the test config and test CRL in tests/fixtures/crl