Merge branch 'develop'

This commit is contained in:
Nathan Chapman 2021-01-29 20:05:25 -07:00
commit fd11adbc4c
5 changed files with 216 additions and 8 deletions

View File

@ -19,7 +19,7 @@ class Instructor(models.Model):
modified = models.DateTimeField(auto_now=True) modified = models.DateTimeField(auto_now=True)
def get_absolute_url(self): def get_absolute_url(self):
return reverse('user-detail', kwargs={'pk': self.pk}) return reverse('account-detail', kwargs={'pk': self.pk})
def __str__(self): def __str__(self):
return f'{self.user.first_name} {self.user.last_name}' return f'{self.user.first_name} {self.user.last_name}'
@ -34,7 +34,7 @@ class Student(models.Model):
modified = models.DateTimeField(auto_now=True) modified = models.DateTimeField(auto_now=True)
def get_absolute_url(self): def get_absolute_url(self):
return reverse('user-detail', kwargs={'pk': self.pk}) return reverse('account-detail', kwargs={'pk': self.pk})
def __str__(self): def __str__(self):
return f'{self.student_number}: {self.user.first_name} {self.user.last_name}' return f'{self.student_number}: {self.user.first_name} {self.user.last_name}'

View File

@ -9,7 +9,7 @@
<tr> <tr>
<td>{{ user.username }}</td> <td>{{ user.username }}</td>
<td>{{user.first_name}} {{user.last_name}}</td> <td>{{user.first_name}} {{user.last_name}}</td>
<td><a href="{% url 'user-detail' user.id %}">Update</a></td> <td><a href="{% url 'account-detail' user.id %}">Update</a></td>
</tr> </tr>
{% empty %} {% empty %}
<tr><td>No users yet.</td></tr> <tr><td>No users yet.</td></tr>

View File

@ -1,3 +1,108 @@
from django.test import TestCase import json
from django.test import TestCase, Client
from django.urls import reverse
from django.utils import timezone
from django.contrib.auth.models import User
from .models import Department, Instructor, Student
# Create your tests here. class TestModels(TestCase):
def setUp(self):
self.peter = User.objects.create_user('Peter Templer', 'peter@testing.com', 'peterspassword321')
self.nick = User.objects.create_user('Nick Jenkins', 'nick@testing.com', 'nickspassword321')
self.department = Department.objects.create(name = "Blandings Castle")
self.student = Student.objects.create(
user = self.peter,
student_number = 357950,
department = self.department,
)
self.instructor = Instructor.objects.create(
user = self.nick,
department = self.department,
)
def test_student_user_relationship(self):
self.assertEquals(self.peter, self.student.user)
def test_student_get_absolute_url(self):
url = self.student.get_absolute_url()
self.assertEquals(url, '/accounts/1/')
def test_instructor_user_relationship(self):
self.assertEquals(self.nick, self.instructor.user)
def test_instructor_get_absolute_url(self):
url = self.instructor.get_absolute_url()
self.assertEquals(url, '/accounts/1/')
class TestViews(TestCase):
def setUp(self):
self.client = Client()
self.reverse_urls = {
'list': reverse('account-list'),
'create': reverse('account-create'),
'detail': reverse('account-detail', args=['1']),
'update': reverse('account-update', args=['1']),
'delete': reverse('account-delete', args=['1'])
}
self.peter = User.objects.create_user('Peter Templer', 'peter@testing.com', 'peterspassword321')
self.nick = User.objects.create_user('Nick Jenkins', 'nick@testing.com', 'nickspassword321')
self.department = Department.objects.create(name = "Blandings Castle")
self.student = Student.objects.create(
user = self.peter,
student_number = 357950,
department = self.department,
)
self.instructor = Instructor.objects.create(
user = self.nick,
department = self.department,
)
self.client.force_login(self.peter)
def test_students_list(self):
response = self.client.get(self.reverse_urls['list'])
self.assertEquals(response.status_code, 200)
self.assertTemplateUsed(response, 'accounts/account_list.html')
def test_students_create_GET(self):
response = self.client.get(self.reverse_urls['create'])
self.assertEquals(response.status_code, 200)
self.assertTemplateUsed(response, 'accounts/account_form.html')
def test_students_create_POST(self):
response = self.client.post(self.reverse_urls['create'], {
'user': self.peter.id,
'student_number': 357950,
'department': self.department,
}, follow=True)
self.assertRedirects(
response,
reverse('account-detail', args=[self.peter.id]),
status_code=302,
target_status_code=200,
fetch_redirect_response=True
)
def test_students_detail(self):
response = self.client.get(self.reverse_urls['detail'])
self.assertEquals(response.status_code, 200)
self.assertTemplateUsed(response, 'accounts/account_detail.html')
def test_students_update_GET(self):
response = self.client.get(self.reverse_urls['update'])
self.assertEquals(response.status_code, 200)
self.assertTemplateUsed(response, 'accounts/account_form.html')
def test_students_update_POST(self):
pass
def test_student_delete(self):
response = self.client.get(self.reverse_urls['delete'])
self.assertEquals(response.status_code, 200)
self.assertTemplateUsed(response, 'accounts/account_confirm_delete.html')
def test_student_delete(self):
response = self.client.delete(self.reverse_urls['delete'], json.dumps({ 'id': 1 }))
self.assertEquals(response.status_code, 302)

