More optimisation and cleanup (#420)

This commit is contained in:
2021-03-02 11:29:57 +00:00
committed by GitHub
parent 2bf0175786
commit 911336ceec
113 changed files with 6472 additions and 2397 deletions

View File

@@ -31,7 +31,7 @@
<div class="media-body">
<h5>
{{ version.revision.user.name|default:'System' }}
<span class="ml-3"><small>{{version.revision.date_created|naturaltime}}</small></span>
<span class="float-right"><small><span class="fas fa-clock"></span> <span class="time">{{version.revision.date_created|date:"c"}}</span> ({{version.revision.date_created}})</small></span>
</h5>
{% endif %}
<p>
@@ -48,3 +48,15 @@
</div>
{% endcache %}
{% endblock %}
{% block js %}
<script>
$(document).ready(function() {
const times = document.getElementsByClassName("time");
var i;
for(i = 0; i < times.length; i++) {
times[i].innerHTML = moment(times[i].innerHTML).fromNow();
}
});
</script>
{% endblock %}

View File

@@ -16,7 +16,7 @@
<th scope="row">{{ version.revision.date_created }}</th>
<td><a href="{{ version.changes.new.get_absolute_url }}">{{ version.changes.new.display_id|default:version.changes.new.pk }} | {{version.changes.new|to_class_name}}</a></td>
<td>{{ version.pk }}|{{ version.revision.pk }}</td>
<td>{{ version.revision.user.name|default:"System" }}</td>
<td>{% include 'partials/linked_name.html' with profile=version.revision.user %}</td>
<td>
{% if version.changes.old == None %}
Created {{version.changes.new|to_class_name}}

View File

@@ -1,15 +1,12 @@
from datetime import date
from django.test import TestCase
from django.urls import reverse
from reversion import revisions as reversion
from RIGS import models
from assets import models as amodels
from versioning import versioning
# Model Tests
class RIGSVersionTestCase(TestCase):
def setUp(self):
models.VatRate.objects.create(rate=0.20, comment="TP V1", start_at='2013-01-01')
@@ -41,12 +38,12 @@ class RIGSVersionTestCase(TestCase):
def test_find_parent_version(self):
# Find the most recent version
currentVersion = versioning.RIGSVersion.objects.get_for_object(self.event).latest('revision__date_created')
self.assertEqual(currentVersion._object_version.object.notes, "A new note on the event")
current_version = versioning.RIGSVersion.objects.get_for_object(self.event).latest('revision__date_created')
self.assertEqual(current_version._object_version.object.notes, "A new note on the event")
# Check the prev version is loaded correctly
previousVersion = currentVersion.parent
self.assertEqual(previousVersion._object_version.object.notes, None)
previousVersion = current_version.parent
assert previousVersion._object_version.object.notes == ''
# Check that finding the parent of the first version fails gracefully
self.assertFalse(previousVersion.parent)
@@ -140,14 +137,14 @@ class RIGSVersionTestCase(TestCase):
self.event.save()
# Find the most recent version
currentVersion = versioning.RIGSVersion.objects.get_for_object(self.event).latest('revision__date_created')
current_version = versioning.RIGSVersion.objects.get_for_object(self.event).latest('revision__date_created')
diffs = currentVersion.changes.item_changes
diffs = current_version.changes.item_changes
self.assertEqual(len(diffs), 1)
self.assertTrue(currentVersion.changes.items_changed)
self.assertFalse(currentVersion.changes.fields_changed)
self.assertTrue(currentVersion.changes.anything_changed)
self.assertTrue(current_version.changes.items_changed)
self.assertFalse(current_version.changes.fields_changed)
self.assertTrue(current_version.changes.anything_changed)
self.assertTrue(diffs[0].old is None)
self.assertEqual(diffs[0].new.name, "TI I1")
@@ -159,9 +156,9 @@ class RIGSVersionTestCase(TestCase):
item1.save()
self.event.save()
currentVersion = versioning.RIGSVersion.objects.get_for_object(self.event).latest('revision__date_created')
current_version = versioning.RIGSVersion.objects.get_for_object(self.event).latest('revision__date_created')
diffs = currentVersion.changes.item_changes
diffs = current_version.changes.item_changes
self.assertEqual(len(diffs), 1)
@@ -169,7 +166,7 @@ class RIGSVersionTestCase(TestCase):
self.assertEqual(diffs[0].new.name, "New Name")
# Check the diff
self.assertEqual(currentVersion.changes.item_changes[0].field_changes[0].diff,
self.assertEqual(current_version.changes.item_changes[0].field_changes[0].diff,
[{'type': 'delete', 'text': "TI I1"},
{'type': 'insert', 'text': "New Name"},
])
@@ -181,125 +178,14 @@ class RIGSVersionTestCase(TestCase):
self.event.save()
# Find the most recent version
currentVersion = versioning.RIGSVersion.objects.get_for_object(self.event).latest('revision__date_created')
current_version = versioning.RIGSVersion.objects.get_for_object(self.event).latest('revision__date_created')
diffs = currentVersion.changes.item_changes
diffs = current_version.changes.item_changes
self.assertEqual(len(diffs), 1)
self.assertTrue(currentVersion.changes.items_changed)
self.assertFalse(currentVersion.changes.fields_changed)
self.assertTrue(currentVersion.changes.anything_changed)
self.assertTrue(current_version.changes.items_changed)
self.assertFalse(current_version.changes.fields_changed)
self.assertTrue(current_version.changes.anything_changed)
self.assertEqual(diffs[0].old.name, "New Name")
self.assertTrue(diffs[0].new is None)
# Unit Tests
class TestVersioningViews(TestCase):
@classmethod
def setUpTestData(cls):
cls.profile = models.Profile.objects.create(username="testuser1", email="1@test.com", is_superuser=True,
is_active=True, is_staff=True)
cls.vatrate = models.VatRate.objects.create(start_at='2014-03-05', rate=0.20, comment='test1')
cls.events = {}
with reversion.create_revision():
reversion.set_user(cls.profile)
cls.events[1] = models.Event.objects.create(name="TE E1", start_date=date.today())
with reversion.create_revision():
reversion.set_user(cls.profile)
cls.events[2] = models.Event.objects.create(name="TE E2", start_date='2014-03-05')
with reversion.create_revision():
reversion.set_user(cls.profile)
cls.events[1].description = "A test description"
cls.events[1].save()
working = amodels.AssetStatus.objects.create(name="Working", should_show=True)
broken = amodels.AssetStatus.objects.create(name="Broken", should_show=False)
general = amodels.AssetCategory.objects.create(name="General")
lighting = amodels.AssetCategory.objects.create(name="Lighting")
cls.assets = {}
with reversion.create_revision():
reversion.set_user(cls.profile)
cls.assets[1] = amodels.Asset.objects.create(asset_id="1991", description="Spaceflower", status=broken, category=lighting, date_acquired=date.today())
with reversion.create_revision():
reversion.set_user(cls.profile)
cls.assets[2] = amodels.Asset.objects.create(asset_id="0001", description="Virgil", status=working, category=lighting, date_acquired=date.today())
with reversion.create_revision():
reversion.set_user(cls.profile)
cls.assets[1].status = working
cls.assets[1].save()
def setUp(self):
self.profile.set_password('testuser')
self.profile.save()
self.assertTrue(self.client.login(username=self.profile.username, password='testuser'))
def test_history_loads_successfully(self):
request_url = reverse('event_history', kwargs={'pk': self.events[1].pk})
response = self.client.get(request_url, follow=True)
self.assertEqual(response.status_code, 200)
request_url = reverse('asset_history', kwargs={'pk': self.assets[1].asset_id})
response = self.client.get(request_url, follow=True)
self.assertEqual(response.status_code, 200)
def test_activity_feed_loads_successfully(self):
request_url = reverse('activity_feed')
response = self.client.get(request_url, follow=True)
self.assertEqual(response.status_code, 200)
def test_activity_table_loads_successfully(self):
request_url = reverse('activity_table')
response = self.client.get(request_url, follow=True)
self.assertEqual(response.status_code, 200)
request_url = reverse('assets_activity_table')
response = self.client.get(request_url, follow=True)
self.assertEqual(response.status_code, 200)
# Some edge cases that have caused server errors in the past
def test_deleted_event(self):
request_url = reverse('activity_feed')
self.events[2].delete()
response = self.client.get(request_url, follow=True)
self.assertContains(response, "TE E2")
self.assertEqual(response.status_code, 200)
def test_deleted_relation(self):
request_url = reverse('activity_feed')
with reversion.create_revision():
person = models.Person.objects.create(name="Test Person")
with reversion.create_revision():
self.events[1].person = person
self.events[1].save()
# Check response contains person
response = self.client.get(request_url, follow=True)
self.assertContains(response, "Test Person")
self.assertEqual(response.status_code, 200)
# Delete person
person.delete()
# Check response still contains person
response = self.client.get(request_url, follow=True)
self.assertContains(response, "Test Person")
self.assertEqual(response.status_code, 200)

View File

@@ -0,0 +1,115 @@
from datetime import date
from django.urls import reverse
from reversion import revisions as reversion
from pytest_django.asserts import assertContains
from RIGS import models
from assets import models as amodels
def create_events(admin_user):
models.VatRate.objects.create(start_at='2014-03-05', rate=0.20, comment='test1')
events = {}
with reversion.create_revision():
reversion.set_user(admin_user)
events[1] = models.Event.objects.create(name="TE E1", start_date=date.today())
with reversion.create_revision():
reversion.set_user(admin_user)
events[2] = models.Event.objects.create(name="TE E2", start_date='2014-03-05')
with reversion.create_revision():
reversion.set_user(admin_user)
events[1].description = "A test description"
events[1].save()
return events
def create_assets(admin_user):
working = amodels.AssetStatus.objects.create(name="Working", should_show=True)
broken = amodels.AssetStatus.objects.create(name="Broken", should_show=False)
lighting = amodels.AssetCategory.objects.create(name="Lighting")
assets = {}
with reversion.create_revision():
reversion.set_user(admin_user)
assets[1] = amodels.Asset.objects.create(asset_id="1991", description="Spaceflower", status=broken,
category=lighting, date_acquired=date.today())
with reversion.create_revision():
reversion.set_user(admin_user)
assets[2] = amodels.Asset.objects.create(asset_id="0001", description="Virgil", status=working,
category=lighting, date_acquired=date.today())
with reversion.create_revision():
reversion.set_user(admin_user)
assets[1].status = working
assets[1].save()
return assets
def test_history_loads_successfully(admin_client, admin_user):
events = create_events(admin_user)
request_url = reverse('event_history', kwargs={'pk': events[1].pk})
response = admin_client.get(request_url, follow=True)
assert response.status_code == 200
assets = create_assets(admin_user)
request_url = reverse('asset_history', kwargs={'pk': assets[1].asset_id})
response = admin_client.get(request_url, follow=True)
assert response.status_code == 200
def test_activity_feed_loads_successfully(admin_client):
request_url = reverse('activity_feed')
response = admin_client.get(request_url, follow=True)
assert response.status_code == 200
def test_activity_table_loads_successfully(admin_client):
request_url = reverse('activity_table')
response = admin_client.get(request_url, follow=True)
assert response.status_code == 200
request_url = reverse('assets_activity_table')
response = admin_client.get(request_url, follow=True)
assert response.status_code == 200
# Some edge cases that have caused server errors in the past
def test_deleted_event(admin_client, admin_user):
events = create_events(admin_user)
request_url = reverse('activity_feed')
events[2].delete()
response = admin_client.get(request_url, follow=True)
assertContains(response, "TE E2")
assert response.status_code == 200
def test_deleted_relation(admin_client, admin_user):
events = create_events(admin_user)
request_url = reverse('activity_feed')
with reversion.create_revision():
person = models.Person.objects.create(name="Test Person")
with reversion.create_revision():
events[1].person = person
events[1].save()
# Check response contains person
response = admin_client.get(request_url, follow=True)
assertContains(response, "Test Person")
assert response.status_code == 200
# Delete person
person.delete()
# Check response still contains person
response = admin_client.get(request_url, follow=True)
assertContains(response, "Test Person")
assert response.status_code == 200

View File

@@ -78,7 +78,7 @@ class ActivityFeed(generic.ListView): # Appears on homepage
def get_context_data(self, **kwargs):
# Call the base implementation first to get a context
context = super(ActivityFeed, self).get_context_data(**kwargs)
context['page_title'] = "Activity Feed"
maxTimeDelta = datetime.timedelta(hours=1)
items = []