diff --git a/primed/cdsa/tables.py b/primed/cdsa/tables.py index 579ce874..2571fb39 100644 --- a/primed/cdsa/tables.py +++ b/primed/cdsa/tables.py @@ -49,6 +49,7 @@ class Meta: "date_signed", "number_accessors", ) + order_by = ("cc_id",) class MemberAgreementTable(tables.Table): @@ -80,6 +81,7 @@ class Meta: "signed_agreement__date_signed", "number_accessors", ) + order_by = ("signed_agreement__cc_id",) class DataAffiliateAgreementTable(tables.Table): @@ -111,6 +113,7 @@ class Meta: "signed_agreement__date_signed", "number_accessors", ) + order_by = ("signed_agreement__cc_id",) class NonDataAffiliateAgreementTable(tables.Table): @@ -140,6 +143,7 @@ class Meta: "signed_agreement__date_signed", "number_accessors", ) + order_by = ("signed_agreement__cc_id",) class RepresentativeRecordsTable(tables.Table): @@ -154,12 +158,12 @@ class RepresentativeRecordsTable(tables.Table): class Meta: model = models.SignedAgreement fields = ( - "cc_id", "representative__name", "representative_role", "signing_institution", "signing_group", ) + order_by = ("representative__name",) def render_signing_group(self, record): if hasattr(record, "memberagreement"): @@ -179,13 +183,16 @@ class StudyRecordsTable(tables.Table): signed_agreement__representative__name = tables.Column( verbose_name="Representative" ) + # This will only order properly if the order_by value is a column in the table. + study__short_name = tables.Column(verbose_name="Study") class Meta: model = models.DataAffiliateAgreement fields = ( - "study", + "study__short_name", "signed_agreement__representative__name", ) + order_by = ("study__short_name",) class UserAccessRecordsTable(tables.Table): @@ -207,6 +214,7 @@ class Meta: "group__signedagreement__signing_institution", "group__signedagreement__representative__name", ) + order_by = ("account__user__name",) def render_signing_group(self, record): if hasattr(record.group.signedagreement, "memberagreement"): @@ -246,6 +254,7 @@ class Meta: "workspace__created", "date_shared", ) + order_by = ("workspace__name",) def render_date_shared(self, record): try: @@ -282,3 +291,4 @@ class Meta: "cdsaworkspace__data_use_permission__abbreviation", "cdsaworkspace__data_use_modifiers", ) + order_by = ("name",) diff --git a/primed/cdsa/tests/test_tables.py b/primed/cdsa/tests/test_tables.py index 37f467b6..6bf1fa68 100644 --- a/primed/cdsa/tests/test_tables.py +++ b/primed/cdsa/tests/test_tables.py @@ -8,6 +8,7 @@ from django.test import TestCase from primed.primed_anvil.tests.factories import StudyFactory, StudySiteFactory +from primed.users.tests.factories import UserFactory from .. import models, tables from . import factories @@ -49,6 +50,14 @@ def test_number_accessors(self): self.assertEqual(table.rows[1].get_cell("number_accessors"), 1) self.assertEqual(table.rows[2].get_cell("number_accessors"), 2) + def test_ordering(self): + """Instances are ordered alphabetically by cc_id.""" + instance_1 = factories.MemberAgreementFactory.create(signed_agreement__cc_id=2) + instance_2 = factories.MemberAgreementFactory.create(signed_agreement__cc_id=1) + table = self.table_class(self.model.objects.all()) + self.assertEqual(table.data[0], instance_2.signed_agreement) + self.assertEqual(table.data[1], instance_1.signed_agreement) + class MemberAgreementTableTest(TestCase): model = models.MemberAgreement @@ -85,6 +94,14 @@ def test_number_accessors(self): self.assertEqual(table.rows[1].get_cell("number_accessors"), 1) self.assertEqual(table.rows[2].get_cell("number_accessors"), 2) + def test_ordering(self): + """Instances are ordered alphabetically by cc_id.""" + instance_1 = self.model_factory.create(signed_agreement__cc_id=2) + instance_2 = self.model_factory.create(signed_agreement__cc_id=1) + table = self.table_class(self.model.objects.all()) + self.assertEqual(table.data[0], instance_2) + self.assertEqual(table.data[1], instance_1) + class DataAffiliateAgreementTableTest(TestCase): model = models.DataAffiliateAgreement @@ -121,6 +138,14 @@ def test_number_accessors(self): self.assertEqual(table.rows[1].get_cell("number_accessors"), 1) self.assertEqual(table.rows[2].get_cell("number_accessors"), 2) + def test_ordering(self): + """Instances are ordered alphabetically by cc_id.""" + instance_1 = self.model_factory.create(signed_agreement__cc_id=2) + instance_2 = self.model_factory.create(signed_agreement__cc_id=1) + table = self.table_class(self.model.objects.all()) + self.assertEqual(table.data[0], instance_2) + self.assertEqual(table.data[1], instance_1) + class NonDataAffiliateAgreementTableTest(TestCase): model = models.NonDataAffiliateAgreement @@ -157,6 +182,14 @@ def test_number_accessors(self): self.assertEqual(table.rows[1].get_cell("number_accessors"), 1) self.assertEqual(table.rows[2].get_cell("number_accessors"), 2) + def test_ordering(self): + """Instances are ordered alphabetically by cc_id.""" + instance_1 = self.model_factory.create(signed_agreement__cc_id=2) + instance_2 = self.model_factory.create(signed_agreement__cc_id=1) + table = self.table_class(self.model.objects.all()) + self.assertEqual(table.data[0], instance_2) + self.assertEqual(table.data[1], instance_1) + class RepresentativeRecordsTableTest(TestCase): """Tests for the RepresentativeRecordsTable class.""" @@ -203,6 +236,18 @@ def test_render_signing_group(self): record = factories.SignedAgreementFactory() self.assertIsNone(table.render_signing_group(record)) + def test_ordering(self): + """Instances are ordered alphabetically by representative name.""" + instance_1 = factories.MemberAgreementFactory.create( + signed_agreement__representative__name="zzz" + ) + instance_2 = factories.MemberAgreementFactory.create( + signed_agreement__representative__name="aaa" + ) + table = self.table_class(self.model.objects.all()) + self.assertEqual(table.data[0], instance_2.signed_agreement) + self.assertEqual(table.data[1], instance_1.signed_agreement) + class StudyRecordsTableTest(TestCase): """Tests for the StudyRecordsTable class.""" @@ -225,6 +270,14 @@ def test_row_count_with_two_objects(self): table = self.table_class(self.model.objects.all()) self.assertEqual(len(table.rows), 2) + def test_ordering(self): + """Instances are ordered alphabetically by study short name.""" + instance_1 = self.model_factory.create(study__short_name="zzz") + instance_2 = self.model_factory.create(study__short_name="aaa") + table = self.table_class(self.model.objects.all()) + self.assertEqual(table.data[0], instance_2) + self.assertEqual(table.data[1], instance_1) + class UserAccessRecordsTableTest(TestCase): """Tests for the UserAccessRecordsTable class.""" @@ -308,6 +361,23 @@ def test_render_signing_group(self): record = GroupAccountMembershipFactory.create(group__signedagreement=agreement) self.assertIsNone(table.render_signing_group(record)) + def test_ordering(self): + """Instances are ordered alphabetically by user name.""" + agreement = factories.MemberAgreementFactory.create() + user_1 = UserFactory.create(name="zzz") + instance_1 = GroupAccountMembershipFactory.create( + group__signedagreement=agreement.signed_agreement, + account__user=user_1, + ) + user_2 = UserFactory.create(name="aaa") + instance_2 = GroupAccountMembershipFactory.create( + group__signedagreement=agreement.signed_agreement, + account__user=user_2, + ) + table = self.table_class(self.model.objects.all()) + self.assertEqual(table.data[0], instance_2) + self.assertEqual(table.data[1], instance_1) + class CDSAWorkspaceRecordsTableTest(TestCase): """Tests for the CDSAWorkspaceRecordsTable class.""" @@ -343,6 +413,19 @@ def test_render_date_shared(self): ) self.assertNotEqual(table.render_date_shared(cdsa_workspace), "—") + def test_ordering(self): + """Instances are ordered alphabetically by user name.""" + agreement = factories.DataAffiliateAgreementFactory.create() + instance_1 = factories.CDSAWorkspaceFactory.create( + study=agreement.study, workspace__name="zzz" + ) + instance_2 = factories.CDSAWorkspaceFactory.create( + study=agreement.study, workspace__name="aaa" + ) + table = self.table_class(self.model.objects.all()) + self.assertEqual(table.data[0], instance_2) + self.assertEqual(table.data[1], instance_1) + class CDSAWorkspaceTableTest(TestCase): """Tests for the CDSAWorkspaceTable class.""" @@ -392,3 +475,11 @@ def test_render_is_shared_shared_with_different_group(self): ) table = self.table_class(self.model.objects.all()) self.assertEqual("", table.rows[0].get_cell_value("is_shared")) + + def test_ordering(self): + """Instances are ordered alphabetically by user name.""" + instance_1 = factories.CDSAWorkspaceFactory.create(workspace__name="zzz") + instance_2 = factories.CDSAWorkspaceFactory.create(workspace__name="aaa") + table = self.table_class(self.model.objects.all()) + self.assertEqual(table.data[0], instance_2.workspace) + self.assertEqual(table.data[1], instance_1.workspace)