Skip to content

Commit 7166741

Browse files
Fixed bug when duplicate properties are created
1 parent dac9f34 commit 7166741

2 files changed

Lines changed: 54 additions & 3 deletions

File tree

frontend/models.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -629,11 +629,12 @@ def unique_calculations(self):
629629
def has_nmr(self, params):
630630
for s in self.structure_set.all():
631631
try:
632-
p = s.properties.get(parameters=params)
632+
props = s.properties.filter(parameters=params).all()
633633
except Property.DoesNotExist:
634634
continue # Handle this better?
635-
if p.simple_nmr != "":
636-
return True
635+
for p in props:
636+
if p.simple_nmr != "":
637+
return True
637638
return False
638639

639640
def boltzmann_weighting_full(self, values, degeneracies):

frontend/test_models.py

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,10 @@
3030
User,
3131
settings,
3232
timezone,
33+
Parameters,
34+
Structure,
35+
Property,
36+
Ensemble,
3337
)
3438

3539

@@ -146,3 +150,49 @@ def test_student_sub_ended(self):
146150
self.sub.end_date = timezone.now() - timezone.timedelta(seconds=5)
147151
self.sub.save()
148152
self.assertEqual(self.user.user_type, "free")
153+
154+
155+
class CalculationModelsTests(TransactionTestCase):
156+
def tearDown(self):
157+
close_old_connections()
158+
159+
def setUp(self):
160+
self.password = "password1234"
161+
self.user = User.objects.create_user(email="PI@uni.com", password=self.password)
162+
self.group = ResearchGroup.objects.create(PI=self.user)
163+
self.student = User.objects.create_user(
164+
email="student@uni.com", password=self.password, member_of=self.group
165+
)
166+
167+
self.sub = Subscription.objects.create(
168+
subscriber=self.user,
169+
start_date=timezone.now(),
170+
end_date=timezone.now() + timezone.timedelta(days=1),
171+
)
172+
173+
def test_structure_multiple_properties_for_params(self):
174+
params = Parameters.objects.create(
175+
name="params1",
176+
charge=0,
177+
multiplicity=2,
178+
)
179+
e = Ensemble.objects.create()
180+
struct = Structure.objects.create(xyz_structure="H 0 0 0", parent_ensemble=e)
181+
182+
prop1 = Property.objects.create(
183+
parameters=params,
184+
parent_structure=struct,
185+
energy=1.0,
186+
free_energy=1.0,
187+
)
188+
189+
prop2 = Property.objects.create(
190+
parameters=params,
191+
parent_structure=struct,
192+
energy=1.0,
193+
free_energy=1.0,
194+
)
195+
196+
# Normally, this should not happen as the previous property should be updated.
197+
# However, it seems to happen in some cases, so let's just handle it correctly.
198+
self.assertFalse(e.has_nmr(params))

0 commit comments

Comments
 (0)