move the data creation into fixtures

This commit is contained in:
Andreas Zweili 2019-07-14 12:58:10 +02:00
parent 66706c854e
commit 4c761e551a
2 changed files with 70 additions and 48 deletions

View File

@ -1,8 +1,61 @@
import pytest
from django.core.management import call_command
from django.contrib.auth import get_user_model
from django.contrib.auth.models import Group
from inventory.models import Customer, Computer
@pytest.fixture(scope='session')
def django_db_setup(django_db_setup, django_db_blocker):
with django_db_blocker.unblock():
call_command('loaddata', 'inventory.yaml')
@pytest.fixture
def make_admin_users():
def _make_admin_users(customer_names):
admins = {}
for name in customer_names:
User = get_user_model()
username = name.lower() + '_admin'
domain = name.lower() + '.com'
admins[name] = User.objects.create_user(
username,
username + '@' + domain,
'password',
is_staff=True)
return admins
return _make_admin_users
@pytest.fixture
def make_customers():
def _make_customers(customer_names):
customers = {}
for name in customer_names:
customers[name] = Customer.objects.create(name=name)
return customers
return _make_customers
@pytest.fixture
def make_admin_groups():
def _make_admin_groups(customer_names):
groups = {}
for name in customer_names:
groups[name] = Group.objects.create(name=name)
return groups
return _make_admin_groups
@pytest.fixture
def make_computers():
def _make_computers(customer_names):
computers = {}
for name in customer_names:
computers[name] = Computer.objects.create(
name=name.lower() + '-pc1',
customer=Customer.objects.get(name=name))
return computers
return _make_computers

View File

@ -1,61 +1,30 @@
from django.contrib.auth import get_user_model
from django.contrib.auth.models import Group
from django.test import Client
from guardian.shortcuts import assign_perm
import pytest
from inventory.models import Customer, Computer
def create_users():
User = get_user_model()
novartis = User.objects.create_user('novartis_admin',
'novartis_admin@novartis.com',
'password',
is_staff=True)
nestle = User.objects.create_user('nestle_admin',
'nestle_admin@nestle.com',
'password',
is_staff=True)
return novartis, nestle
def create_groups():
novartis_admin_group = Group.objects.create(name='NovartisAdmins')
nestle_admin_group = Group.objects.create(name='NestleAdmins')
return novartis_admin_group, nestle_admin_group
def create_customers():
novartis = Customer.objects.create(name='Novartis')
nestle = Customer.objects.create(name='Nestle')
return novartis, nestle
def create_computers():
Computer.objects.create(name='novartis-pc1',
customer=Customer.objects.get(name='Novartis'))
Computer.objects.create(name='nestle-pc1',
customer=Customer.objects.get(name='Nestle'))
@pytest.mark.django_db
def test_customer_permissions():
novartis_admin_group, nestle_admin_group = create_groups()
novartis_admin, nestle_admin = create_users()
novartis, nestle = create_customers()
create_computers()
novartis_admin.groups.add(novartis_admin_group)
nestle_admin.groups.add(nestle_admin_group)
assign_perm('view_customer', novartis_admin, novartis)
assign_perm('view_customer', nestle_admin, nestle)
def test_customer_permissions(make_admin_users, make_customers,
make_admin_groups, make_computers):
nestle = 'Nestle'
novartis = 'Novartis'
customer_names = [novartis, nestle]
admins = make_admin_users(customer_names)
customers = make_customers(customer_names)
groups = make_admin_groups(customer_names)
computers = make_computers(customer_names)
admins[novartis].groups.add(groups[novartis])
admins[nestle].groups.add(groups[nestle])
assign_perm('view_customer', admins[novartis], customers[novartis])
assign_perm('view_customer', admins[nestle], customers[nestle])
novartis_client = Client()
nestle_client = Client()
response = novartis_client.post('/admin/', follow=True)
loginresponse = novartis_client.login(username='novartis_admin',
loginresponse = novartis_client.login(username=admins[novartis].username,
password='password')
response = novartis_client.get('/')
print(response.content.decode('utf8'))
assert ('Novartis' in response.content.decode('utf8') and
'Nestle' not in response.content.decode('utf8'))
assert (novartis in response.content.decode('utf8') and
nestle not in response.content.decode('utf8'))