Filter the roles relationship on applications to remove deleted roles
This commit is contained in:
parent
86e315e56f
commit
8980b04f7e
@ -109,6 +109,7 @@ class Applications(BaseDomainClass):
|
||||
)
|
||||
|
||||
application_role.status = ApplicationRoleStatus.DISABLED
|
||||
application_role.deleted = True
|
||||
db.session.add(application_role)
|
||||
db.session.commit()
|
||||
|
||||
|
@ -1,16 +1,10 @@
|
||||
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.types import Id
|
||||
from atst.models import mixins
|
||||
|
||||
from atst.models.application_role import (
|
||||
ApplicationRole,
|
||||
Status as ApplicationRoleStatuses,
|
||||
)
|
||||
from atst.database import db
|
||||
|
||||
|
||||
class Application(
|
||||
Base, mixins.TimestampsMixin, mixins.AuditableMixin, mixins.DeletableMixin
|
||||
@ -28,26 +22,16 @@ class Application(
|
||||
back_populates="application",
|
||||
primaryjoin="and_(Environment.application_id==Application.id, Environment.deleted==False)",
|
||||
)
|
||||
# TODO: filter condition on this relationship?
|
||||
roles = relationship("ApplicationRole")
|
||||
roles = relationship(
|
||||
"ApplicationRole",
|
||||
primaryjoin="and_(ApplicationRole.application_id==Application.id, ApplicationRole.deleted==False)",
|
||||
)
|
||||
members = synonym("roles")
|
||||
|
||||
@property
|
||||
def users(self):
|
||||
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
|
||||
def displayname(self):
|
||||
return self.name
|
||||
|
@ -54,7 +54,7 @@
|
||||
<a
|
||||
href="{{ url_for('applications.team', application_id=application.id) }}"
|
||||
class='icon-link'>
|
||||
<span>{{ "portfolios.applications.team_text" | translate }} ({{ application.num_users }})</span>
|
||||
<span>{{ "portfolios.applications.team_text" | translate }} ({{ application.users | length }})</span>
|
||||
</a>
|
||||
<div class='separator'></div>
|
||||
{% endif %}
|
||||
|
@ -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():
|
||||
app = ApplicationFactory.create()
|
||||
env = EnvironmentFactory.create(application=app)
|
||||
|
Loading…
x
Reference in New Issue
Block a user