diff --git a/specifyweb/specify/tests/test_record_sets.py b/specifyweb/specify/tests/test_record_sets.py new file mode 100644 index 00000000000..5b60da8720a --- /dev/null +++ b/specifyweb/specify/tests/test_record_sets.py @@ -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(), + ) \ No newline at end of file