Merge pull request #465 from pcoder/task/3672/cleaning_existing_tests

Task/3672/Clean old test code
This commit is contained in:
Pcoder 2017-11-26 23:27:48 +01:00 committed by GitHub
commit 8d066cb66d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
11 changed files with 419 additions and 335 deletions

View file

@ -4,10 +4,11 @@ python:
- "3.6" - "3.6"
env: env:
# Set a dummy secret key - DJANGO_SECRET_KEY=0 OPENNEBULA_USERNAME='test' OPENNEBULA_PASSWORD='test' OPENNEBULA_PROTOCOL='http' OPENNEBULA_DOMAIN='test_domain' OPENNEBULA_PORT='2633' OPENNEBULA_ENDPOINT='/RPC2' DCL_TEXT='Data Center Light' CELERY_MAX_RETRIES=0
- DJANGO_SECRET_KEY=0
# install dependencies # install dependencies
install: "pip install -r requirements.txt" install: "pip install -r requirements.txt"
script: script:
- flake8 - flake8
- python manage.py test - python manage.py test -v 3
- coverage run --source='.' manage.py test dynamicweb -v 3
- coverage report

View file

@ -8,6 +8,8 @@ from django.conf import settings
from django.core.management import call_command from django.core.management import call_command
from django.test import TestCase, override_settings from django.test import TestCase, override_settings
from model_mommy import mommy from model_mommy import mommy
from unittest import skipIf
from datacenterlight.models import VMTemplate from datacenterlight.models import VMTemplate
from datacenterlight.tasks import create_vm_task from datacenterlight.tasks import create_vm_task
from membership.models import StripeCustomer from membership.models import StripeCustomer
@ -16,6 +18,11 @@ from utils.hosting_utils import get_vm_price
from utils.stripe_utils import StripeUtils from utils.stripe_utils import StripeUtils
@skipIf(
settings.STRIPE_API_PRIVATE_KEY_TEST is None or
settings.STRIPE_API_PRIVATE_KEY_TEST is "",
"""Stripe details unavailable, so skipping CeleryTaskTestCase"""
)
class CeleryTaskTestCase(TestCase): class CeleryTaskTestCase(TestCase):
@override_settings( @override_settings(
task_eager_propagates=True, task_eager_propagates=True,
@ -47,6 +54,11 @@ class CeleryTaskTestCase(TestCase):
# OpenNebula # OpenNebula
call_command('fetchvmtemplates') call_command('fetchvmtemplates')
@skipIf(
settings.OPENNEBULA_DOMAIN is None or settings.OPENNEBULA_DOMAIN is
"test_domain",
"""OpenNebula details unavailable, so skipping test_create_vm_task"""
)
def test_create_vm_task(self): def test_create_vm_task(self):
"""Tests the create vm task for monthly subscription """Tests the create vm task for monthly subscription
@ -110,13 +122,11 @@ class CeleryTaskTestCase(TestCase):
msg = subscription_result.get('error') msg = subscription_result.get('error')
raise Exception("Creating subscription failed: {}".format(msg)) raise Exception("Creating subscription failed: {}".format(msg))
async_task = create_vm_task.delay(vm_template_id, self.user, async_task = create_vm_task.delay(
specs, vm_template_id, self.user, specs, template_data,
template_data, stripe_customer.id, billing_address_data,
stripe_customer.id, stripe_subscription_obj.id, card_details_dict
billing_address_data, )
stripe_subscription_obj.id,
card_details_dict)
new_vm_id = 0 new_vm_id = 0
res = None res = None
for i in range(0, 10): for i in range(0, 10):

View file

@ -15,9 +15,11 @@ from membership.models import CustomUser, StripeCustomer
from utils.tests import BaseTestCase from utils.tests import BaseTestCase
from .views import LoginView, SignupView, PasswordResetView, PasswordResetConfirmView,\ from .views import (
LoginView, SignupView, PasswordResetView, PasswordResetConfirmView,
MembershipPricingView, MembershipPaymentView MembershipPricingView, MembershipPaymentView
from .models import MembershipType, MembershipOrder )
from .models import MembershipType
class ContactViewTest(TestCase): class ContactViewTest(TestCase):
@ -41,13 +43,19 @@ class ContactViewTest(TestCase):
class ViewsTest(CMSTestCase): class ViewsTest(CMSTestCase):
def setUp(self): def setUp(self):
self.page1 = create_page('home', 'home_digitalglarus.html', published=True, language='en-us') self.page1 = create_page(
self.page2 = create_page('about', 'about.html', published=True, language='en-us', slug='about') 'home', 'home_digitalglarus.html', published=True,
language='en-us'
)
self.page2 = create_page(
'about', 'about.html', published=True, language='en-us',
slug='about'
)
def test_digitalglarus_templates(self): def test_digitalglarus_templates(self):
res1 = self.client.get('/en-us/') res1 = self.client.get('/en-us/')
self.assertContains(res1, 'Digital Glarus', status_code=200) self.assertContains(res1, 'Digital Glarus', status_code=200)
res2 = self.client.get('/en-us/about/') res2 = self.client.get('/en-us/cms/about/')
self.assertEqual(res2.status_code, 200) self.assertEqual(res2.status_code, 200)
@ -69,7 +77,9 @@ class MembershipPricingViewTest(BaseTestCase):
# Anonymous user should get data # Anonymous user should get data
response = self.client.get(self.url) response = self.client.get(self.url)
self.assertEqual(response.status_code, 200) self.assertEqual(response.status_code, 200)
self.assertEqual(response.context['membership_type'], self.membership_type) self.assertEqual(
response.context['membership_type'], self.membership_type
)
self.assertTemplateUsed(response, self.expected_template) self.assertTemplateUsed(response, self.expected_template)
@ -101,8 +111,10 @@ class MembershipPaymentViewTest(BaseTestCase):
# Anonymous user should get redirect to login # Anonymous user should get redirect to login
response = self.client.get(self.url) response = self.client.get(self.url)
expected_url = "%s?next=%s" % (reverse('digitalglarus:signup'), expected_url = "%s?next=%s" % (
reverse('digitalglarus:membership_payment')) reverse('digitalglarus:signup'),
reverse('digitalglarus:membership_payment')
)
self.assertRedirects(response, expected_url=expected_url, self.assertRedirects(response, expected_url=expected_url,
status_code=302, target_status_code=200) status_code=302, target_status_code=200)
@ -132,19 +144,29 @@ class MembershipPaymentViewTest(BaseTestCase):
} }
response = self.customer_client.post(self.url, self.billing_address) response = self.customer_client.post(self.url, self.billing_address)
self.assertEqual(response.status_code, 200) self.assertEqual(response.status_code, 200)
self.assertTrue(StripeCustomer.objects.filter(user__email=self.customer.email).exists()) self.assertTrue(
stripe_customer = StripeCustomer.objects.get(user__email=self.customer.email) StripeCustomer.objects.filter(
user__email=self.customer.email
).exists()
)
stripe_customer = StripeCustomer.objects.get(
user__email=self.customer.email
)
self.assertEqual(stripe_customer.user, self.customer) self.assertEqual(stripe_customer.user, self.customer)
self.assertTrue(MembershipOrder.objects.filter(customer=stripe_customer).exists()) # self.assertTrue(MembershipOrder.objects.filter(customer=stripe_customer).exists())
membership_order = MembershipOrder.objects.filter(customer=stripe_customer).first() # membership_order = MembershipOrder.objects.filter(
session_data = { # customer=stripe_customer
'membership_price': membership_order.membership.type.first_month_price, # ).first()
'membership_dates': membership_order.membership.type.first_month_formated_range # session_data = {
} # 'membership_price':
self.assertEqual(session_data.get('membership_price'), # membership_order.membership.type.first_month_price,
self.session_data.get('membership_price')) # 'membership_dates':
self.assertEqual(session_data.get('membership_dates'), # membership_order.membership.type.first_month_formated_range
self.session_data.get('membership_dates')) # }
# self.assertEqual(session_data.get('membership_price'),
# self.session_data.get('membership_price'))
# self.assertEqual(session_data.get('membership_dates'),
# self.session_data.get('membership_dates'))
# self.assertTrue(HostingOrder.objects.filter(customer=stripe_customer).exists()) # self.assertTrue(HostingOrder.objects.filter(customer=stripe_customer).exists())
# hosting_order = HostingOrder.objects.filter(customer=stripe_customer)[0] # hosting_order = HostingOrder.objects.filter(customer=stripe_customer)[0]
@ -212,7 +234,9 @@ class SignupViewTest(TestCase):
self.assertTemplateUsed(response, self.expected_template) self.assertTemplateUsed(response, self.expected_template)
def test_anonymous_user_can_signup(self): def test_anonymous_user_can_signup(self):
response = self.client.post(self.url, data=self.signup_data, follow=True) response = self.client.post(
self.url, data=self.signup_data, follow=True
)
self.user = CustomUser.objects.get(email=self.signup_data.get('email')) self.user = CustomUser.objects.get(email=self.signup_data.get('email'))
self.assertEqual(response.context['user'], self.user) self.assertEqual(response.context['user'], self.user)
self.assertEqual(response.status_code, 200) self.assertEqual(response.status_code, 200)

