Create route and domain method for creating a subscription
This commit is contained in:
parent
1c53ceef00
commit
31b7e2f589
@ -341,6 +341,12 @@ class CloudProviderInterface:
|
|||||||
"""
|
"""
|
||||||
raise NotImplementedError()
|
raise NotImplementedError()
|
||||||
|
|
||||||
|
def create_subscription(self, environment):
|
||||||
|
"""Returns True if a new subscription has been created or raises an
|
||||||
|
exception if an error occurs while creating a subscription.
|
||||||
|
"""
|
||||||
|
raise NotImplementedError()
|
||||||
|
|
||||||
|
|
||||||
class MockCloudProvider(CloudProviderInterface):
|
class MockCloudProvider(CloudProviderInterface):
|
||||||
|
|
||||||
@ -508,6 +514,11 @@ class MockCloudProvider(CloudProviderInterface):
|
|||||||
|
|
||||||
return self._maybe(12)
|
return self._maybe(12)
|
||||||
|
|
||||||
|
def create_subscription(self, environment):
|
||||||
|
self._maybe_raise(self.UNAUTHORIZED_RATE, GeneralCSPException)
|
||||||
|
|
||||||
|
return True
|
||||||
|
|
||||||
def get_calculator_url(self):
|
def get_calculator_url(self):
|
||||||
return "https://www.rackspace.com/en-us/calculator"
|
return "https://www.rackspace.com/en-us/calculator"
|
||||||
|
|
||||||
|
@ -1,9 +1,10 @@
|
|||||||
from flask import (
|
from flask import (
|
||||||
|
current_app as app,
|
||||||
|
g,
|
||||||
redirect,
|
redirect,
|
||||||
render_template,
|
render_template,
|
||||||
request as http_request,
|
request as http_request,
|
||||||
url_for,
|
url_for,
|
||||||
g,
|
|
||||||
)
|
)
|
||||||
|
|
||||||
from .blueprint import applications_bp
|
from .blueprint import applications_bp
|
||||||
@ -522,3 +523,31 @@ def resend_invite(application_id, application_role_id):
|
|||||||
_anchor="application-members",
|
_anchor="application-members",
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@applications_bp.route(
|
||||||
|
"/environments/<environment_id>/add_subscription", methods=["POST"]
|
||||||
|
)
|
||||||
|
# TODO: decide what perms are needed to create a subscription
|
||||||
|
@user_can(Permissions.EDIT_ENVIRONMENT, message="create new environment subscription")
|
||||||
|
def create_subscription(environment_id):
|
||||||
|
environment = Environments.get(environment_id)
|
||||||
|
|
||||||
|
try:
|
||||||
|
app.csp.cloud.create_subscription(environment)
|
||||||
|
|
||||||
|
except GeneralCSPException:
|
||||||
|
flash("environment_subscription_failure")
|
||||||
|
return (
|
||||||
|
render_settings_page(application=environment.application, show_flash=True),
|
||||||
|
400,
|
||||||
|
)
|
||||||
|
|
||||||
|
return redirect(
|
||||||
|
url_for(
|
||||||
|
"applications.settings",
|
||||||
|
application_id=environment.application.id,
|
||||||
|
fragment="application-environments",
|
||||||
|
_anchor="application-environments",
|
||||||
|
)
|
||||||
|
)
|
||||||
|
@ -83,6 +83,11 @@ MESSAGES = {
|
|||||||
"message": "flash.environment.deleted.message",
|
"message": "flash.environment.deleted.message",
|
||||||
"category": "success",
|
"category": "success",
|
||||||
},
|
},
|
||||||
|
"environment_subscription_failure": {
|
||||||
|
"title": "flash.environment.subscription_failure.title",
|
||||||
|
"message": "flash.environment.subscription_failure.message",
|
||||||
|
"category": "error",
|
||||||
|
},
|
||||||
"form_errors": {
|
"form_errors": {
|
||||||
"title": "flash.form.errors.title",
|
"title": "flash.form.errors.title",
|
||||||
"message": "flash.form.errors.message",
|
"message": "flash.form.errors.message",
|
||||||
|
@ -777,3 +777,40 @@ def test_handle_update_member_with_error(set_g, monkeypatch, mock_logger):
|
|||||||
handle_update_member(application.id, app_role.id, form_data)
|
handle_update_member(application.id, app_role.id, form_data)
|
||||||
|
|
||||||
assert mock_logger.messages[-1] == exception
|
assert mock_logger.messages[-1] == exception
|
||||||
|
|
||||||
|
|
||||||
|
def test_create_subscription_success(client, user_session):
|
||||||
|
environment = EnvironmentFactory.create()
|
||||||
|
|
||||||
|
user_session(environment.portfolio.owner)
|
||||||
|
response = client.post(
|
||||||
|
url_for("applications.create_subscription", environment_id=environment.id),
|
||||||
|
)
|
||||||
|
|
||||||
|
assert response.status_code == 302
|
||||||
|
assert response.location == url_for(
|
||||||
|
"applications.settings",
|
||||||
|
application_id=environment.application.id,
|
||||||
|
_external=True,
|
||||||
|
fragment="application-environments",
|
||||||
|
_anchor="application-environments",
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def test_create_subscription_failure(client, user_session, monkeypatch):
|
||||||
|
environment = EnvironmentFactory.create()
|
||||||
|
|
||||||
|
def _raise_csp_exception(*args, **kwargs):
|
||||||
|
raise GeneralCSPException("An error occurred.")
|
||||||
|
|
||||||
|
monkeypatch.setattr(
|
||||||
|
"atst.domain.csp.cloud.MockCloudProvider.create_subscription",
|
||||||
|
_raise_csp_exception,
|
||||||
|
)
|
||||||
|
|
||||||
|
user_session(environment.portfolio.owner)
|
||||||
|
response = client.post(
|
||||||
|
url_for("applications.create_subscription", environment_id=environment.id),
|
||||||
|
)
|
||||||
|
|
||||||
|
assert response.status_code == 400
|
||||||
|
@ -127,6 +127,9 @@ flash:
|
|||||||
deleted:
|
deleted:
|
||||||
title: "{environment_name} deleted"
|
title: "{environment_name} deleted"
|
||||||
message: The environment "{environment_name}" has been deleted
|
message: The environment "{environment_name}" has been deleted
|
||||||
|
subscription_failure:
|
||||||
|
title: Environment subscription error
|
||||||
|
message: An unexpected problem occurred with your request, please try again. If the problem persists, contact an administrator.
|
||||||
form:
|
form:
|
||||||
errors:
|
errors:
|
||||||
title: There were some errors
|
title: There were some errors
|
||||||
|
Loading…
x
Reference in New Issue
Block a user