All checks were successful
Tests / test (push) Successful in 26s
closes #258
148 lines
4.9 KiB
Python
148 lines
4.9 KiB
Python
import pytest
|
|
|
|
from servala.core.models.service import CloudProvider, ServiceOffering
|
|
|
|
@pytest.mark.parametrize(
|
|
"url,redirect",
|
|
(
|
|
("/", "/accounts/login/?next=/"),
|
|
("/accounts/profile/", "/accounts/login/?next=/accounts/profile/"),
|
|
),
|
|
)
|
|
def test_root_view_redirects_valid_urls(client, url, redirect):
|
|
response = client.get(url)
|
|
assert response.status_code == 302
|
|
assert response.url == redirect
|
|
|
|
|
|
def test_root_view_invalid_urls_404(client):
|
|
response = client.get("/foobarbaz/")
|
|
assert response.status_code == 404
|
|
|
|
|
|
@pytest.mark.django_db
|
|
def test_owner_can_access_dashboard(client, org_owner, organization):
|
|
client.force_login(org_owner)
|
|
response = client.get(organization.urls.base)
|
|
assert organization.namespace == f"org-{organization.pk}"
|
|
assert response.status_code == 200
|
|
assert organization.name in response.content.decode()
|
|
|
|
|
|
@pytest.mark.django_db
|
|
def test_user_cannot_see_other_organization(client, org_owner, other_organization):
|
|
client.force_login(org_owner)
|
|
response = client.get(other_organization.urls.base)
|
|
assert response.status_code == 403
|
|
assert other_organization.name not in response.content.decode()
|
|
|
|
|
|
@pytest.mark.django_db
|
|
def test_organization_linked_in_sidebar(
|
|
client, org_owner, organization, other_organization
|
|
):
|
|
client.force_login(org_owner)
|
|
response = client.get("/", follow=True)
|
|
assert response.status_code == 200
|
|
assert organization.name in response.content.decode()
|
|
assert other_organization.name not in response.content.decode()
|
|
|
|
|
|
@pytest.mark.django_db
|
|
def test_service_detail_redirects_with_single_offering(
|
|
client, org_owner, organization, test_service, test_service_offering
|
|
):
|
|
client.force_login(org_owner)
|
|
url = f"/org/{organization.slug}/services/{test_service.slug}/"
|
|
response = client.get(url)
|
|
|
|
assert response.status_code == 302
|
|
expected_url = f"/org/{organization.slug}/services/{test_service.slug}/offering/{test_service_offering.pk}/"
|
|
assert response.url == expected_url
|
|
|
|
|
|
@pytest.mark.django_db
|
|
def test_service_detail_shows_multiple_offerings(
|
|
client, org_owner, organization, test_service, test_service_offering
|
|
):
|
|
second_provider = CloudProvider.objects.create(
|
|
name="AWS", description="Amazon Web Services"
|
|
)
|
|
second_offering = ServiceOffering.objects.create(
|
|
service=test_service,
|
|
provider=second_provider,
|
|
description="Redis on AWS",
|
|
osb_plan_id="test-plan-456",
|
|
)
|
|
|
|
client.force_login(org_owner)
|
|
url = f"/org/{organization.slug}/services/{test_service.slug}/"
|
|
response = client.get(url)
|
|
|
|
assert response.status_code == 200
|
|
content = response.content.decode()
|
|
|
|
assert test_service_offering.provider.name in content
|
|
assert second_offering.provider.name in content
|
|
assert "Create Instance" in content
|
|
|
|
|
|
@pytest.mark.django_db
|
|
def test_service_detail_respects_cloud_provider_restrictions(
|
|
client, org_owner, organization, test_service, test_service_offering
|
|
):
|
|
second_provider = CloudProvider.objects.create(
|
|
name="AWS", description="Amazon Web Services"
|
|
)
|
|
ServiceOffering.objects.create(
|
|
service=test_service,
|
|
provider=second_provider,
|
|
description="Redis on AWS",
|
|
osb_plan_id="test-plan-456",
|
|
)
|
|
organization.origin.limit_cloudproviders.add(test_service_offering.provider)
|
|
|
|
client.force_login(org_owner)
|
|
url = f"/org/{organization.slug}/services/{test_service.slug}/"
|
|
response = client.get(url)
|
|
|
|
assert response.status_code == 302
|
|
expected_url = f"/org/{organization.slug}/services/{test_service.slug}/offering/{test_service_offering.pk}/"
|
|
assert response.url == expected_url
|
|
|
|
|
|
@pytest.mark.django_db
|
|
def test_service_detail_no_redirect_with_restricted_multiple_offerings(
|
|
client, org_owner, organization, test_service, test_service_offering
|
|
):
|
|
second_provider = CloudProvider.objects.create(
|
|
name="AWS", description="Amazon Web Services"
|
|
)
|
|
second_offering = ServiceOffering.objects.create(
|
|
service=test_service,
|
|
provider=second_provider,
|
|
description="Redis on AWS",
|
|
osb_plan_id="test-plan-456",
|
|
)
|
|
third_provider = CloudProvider.objects.create(
|
|
name="Azure", description="Microsoft Azure"
|
|
)
|
|
third_offering = ServiceOffering.objects.create(
|
|
service=test_service,
|
|
provider=third_provider,
|
|
description="Redis on Azure",
|
|
osb_plan_id="test-plan-789",
|
|
)
|
|
organization.origin.limit_cloudproviders.add(
|
|
test_service_offering.provider, second_provider
|
|
)
|
|
|
|
client.force_login(org_owner)
|
|
url = f"/org/{organization.slug}/services/{test_service.slug}/"
|
|
response = client.get(url)
|
|
|
|
assert response.status_code == 200
|
|
content = response.content.decode()
|
|
assert test_service_offering.provider.name in content
|
|
assert second_offering.provider.name in content
|
|
assert third_offering.provider.name not in content
|