mirror of
https://github.com/nottinghamtec/PyRIGS.git
synced 2026-01-17 05:22:16 +00:00
More optimisation and cleanup (#420)
This commit is contained in:
@@ -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 %}
|
||||
|
||||
@@ -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}}
|
||||
|
||||
@@ -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)
|
||||
115
versioning/tests/test_unit.py
Normal file
115
versioning/tests/test_unit.py
Normal 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
|
||||
@@ -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 = []
|
||||
|
||||
Reference in New Issue
Block a user