Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
74 changes: 74 additions & 0 deletions specifyweb/specify/tests/test_record_sets.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
from specifyweb.specify.tests.test_api import ApiTests
from specifyweb.specify.models import Recordset, Recordsetitem, Collectionobject


class RecordSetCreationTests(ApiTests):

def test_create_record_set_with_multiple_records(self):
"""Create a record set and add multiple Collection Objects to it."""
recordset = Recordset.objects.create(
collectionmemberid=self.collection.id,
dbtableid=Collectionobject.specify_model.tableId,
name="Test RS with multiple COs",
type=0,
specifyuser=self.specifyuser,
)

co_ids = [co.id for co in self.collectionobjects]

Recordsetitem.objects.bulk_create([
Recordsetitem(recordset=recordset, recordid=co_id)
for co_id in co_ids
])

self.assertEqual(recordset.recordsetitems.count(), len(co_ids))

rs_item_ids = set(
recordset.recordsetitems.values_list("recordid", flat=True)
)
self.assertEqual(rs_item_ids, set(co_ids))

def test_add_existing_record_to_record_set(self):
"""Add an existing Collection Object to a record set."""
recordset = Recordset.objects.create(
collectionmemberid=self.collection.id,
dbtableid=Collectionobject.specify_model.tableId,
name="Test RS add existing",
type=0,
specifyuser=self.specifyuser,
)

self.assertEqual(recordset.recordsetitems.count(), 0)

existing_co = self.collectionobjects[0]
recordset.recordsetitems.create(recordid=existing_co.id)

self.assertEqual(recordset.recordsetitems.count(), 1)
self.assertEqual(
recordset.recordsetitems.first().recordid, existing_co.id
)

def test_create_record_set_from_query_results(self):
"""Simulate creating a record set from query results by adding
records that match a query (in this case, all COs in the collection)."""
recordset = Recordset.objects.create(
collectionmemberid=self.collection.id,
dbtableid=Collectionobject.specify_model.tableId,
name="Test RS from query",
type=0,
specifyuser=self.specifyuser,
)

matching_cos = Collectionobject.objects.filter(
collection=self.collection
)

Recordsetitem.objects.bulk_create([
Recordsetitem(recordset=recordset, recordid=co.id)
for co in matching_cos
])

self.assertEqual(
recordset.recordsetitems.count(),
matching_cos.count(),
)
Loading