Skip to content

Commit 489cd23

Browse files
Merge pull request #8464 from specify/issue-8454
[test]: tests for Accession
2 parents 7cf79dc + 920a6b8 commit 489cd23

2 files changed

Lines changed: 199 additions & 0 deletions

File tree

specifyweb/backend/businessrules/tests/test_accession.py

Lines changed: 151 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,8 +48,159 @@ def test_no_delete_if_collection_objects_exist(self):
4848

4949
accession.collectionobjects.clear()
5050

51+
accession_id = accession.id
52+
5153
accession.delete()
5254

55+
self.assertFalse(
56+
models.Accession.objects.filter(id=accession_id).exists()
57+
)
58+
5359
self.assertEqual(
5460
models.Collectionobject.objects.filter(id__in=[co.id for co in self.collectionobjects]).count(),
5561
len(self.collectionobjects))
62+
63+
def test_create_accession_with_number_status_and_type(self):
64+
accession = models.Accession.objects.create(
65+
accessionnumber="A-8454-001",
66+
status="Complete",
67+
type="Gift",
68+
division=self.division,
69+
)
70+
fetched = models.Accession.objects.get(id=accession.id)
71+
72+
self.assertEqual(fetched.accessionnumber, "A-8454-001")
73+
self.assertEqual(fetched.status, "Complete")
74+
self.assertEqual(fetched.type, "Gift")
75+
self.assertEqual(fetched.division, self.division)
76+
77+
def test_add_existing_permit_to_accession(self):
78+
accession = models.Accession.objects.create(
79+
accessionnumber='A-PERMIT-001',
80+
division=self.division,
81+
)
82+
83+
permit = models.Permit.objects.create( # since ApiTests doesn't have an existing permit, we create it
84+
permitnumber='P-EXISTING-001',
85+
institution=self.institution,
86+
)
87+
88+
authorization = accession.accessionauthorizations.create(
89+
permit=permit,
90+
remarks='Existing permit authorizations',
91+
)
92+
93+
fetched = models.Accessionauthorization.objects.get(
94+
id=authorization.id
95+
)
96+
97+
self.assertEqual(fetched.accession, accession)
98+
self.assertEqual(fetched.permit, permit)
99+
self.assertEqual(fetched.remarks, 'Existing permit authorizations')
100+
101+
def test_add_multiple_agents_and_authorizations(self):
102+
accession = models.Accession.objects.create(
103+
accessionnumber='A-MULTIPLE-001',
104+
division=self.division,
105+
)
106+
agent_1 = models.Agent.objects.create(
107+
agenttype=0,
108+
firstname='First',
109+
lastname='Agent',
110+
division=self.division,
111+
)
112+
agent_2 = models.Agent.objects.create(
113+
agenttype=0,
114+
firstname='Second',
115+
lastname='Agent',
116+
division=self.division,
117+
)
118+
permit_1 = models.Permit.objects.create(
119+
permitnumber='P-MULTIPLE-001',
120+
institution=self.institution,
121+
)
122+
permit_2 = models.Permit.objects.create(
123+
permitnumber='P-MULTIPLE-002',
124+
institution=self.institution,
125+
)
126+
accession.accessionagents.create(
127+
agent=agent_1,
128+
role='Collector',
129+
)
130+
accession.accessionagents.create(
131+
agent=agent_2,
132+
role='Donor',
133+
)
134+
accession.accessionauthorizations.create(
135+
permit=permit_1,
136+
)
137+
accession.accessionauthorizations.create(
138+
permit=permit_2,
139+
)
140+
self.assertEqual(accession.accessionagents.count(), 2)
141+
self.assertEqual(accession.accessionauthorizations.count(), 2)
142+
143+
agent_ids = set(accession.accessionagents.values_list('agent_id', flat=True))
144+
agent_roles = dict(
145+
accession.accessionagents.values_list('agent_id', 'role')
146+
)
147+
permit_ids = set(accession.accessionauthorizations.values_list('permit_id', flat=True))
148+
149+
self.assertEqual(agent_ids, {agent_1.id, agent_2.id})
150+
self.assertEqual(agent_roles, {
151+
agent_1.id: 'Collector',
152+
agent_2.id: 'Donor',
153+
})
154+
self.assertEqual(permit_ids, {permit_1.id, permit_2.id})
155+
156+
def test_add_attachment_to_accession(self):
157+
accession = models.Accession.objects.create(
158+
accessionnumber='A-ATTACHMENT-001',
159+
division=self.division,
160+
)
161+
attachment = models.Attachment.objects.create(
162+
origfilename='accession_document.pdf',
163+
tableid=accession.specify_model.tableId,
164+
title='Accession Document',
165+
mimetype='application/pdf',
166+
)
167+
168+
accession_attachment = models.Accessionattachment.objects.create(
169+
accession=accession,
170+
attachment=attachment,
171+
ordinal=0,
172+
)
173+
fetched = models.Accessionattachment.objects.get(
174+
id=accession_attachment.id
175+
)
176+
177+
self.assertEqual(accession.accessionattachments.count(), 1)
178+
self.assertEqual(fetched.accession, accession)
179+
self.assertEqual(fetched.attachment, attachment)
180+
self.assertEqual(fetched.attachment.origfilename, 'accession_document.pdf')
181+
self.assertEqual(fetched.ordinal, 0)
182+
183+
def test_delete_attachment_from_accession(self):
184+
accession = models.Accession.objects.create(
185+
accessionnumber='A-DELETE-ATTACHMENT-001',
186+
division=self.division,
187+
)
188+
attachment = models.Attachment.objects.create(
189+
origfilename='delete_me.pdf',
190+
tableid=accession.specify_model.tableId,
191+
title='Delete Me',
192+
mimetype='application/pdf',
193+
)
194+
accession_attachment = models.Accessionattachment.objects.create(
195+
accession=accession,
196+
attachment=attachment,
197+
ordinal=0,
198+
)
199+
attachment_id = attachment.id
200+
201+
accession_attachment.delete()
202+
203+
self.assertEqual(accession.accessionattachments.count(), 0)
204+
self.assertFalse(
205+
models.Attachment.objects.filter(id=attachment_id).exists()
206+
)

