Skip to content

Commit 8171459

Browse files
committed
Merge release/0.7.1
2 parents 5110b40 + 90d0504 commit 8171459

File tree

5 files changed

+106
-29
lines changed

5 files changed

+106
-29
lines changed

migrations/0008_company_legal_name.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
# Generated by Django 5.1.6 on 2025-02-22 14:39
2+
3+
from django.db import migrations, models
4+
5+
6+
class Migration(migrations.Migration):
7+
8+
dependencies = [
9+
('ifc_validation_models', '0007_alter_useradditionalinfo_table'),
10+
]
11+
12+
operations = [
13+
migrations.AddField(
14+
model_name='company',
15+
name='legal_name',
16+
field=models.CharField(blank=True, help_text='Legal name of the Company (optional).', max_length=1024, null=True),
17+
),
18+
]
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
# Generated by Django 5.1.6 on 2025-02-22 16:16
2+
3+
from django.db import migrations, models
4+
5+
6+
class Migration(migrations.Migration):
7+
8+
dependencies = [
9+
('ifc_validation_models', '0008_company_legal_name'),
10+
]
11+
12+
operations = [
13+
migrations.AddField(
14+
model_name='company',
15+
name='email_address_pattern',
16+
field=models.CharField(blank=True, help_text='Email address pattern(s) of the Company (optional).', max_length=1024, null=True, unique=True),
17+
),
18+
]

models.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -219,6 +219,22 @@ class Company(TimestampedBaseModel):
219219
help_text="Name of the Company."
220220
)
221221

222+
legal_name = models.CharField(
223+
max_length=1024,
224+
null=True,
225+
blank=True,
226+
unique=False,
227+
help_text="Legal name of the Company (optional)."
228+
)
229+
230+
email_address_pattern = models.CharField(
231+
max_length=1024,
232+
null=True,
233+
blank=True,
234+
unique=True,
235+
help_text="Email address pattern(s) of the Company (optional)."
236+
)
237+
222238
class Meta:
223239

224240
db_table = "ifc_company"

test_settings.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
INSTALLED_APPS = [
77
"django.contrib.auth",
88
"django.contrib.contenttypes",
9-
109
"apps.ifc_validation_models"
1110
]
1211

@@ -16,6 +15,7 @@
1615
DB_SQLITE: {
1716
"ENGINE": "django.db.backends.sqlite3",
1817
"NAME": "test_django_db.sqlite3",
18+
"MIGRATE": False,
1919
}
2020
}
2121

tests.py

Lines changed: 53 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -5,91 +5,96 @@
55

66
from apps.ifc_validation_models.models import ValidationRequest, ValidationTask # TODO: for now needs to be absolute!
77
from apps.ifc_validation_models.models import Company, AuthoringTool, Model
8-
from apps.ifc_validation_models.decorators import requires_django_user_context
9-
8+
from apps.ifc_validation_models.models import set_user_context
109

1110
class ValidationModelsTestCase(TestCase):
1211

13-
@classmethod
14-
def setUpTestData(cls):
15-
16-
"""
17-
Creates a SYSTEM user in the (in-memory) database.
18-
Runs once for the whole test case.
19-
"""
20-
12+
def set_user_context():
2113
user = User.objects.create(id=1, username='SYSTEM', is_active=True)
22-
user.save()
14+
set_user_context(user)
2315

24-
@requires_django_user_context
2516
def test_created_request_has_status_pending(self):
2617

18+
# arrange
19+
ValidationModelsTestCase.set_user_context()
2720
request = ValidationRequest.objects.create(
2821
file_name='test.ifc',
2922
file='test.ifc',
3023
size=1024
3124
)
3225

26+
# act
3327
request2 = ValidationRequest.objects.get(id=request.id)
3428

29+
# assert
3530
self.assertEqual(request2.status, ValidationRequest.Status.PENDING)
3631

37-
@requires_django_user_context
3832
def test_created_request_has_created_fields(self):
3933

34+
# arrange
35+
ValidationModelsTestCase.set_user_context()
4036
request = ValidationRequest.objects.create(
4137
file_name='test2.ifc',
4238
file='test2.ifc',
4339
size=1024
4440
)
4541

42+
# act
4643
request2 = ValidationRequest.objects.get(id=request.id)
4744

45+
# assert
4846
self.assertEqual(request2.created.date(), datetime.date.today())
4947
self.assertEqual(request2.created_by.username, 'SYSTEM')
5048
self.assertEqual(request2.created_by.id, 1)
5149
self.assertTrue(request2.updated is None)
5250
self.assertTrue(request2.updated_by is None)
5351

