Merge pull request #64 from Nebucatnetzer/dev

Dev
This commit is contained in:
Andreas Zweili 2022-02-11 17:42:54 +01:00 committed by GitHub
commit 982c33fef8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
10 changed files with 145 additions and 34 deletions

1
.vscode/launch.json vendored
View File

@ -10,7 +10,6 @@
"request": "launch",
"program": "${workspaceFolder}/manage.py",
"args": [
"migrate",
"runserver",
"--noreload",
"--settings=network_inventory.settings.local"

View File

@ -1,4 +1,9 @@
from django import forms
from django.urls import reverse_lazy
from crispy_forms.helper import FormHelper
from crispy_forms.layout import Layout, Submit, Button, Field
from crispy_forms.bootstrap import FormActions
from .models import Customer
@ -10,3 +15,18 @@ class CustomerForm(forms.ModelForm):
'name',
'description'
)
def __init__(self, *args, **kwargs):
super(CustomerForm, self).__init__(*args, **kwargs)
self.helper = FormHelper(self)
self.helper.attrs = {
'hx-post': reverse_lazy('customer_create'),
'id': 'customer-form',
}
self.helper.layout.append(
FormActions(
Submit('save', 'Save'),
Button('cancel', 'Cancel', css_class="btn btn-secondary",
onclick="closeModal()")
))

View File

@ -5,7 +5,7 @@
{% if request.user.is_superuser %}
<div class="row mb-3">
<div class="col">
<button hx-get="{% url 'htmx_create_customer' %}" hx-target="#htmx-modal-position" class="btn btn-primary"
<button hx-get="{% url 'customer_create' %}" hx-target="#htmx-modal-position" class="btn btn-primary"
_="on htmx:afterOnLoad wait 10ms then add .show to #modal then add .show to #modal-backdrop">Add Customer</button>
</div>
<div class="col" id="htmx-modal-position"></div>

View File

@ -1,7 +1,10 @@
from django.test import Client
from mixer.backend.django import mixer
import pytest
from core.tests import helper
pytestmark = pytest.mark.django_db
@ -13,4 +16,25 @@ def test_customer_create_view(create_admin_user):
client = Client()
client.login(username="pharma-admin", password="password")
response = client.post('/create/customer/', data)
assert response.status_code == 302
assert response.status_code == 200
def test_load_customer_create_view(create_admin_user):
create_admin_user()
client = Client()
client.login(username="pharma-admin", password="password")
response = client.get('/create/customer/')
assert response.status_code == 200
def test_create_duplicate_customer(create_admin_user):
create_admin_user()
customer = mixer.blend('customers.Customer')
data = {'name': customer.name,
'description': customer.description}
client = Client()
client.login(username="pharma-admin", password="password")
client.post('/create/customer/', data)
response = client.post('/create/customer/', data)
assert (response.status_code == 200
and helper.in_content(response, "Customer with this Name already exists."))

View File

@ -6,12 +6,9 @@ urlpatterns = [
path('', views.customers_table_view, name='customers'),
path('customer/<int:pk>/', views.customer_detail_view,
name='customer'),
path('create/customer/',
views.customer_create_view,
name='customer_create'),
path('delete/customer/<int:pk>/', views.CustomerDeleteView.as_view(),
name='customer_delete'),
path('htmx/create/customer/',
views.htmx_create_customer,
name='htmx_create_customer'),
path('create/customer/',
views.create_customer,
name='customer_create'),
]

View File

@ -2,7 +2,6 @@ from django_tables2 import RequestConfig
from django.contrib.auth.decorators import login_required
from django.contrib.auth.mixins import LoginRequiredMixin
from django.http.response import HttpResponse
from django.shortcuts import redirect
from django.shortcuts import render
from django.template.response import TemplateResponse
from django.urls import reverse
@ -26,7 +25,7 @@ def customers_table_view(request):
@login_required
def htmx_create_customer(request):
def create_customer(request):
if request.method == "POST":
form = CustomerForm(request.POST)
if form.is_valid():
@ -53,23 +52,6 @@ def customer_detail_view(request, pk):
context)
@login_required
def customer_create_view(request):
"""
A view to create a customer.
"""
template_name = 'customers/customer_create.html'
if request.method == 'POST':
form = CustomerForm(request.POST)
if form.is_valid():
customer = form.save()
return redirect(customer)
else:
form = CustomerForm()
return TemplateResponse(request, template_name, {'form': form})
class CustomerDeleteView(LoginRequiredMixin, DeleteView):
model = Customer

