remove the ConnectedDevice model

This commit is contained in:
Andreas Zweili 2020-05-03 21:47:45 +02:00
parent 02b8657ba2
commit 17053f586b
15 changed files with 16 additions and 217 deletions

View File

@ -5,13 +5,13 @@ from softwares.models import Software
from softwares.models import SoftwareArchitecture
from .cpu import Cpu
from devices.models import ConnectedDevice
from devices.models import Device
from .disk import Disk
from .gpu import Gpu
from .ram import Ram
class Computer(ConnectedDevice):
class Computer(Device):
os = models.ForeignKey(OperatingSystem, models.SET_NULL, blank=True,
null=True, verbose_name='OS')
cpu = models.ManyToManyField(Cpu, through='ComputerCpuRelation')

View File

@ -15,10 +15,6 @@ class CustomersTable(CoreTable):
text='Computers',
args=[A('pk')],
orderable=False)
connected_devices = tables.LinkColumn('connected_devices',
text='Connected Devices',
args=[A('pk')],
orderable=False)
devices = tables.LinkColumn('devices',
text='Devices',
args=[A('pk')],

View File

@ -42,10 +42,6 @@ def test_customer_list_view(create_admin_user):
"/customer/"
+ str(customer.id)
+ "/computers/")
and helper.in_content(response,
"/customer/"
+ str(customer.id)
+ "/connected_devices/")
and helper.in_content(response,
"/customer/"
+ str(customer.id)
@ -82,10 +78,6 @@ def test_customer_list_view_multiple_customers(create_admin_user):
"/customer/"
+ str(customer1.id)
+ "/computers/")
and helper.in_content(response,
"/customer/"
+ str(customer1.id)
+ "/connected_devices/")
and helper.in_content(response,
"/customer/"
+ str(customer1.id)
@ -111,10 +103,6 @@ def test_customer_list_view_multiple_customers(create_admin_user):
"/customer/"
+ str(customer2.id)
+ "/computers/")
and helper.in_content(response,
"/customer/"
+ str(customer2.id)
+ "/connected_devices/")
and helper.in_content(response,
"/customer/"
+ str(customer2.id)

View File

@ -2,7 +2,6 @@ from django.contrib import admin
import nested_admin
from .models import (
ConnectedDevice,
Device,
DeviceCategory,
DeviceInNet,
@ -51,12 +50,11 @@ class WarrantyTypeAdmin(admin.ModelAdmin):
return {}
class ConnectedDeviceAdmin(nested_admin.NestedModelAdmin):
class DeviceAdmin(nested_admin.NestedModelAdmin):
inlines = (DeviceInNetInline, )
admin.site.register(ConnectedDevice, ConnectedDeviceAdmin)
admin.site.register(Device)
admin.site.register(Device, DeviceAdmin)
admin.site.register(DeviceCategory, DeviceCategoryAdmin)
admin.site.register(DeviceInNet)
admin.site.register(DeviceManufacturer, DeviceManufacturerAdmin)

View File

@ -2,7 +2,6 @@ from django.http import HttpResponseForbidden
from django.shortcuts import get_object_or_404
from .models import Device
from .models import ConnectedDevice
def device_view_permission(old_function):
@ -16,16 +15,3 @@ def device_view_permission(old_function):
"You're not allowed to access this device."
)
return new_function
def connected_device_view_permission(old_function):
def new_function(request, pk, *args, **kwargs):
device = get_object_or_404(ConnectedDevice, pk=pk)
user = request.user
if user.has_perm('customers.view_customer', device.customer):
return old_function(request, pk)
else:
return HttpResponseForbidden(
"You're not allowed to access this device."
)
return new_function

View File

@ -32,6 +32,7 @@ class DeviceUpdateForm(forms.ModelForm):
class Meta:
model = Device
fields = '__all__'
exclude = ('net',)
class WarrantyCreateForm(forms.ModelForm):

View File

@ -1,6 +1,5 @@
from .warranty import Warranty, WarrantyType
from .device import (
ConnectedDevice,
Device,
DeviceCategory,
DeviceInNet,

View File

@ -57,16 +57,6 @@ class Device(models.Model):
null=True,
blank=True)
installation_date = models.DateField(null=True, blank=True)
def __str__(self):
return self.name
def get_absolute_url(self):
from django.urls import reverse
return reverse('device', args=[str(self.id)])
class ConnectedDevice(Device):
net = models.ManyToManyField(Net, through='DeviceInNet')
@property
@ -82,16 +72,16 @@ class ConnectedDevice(Device):
nets.append(ip_addresses)
return nets
class Meta:
verbose_name_plural = "Connected Devices"
def __str__(self):
return self.name
def get_absolute_url(self):
from django.urls import reverse
return reverse('connected_device', args=[str(self.id)])
return reverse('device', args=[str(self.id)])
class DeviceInNet(models.Model):
device = models.ForeignKey(ConnectedDevice, on_delete=models.CASCADE)
device = models.ForeignKey(Device, on_delete=models.CASCADE)
net = models.ForeignKey(Net, on_delete=models.CASCADE)
ip = models.GenericIPAddressField(verbose_name="IP", blank=True, null=True)
nic = models.CharField(max_length=50, blank=True, verbose_name="NIC")

View File

@ -4,7 +4,6 @@ import django_tables2 as tables
from core.tables import CoreTable
from .models import ConnectedDevice
from .models import Device
@ -16,14 +15,6 @@ class DevicesTable(CoreTable):
model = Device
class ConnectedDevicesTable(CoreTable):
id = tables.Column(visible=False)
name = tables.Column('ConnectedDevice', linkify=True)
class Meta(CoreTable.Meta):
model = ConnectedDevice
class WarrantiesTable(CoreTable):
customer = tables.Column(linkify=True, orderable=False)
device = tables.Column(linkify=True)

View File

@ -1,17 +0,0 @@
{% extends "core/base.html" %}
{% load render_table from django_tables2 %}
{% block section_title %}List of Connected Devices{% endblock %}
{% block content %}
<div class="row mb-3">
<div class="col">
<form action="{% url 'device_create' pk %}">{% csrf_token %}
<input type="submit" value="Add Device" class="btn btn-primary">
</form>
</div>
</div>
<div class="row">
<div class="col">
{% render_table devices %}
</div>
</div>
{% endblock %}

View File

@ -1,10 +0,0 @@
import pytest
from mixer.backend.django import mixer
pytestmark = pytest.mark.django_db
def test_device_reverse_url():
device = mixer.blend('devices.ConnectedDevice')
assert (device.get_absolute_url()
== "/connected_device/" + str(device.id) + "/")

View File

@ -9,35 +9,9 @@ from nets.models import IpStatus
pytestmark = pytest.mark.django_db
def test_connected_device_detail_view_not_logged_in():
response = Client().get('/connected_device/1/')
assert response.status_code == 302 and 'login' in response.url
def test_connected_device_detail_view_not_found(create_admin_user):
def test_device_detail_view_net_relation(create_admin_user):
create_admin_user()
client = Client()
client.login(username="pharma-admin", password="password")
response = client.get('/connected_device/100/')
assert response.status_code == 404
def test_connected_device_detail_view_no_permission(create_admin_user):
create_admin_user()
customer = mixer.blend('customers.Customer')
connected_device = mixer.blend('devices.ConnectedDevice',
customer=customer)
client = Client()
client.login(username="pharma-admin", password="password")
response = client.get('/connected_device/'
+ str(connected_device.id)
+ '/')
assert response.status_code == 403
def test_connected_device_detail_view_net_relation(create_admin_user):
create_admin_user()
device = mixer.blend('devices.ConnectedDevice', customer=mixer.SELECT)
device = mixer.blend('devices.Device', customer=mixer.SELECT)
net1 = mixer.blend('nets.Net', customer=mixer.SELECT)
net2 = mixer.blend('nets.Net', customer=mixer.SELECT)
device_in_net1 = mixer.blend('devices.DeviceInNet',
@ -50,15 +24,15 @@ def test_connected_device_detail_view_net_relation(create_admin_user):
ip="10.8.89.100")
client = Client()
client.login(username="pharma-admin", password="password")
response = client.get('/connected_device/' + str(device.id) + '/')
response = client.get('/device/' + str(device.id) + '/')
assert (response.status_code == 200
and helper.in_content(response, device_in_net1.ip)
and helper.in_content(response, device_in_net2.ip))
def test_connected_device_detail_view_net_dhcp_relation(create_admin_user):
def test_device_detail_view_net_dhcp_relation(create_admin_user):
create_admin_user()
device = mixer.blend('devices.ConnectedDevice', customer=mixer.SELECT)
device = mixer.blend('devices.Device', customer=mixer.SELECT)
net1 = mixer.blend('nets.Net', customer=mixer.SELECT)
ip_status = IpStatus.objects.filter(name="Dynamic")
device_in_net1 = mixer.blend('devices.DeviceInNet',
@ -68,6 +42,6 @@ def test_connected_device_detail_view_net_dhcp_relation(create_admin_user):
ip="")
client = Client()
client.login(username="pharma-admin", password="password")
response = client.get('/connected_device/' + str(device.id) + '/')
response = client.get('/device/' + str(device.id) + '/')
assert (response.status_code == 200
and helper.in_content(response, device_in_net1.ip_status))

View File

@ -1,66 +0,0 @@
import pytest
from django.test import Client
from mixer.backend.django import mixer
from core.tests import helper
from customers.models import Customer
pytestmark = pytest.mark.django_db
def test_customer_device_table_not_logged_in():
response = Client().get('/customer/1/devices/')
assert response.status_code == 302 and 'login' in response.url
def test_customer_device_table(create_admin_user):
fixture = create_admin_user()
customer = fixture['customer']
client = Client()
client.login(username="pharma-admin", password="password")
device = mixer.blend('devices.ConnectedDevice', customer=mixer.SELECT)
response = client.get('/customer/'
+ str(customer.id)
+ '/connected_devices/')
assert (response.status_code == 200
and helper.in_content(response, device))
def test_customer_device_table_no_device(create_admin_user):
fixture = create_admin_user()
customer = fixture['customer']
client = Client()
client.login(username="pharma-admin", password="password")
response = client.get('/customer/'
+ str(customer.id)
+ '/connected_devices/')
assert (response.status_code == 200
and helper.not_in_content(response, "Pharma Corp. PC"))
def test_customer_device_table_no_permission(create_admin_user):
create_admin_user()
customer = Customer.objects.create(name='Water Corp.')
client = Client()
client.login(username="pharma-admin", password="password")
mixer.blend('devices.ConnectedDevice', customer=customer)
response = client.get('/customer/'
+ str(customer.id)
+ '/connected_devices/')
assert response.status_code == 403
def test_customer_device_table_multiple_devices(create_admin_user):
fixture = create_admin_user()
customer = fixture['customer']
client = Client()
client.login(username="pharma-admin", password="password")
device1 = mixer.blend('devices.ConnectedDevice', customer=mixer.SELECT)
device2 = mixer.blend('devices.ConnectedDevice', customer=mixer.SELECT)
response = client.get('/customer/'
+ str(customer.id)
+ '/connected_devices/')
assert (response.status_code == 200
and helper.in_content(response, device1)
and helper.in_content(response, device2))

View File

@ -4,13 +4,8 @@ from . import views
urlpatterns = [
path('connected_device/<int:pk>/', views.connected_device_detail_view,
name='connected_device'),
path('customer/<int:pk>/devices/', views.devices_table_view,
name='devices'),
path('customer/<int:pk>/connected_devices/',
views.connected_devices_table_view,
name='connected_devices'),
path('device/<int:pk>/', views.device_detail_view, name='device'),
path('customer/<int:pk>/create/device/',
views.DeviceCreateFromCustomerView.as_view(),

View File

@ -14,7 +14,6 @@ from customers.models import Customer
from core.utils import get_objects
from .decorators import device_view_permission
from .decorators import connected_device_view_permission
from .forms import DeviceCreateForm
from .forms import DeviceInNetCreateForm
@ -22,12 +21,10 @@ from .forms import DeviceUpdateForm
from .forms import WarrantyCreateForm
from .forms import WarrantyUpdateForm
from .models import ConnectedDevice
from .models import Device
from .models import DeviceInNet
from .models import Warranty
from .tables import ConnectedDevicesTable
from .tables import DevicesTable
from .tables import WarrantiesTable
@ -55,29 +52,6 @@ def devices_table_view(request, pk):
'pk': pk})
@login_required
@connected_device_view_permission
def connected_device_detail_view(request, pk):
device = get_object_or_404(ConnectedDevice, pk=pk)
warranty_relations = Warranty.objects.filter(device=pk)
return render(request,
'devices/device_details.html',
{'device': device,
'warranty_relations': warranty_relations,
'pk': pk})
@login_required
@customer_view_permission
def connected_devices_table_view(request, pk):
table = ConnectedDevicesTable(ConnectedDevice.objects.filter(customer=pk))
RequestConfig(request).configure(table)
return render(request,
'devices/connected_device_list.html',
{'devices': table,
'pk': pk})
@login_required
def warranties_view(request):
table = WarrantiesTable(get_objects("Warranty", request.user))
@ -178,7 +152,7 @@ class DeviceInNetCreateView(LoginRequiredMixin, CreateView):
Set the device and customer dropdown to the device from the previous
view and the customer related to the device.
"""
self.device = get_object_or_404(ConnectedDevice, id=self.kwargs.get('pk'))
self.device = get_object_or_404(Device, id=self.kwargs.get('pk'))
return {
'device': self.device,
}