54-
@requires_django_user_context
5552
def test_updated_request_has_updated_fields(self):
5653

54+
# arrange
55+
ValidationModelsTestCase.set_user_context()
5756
request = ValidationRequest.objects.create(
5857
file_name='test3.ifc',
5958
file='test3.ifc',
6059
size=1024
6160
)
6261

62+
# act
6363
request2 = ValidationRequest.objects.get(id=request.id)
6464
request2.save() # simulate update
6565

66+
# assert
6667
self.assertEqual(request2.created.date(), datetime.date.today())
6768
self.assertEqual(request2.created_by.username, 'SYSTEM')
6869
self.assertEqual(request2.created_by.id, 1)
6970
self.assertEqual(request2.updated.date(), datetime.date.today())
7071
self.assertEqual(request2.updated_by.username, 'SYSTEM')
7172
self.assertEqual(request2.updated_by.id, 1)
7273

73-
@requires_django_user_context
7474
def test_created_task_has_status_pending(self):
7575

76+
# arrange
77+
ValidationModelsTestCase.set_user_context()
7678
request = ValidationRequest.objects.create(
7779
file_name='test4.ifc',
7880
file='test4.ifc',
7981
size=1024
8082
)
8183

84+
# act
8285
task = ValidationTask.objects.create(
8386
request=request
8487
)
8588

8689
task2 = ValidationTask.objects.get(id=task.id)
8790

91+
# assert
8892
self.assertEqual(task2.status, ValidationTask.Status.PENDING)
8993

90-
@requires_django_user_context
9194
def test_created_tasks_can_be_navigated(self):
9295

96+
# arrange
97+
ValidationModelsTestCase.set_user_context()
9398
request = ValidationRequest.objects.create(file_name='test5.ifc', file='test5.ifc', size=1024)
9499
task1 = ValidationTask.objects.create(request=request)
95100
task2 = ValidationTask.objects.create(request=request)
@@ -99,26 +104,31 @@ def test_created_tasks_can_be_navigated(self):
99104
ValidationTask.objects.create(request=request2)
100105
ValidationTask.objects.create(request=request2)
101106

107+
# act
102108
all_tasks = ValidationTask.objects.all()
103109
tasks = ValidationTask.objects.filter(request__id=request.id)
104110

111+
# assert
105112
self.assertEqual(all_tasks.count(), 5)
106113
self.assertEqual(tasks.count(), 3)
107114
self.assertEqual(task1.id, tasks[0].id)
108115
self.assertEqual(task2.id, tasks[1].id)
109116
self.assertEqual(task3.id, tasks[2].id)
110117

111-
@requires_django_user_context
112118
def test_newly_created_tool_and_model_can_be_navigated(self):
113119

120+
# arrange
121+
ValidationModelsTestCase.set_user_context()
114122
user = User.objects.get(id=1)
115123
company = Company.objects.create(name='Acme Inc.')
116124
tool = AuthoringTool.objects.create(name='Tool XYZ', version='1.0-alpha', company=company)
117125
model = Model.objects.create(file_name='test_123.ifc', size=2048, produced_by=tool, uploaded_by=user)
118126
model2 = Model.objects.create(file_name='test_xyz.ifc', size=4096, produced_by=tool, uploaded_by=user)
119127

128+
# act
120129
all_tools = AuthoringTool.objects.all()
121130

131+
# assert
122132
self.assertEqual(all_tools.count(), 1)
123133
self.assertEqual(all_tools[0].id, tool.id)
124134
self.assertEqual(tool.company.name, company.name)
@@ -128,9 +138,9 @@ def test_newly_created_tool_and_model_can_be_navigated(self):
128138
self.assertEqual(user.models.count(), 2)
129139
self.assertEqual(user.models.all()[1].file_name, model2.file_name)
130140

131-
@requires_django_user_context
132141
def test_find_tool_by_full_name_should_succeed(self):
133142

143+
ValidationModelsTestCase.set_user_context()
134144
company1 = Company.objects.create(name='Acme Inc.')
135145
tool1 = AuthoringTool.objects.create(name='Tool ABC', version='1.0', company=company1)
136146
tool2 = AuthoringTool.objects.create(name='Tool ABC', version='2.0-alpha', company=company1)
@@ -139,13 +149,13 @@ def test_find_tool_by_full_name_should_succeed(self):
139149
tool3 = AuthoringTool.objects.create(name='App', version=None, company=company2)
140150
tool4 = AuthoringTool.objects.create(name='App', version='2024', company=company2)
141151

