Filter the roles relationship on applications to remove deleted roles

This commit is contained in:
leigh-mil 2019-05-23 11:07:54 -04:00
parent 86e315e56f
commit 8980b04f7e
4 changed files with 8 additions and 33 deletions

View File

@ -109,6 +109,7 @@ class Applications(BaseDomainClass):
) )
application_role.status = ApplicationRoleStatus.DISABLED application_role.status = ApplicationRoleStatus.DISABLED
application_role.deleted = True
db.session.add(application_role) db.session.add(application_role)
db.session.commit() db.session.commit()

View File

@ -1,16 +1,10 @@
from sqlalchemy import Column, ForeignKey, String from sqlalchemy import Column, ForeignKey, String
from sqlalchemy.orm import relationship from sqlalchemy.orm import relationship, synonym
from atst.models import Base from atst.models import Base
from atst.models.types import Id from atst.models.types import Id
from atst.models import mixins from atst.models import mixins
from atst.models.application_role import (
ApplicationRole,
Status as ApplicationRoleStatuses,
)
from atst.database import db
class Application( class Application(
Base, mixins.TimestampsMixin, mixins.AuditableMixin, mixins.DeletableMixin Base, mixins.TimestampsMixin, mixins.AuditableMixin, mixins.DeletableMixin
@ -28,26 +22,16 @@ class Application(
back_populates="application", back_populates="application",
primaryjoin="and_(Environment.application_id==Application.id, Environment.deleted==False)", primaryjoin="and_(Environment.application_id==Application.id, Environment.deleted==False)",
) )
# TODO: filter condition on this relationship? roles = relationship(
roles = relationship("ApplicationRole") "ApplicationRole",
primaryjoin="and_(ApplicationRole.application_id==Application.id, ApplicationRole.deleted==False)",
)
members = synonym("roles")
@property @property
def users(self): def users(self):
return set(role.user for role in self.members) return set(role.user for role in self.members)
@property
def members(self):
return (
db.session.query(ApplicationRole)
.filter(ApplicationRole.application_id == self.id)
.filter(ApplicationRole.status != ApplicationRoleStatuses.DISABLED)
.all()
)
@property
def num_users(self):
return len(self.users)
@property @property
def displayname(self): def displayname(self):
return self.name return self.name

View File

@ -54,7 +54,7 @@
<a <a
href="{{ url_for('applications.team', application_id=application.id) }}" href="{{ url_for('applications.team', application_id=application.id) }}"
class='icon-link'> class='icon-link'>
<span>{{ "portfolios.applications.team_text" | translate }} ({{ application.num_users }})</span> <span>{{ "portfolios.applications.team_text" | translate }} ({{ application.users | length }})</span>
</a> </a>
<div class='separator'></div> <div class='separator'></div>
{% endif %} {% endif %}

View File

@ -8,16 +8,6 @@ from tests.factories import (
) )
def test_application_num_users():
application = ApplicationFactory.create(
environments=[{"name": "dev"}, {"name": "staging"}, {"name": "prod"}]
)
assert application.num_users == 0
ApplicationRoleFactory.create(application=application)
assert application.num_users == 1
def test_application_environments_excludes_deleted(): def test_application_environments_excludes_deleted():
app = ApplicationFactory.create() app = ApplicationFactory.create()
env = EnvironmentFactory.create(application=app) env = EnvironmentFactory.create(application=app)