specifyweb/backend/businessrules/tests/test_accessionagent.py

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,3 +134,51 @@ def test_agents_and_roles_can_be_duped_in_different_repository_agreements(self):
134134
repository_agreement2.repositoryagreementagents.create(
135135
agent=self.agent,
136136
role="Collector")
137+
138+
def test_add_existing_agent_to_accession(self):
139+
accession = models.Accession.objects.create(
140+
accessionnumber='A-AGENT-001',
141+
division=self.division,
142+
)
143+
accession_agent = accession.accessionagents.create(
144+
agent=self.agent,
145+
role='Collector'
146+
)
147+
fetched = models.Accessionagent.objects.get(
148+
id=accession_agent.id
149+
)
150+
self.assertEqual(fetched.accession, accession)
151+
self.assertEqual(fetched.agent, self.agent)
152+
self.assertEqual(fetched.role, 'Collector')
153+
154+
def test_create_new_agent_for_accession(self):
155+
accession = models.Accession.objects.create(
156+
accessionnumber='A-NEW-AGENT-001',
157+
division=self.division
158+
)
159+
160+
new_agent = models.Agent.objects.create(
161+
agenttype=0, #means its a person
162+
firstname='New',
163+
lastname='Donor',
164+
division=self.division
165+
)
166+
167+
accession_agent = accession.accessionagents.create(
168+
agent=new_agent,
169+
role='Donor'
170+
)
171+
172+
fetched_link = models.Accessionagent.objects.get(
173+
id=accession_agent.id
174+
)
175+
fetched_agent = models.Agent.objects.get(
176+
id=new_agent.id
177+
)
178+
179+
self.assertEqual(fetched_agent.firstname, 'New')
180+
self.assertEqual(fetched_agent.lastname, 'Donor')
181+
self.assertEqual(fetched_agent.agenttype, 0)
182+
self.assertEqual(fetched_link.accession, accession)
183+
self.assertEqual(fetched_link.agent, fetched_agent)
184+
self.assertEqual(fetched_link.role, 'Donor')

0 commit comments

Comments
 (0)