142-
name_to_find = 'Acme Inc. Tool ABC - 1.0'
152+
name_to_find = 'Acme Inc. - Tool ABC - 1.0'
143153
found_tool = AuthoringTool.find_by_full_name(name_to_find)
144154
self.assertIsNotNone(found_tool)
145155
self.assertIsInstance(found_tool, AuthoringTool)
146156
self.assertEqual(found_tool.name, tool1.name)
147157

148-
name_to_find = 'Acme Inc. Tool ABC 1.0'
158+
name_to_find = 'Acme Inc. - Tool ABC 1.0'
149159
found_tool = AuthoringTool.find_by_full_name(name_to_find)
150160
self.assertIsNotNone(found_tool)
151161
self.assertIsInstance(found_tool, AuthoringTool)
@@ -161,7 +171,7 @@ def test_find_tool_by_full_name_should_succeed(self):
161171
self.assertIsInstance(found_tool, AuthoringTool)
162172
self.assertEqual(found_tool.name, tool3.name)
163173

164-
name_to_find = 'PyCAD Limited App 2024'
174+
name_to_find = 'PyCAD Limited - App 2024'
165175
found_tool = AuthoringTool.find_by_full_name(name_to_find)
166176
self.assertIsNotNone(found_tool)
167177
self.assertIsInstance(found_tool, AuthoringTool)
@@ -171,9 +181,9 @@ def test_find_tool_by_full_name_should_succeed(self):
171181
found_tool = AuthoringTool.find_by_full_name(name_to_find)
172182
self.assertIsNone(found_tool)
173183

174-
@requires_django_user_context
175184
def test_find_tool_by_full_name_should_succeed2(self):
176185

186+
ValidationModelsTestCase.set_user_context()
177187
tool1 = AuthoringTool.objects.create(name='Test Application', version='0.10')
178188

179189
name_to_find = 'Test Application 0.10'
@@ -192,9 +202,9 @@ def test_find_tool_by_full_name_should_succeed2(self):
192202
self.assertIsInstance(found_tool, AuthoringTool)
193203
self.assertEqual(found_tool.name, tool2.name)
194204

195-
@requires_django_user_context
196205
def test_find_tool_by_full_name_should_succeed3(self):
197206

207+
ValidationModelsTestCase.set_user_context()
198208
tool1 = AuthoringTool.objects.create(name='IfcOpenShell-v0.7.0-6c9e130ca', version='v0.7.0-6c9e130ca')
199209

200210
name_to_find = 'IfcOpenShell-v0.7.0-6c9e130ca v0.7.0-6c9e130ca'
@@ -204,10 +214,15 @@ def test_find_tool_by_full_name_should_succeed3(self):
204214
self.assertIsInstance(found_tool, AuthoringTool)
205215
self.assertEqual(found_tool.name, tool1.name)
206216

207-
@requires_django_user_context
208217
def test_model_can_navigate_back_to_request(self):
209218

210-
request = ValidationRequest.objects.create(file_name='test.ifc', file='test.ifc', size=1024)
219+
# arrange
220+
ValidationModelsTestCase.set_user_context()
221+
request = ValidationRequest.objects.create(
222+
file_name='test.ifc',
223+
file='test.ifc',
224+
size=1024
225+
)
211226

212227
model, _ = Model.objects.get_or_create(
213228
file_name = request.file_name,
@@ -218,17 +233,27 @@ def test_model_can_navigate_back_to_request(self):
218233
request.model = model
219234
request.save()
220235

236+
# act
221237
request2 = ValidationRequest.objects.get(id=request.id)
238+
239+
# assert
222240
self.assertIsNotNone(request2.model)
223241
self.assertEqual(request.id, model.request.id)
224242
self.assertEqual(request2.id, model.request.id)
225243

226-
@requires_django_user_context
227244
def test_task_can_navigate_back_to_model(self):
228245

229246
# arrange
230-
request = ValidationRequest.objects.create(file_name='test.ifc', file='test.ifc', size=1024)
231-
task = ValidationTask.objects.create(request=request, type=ValidationTask.Type.PARSE_INFO)
247+
ValidationModelsTestCase.set_user_context()
248+
request = ValidationRequest.objects.create(
249+
file_name='test.ifc',
250+
file='test.ifc',
251+
size=1024
252+
)
253+
task = ValidationTask.objects.create(
254+
request=request,
255+
type=ValidationTask.Type.PARSE_INFO
256+
)
232257
model, _ = Model.objects.get_or_create(
233258
file_name = request.file_name,
234259
file = request.file,

0 commit comments

Comments
 (0)