Change Environment.creator relation from ApplicationRole to User
This commit is contained in:
parent
e65c1d69b6
commit
f6cb6f2a31
@ -18,13 +18,13 @@ depends_on = None
|
||||
|
||||
def upgrade():
|
||||
# ### commands auto generated by Alembic - please adjust! ###
|
||||
op.add_column('environments', sa.Column('creator_role_id', postgresql.UUID(as_uuid=True), nullable=False))
|
||||
op.create_foreign_key("fk_application_roles_id", 'environments', 'application_roles', ['creator_role_id'], ['id'])
|
||||
op.add_column('environments', sa.Column('creator_id', postgresql.UUID(as_uuid=True), nullable=False))
|
||||
op.create_foreign_key("fk_users_id", 'environments', 'users', ['creator_id'], ['id'])
|
||||
# ### end Alembic commands ###
|
||||
|
||||
|
||||
def downgrade():
|
||||
# ### commands auto generated by Alembic - please adjust! ###
|
||||
op.drop_constraint("fk_application_roles_id", 'environments', type_='foreignkey')
|
||||
op.drop_column('environments', 'creator_role_id')
|
||||
op.drop_constraint("fk_users_id", 'environments', type_='foreignkey')
|
||||
op.drop_column('environments', 'creator_id')
|
||||
# ### end Alembic commands ###
|
||||
|
@ -19,13 +19,13 @@ class Applications(BaseDomainClass):
|
||||
resource_name = "application"
|
||||
|
||||
@classmethod
|
||||
def create(cls, portfolio, name, description, environment_names):
|
||||
def create(cls, user, portfolio, name, description, environment_names):
|
||||
application = Application(
|
||||
portfolio=portfolio, name=name, description=description
|
||||
)
|
||||
db.session.add(application)
|
||||
|
||||
Environments.create_many(application, environment_names)
|
||||
Environments.create_many(user, application, environment_names)
|
||||
|
||||
db.session.commit()
|
||||
return application
|
||||
|
@ -11,17 +11,17 @@ from .exceptions import NotFoundError
|
||||
|
||||
class Environments(object):
|
||||
@classmethod
|
||||
def create(cls, application, name):
|
||||
environment = Environment(application=application, name=name)
|
||||
def create(cls, user, application, name):
|
||||
environment = Environment(application=application, name=name, creator=user)
|
||||
db.session.add(environment)
|
||||
db.session.commit()
|
||||
return environment
|
||||
|
||||
@classmethod
|
||||
def create_many(cls, application, names):
|
||||
def create_many(cls, user, application, names):
|
||||
environments = []
|
||||
for name in names:
|
||||
environment = Environments.create(application, name)
|
||||
environment = Environments.create(user, application, name)
|
||||
environments.append(environment)
|
||||
|
||||
db.session.add_all(environments)
|
||||
|
@ -18,8 +18,11 @@ class Environment(
|
||||
application_id = Column(ForeignKey("applications.id"), nullable=False)
|
||||
application = relationship("Application")
|
||||
|
||||
creator_role_id = Column(ForeignKey("application_roles.id"), nullable=False)
|
||||
creator = relationship("ApplicationRole")
|
||||
# User user.id as the foreign key here beacuse the Environment creator may
|
||||
# not have an application role. We may need to revisit this if we receive any
|
||||
# requirements around tracking an environment's custodian.
|
||||
creator_id = Column(ForeignKey("users.id"), nullable=False)
|
||||
creator = relationship("User")
|
||||
|
||||
cloud_id = Column(String)
|
||||
root_user_info = Column(JSONB)
|
||||
|
@ -1,4 +1,4 @@
|
||||
from flask import redirect, render_template, request as http_request, url_for
|
||||
from flask import redirect, render_template, request as http_request, url_for, g
|
||||
|
||||
from . import applications_bp
|
||||
from atst.domain.applications import Applications
|
||||
@ -24,6 +24,7 @@ def create(portfolio_id):
|
||||
if form.validate():
|
||||
application_data = form.data
|
||||
Applications.create(
|
||||
g.current_user,
|
||||
portfolio,
|
||||
application_data["name"],
|
||||
application_data["description"],
|
||||
|
@ -230,7 +230,9 @@ def new_environment(application_id):
|
||||
env_form = EditEnvironmentForm(formdata=http_request.form)
|
||||
|
||||
if env_form.validate():
|
||||
Environments.create(application=application, name=env_form.name.data)
|
||||
Environments.create(
|
||||
g.current_user, application=application, name=env_form.name.data
|
||||
)
|
||||
|
||||
flash("environment_added", environment_name=env_form.data["name"])
|
||||
|
||||
|
@ -220,6 +220,7 @@ def add_applications_to_portfolio(portfolio):
|
||||
applications = random_applications()
|
||||
for application_data in applications:
|
||||
application = Applications.create(
|
||||
portfolio.owner,
|
||||
portfolio=portfolio,
|
||||
name=application_data["name"],
|
||||
description=application_data["description"],
|
||||
@ -278,7 +279,7 @@ def create_demo_portfolio(name, data):
|
||||
portfolio=portfolio, name=mock_application.name, description=""
|
||||
)
|
||||
env_names = [env.name for env in mock_application.environments]
|
||||
envs = Environments.create_many(application, env_names)
|
||||
envs = Environments.create_many(portfolio.owner, application, env_names)
|
||||
db.session.add(application)
|
||||
db.session.commit()
|
||||
|
||||
|
@ -21,7 +21,7 @@ from tests.factories import (
|
||||
def test_create_application_with_multiple_environments():
|
||||
portfolio = PortfolioFactory.create()
|
||||
application = Applications.create(
|
||||
portfolio, "My Test Application", "Test", ["dev", "prod"]
|
||||
portfolio.owner, portfolio, "My Test Application", "Test", ["dev", "prod"]
|
||||
)
|
||||
|
||||
assert application.portfolio == portfolio
|
||||
|
@ -21,7 +21,9 @@ from tests.factories import (
|
||||
@pytest.mark.skip(reason="Reinstate and update once jobs api is up")
|
||||
def test_create_environments():
|
||||
application = ApplicationFactory.create()
|
||||
environments = Environments.create_many(application, ["Staging", "Production"])
|
||||
environments = Environments.create_many(
|
||||
application.portfolio.owner, application, ["Staging", "Production"]
|
||||
)
|
||||
for env in environments:
|
||||
assert env.cloud_id is not None
|
||||
|
||||
|
@ -71,7 +71,11 @@ def test_update_portfolio_role_role(portfolio, portfolio_owner):
|
||||
|
||||
def test_scoped_portfolio_for_admin_missing_view_apps_perms(portfolio_owner, portfolio):
|
||||
Applications.create(
|
||||
portfolio, "My Application 2", "My application 2", ["dev", "staging", "prod"]
|
||||
portfolio.owner,
|
||||
portfolio,
|
||||
"My Application 2",
|
||||
"My application 2",
|
||||
["dev", "staging", "prod"],
|
||||
)
|
||||
restricted_admin = UserFactory.create()
|
||||
PortfolioRoleFactory.create(
|
||||
@ -90,7 +94,11 @@ def test_scoped_portfolio_returns_all_applications_for_portfolio_admin(
|
||||
):
|
||||
for _ in range(5):
|
||||
Applications.create(
|
||||
portfolio, "My Application", "My application", ["dev", "staging", "prod"]
|
||||
portfolio.owner,
|
||||
portfolio,
|
||||
"My Application",
|
||||
"My application",
|
||||
["dev", "staging", "prod"],
|
||||
)
|
||||
|
||||
admin = UserFactory.create()
|
||||
@ -109,7 +117,11 @@ def test_scoped_portfolio_returns_all_applications_for_portfolio_owner(
|
||||
):
|
||||
for _ in range(5):
|
||||
Applications.create(
|
||||
portfolio, "My Application", "My application", ["dev", "staging", "prod"]
|
||||
portfolio.owner,
|
||||
portfolio,
|
||||
"My Application",
|
||||
"My application",
|
||||
["dev", "staging", "prod"],
|
||||
)
|
||||
|
||||
scoped_portfolio = Portfolios.get(portfolio_owner, portfolio.id)
|
||||
|
@ -185,6 +185,7 @@ class EnvironmentFactory(Base):
|
||||
|
||||
name = factory.Faker("domain_word")
|
||||
application = factory.SubFactory(ApplicationFactory)
|
||||
creator = factory.SubFactory(UserFactory)
|
||||
|
||||
@classmethod
|
||||
def _create(cls, model_class, *args, **kwargs):
|
||||
|
@ -12,7 +12,11 @@ def test_add_user_to_environment():
|
||||
|
||||
portfolio = PortfolioFactory.create(owner=owner)
|
||||
application = Applications.create(
|
||||
portfolio, "my test application", "It's mine.", ["dev", "staging", "prod"]
|
||||
portfolio.owner,
|
||||
portfolio,
|
||||
"my test application",
|
||||
"It's mine.",
|
||||
["dev", "staging", "prod"],
|
||||
)
|
||||
dev_environment = application.environments[0]
|
||||
|
||||
|
@ -71,6 +71,7 @@ def test_update_environment_failure(client, user_session):
|
||||
def test_application_settings(client, user_session):
|
||||
portfolio = PortfolioFactory.create()
|
||||
application = Applications.create(
|
||||
portfolio.owner,
|
||||
portfolio,
|
||||
"Snazzy Application",
|
||||
"A new application for me and my friends",
|
||||
@ -86,6 +87,7 @@ def test_application_settings(client, user_session):
|
||||
def test_edit_application_environments_obj(app, client, user_session):
|
||||
portfolio = PortfolioFactory.create()
|
||||
application = Applications.create(
|
||||
portfolio.owner,
|
||||
portfolio,
|
||||
"Snazzy Application",
|
||||
"A new application for me and my friends",
|
||||
@ -127,6 +129,7 @@ def test_edit_application_environments_obj(app, client, user_session):
|
||||
def test_data_for_app_env_roles_form(app, client, user_session):
|
||||
portfolio = PortfolioFactory.create()
|
||||
application = Applications.create(
|
||||
portfolio.owner,
|
||||
portfolio,
|
||||
"Snazzy Application",
|
||||
"A new application for me and my friends",
|
||||
|
Loading…
x
Reference in New Issue
Block a user