commit
982c33fef8
|
@ -10,7 +10,6 @@
|
|||
"request": "launch",
|
||||
"program": "${workspaceFolder}/manage.py",
|
||||
"args": [
|
||||
"migrate",
|
||||
"runserver",
|
||||
"--noreload",
|
||||
"--settings=network_inventory.settings.local"
|
||||
|
|
|
@ -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()")
|
||||
))
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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."))
|
||||
|
|
|
@ -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'),
|
||||
]
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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(
|
||||
|
|
|
@ -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.'))
|
|
@ -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()
|
||||
|
|
|
@ -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')
|
||||
]
|
||||
|
|
Loading…
Reference in New Issue