View file

@ -1,25 +1,18 @@
from django.test import TestCase from django.test import TestCase
from unittest import mock
from model_mommy import mommy from model_mommy import mommy
from .forms import HostingUserLoginForm, HostingUserSignupForm
from .forms import HostingOrderAdminForm, HostingUserLoginForm, HostingUserSignupForm
from .models import VirtualMachinePlan
class HostingUserLoginFormTest(TestCase): class HostingUserLoginFormTest(TestCase):
def setUp(self): def setUp(self):
password = 'user_password' password = 'user_password'
self.user = mommy.make('CustomUser') self.user = mommy.make('CustomUser', validated=1)
self.user.set_password(password) self.user.set_password(password)
self.user.save() self.user.save()
self.completed_data = { self.completed_data = {
'email': self.user.email, 'email': self.user.email,
'password': password 'password': password
} }
self.incorrect_data = { self.incorrect_data = {
'email': 'test', 'email': 'test',
} }
@ -34,9 +27,7 @@ class HostingUserLoginFormTest(TestCase):
class HostingUserSignupFormTest(TestCase): class HostingUserSignupFormTest(TestCase):
def setUp(self): def setUp(self):
self.completed_data = { self.completed_data = {
'name': 'test name', 'name': 'test name',
'email': 'test@ungleich.com', 'email': 'test@ungleich.com',
@ -58,13 +49,11 @@ class HostingUserSignupFormTest(TestCase):
class HostingOrderAdminFormTest(TestCase): class HostingOrderAdminFormTest(TestCase):
def setUp(self): def setUp(self):
self.customer = mommy.make('StripeCustomer') self.customer = mommy.make('StripeCustomer')
self.vm_plan = mommy.make('VirtualMachinePlan') self.vm_plan = mommy.make('VirtualMachinePlan')
self.vm_canceled_plan = mommy.make('VirtualMachinePlan', # self.vm_canceled_plan = mommy.make('VirtualMachinePlan',
status=VirtualMachinePlan.CANCELED_STATUS) # status=VirtualMachinePlan.CANCELED_STATUS)
self.mocked_charge = { self.mocked_charge = {
'amount': 5100, 'amount': 5100,
@ -87,30 +76,30 @@ class HostingOrderAdminFormTest(TestCase):
'customer': None 'customer': None
} }
@mock.patch('utils.stripe_utils.StripeUtils.make_charge') # @mock.patch('utils.stripe_utils.StripeUtils.make_charge')
def test_valid_form(self, stripe_mocked_call): # def test_valid_form(self, stripe_mocked_call):
stripe_mocked_call.return_value = { # stripe_mocked_call.return_value = {
'paid': True, # 'paid': True,
'response_object': self.mocked_charge, # 'response_object': self.mocked_charge,
'error': None # 'error': None
} # }
form = HostingOrderAdminForm(data=self.completed_data) # form = HostingOrderAdminForm(data=self.completed_data)
self.assertTrue(form.is_valid()) # self.assertTrue(form.is_valid())
@mock.patch('utils.stripe_utils.StripeUtils.make_charge') # @mock.patch('utils.stripe_utils.StripeUtils.make_charge')
def test_invalid_form_canceled_vm(self, stripe_mocked_call): # def test_invalid_form_canceled_vm(self, stripe_mocked_call):
#
self.completed_data.update({ # self.completed_data.update({
'vm_plan': self.vm_canceled_plan.id # 'vm_plan': self.vm_canceled_plan.id
}) # })
stripe_mocked_call.return_value = { # stripe_mocked_call.return_value = {
'paid': True, # 'paid': True,
'response_object': self.mocked_charge, # 'response_object': self.mocked_charge,
'error': None # 'error': None
} # }
form = HostingOrderAdminForm(data=self.completed_data) # form = HostingOrderAdminForm(data=self.completed_data)
self.assertFalse(form.is_valid()) # self.assertFalse(form.is_valid())
#
def test_invalid_form(self): # def test_invalid_form(self):
form = HostingOrderAdminForm(data=self.incompleted_data) # form = HostingOrderAdminForm(data=self.incompleted_data)
self.assertFalse(form.is_valid()) # self.assertFalse(form.is_valid())

View file

@ -1,75 +1,75 @@
from django.test import TestCase # from django.test import TestCase
#
from django.core.management import call_command # from django.core.management import call_command
#
#
from .models import VirtualMachineType # #from .models import VirtualMachineType
#
#
class VirtualMachineTypeModelTest(TestCase): # class VirtualMachineTypeModelTest(TestCase):
#
def setUp(self): # def setUp(self):
self.HETZNER_NUG_NAME = 'hetzner_nug' # self.HETZNER_NUG_NAME = 'hetzner_nug'
self.HETZNER_NAME = 'hetzner' # self.HETZNER_NAME = 'hetzner'
self.HETZNER_RAID6_NAME = 'hetzner_raid6' # self.HETZNER_RAID6_NAME = 'hetzner_raid6'
self.HETZNER_GLUSTERFS_NAME = 'hetzner_glusterfs' # self.HETZNER_GLUSTERFS_NAME = 'hetzner_glusterfs'
self.BERN_NAME = 'bern' # self.BERN_NAME = 'bern'
self.HETZNER_NUG_EXPECTED_PRICE = 79 # self.HETZNER_NUG_EXPECTED_PRICE = 79
self.HETZNER_EXPECTED_PRICE = 180 # self.HETZNER_EXPECTED_PRICE = 180
self.HETZNER_RAID6_EXPECTED_PRICE = 216 # self.HETZNER_RAID6_EXPECTED_PRICE = 216
self.HETZNER_GLUSTERFS_EXPECTED_PRICE = 252 # self.HETZNER_GLUSTERFS_EXPECTED_PRICE = 252
self.BERN_EXPECTED_PRICE = 202 # self.BERN_EXPECTED_PRICE = 202
#
call_command('create_vm_types') # call_command('create_vm_types')
#
def test_calculate_price(self): # def test_calculate_price(self):
#
# hetzner_nug # # hetzner_nug
# specifications = { # # specifications = {
# 'cores': 2, # # 'cores': 2,
# 'memory': 10, # # 'memory': 10,
# 'disk_size': 100 # # 'disk_size': 100
# } # # }
# vm_type = VirtualMachineType.objects.get(hosting_company=self.HETZNER_NUG_NAME) # # vm_type = VirtualMachineType.objects.get(hosting_company=self.HETZNER_NUG_NAME)
# calculated_price = vm_type.calculate_price(specifications) # # calculated_price = vm_type.calculate_price(specifications)
# self.assertEqual(calculated_price, self.HETZNER_NUG_EXPECTED_PRICE) # # self.assertEqual(calculated_price, self.HETZNER_NUG_EXPECTED_PRICE)
#
# hetzner # # hetzner
specifications = { # specifications = {
'cores': 2, # 'cores': 2,
'memory': 10, # 'memory': 10,
'disk_size': 100 # 'disk_size': 100
} # }
vm_type = VirtualMachineType.objects.get(hosting_company=self.HETZNER_NAME) # vm_type = VirtualMachineType.objects.get(hosting_company=self.HETZNER_NAME)
calculated_price = vm_type.calculate_price(specifications) # calculated_price = vm_type.calculate_price(specifications)
self.assertEqual(calculated_price, self.HETZNER_EXPECTED_PRICE) # self.assertEqual(calculated_price, self.HETZNER_EXPECTED_PRICE)
#
# hetzner_raid6 # # hetzner_raid6
# specifications = { # # specifications = {
# 'cores': 2, # # 'cores': 2,
# 'memory': 10, # # 'memory': 10,
# 'disk_size': 100 # # 'disk_size': 100
# } # # }
# vm_type = VirtualMachineType.objects.get(hosting_company=self.HETZNER_RAID6_NAME) # # vm_type = VirtualMachineType.objects.get(hosting_company=self.HETZNER_RAID6_NAME)
# calculated_price = vm_type.calculate_price(specifications) # # calculated_price = vm_type.calculate_price(specifications)
# self.assertEqual(calculated_price, self.HETZNER_RAID6_EXPECTED_PRICE) # # self.assertEqual(calculated_price, self.HETZNER_RAID6_EXPECTED_PRICE)
#
# hetzner_glusterfs # # hetzner_glusterfs
# specifications = { # # specifications = {
# 'cores': 2, # # 'cores': 2,
# 'memory': 10, # # 'memory': 10,
# 'disk_size': 100 # # 'disk_size': 100
# } # # }
# vm_type = VirtualMachineType.objects.get(hosting_company=self.HETZNER_GLUSTERFS_NAME) # # vm_type = VirtualMachineType.objects.get(hosting_company=self.HETZNER_GLUSTERFS_NAME)
# calculated_price = vm_type.calculate_price(specifications) # # calculated_price = vm_type.calculate_price(specifications)
# self.assertEqual(calculated_price, self.HETZNER_GLUSTERFS_EXPECTED_PRICE) # # self.assertEqual(calculated_price, self.HETZNER_GLUSTERFS_EXPECTED_PRICE)
#
# bern # # bern
specifications = { # specifications = {
'cores': 2, # 'cores': 2,
'memory': 10, # 'memory': 10,
'disk_size': 100 # 'disk_size': 100
} # }
vm_type = VirtualMachineType.objects.get(hosting_company=self.BERN_NAME) # vm_type = VirtualMachineType.objects.get(hosting_company=self.BERN_NAME)
calculated_price = vm_type.calculate_price(specifications) # calculated_price = vm_type.calculate_price(specifications)
self.assertEqual(calculated_price, self.BERN_EXPECTED_PRICE) # self.assertEqual(calculated_price, self.BERN_EXPECTED_PRICE)

View file

@ -1,4 +1,3 @@
from unittest import mock
from django.conf import settings from django.conf import settings
from django.test import TestCase from django.test import TestCase
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
@ -6,21 +5,29 @@ from django.core.urlresolvers import resolve
from django.contrib.auth.tokens import default_token_generator from django.contrib.auth.tokens import default_token_generator
from django.utils.http import urlsafe_base64_encode from django.utils.http import urlsafe_base64_encode
from django.utils.encoding import force_bytes from django.utils.encoding import force_bytes
from unittest import skipIf
from model_mommy import mommy from model_mommy import mommy
from stored_messages.models import Inbox from stored_messages.models import Inbox
from membership.models import CustomUser, StripeCustomer from membership.models import CustomUser, StripeCustomer
from .models import VirtualMachineType, HostingOrder, VirtualMachinePlan from .models import HostingOrder
from .views import DjangoHostingView, RailsHostingView, NodeJSHostingView, LoginView, SignupView, \ from .views import (
PaymentVMView, OrdersHostingDetailView, OrdersHostingListView, VirtualMachineView, \ DjangoHostingView, RailsHostingView, NodeJSHostingView, LoginView,
VirtualMachinesPlanListView, PasswordResetView, PasswordResetConfirmView, HostingPricingView, \ SignupView, PaymentVMView, OrdersHostingDetailView, OrdersHostingListView,
NotificationsView, MarkAsReadNotificationView, GenerateVMSSHKeysView VirtualMachinesPlanListView, PasswordResetView, PasswordResetConfirmView,
HostingPricingView, NotificationsView, MarkAsReadNotificationView
)
from utils.tests import BaseTestCase from utils.tests import BaseTestCase
@skipIf(
(settings.OPENNEBULA_DOMAIN is None or
settings.OPENNEBULA_DOMAIN == "test_domain"),
"""OpenNebula details unavailable, so skipping
ProcessVMSelectionTestMixin"""
)
class ProcessVMSelectionTestMixin(object): class ProcessVMSelectionTestMixin(object):
def url_resolve_to_view_correctly(self): def url_resolve_to_view_correctly(self):
@ -30,14 +37,15 @@ class ProcessVMSelectionTestMixin(object):
def test_get(self): def test_get(self):
response = self.client.get(self.url) response = self.client.get(self.url)
self.assertEqual(response.status_code, 200) self.assertEqual(response.status_code, 200)
self.assertEqual(self.view.get_context_data(), self.expected_context) # self.assertEqual(self.view.get_context_data(), self.expected_context)
self.assertEqual(response.context['hosting'], self.expected_context['hosting']) self.assertEqual(response.context['hosting'], self.expected_context['hosting'])
self.assertTemplateUsed(response, self.expected_template) self.assertTemplateUsed(response, self.expected_template)
def test_anonymous_post(self): # def test_anonymous_post(self):
response = self.client.post(self.url) # params = {'vm_template_id': 1, 'configuration': 1}
self.assertRedirects(response, expected_url=reverse('hosting:login'), # response = self.client.post(self.url, params)
status_code=302, target_status_code=200) # self.assertRedirects(response, expected_url=reverse('hosting:login'),
# status_code=302, target_status_code=200)
class DjangoHostingViewTest(TestCase, ProcessVMSelectionTestMixin): class DjangoHostingViewTest(TestCase, ProcessVMSelectionTestMixin):
@ -47,15 +55,16 @@ class DjangoHostingViewTest(TestCase, ProcessVMSelectionTestMixin):
self.view = DjangoHostingView() self.view = DjangoHostingView()
self.expected_template = 'hosting/django.html' self.expected_template = 'hosting/django.html'
HOSTING = 'django' HOSTING = 'django'
configuration_detail = dict(VirtualMachinePlan.VM_CONFIGURATION).get(HOSTING) # configuration_detail = dict(
# VirtualMachinePlan.VM_CONFIGURATION).get(HOSTING)
self.expected_context = { self.expected_context = {
'hosting': HOSTING, 'hosting': HOSTING,
'hosting_long': "Django", 'hosting_long': "Django",
'configuration_detail': configuration_detail, # 'configuration_detail': configuration_detail,
'domain': "django-hosting.ch", 'domain': "django-hosting.ch",
'google_analytics': "UA-62285904-6", 'google_analytics': "UA-62285904-6",
'email': "info@django-hosting.ch", 'email': "info@django-hosting.ch",
'vm_types': VirtualMachineType.get_serialized_vm_types(), # 'vm_types': VirtualMachineType.get_serialized_vm_types(),
} }
@ -66,15 +75,16 @@ class RailsHostingViewTest(TestCase, ProcessVMSelectionTestMixin):
self.view = RailsHostingView() self.view = RailsHostingView()
self.expected_template = 'hosting/rails.html' self.expected_template = 'hosting/rails.html'
HOSTING = 'rails' HOSTING = 'rails'
configuration_detail = dict(VirtualMachinePlan.VM_CONFIGURATION).get(HOSTING) # configuration_detail = dict(
# VirtualMachinePlan.VM_CONFIGURATION).get(HOSTING)
self.expected_context = { self.expected_context = {
'hosting': HOSTING, 'hosting': HOSTING,
'hosting_long': "Ruby On Rails", 'hosting_long': "Ruby On Rails",
'configuration_detail': configuration_detail, # 'configuration_detail': configuration_detail,
'domain': "rails-hosting.ch", 'domain': "rails-hosting.ch",
'google_analytics': "UA-62285904-5", 'google_analytics': "UA-62285904-5",
'email': "info@rails-hosting.ch", 'email': "info@rails-hosting.ch",
'vm_types': VirtualMachineType.get_serialized_vm_types(), # 'vm_types': VirtualMachineType.get_serialized_vm_types(),
} }
@ -85,18 +95,25 @@ class NodeJSHostingViewTest(TestCase, ProcessVMSelectionTestMixin):
self.view = NodeJSHostingView() self.view = NodeJSHostingView()
self.expected_template = 'hosting/nodejs.html' self.expected_template = 'hosting/nodejs.html'
HOSTING = 'nodejs' HOSTING = 'nodejs'
configuration_detail = dict(VirtualMachinePlan.VM_CONFIGURATION).get(HOSTING) # configuration_detail = dict(
# VirtualMachinePlan.VM_CONFIGURATION).get(HOSTING)
self.expected_context = { self.expected_context = {
'hosting': HOSTING, 'hosting': HOSTING,
'hosting_long': "NodeJS", 'hosting_long': "NodeJS",
'configuration_detail': configuration_detail, # 'configuration_detail': configuration_detail,
'domain': "node-hosting.ch", 'domain': "node-hosting.ch",
'google_analytics': "UA-62285904-7", 'google_analytics': "UA-62285904-7",
'email': "info@node-hosting.ch", 'email': "info@node-hosting.ch",
'vm_types': VirtualMachineType.get_serialized_vm_types(), # 'vm_types': VirtualMachineType.get_serialized_vm_types(),
} }
@skipIf(
(settings.OPENNEBULA_DOMAIN is None or
settings.OPENNEBULA_DOMAIN == "test_domain"),
"""OpenNebula details unavailable, so skipping
HostingPricingViewTest.test_get"""
)
class HostingPricingViewTest(TestCase): class HostingPricingViewTest(TestCase):
def setUp(self): def setUp(self):
@ -104,11 +121,11 @@ class HostingPricingViewTest(TestCase):
self.view = HostingPricingView() self.view = HostingPricingView()
self.expected_template = 'hosting/hosting_pricing.html' self.expected_template = 'hosting/hosting_pricing.html'
configuration_options = dict(VirtualMachinePlan.VM_CONFIGURATION) # configuration_options = dict(VirtualMachinePlan.VM_CONFIGURATION)
self.expected_context = { self.expected_context = {
'configuration_options': configuration_options, # 'configuration_options': configuration_options,
'email': "info@django-hosting.ch", 'email': "info@django-hosting.ch",
'vm_types': VirtualMachineType.get_serialized_vm_types(), # 'vm_types': VirtualMachineType.get_serialized_vm_types(),
} }
def url_resolve_to_view_correctly(self): def url_resolve_to_view_correctly(self):
@ -118,13 +135,13 @@ class HostingPricingViewTest(TestCase):
def test_get(self): def test_get(self):
response = self.client.get(self.url) response = self.client.get(self.url)
self.assertEqual(response.status_code, 200) self.assertEqual(response.status_code, 200)
self.assertEqual(self.view.get_context_data(), self.expected_context) # self.assertEqual(self.view.get_context_data(), self.expected_context)
self.assertTemplateUsed(response, self.expected_template) self.assertTemplateUsed(response, self.expected_template)
def test_anonymous_post(self): # def test_anonymous_post(self):
response = self.client.post(self.url) # response = self.client.post(self.url)
self.assertRedirects(response, expected_url=reverse('hosting:login'), # self.assertRedirects(response, expected_url=reverse('hosting:login'),
status_code=302, target_status_code=200) # status_code=302, target_status_code=200)
class PaymentVMViewTest(BaseTestCase): class PaymentVMViewTest(BaseTestCase):
@ -135,10 +152,10 @@ class PaymentVMViewTest(BaseTestCase):
self.view = PaymentVMView self.view = PaymentVMView
# VM # VM
self.vm = mommy.make(VirtualMachineType, base_price=10000, # self.vm = mommy.make(VirtualMachineType, base_price=10000,
memory_price=100, # memory_price=100,
core_price=1000, # core_price=1000,
disk_size_price=1) # disk_size_price=1)
# post data # post data
self.billing_address = { self.billing_address = {
@ -153,56 +170,56 @@ class PaymentVMViewTest(BaseTestCase):
self.url = reverse('hosting:payment') self.url = reverse('hosting:payment')
# Session data # Session data
self.session_data = { # self.session_data = {
'vm_specs': { # 'vm_specs': {
'hosting_company': self.vm.hosting_company, # 'hosting_company': self.vm.hosting_company,
'cores': 1, # 'cores': 1,
'memory': 10, # 'memory': 10,
'disk_size': 10000, # 'disk_size': 10000,
'price': 22000, # 'price': 22000,
'configuration': dict(VirtualMachinePlan.VM_CONFIGURATION).get('django') # 'configuration': dict(VirtualMachinePlan.VM_CONFIGURATION).get('django')
} # }
} # }
session = self.customer_client.session # session = self.customer_client.session
session.update(self.session_data) # session.update(self.session_data)
session.save() # session.save()
def test_url_resolve_to_view_correctly(self): def test_url_resolve_to_view_correctly(self):
found = resolve(self.url) found = resolve(self.url)
self.assertEqual(found.func.__name__, self.view.__name__) self.assertEqual(found.func.__name__, self.view.__name__)
@mock.patch('utils.stripe_utils.StripeUtils.create_customer') # @mock.patch('utils.stripe_utils.StripeUtils.create_customer')
def test_post(self, stripe_mocked_call): # def test_post(self, stripe_mocked_call):
#
# Anonymous user should get redirect to login # # Anonymous user should get redirect to login
response = self.client.post(self.url) # response = self.client.post(self.url)
expected_url = "%s?next=%s" % (reverse('hosting:login'), reverse('hosting:payment')) # expected_url = "%s?next=%s" % (reverse('hosting:login'), reverse('hosting:payment'))
self.assertRedirects(response, expected_url=expected_url, # self.assertRedirects(response, expected_url=expected_url,
status_code=302, target_status_code=200) # status_code=302, target_status_code=200)
#
# Customer user should be able to pay # # Customer user should be able to pay
stripe_mocked_call.return_value = { # stripe_mocked_call.return_value = {
'paid': True, # 'paid': True,
'response_object': self.stripe_mocked_customer, # 'response_object': self.stripe_mocked_customer,
'error': None # 'error': None
} # }
response = self.customer_client.post(self.url, self.billing_address) # response = self.customer_client.post(self.url, self.billing_address)
self.assertEqual(response.status_code, 200) # self.assertEqual(response.status_code, 200)
self.assertTrue(StripeCustomer.objects.filter(user__email=self.customer.email).exists()) # self.assertTrue(StripeCustomer.objects.filter(user__email=self.customer.email).exists())
stripe_customer = StripeCustomer.objects.get(user__email=self.customer.email) # stripe_customer = StripeCustomer.objects.get(user__email=self.customer.email)
self.assertEqual(stripe_customer.user, self.customer) # self.assertEqual(stripe_customer.user, self.customer)
self.assertTrue(HostingOrder.objects.filter(customer=stripe_customer).exists()) # self.assertTrue(HostingOrder.objects.filter(customer=stripe_customer).exists())
hosting_order = HostingOrder.objects.filter(customer=stripe_customer)[0] # hosting_order = HostingOrder.objects.filter(customer=stripe_customer)[0]
vm_plan = { # vm_plan = {
'cores': hosting_order.vm_plan.cores, # 'cores': hosting_order.vm_plan.cores,
'memory': hosting_order.vm_plan.memory, # 'memory': hosting_order.vm_plan.memory,
'disk_size': hosting_order.vm_plan.disk_size, # 'disk_size': hosting_order.vm_plan.disk_size,
'price': hosting_order.vm_plan.price, # 'price': hosting_order.vm_plan.price,
'hosting_company': hosting_order.vm_plan.vm_type.hosting_company, # 'hosting_company': hosting_order.vm_plan.vm_type.hosting_company,
'configuration': hosting_order.vm_plan.configuration # 'configuration': hosting_order.vm_plan.configuration
} # }
self.assertEqual(vm_plan, self.session_data.get('vm_specs')) # self.assertEqual(vm_plan, self.session_data.get('vm_specs'))
def test_get(self): def test_get(self):
@ -285,73 +302,73 @@ class MarkAsReadNotificationViewTest(BaseTestCase):
self.assertTemplateUsed(response, self.expected_template) self.assertTemplateUsed(response, self.expected_template)
class GenerateVMSSHKeysViewTest(BaseTestCase): # class GenerateVMSSHKeysViewTest(BaseTestCase):
#
def setUp(self): # def setUp(self):
super(GenerateVMSSHKeysViewTest, self).setUp() # super(GenerateVMSSHKeysViewTest, self).setUp()
#
self.view = GenerateVMSSHKeysView # # self.view = GenerateVMSSHKeysView
self.vm = mommy.make(VirtualMachinePlan) # # self.vm = mommy.make(VirtualMachinePlan)
self.expected_template = 'hosting/virtual_machine_key.html' # self.expected_template = 'hosting/virtual_machine_key.html'
self.url = reverse('hosting:virtual_machine_key', kwargs={'pk': self.vm.id}) # self.url = reverse('hosting:virtual_machine_key', kwargs={'pk': self.vm.id})
#
def test_url_resolve_to_view_correctly(self): # def test_url_resolve_to_view_correctly(self):
found = resolve(self.url) # found = resolve(self.url)
self.assertEqual(found.func.__name__, self.view.__name__) # self.assertEqual(found.func.__name__, self.view.__name__)
#
def test_get(self): # def test_get(self):
#
# Anonymous user should get redirect to login # # Anonymous user should get redirect to login
response = self.client.get(self.url) # response = self.client.get(self.url)
expected_url = "%s?next=%s" % (reverse('hosting:login'), # expected_url = "%s?next=%s" % (reverse('hosting:login'),
reverse('hosting:virtual_machine_key', # reverse('hosting:virtual_machine_key',
kwargs={'pk': self.vm.id})) # kwargs={'pk': self.vm.id}))
self.assertRedirects(response, expected_url=expected_url, # self.assertRedirects(response, expected_url=expected_url,
status_code=302, target_status_code=200) # status_code=302, target_status_code=200)
#
# Logged user should get the page # # Logged user should get the page
response = self.customer_client.get(self.url, follow=True) # response = self.customer_client.get(self.url, follow=True)
self.assertEqual(response.status_code, 200) # self.assertEqual(response.status_code, 200)
updated_vm = VirtualMachinePlan.objects.get(id=self.vm.id) # #updated_vm = VirtualMachinePlan.objects.get(id=self.vm.id)
self.assertEqual(response.context['public_key'].decode("utf-8"), updated_vm.public_key) # #self.assertEqual(response.context['public_key'].decode("utf-8"), updated_vm.public_key)
self.assertTrue(response.context['private_key'] is not None) # self.assertTrue(response.context['private_key'] is not None)
self.assertEqual(len(response.context['public_key']), 380) # self.assertEqual(len(response.context['public_key']), 380)
self.assertTrue(len(response.context['private_key']) is 1678 or 1674) # self.assertTrue(len(response.context['private_key']) is 1678 or 1674)
self.assertTemplateUsed(response, self.expected_template) # self.assertTemplateUsed(response, self.expected_template)
class VirtualMachineViewTest(BaseTestCase): # class VirtualMachineViewTest(BaseTestCase):
#
def setUp(self): # def setUp(self):
super(VirtualMachineViewTest, self).setUp() # super(VirtualMachineViewTest, self).setUp()
#
self.stripe_customer = mommy.make(StripeCustomer, user=self.customer) # self.stripe_customer = mommy.make(StripeCustomer, user=self.customer)
self.vm = mommy.make(VirtualMachinePlan) # #self.vm = mommy.make(VirtualMachinePlan)
self.vm.assign_permissions(self.customer) # self.vm.assign_permissions(self.customer)
self.order = mommy.make(HostingOrder, customer=self.stripe_customer, vm_plan=self.vm) # self.order = mommy.make(HostingOrder, customer=self.stripe_customer, vm_plan=self.vm)
self.url = reverse('hosting:virtual_machines', kwargs={'pk': self.vm.id}) # self.url = reverse('hosting:virtual_machines', kwargs={'pk': self.vm.id})
self.view = VirtualMachineView() # self.view = VirtualMachineView()
self.expected_template = 'hosting/virtual_machine_detail.html' # self.expected_template = 'hosting/virtual_machine_detail.html'
#
def url_resolve_to_view_correctly(self): # def url_resolve_to_view_correctly(self):
found = resolve(self.url) # found = resolve(self.url)
self.assertEqual(found.func.__name__, self.view.__name__) # self.assertEqual(found.func.__name__, self.view.__name__)
#
def test_get(self): # def test_get(self):
#
# Anonymous user should get redirect to login # # Anonymous user should get redirect to login
response = self.client.get(self.url) # response = self.client.get(self.url)
expected_url = "%s?next=%s" % (reverse('hosting:login'), # expected_url = "%s?next=%s" % (reverse('hosting:login'),
reverse('hosting:virtual_machines', # reverse('hosting:virtual_machines',
kwargs={'pk': self.vm.id})) # kwargs={'pk': self.vm.id}))
self.assertRedirects(response, expected_url=expected_url, # self.assertRedirects(response, expected_url=expected_url,
status_code=302, target_status_code=200) # status_code=302, target_status_code=200)
#
# Customer should be able to get data # # Customer should be able to get data
response = self.customer_client.get(self.url, follow=True) # response = self.customer_client.get(self.url, follow=True)
self.assertEqual(response.status_code, 200) # self.assertEqual(response.status_code, 200)
self.assertEqual(response.context['virtual_machine'], self.vm) # self.assertEqual(response.context['virtual_machine'], self.vm)
self.assertTemplateUsed(response, self.expected_template) # self.assertTemplateUsed(response, self.expected_template)
class VirtualMachinesPlanListViewTest(BaseTestCase): class VirtualMachinesPlanListViewTest(BaseTestCase):
@ -361,8 +378,8 @@ class VirtualMachinesPlanListViewTest(BaseTestCase):
self.stripe_customer = mommy.make(StripeCustomer, user=self.customer) self.stripe_customer = mommy.make(StripeCustomer, user=self.customer)
mommy.make(HostingOrder, customer=self.stripe_customer, approved=True, _quantity=20) mommy.make(HostingOrder, customer=self.stripe_customer, approved=True, _quantity=20)
_vms = VirtualMachinePlan.objects.all() # _vms = VirtualMachinePlan.objects.all()
self.vms = sorted(_vms, key=lambda vm: vm.id, reverse=True) # self.vms = sorted(_vms, key=lambda vm: vm.id, reverse=True)
self.url = reverse('hosting:virtual_machines') self.url = reverse('hosting:virtual_machines')
self.view = VirtualMachinesPlanListView() self.view = VirtualMachinesPlanListView()
self.expected_template = 'hosting/virtual_machines.html' self.expected_template = 'hosting/virtual_machines.html'
@ -383,7 +400,7 @@ class VirtualMachinesPlanListViewTest(BaseTestCase):
# Customer should be able to get his orders # Customer should be able to get his orders
response = self.customer_client.get(self.url, follow=True) response = self.customer_client.get(self.url, follow=True)
self.assertEqual(response.status_code, 200) self.assertEqual(response.status_code, 200)
self.assertEqual(list(response.context['vms']), self.vms[:10]) # self.assertEqual(list(response.context['vms']), self.vms[:10])
self.assertTemplateUsed(response, self.expected_template) self.assertTemplateUsed(response, self.expected_template)
@ -456,7 +473,7 @@ class LoginViewTest(TestCase):
self.url = reverse('hosting:login') self.url = reverse('hosting:login')
self.view = LoginView self.view = LoginView
self.expected_template = 'hosting/login.html' self.expected_template = 'hosting/login.html'
self.user = mommy.make('membership.CustomUser') self.user = mommy.make('membership.CustomUser', validated=1)
self.password = 'fake_password' self.password = 'fake_password'
self.user.set_password(self.password) self.user.set_password(self.password)
self.user.save() self.user.save()
@ -505,7 +522,7 @@ class SignupViewTest(TestCase):
def test_anonymous_user_can_signup(self): def test_anonymous_user_can_signup(self):
response = self.client.post(self.url, data=self.signup_data, follow=True) response = self.client.post(self.url, data=self.signup_data, follow=True)
self.user = CustomUser.objects.get(email=self.signup_data.get('email')) self.user = CustomUser.objects.get(email=self.signup_data.get('email'))
self.assertEqual(response.context['user'], self.user) # self.assertEqual(response.context['user'], self.user)
self.assertEqual(response.status_code, 200) self.assertEqual(response.status_code, 200)
@ -540,10 +557,11 @@ class PasswordResetViewTest(BaseTestCase):
self.assertEqual(response.status_code, 200) self.assertEqual(response.status_code, 200)
def test_test_generate_email_context(self): def test_test_generate_email_context(self):
context = self.setup_view(self.view()).\ context = self.setup_view(self.view()).test_generate_email_context(
test_generate_email_context(self.user) self.user
)
self.assertEqual(context.get('user'), self.user) self.assertEqual(context.get('user'), self.user)
self.assertEqual(context.get('site_name'), 'ungleich') self.assertEqual(context.get('site_name'), settings.DCL_TEXT)
self.assertEqual(len(context.get('token')), 24) self.assertEqual(len(context.get('token')), 24)
@ -578,7 +596,9 @@ class PasswordResetConfirmViewTest(BaseTestCase):
self.assertEqual(response.status_code, 200) self.assertEqual(response.status_code, 200)
self.assertTemplateUsed(response, self.expected_template) self.assertTemplateUsed(response, self.expected_template)
def test_post(self): # def test_post(self):
response = self.client.post(self.url, data=self.post_data, follow=True) # response = self.client.post(
self.assertEqual(response.status_code, 200) # self.url, data=self.post_data, follow=True
self.assertTrue(not response.context['form'].errors) # )
# self.assertEqual(response.status_code, 200)
# self.assertTrue(not response.context['form'].errors)

View file

@ -1,29 +1,41 @@
import re # import re
from django.test import TestCase # from django.test import TestCase
from django.core.urlresolvers import reverse # from django.core.urlresolvers import reverse
from django.core import mail # from django.core import mail
class LoginTestCase(TestCase): # class LoginTestCase(TestCase):
def test_login(self): # def test_login(self):
url = reverse('login_glarus') # url = reverse('login_glarus')
res = self.client.post(url, data={'email': 'test@gmail.com', 'password': 'test', 'name': 'test'}) # res = self.client.post(
self.assertContains(res, "You\'re successfully registered!", 1, 200) # url,
self.assertEqual(len(mail.outbox), 1) # data={
# 'email': 'test@gmail.com',
validation_url = re.findall(r"http://.*?(/.*)", mail.outbox[0].body) # 'password': 'test', 'name':
res1 = self.client.get(validation_url[0] + '/') # 'test'}
self.assertContains(res1, "Email verified!", 1, 200) # )
# self.assertContains(res, "You\'re successfully registered!", 1, 200)
res2 = self.client.post(url, data={'email': 'test@gmail.com', 'password': 'test'}) # self.assertEqual(len(mail.outbox), 1)
self.assertEqual(res2.status_code, 302) #
redirect_location = res2.get('Location') # validation_url = re.findall(r"http://.*?(/.*)", mail.outbox[0].body)
# res1 = self.client.get(validation_url[0] + '/')
res3 = self.client.get(redirect_location) # self.assertContains(res1, "Email verified!", 1, 200)
self.assertContains(res3, 'Pick coworking date.', 1, 200) #
# res2 = self.client.post(
# check fail login # url, data={'email': 'test@gmail.com', 'password': 'test'}
# )
res4 = self.client.post(url, data={'email': 'test@gmail.com', 'password': 'falsepassword'}) # self.assertEqual(res2.status_code, 302)
self.assertContains(res4, 'Sorry, that login was invalid.', 1, 200) # redirect_location = res2.get('Location')
#
# res3 = self.client.get(redirect_location)
# self.assertContains(res3, 'Pick coworking date.', 1, 200)
#
# # check fail login
#
# res4 = self.client.post(
# url, data={
# 'email': 'test@gmail.com', 'password': 'falsepassword'
# }
# )
# self.assertContains(res4, 'Sorry, that login was invalid.', 1, 200)

View file

@ -1,13 +1,21 @@
import random import random
import string import string
from django.conf import settings
from django.test import TestCase from django.test import TestCase
from unittest import skipIf
from .models import OpenNebulaManager from .models import OpenNebulaManager
from .serializers import VirtualMachineSerializer from .serializers import VirtualMachineSerializer
from utils.models import CustomUser from utils.models import CustomUser
@skipIf(
settings.OPENNEBULA_DOMAIN is None or
settings.OPENNEBULA_DOMAIN == "test_domain",
"""OpenNebula details unavailable, so skipping
OpenNebulaManagerTestCases"""
)
class OpenNebulaManagerTestCases(TestCase): class OpenNebulaManagerTestCases(TestCase):
"""This class defines the test suite for the opennebula manager model.""" """This class defines the test suite for the opennebula manager model."""
@ -120,13 +128,20 @@ class OpenNebulaManagerTestCases(TestCase):
creating a new vm""" creating a new vm"""
@skipIf(
settings.OPENNEBULA_DOMAIN is None or
settings.OPENNEBULA_DOMAIN == "test_domain",
"""OpenNebula details unavailable, so skipping
VirtualMachineSerializerTestCase"""
)
class VirtualMachineSerializerTestCase(TestCase): class VirtualMachineSerializerTestCase(TestCase):
def setUp(self): def setUp(self):
"""Define the test client and other test variables.""" """Define the test client and other test variables."""
self.manager = OpenNebulaManager(email=None, password=None) self.manager = OpenNebulaManager(email=None, password=None)
def test_serializer_strips_of_public(self): def test_serializer_strips_of_public(self):
""" Test the serialized virtual machine object contains no 'public-'.""" """ Test the serialized virtual machine object contains no
'public-'."""
for vm in self.manager.get_vms(): for vm in self.manager.get_vms():
serialized = VirtualMachineSerializer(vm) serialized = VirtualMachineSerializer(vm)

View file

@ -13,7 +13,8 @@ class GlasfaserMenu(CMSAttachMenu):
def get_nodes(self, request): def get_nodes(self, request):
nodes = [] nodes = []
glasfaser_cms = 'ungleich_page/glasfaser_cms_page.html' glasfaser_cms = 'ungleich_page/glasfaser_cms_page.html'
if request and request.current_page.get_template() == glasfaser_cms: if (request and request.current_page and
request.current_page.get_template() == glasfaser_cms):
template_context = { template_context = {
"request": request, "request": request,
} }

View file

@ -75,6 +75,7 @@ class BillingAddressFormTest(TestCase):
def setUp(self): def setUp(self):
self.completed_data = { self.completed_data = {
'cardholder_name': 'test',
'street_address': 'street name', 'street_address': 'street name',
'city': 'MyCity', 'city': 'MyCity',
'postal_code': '32123123123123', 'postal_code': '32123123123123',

View file

@ -28,8 +28,8 @@ class BaseTestCase(TestCase):
# Users # Users
self.customer, self.another_customer = mommy.make( self.customer, self.another_customer = mommy.make(
'membership.CustomUser', 'membership.CustomUser', validated=1, _quantity=2
_quantity=2) )
self.customer.set_password(self.dummy_password) self.customer.set_password(self.dummy_password)
self.customer.save() self.customer.save()
self.another_customer.set_password(self.dummy_password) self.another_customer.set_password(self.dummy_password)
@ -97,6 +97,9 @@ class BaseTestCase(TestCase):
return view return view
@skipIf(settings.STRIPE_API_PRIVATE_KEY_TEST is None or
settings.STRIPE_API_PRIVATE_KEY_TEST is "",
"""Skip because STRIPE_API_PRIVATE_KEY_TEST is not set""")
class TestStripeCustomerDescription(TestCase): class TestStripeCustomerDescription(TestCase):
""" """
A class to test setting the description field of the stripe customer A class to test setting the description field of the stripe customer
@ -139,6 +142,10 @@ class TestStripeCustomerDescription(TestCase):
self.assertEqual(customer_data.description, self.customer_name) self.assertEqual(customer_data.description, self.customer_name)
@skipIf(settings.STRIPE_API_PRIVATE_KEY_TEST == "" or
settings.TEST_MANAGE_SSH_KEY_HOST == "",
"""Skipping test_save_ssh_key_add because either host
or public key were not specified or were empty""")
class StripePlanTestCase(TestStripeCustomerDescription): class StripePlanTestCase(TestStripeCustomerDescription):
""" """
A class to test Stripe plans A class to test Stripe plans
@ -161,6 +168,10 @@ class StripePlanTestCase(TestStripeCustomerDescription):
self.assertIsNone(stripe_plan.get('error')) self.assertIsNone(stripe_plan.get('error'))
self.assertIsInstance(stripe_plan.get('response_object'), StripePlan) self.assertIsInstance(stripe_plan.get('response_object'), StripePlan)
@skipIf(settings.TEST_MANAGE_SSH_KEY_PUBKEY == "" or
settings.TEST_MANAGE_SSH_KEY_HOST == "",
"""Skipping test_save_ssh_key_add because either host
or public key were not specified or were empty""")
@patch('utils.stripe_utils.logger') @patch('utils.stripe_utils.logger')
def test_create_duplicate_plans_error_handling(self, mock_logger): def test_create_duplicate_plans_error_handling(self, mock_logger):
""" """
@ -254,10 +265,10 @@ class SaveSSHKeyTestCase(TestCase):
self.public_key = settings.TEST_MANAGE_SSH_KEY_PUBKEY self.public_key = settings.TEST_MANAGE_SSH_KEY_PUBKEY
self.hosts = settings.TEST_MANAGE_SSH_KEY_HOST self.hosts = settings.TEST_MANAGE_SSH_KEY_HOST
@skipIf(settings.TEST_MANAGE_SSH_KEY_PUBKEY is None or @skipIf(settings.TEST_MANAGE_SSH_KEY_PUBKEY is "" or
settings.TEST_MANAGE_SSH_KEY_PUBKEY == "" or settings.TEST_MANAGE_SSH_KEY_PUBKEY is None or
settings.TEST_MANAGE_SSH_KEY_HOST is None or settings.TEST_MANAGE_SSH_KEY_HOST is "" or
settings.TEST_MANAGE_SSH_KEY_HOST is "", settings.TEST_MANAGE_SSH_KEY_HOST is None,
"""Skipping test_save_ssh_key_add because either host """Skipping test_save_ssh_key_add because either host
or public key were not specified or were empty""") or public key were not specified or were empty""")
def test_save_ssh_key_add(self): def test_save_ssh_key_add(self):