Source code for acapi2.tests.test_applications
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""Applications tests"""
import requests
import requests_mock
from acapi2.resources.applicationlist import ApplicationList
from acapi2.resources.environmentlist import EnvironmentList
from acapi2.tests import BaseTest
[docs]@requests_mock.Mocker()
class TestApplications(BaseTest):
[docs] def test_application_list(self, mocker):
response = {
"total": 2,
"pagination": {"total": 2, "limit": 10, "offset": 0},
"_links": {
"self": {"href": "{baseUri}/applications?limit=10"},
"sort": {
"href": "{baseUri}/applications{?sort}",
"templated": True,
},
"filter": {
"href": "{baseUri}/applications{?filter}",
"templated": True,
},
"limit": {
"href": "{baseUri}/applications{?limit}",
"templated": True,
},
"parent": {"href": "{baseUri}"},
},
"_embedded": {
"items": [
{
"id": 241643,
"uuid": "a47ac10b-58cc-4372" "-a567-0e02b2c3d470",
"name": "Sample application 1",
"hosting": {"type": "acp", "id": "devcloud:devcloud2"},
"subscription": {
"uuid": "s47ac10b-58cc-4372" "-a567-0e02b2c3d470",
"name": "Sample subscription",
},
"organization": {
"uuid": "g47ac10b-58cc-4372" "-a567-0e02b2c3d470",
"name": "Sample organization",
},
"flags": {
"remote_admin": True,
"service_management": True,
},
"type": "drupal",
"status": "normal",
"_links": {
"self": {
"href": "{baseUri}/applications/"
"a47ac10b-58cc-4372"
"-a567-0e02b2c3d470"
}
},
},
{
"id": 954291,
"uuid": "a47ac10b-58cc-4372" "-a567-0e02b2c3d471",
"name": "Sample application 2",
"hosting": {
"type": "free",
"id": "devcloud:devcloud2",
},
"subscription": {
"uuid": "s47ac10b-58cc-4372" "-a567-0e02b2c3d470",
"name": "Sample subscription",
},
"organization": {
"uuid": "g47ac10b-58cc-4372" "-a567-0e02b2c3d470",
"name": "Sample organization",
},
"type": "node",
"flags": {
"remote_admin": False,
"service_management": False,
},
"status": "provisioning",
"_links": {
"self": {
"href": "{baseUri}/applications/"
"a47ac10b-58cc-4372"
"-a567-0e02b2c3d471"
}
},
},
]
},
}
uri = "{}/applications".format(self.endpoint)
mocker.register_uri("GET", uri, json=response, status_code=200)
apps = self.acquia.applications()
self.assertIsInstance(apps, ApplicationList)
[docs] def test_application_not_found(self, mocker):
app_uuid = "a47ac10b-58cc-4372-a567-0e02b2c3d470"
uri = "{base_uri}/applications/{uuid}"
uri = uri.format(base_uri=self.endpoint, uuid=app_uuid)
mocker.register_uri(url=uri, method="GET", status_code=404)
acquia_data = self.acquia.application(app_uuid)
with self.assertRaises(requests.HTTPError):
acquia_data.request()
[docs] def test_create_environment(self, mocker):
response = {"message": "Adding an environment."}
app_uuid = "a47ac10b-58cc-4372-a567-0e02b2c3d470"
uri = "{base_uri}/applications/{uuid}/environments"
uri = uri.format(base_uri=self.endpoint, uuid=app_uuid)
mocker.register_uri(
url=uri, method="POST", status_code=202, json=response
)
response = self.acquia.application(app_uuid).create_environment(
"Ticket Numer 123", "ticket-number-123", "ticket-number-123"
)
self.assertEqual(response.status_code, 202)
[docs] def test_get_environments(self, mocker):
response = {
"total": 3,
"_links": {
"self": {
"href": "{baseUri}/applications/"
"a47ac10b-58cc-4372"
"-a567-0e02b2c3d470/environments"
},
"sort": {
"href": "{baseUri}/applications/"
"a47ac10b-58cc-4372"
"-a567-0e02b2c3d470/environments{?sort}",
"templated": True,
},
"filter": {
"href": "{baseUri}/applications/"
"a47ac10b-58cc-4372"
"-a567-0e02b2c3d470/"
"environments{?filter}",
"templated": True,
},
"limit": {
"href": "{baseUri}/applications/"
"a47ac10b-58cc-4372"
"-a567-0e02b2c3d470/environments{?limit}",
"templated": True,
},
"parent": {
"href": "{baseUri}/applications/"
"a47ac10b-58cc-4372-a567-0e02b2c3d470"
},
},
"_embedded": {
"items": [
{
"id": "24-a47ac10b-58cc-4372" "-a567-0e02b2c3d470",
"label": "Dev",
"name": "dev",
"application": {
"name": "Sample Drupal application",
"uuid": "a47ac10b-58cc-4372" "-a567-0e02b2c3d470",
},
"domains": [
"sitedev.hosted.acquia-sites.com",
"example.com",
],
"active_domain": "example.com",
"default_domain": "sitedev.hosted" ".acquia-sites.com",
"image_url": None,
"ips": ["10.0.1.5"],
"region": "us-east-1",
"status": "normal",
"type": "drupal",
"size": None,
"weight": 0,
"vcs": {
"type": "git",
"path": "master",
"url": "site@svn-3.hosted."
"acquia-sites.com:site.git",
},
"insight": {
"status": "ok",
"scores": {"insight": 87, "seo": 56},
"counts": {
"best_practices": {
"pass": 7,
"fail": 0,
"ignored": 0,
"total": 7,
"percent": 100,
},
"performance": {
"pass": 22,
"fail": 0,
"ignored": 0,
"total": 22,
"percent": 100,
},
"security": {
"pass": 23,
"fail": 0,
"ignored": 0,
"total": 23,
"percent": 100,
},
},
},
"flags": {
"cde": False,
"hsd": False,
"livedev": False,
"multi_region": False,
"production": False,
"production_mode": False,
"remote_admin": False,
"varnish": True,
"varnish_over_ssl": False,
"service_management": True,
},
"configuration": {
"operating_system": "precise",
"php": {
"version": "5.6",
"memory_limit": 128,
"apc": 96,
"max_execution_time": 300,
"max_post_size": 256,
"max_input_vars": 1000,
"sendmail_path": None,
},
},
"artifact": None,
"_links": {
"self": {
"href": "{baseUri}/environments/"
"24-a47ac10b-58cc-4372"
"-a567-0e02b2c3d470"
}
},
},
{
"id": "15-a47ac10b-58cc-4372" "-a567-0e02b2c3d470",
"label": "Production",
"name": "prod",
"application": {
"name": "Sample SiteFactory application",
"uuid": "a47ac10b-58cc-4372" "-a567-0e02b2c3d470",
},
"domains": [
"siteprod.hosted.acquia-sites.com",
"my-domain-prod.com",
],
"gardener": {
"site-update": "my-domain-prod.com/admin/"
"gardens/site-update",
"multi-site": "my-domain-prod.com/"
"admin/gardens/staging",
},
"active_domain": "my-domain-prod.com",
"image_url": None,
"ips": ["10.0.1.1", "10.0.1.2"],
"region": "us-east-1",
"status": "normal",
"type": "drupal",
"size": None,
"weight": 0,
"vcs": {
"type": "git",
"path": "tags/01-01-2015",
"url": "site@svn-3.hosted."
"acquia-sites.com:site.git",
},
"insight": None,
"flags": {
"cde": False,
"hsd": False,
"livedev": False,
"multi_region": False,
"production": True,
"production_mode": True,
"remote_admin": False,
"varnish": True,
"varnish_over_ssl": False,
"service_management": False,
},
"configuration": None,
"artifact": None,
"_links": {
"self": {
"href": "{baseUri}/environments/"
"15-a47ac10b-58cc-4372"
"-a567-0e02b2c3d470"
}
},
},
{
"id": "32-a47ac10b-58cc-4372" "-a567-0e02b2c3d470",
"label": "Stage",
"name": "test",
"application": {
"name": "Sample Node application",
"uuid": "a47ac10b-58cc-4372" "-a567-0e02b2c3d470",
},
"domains": [
"sitetest.hosted.acquia-sites.com",
"my-domain-test.com",
],
"active_domain": "my-domain-test.com",
"image_url": None,
"ips": [],
"region": "us-east-1",
"status": "normal",
"type": "node",
"size": "medium",
"weight": 20,
"vcs": {
"type": "git",
"path": None,
"url": "qa10@svn-3.networkdev."
"ahserversdev.com:qa10.git",
},
"insight": {
"status": "not-found",
"scores": None,
"counts": None,
},
"flags": {
"cde": False,
"hsd": False,
"livedev": False,
"multi_region": False,
"production": False,
"production_mode": False,
"remote_admin": False,
"varnish": True,
"varnish_over_ssl": False,
"service_management": False,
},
"configuration": {
"operating_system": "precise",
"node": {"version": "6.11.1"},
},
"artifact": {"id": 1, "name": "Example artifact"},
"_links": {
"self": {
"href": "{baseUri}/environments/"
"32-a47ac10b-58cc-4372"
"-a567-0e02b2c3d470"
}
},
},
]
},
}
app_uuid = "a47ac10b-58cc-4372-a567-0e02b2c3d470"
uri = "{base_uri}/applications/{uuid}/environments".format(
base_uri=self.endpoint, uuid=app_uuid
)
mocker.register_uri("GET", uri, json=response, status_code=200)
envs = self.acquia.application(app_uuid).environments()
self.assertIsInstance(envs, EnvironmentList)
[docs] def test_application_permission(self, mocker):
response = {
"total": 53,
"flags": {"administrator": False},
"_links": {
"self": {
"href": "https://cloud.acquia.com/api/applications/"
"a47ac10b-58cc-4372-a567-0e02b2c3d470/permissions"
},
"parent": {
"href": "https://cloud.acquia.com/api/applications/"
"a47ac10b-58cc-4372-a567-0e02b2c3d470"
},
},
"_embedded": {
"items": [
{
"name": "administer alerts",
"label": "Manage Insight alerts",
"description": "Grants the ability to ignore alerts "
"and change settings on a "
"Drupal website "
'using the "Fix it Now" feature.',
"group_label": "Insight",
},
{
"name": "revoke insight installs",
"title": "Revoke Insight sites",
"description": "Grants the ability to revoke sites so "
"they can no longer submit data.",
"group_label": "Insight",
},
{
"name": "deploy to non-prod",
"label": "Pull and deploy code, files, or databases "
"to non-production environments",
"description": "Grants the ability to enable or "
"disable live development "
"and non-production "
"work.",
"group_label": "Workflow",
},
{
"name": "deploy to prod",
"label": "Deploy code, files, or databases to "
"the production environment",
"description": None,
"group_label": "Workflow",
},
{
"name": "pull from prod",
"label": "Pull files or databases from the "
"production environment",
"description": None,
"group_label": "Workflow",
},
{
"name": "move file to non-prod",
"label": "Move files to non-production environments",
"description": None,
"group_label": "Workflow",
},
{
"name": "move file to prod",
"label": "Move files to the production environment",
"description": None,
"group_label": "Workflow",
},
{
"name": "move file from prod",
"label": "Move files from production environments",
"description": None,
"group_label": "Workflow",
},
{
"name": "move file from non-prod",
"label": "Move files from non-production environments",
"description": None,
"group_label": "Workflow",
},
{
"name": "clear varnish on non-prod",
"label": "Clear Varnish cache for "
"non-production environments",
"description": None,
"group_label": "Workflow",
},
{
"name": "clear varnish on prod",
"label": "Clear Varnish cache for "
"the production environment",
"description": None,
"group_label": "Workflow",
},
{
"name": "configure prod env",
"label": "Configure production environment",
"description": None,
"group_label": "Workflow",
},
{
"name": "configure non-prod env",
"label": "Configure non-production environments",
"description": None,
"group_label": "Workflow",
},
{
"name": "add an environment",
"label": "Add an environment",
"description": None,
"group_label": "Workflow",
},
{
"name": "delete an environment",
"label": "Delete an environment",
"description": None,
"group_label": "Workflow",
},
{
"name": "administer domain non-prod",
"label": "Add or remove domains for "
"non-production environments",
"description": None,
"group_label": "Domains",
},
{
"name": "administer domain prod",
"label": "Add or remove domains for the "
"production environment",
"description": None,
"group_label": "Domains",
},
{
"name": "administer ssl prod",
"label": "Add or remove SSL certificates for "
"the production environment",
"description": None,
"group_label": "Domains",
},
{
"name": "administer ssl non-prod",
"label": "Add or remove SSL certificates for "
"the non-production environments",
"description": None,
"group_label": "Domains",
},
{
"name": "reboot server",
"label": "Reboot server",
"description": None,
"group_label": "Server administration",
},
{
"name": "resize server",
"label": "Resize server",
"description": "Increasing the size of your "
"server costs money.",
"group_label": "Server administration",
},
{
"name": "suspend server",
"label": "Suspend server",
"description": None,
"group_label": "Server administration",
},
{
"name": "configure server",
"label": "Configure server",
"description": None,
"group_label": "Server administration",
},
{
"name": "download logs non-prod",
"label": "Download logs for non-production "
"environments",
"description": None,
"group_label": "Logs",
},
{
"name": "download logs prod",
"label": "Download logs for the production"
" environment",
"description": None,
"group_label": "Logs",
},
{
"name": "add database",
"label": "Add a database",
"description": None,
"group_label": "Databases",
},
{
"name": "remove database",
"label": "Remove a database",
"description": None,
"group_label": "Databases",
},
{
"name": "view database connection",
"label": "View database connection details"
" (username, password, or hostname)",
"description": None,
"group_label": "Databases",
},
{
"name": "download db backup non-prod",
"label": "Download database backups for "
"non-production environments",
"description": None,
"group_label": "Databases",
},
{
"name": "download db backup prod",
"label": "Download database backups for "
"the production environment",
"description": None,
"group_label": "Databases",
},
{
"name": "create db backup non-prod",
"label": "Create database backups for "
"non-production environments",
"description": None,
"group_label": "Databases",
},
{
"name": "create db backup prod",
"label": "Create database backups for the "
"production environment",
"description": None,
"group_label": "Databases",
},
{
"name": "restore db backup non-prod",
"label": "Restore database backups for "
"non-production environments",
"description": None,
"group_label": "Databases",
},
{
"name": "restore db backup prod",
"label": "Restore database backups for "
"the production environment",
"description": None,
"group_label": "Databases",
},
{
"name": "administer team",
"label": "Add or remove a user of a team",
"description": "Granting this permission "
"will give any user with this "
"role full permissions on this team.",
"group_label": "Administration",
},
{
"name": "access cloud api",
"label": "Access the Cloud API",
"description": "Grants the ability to use "
"the API and bypass all other "
"permissions via command line tools.",
"group_label": "Administration",
},
{
"name": "activate add on",
"label": "Activate an Acquia Subscription add-on",
"description": None,
"group_label": "Administration",
},
{
"name": "administer cron non-prod",
"label": "Modify cron tasks for "
"non-production environments",
"description": None,
"group_label": "Cron",
},
{
"name": "administer cron prod",
"label": "Modify cron tasks for the "
"production environment",
"description": None,
"group_label": "Cron",
},
{
"name": "search limit increase",
"label": "Increase the search index "
"limit for a subscription",
"description": None,
"group_label": "Search",
},
{
"name": "search schema edit",
"label": "Edit the search schema for a subscription",
"description": None,
"group_label": "Search",
},
{
"name": "create support ticket",
"label": "Create a support ticket",
"description": None,
"group_label": "Support",
},
{
"name": "edit any support ticket",
"label": "View and edit any support tickets "
"for a subscription",
"description": None,
"group_label": "Support",
},
{
"name": "administer ssh keys",
"label": "Manage SSH keys",
"description": "Grants the ability to use SSH "
"and bypass all other permissions "
"via command line tools.",
"group_label": "SSH keys",
},
{
"name": "view build plans",
"label": "View Build plans",
"description": None,
"group_label": "Build",
},
{
"name": "edit build plans",
"label": "Edit Build plans",
"description": None,
"group_label": "Build",
},
{
"name": "run build plans",
"label": "Run Build plans",
"description": None,
"group_label": "Build",
},
{
"name": "add ssh key to git",
"label": "Add SSH key to git repository",
"description": None,
"group_label": "SSH keys",
},
{
"name": "add ssh key to non-prod",
"label": "Add SSH key to non-production environments",
"description": None,
"group_label": "SSH keys",
},
{
"name": "add ssh key to prod",
"label": "Add SSH key to the production environment",
"description": None,
"group_label": "SSH keys",
},
{
"name": "view remote administration",
"label": "View Remote Administration",
"description": "This permission is only relevant if "
"your subscription has remote "
"administration.",
"group_label": "Administration",
},
{
"name": "edit remote administration",
"label": "Edit Remote Administration",
"description": "This permission is only relevant "
"if your subscription has remote "
"administration.",
"group_label": "Administration",
},
]
},
}
app_uuid = "a47ac10b-58cc-4372-a567-0e02b2c3d470"
uri = f"{self.endpoint}/applications/{app_uuid}/permissions"
mocker.register_uri("GET", uri, json=response, status_code=200)
perms = self.acquia.application(app_uuid).permissions()
self.assertEqual(perms.status_code, 200)
self.assertIn(b"remote", perms.content)