View File

@ -1,3 +1,104 @@
from django.test import TestCase from django.test import TestCase, Client
from django.urls import reverse
from django.utils import timezone
from django.contrib.auth.models import User
from accounts.models import Department, Instructor, Student
from .models import Code, Period
from .forms import AttendanceUpdateForm
# Code
# student
# station_number
# Period
# student
# station_number
class CodeModelTests(TestCase):
def setUp(self):
self.peter = User.objects.create_user('Peter Templer', 'peter@testing.com', 'peterspassword321')
self.nick = User.objects.create_user('Nick Jenkins', 'nick@testing.com', 'nickspassword321')
self.department = Department.objects.create(name = "Blandings Castle")
self.student = Student.objects.create(
user = self.peter,
student_number = 357950,
department = self.department,
)
self.instructor = Instructor.objects.create(
user = self.nick,
department = self.department,
)
self.code = Code.objects.create(student=self.student, station_number=22)
def test_code_qr_code_str(self):
"""test_qr_code_str() returns a string joining on ':' and contains student_number"""
self.assertEqual("357950:22", self.code.qr_code_str())
class TestForms(TestCase):
def setUp(self):
pass
def test_attendance_update_form(self):
form = AttendanceUpdateForm(data={
'qr_string': '357950:22'
})
self.assertTrue(form.is_valid())
class TestPeriodViews(TestCase):
def setUp(self):
self.client = Client()
self.reverse_urls = {
# 'list': reverse('period-list'),
# 'create': reverse('period-create'),
'detail': reverse('period-detail', args=['1']),
'update': reverse('period-update', args=['1']),
'delete': reverse('period-delete', args=['1'])
}
self.peter = User.objects.create_user('Peter Templer', 'peter@testing.com', 'peterspassword321')
self.nick = User.objects.create_user('Nick Jenkins', 'nick@testing.com', 'nickspassword321')
self.department = Department.objects.create(name = "Blandings Castle")
self.student = Student.objects.create(
user = self.peter,
student_number = 357950,
department = self.department,
)
self.instructor = Instructor.objects.create(
user = self.nick,
department = self.department,
)
self.period = Period.objects.create(
student = self.student,
station_number = 22,
)
self.client.force_login(self.peter)
# def test_period_create_GET(self):
# response = self.client.get(self.reverse_urls['create'])
# self.assertEquals(response.status_code, 200)
# self.assertTemplateUsed(response, 'attendance/period_form.html')
# def test_period_create_POST(self):
# response = self.client.post(self.reverse_urls['create'], {
# 'student': self.student.id,
# 'station_number': 22,
# }, follow=True)
# self.assertRedirects(
# response,
# reverse('period-detail', args=[self.a_shift.id]),
# status_code=302,
# target_status_code=200,
# fetch_redirect_response=True
# )
def test_period_detail(self):
response = self.client.get(self.reverse_urls['detail'])
self.assertEquals(response.status_code, 200)
self.assertTemplateUsed(response, 'attendance/period_detail.html')
def test_period_update_GET(self):
response = self.client.get(self.reverse_urls['update'])
self.assertEquals(response.status_code, 200)
self.assertTemplateUsed(response, 'attendance/period_form.html')
# Create your tests here.

View File

@ -41,7 +41,9 @@ class AttendanceOverview(LoginRequiredMixin, TemplateView):
).order_by('-clocked_in' ).order_by('-clocked_in'
).aggregate(total_duration=Sum('duration')) ).aggregate(total_duration=Sum('duration'))
hours = ""
# Convert to hours floating point # Convert to hours floating point
if hasattr(total_duration, 'total_duration'):
hours = round((total_duration['total_duration'].total_seconds() / 3600), 2) hours = round((total_duration['total_duration'].total_seconds() / 3600), 2)
context['period_list'] = Period.objects.filter( context['period_list'] = Period.objects.filter(