View File

@ -27,13 +27,12 @@ class DeviceCategoryForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(DeviceCategoryForm, self).__init__(*args, **kwargs)
self.helper = FormHelper()
self.helper = FormHelper(self)
self.helper.attrs = {
'hx-post': reverse_lazy('device_category_create'),
'id': 'device-category-form',
}
self.helper.layout = Layout(
Field('name'),
self.helper.layout.append(
FormActions(
Submit('save_category', 'Save'),
Button('cancel', 'Cancel', css_class="btn btn-secondary",
@ -83,10 +82,11 @@ class DeviceUpdateForm(forms.ModelForm):
'customer',
'location',
'user',
Field('category'),
HTML("""
Div(Field('category'),
HTML("""
<a hx-get="{% url 'device_category_create' %}" hx-swap="innerHTML" hx-target="#htmx-modal-position" href="" class="add" title="Add" data-toggle="tooltip"><i class="material-icons">add</i></a>
"""),
css_class="input-group"),
'serialnumber',
'description',
FormActions(

View File

@ -0,0 +1,52 @@
from django.test import Client
import pytest
from mixer.backend.django import mixer
from core.tests import helper
from devices.models import DeviceCategory
pytestmark = pytest.mark.django_db
def test_load_device_category_create_view(create_admin_user):
create_admin_user()
client = Client()
client.login(username="pharma-admin", password="password")
response = client.get('/create/devices/category/')
assert response.status_code == 200
def test_device_category_create_view(create_admin_user):
user = create_admin_user()
client = Client()
client.login(username="pharma-admin", password="password")
computer = mixer.blend('computers.Computer', customer=user['customer'])
session = client.session
session['device_to_update'] = computer.pk
session.save()
data = {
"name": "Foo",
"save_category": "adf",
}
response = client.post('/create/devices/category/', data)
assert (response.status_code == 200
and helper.in_content(response, 'Foo'))
def test_device_category_create_view_invalid_form(create_admin_user):
user = create_admin_user()
client = Client()
client.login(username="pharma-admin", password="password")
computer = mixer.blend('computers.Computer', customer=user['customer'])
session = client.session
session['device_to_update'] = computer.pk
session.save()
data = {
"name": " ",
"save_category": "adf",
}
response = client.post('/create/devices/category/', data)
assert (response.status_code == 200
and helper.in_content(response, 'This field is required.'))

View File

@ -4,6 +4,8 @@ from django.test import Client
from mixer.backend.django import mixer
import pytest
from core.tests import helper
pytestmark = pytest.mark.django_db
@ -28,6 +30,16 @@ def test_device_delete_view(create_admin_user):
assert response.status_code == 302
def test_load_device_update_view(create_admin_user):
create_admin_user()
client = Client()
client.login(username="pharma-admin", password="password")
device = mixer.blend('devices.Device', customer=mixer.SELECT)
response = client.get('/update/device/{}/'.format(device.pk))
assert (response.status_code == 200
and helper.in_content(response, device.name))
def test_device_update_view(create_admin_user):
create_admin_user()
client = Client()
@ -51,6 +63,31 @@ def test_device_update_view(create_admin_user):
assert device.name == data['name']
def test_device_update_view_wrong_name(create_admin_user):
create_admin_user()
client = Client()
client.login(username="pharma-admin", password="password")
device1 = mixer.blend('devices.Device', customer=mixer.SELECT)
device2 = mixer.blend('devices.Device', customer=mixer.SELECT)
data = {'name': device2.name,
'description': '',
'serialnumber': '',
'category': '',
'owner': '',
'customer': device1.customer.id,
'manufacturer': '',
'model': '',
'location': '',
'user': '',
'installation_date': '',
'save_device': ""}
response = client.post('/update/device/{}/'.format(device1.pk), data)
assert (response.status_code == 200
and helper.in_content(
response,
"Device with this Name and Customer already exists."))
def test_warranty_create_view(create_admin_user):
create_admin_user()
client = Client()

View File

@ -35,6 +35,6 @@ urlpatterns = [
views.DeviceInNetDeleteView.as_view(),
name='device_in_net_delete'),
path('warranties/', views.warranties_view, name='warranties'),
path('create/devices/category', views.htmx_create_device_cagetory,
path('create/devices/category/', views.htmx_create_device_cagetory,
name='device_category_create')
]