Skip to content

Commit 517dd5e

Browse files
committed
Tests update
1 parent 2cc8c5f commit 517dd5e

File tree

7 files changed

+202
-152
lines changed

7 files changed

+202
-152
lines changed

iib/common/pydantic_models.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ class AddPydanticModel(PydanticRequestBaseModel):
6262
AfterValidator(length_validator),
6363
AfterValidator(binary_image_check),
6464
] = None
65-
build_tags: Optional[List[str]] = []
65+
build_tags: Optional[List[str]] = None
6666
bundles: Annotated[
6767
List[str],
6868
AfterValidator(length_validator),
@@ -156,7 +156,7 @@ class RmPydanticModel(PydanticRequestBaseModel):
156156
Optional[str],
157157
AfterValidator(binary_image_check),
158158
] = None
159-
build_tags: Optional[List[str]] = []
159+
build_tags: Optional[List[str]] = None
160160
distribution_scope: Annotated[
161161
Optional[DISTRIBUTION_SCOPE_LITERAL],
162162
BeforeValidator(distribution_scope_lower),
@@ -256,7 +256,7 @@ class MergeIndexImagePydanticModel(PydanticRequestBaseModel):
256256
AfterValidator(image_format_check),
257257
AfterValidator(binary_image_check),
258258
] = None
259-
build_tags: Optional[List[str]] = []
259+
build_tags: Optional[List[str]] = None
260260
deprecation_list: Annotated[
261261
Optional[List[str]],
262262
AfterValidator(get_unique_deprecation_list_items),
@@ -267,6 +267,7 @@ class MergeIndexImagePydanticModel(PydanticRequestBaseModel):
267267
BeforeValidator(distribution_scope_lower),
268268
] = None
269269
graph_update_mode: Optional[GRAPH_MODE_LITERAL] = None
270+
ignore_bundle_ocp_version: Optional[bool] = None
270271
overwrite_target_index: Optional[bool] = False
271272
overwrite_target_index_token: Optional[SecretStr] = None
272273
source_from_index: Annotated[str, AfterValidator(image_format_check)]
@@ -303,7 +304,6 @@ def _get_all_keys_to_check_in_db(self):
303304
"deprecation_list",
304305
"source_from_index",
305306
"target_index",
306-
"target_index",
307307
]
308308

309309

@@ -373,7 +373,7 @@ class FbcOperationsPydanticModel(PydanticRequestBaseModel):
373373
AfterValidator(get_unique_bundles),
374374
AfterValidator(images_format_check),
375375
] = None
376-
build_tags: Optional[List[str]] = []
376+
build_tags: Optional[List[str]] = None
377377
distribution_scope: Annotated[
378378
Optional[DISTRIBUTION_SCOPE_LITERAL],
379379
BeforeValidator(distribution_scope_lower),

iib/common/pydantic_utils.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@ def distribution_scope_lower(distribution_scope: str) -> str:
118118

119119
def length_validator(model_property: Any) -> Any:
120120
"""Validate length of the given model property."""
121-
if len(model_property) == 0:
121+
if model_property is not None and len(model_property) == 0:
122122
raise ValidationError(
123123
f"The {type(model_property)} {model_property} should have at least 1 item."
124124
)

iib/web/models.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -540,9 +540,9 @@ def from_json_replacement(
540540
request_kwargs['batch'] = batch
541541

542542
request = cls(**request_kwargs)
543-
544-
for bt in payload.build_tags:
545-
request.add_build_tag(bt)
543+
if payload.model_fields.get("build_tags") and payload.build_tags:
544+
for bt in payload.build_tags:
545+
request.add_build_tag(bt)
546546

547547
request.add_state('in_progress', 'The request was initiated')
548548
return request

tests/test_web/test_migrations.py

Lines changed: 80 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,20 @@
55
import pytest
66

77
from iib.web.models import (
8+
Request,
89
RequestAdd,
910
RequestMergeIndexImage,
1011
RequestRegenerateBundle,
1112
RequestRm,
1213
RequestCreateEmptyIndex,
1314
)
14-
15+
from iib.common.pydantic_models import (
16+
AddPydanticModel,
17+
RmPydanticModel,
18+
MergeIndexImagePydanticModel,
19+
RegenerateBundlePydanticModel,
20+
CreateEmptyIndexPydanticModel,
21+
)
1522

1623
INITIAL_DB_REVISION = '274ba38408e8'
1724

@@ -25,19 +32,19 @@ def test_migrate_to_polymorphic_requests(app, auth_env, client, db):
2532
for i in range(total_requests):
2633
request_class = random.choice((RequestAdd, RequestRm))
2734
if request_class == RequestAdd:
28-
data = {
29-
'binary_image': 'quay.io/namespace/binary_image:latest',
30-
'bundles': [f'quay.io/namespace/bundle:{i}'],
31-
'from_index': f'quay.io/namespace/repo:{i}',
32-
}
33-
request = RequestAdd.from_json(data)
35+
data = AddPydanticModel(
36+
binary_image='quay.io/namespace/binary_image:latest',
37+
bundles=[f'quay.io/namespace/bundle:{i}'],
38+
from_index=f'quay.io/namespace/repo:{i}',
39+
)
40+
request = RequestAdd.from_json_replacement(payload=data)
3441
elif request_class == RequestRm:
35-
data = {
36-
'binary_image': 'quay.io/namespace/binary_image:latest',
37-
'operators': [f'operator-{i}'],
38-
'from_index': f'quay.io/namespace/repo:{i}',
39-
}
40-
request = RequestRm.from_json(data)
42+
data = RmPydanticModel(
43+
binary_image='quay.io/namespace/binary_image:latest',
44+
operators=[f'operator-{i}'],
45+
from_index=f'quay.io/namespace/repo:{i}',
46+
)
47+
request = RequestRm.from_json_replacement(data)
4148

4249
if i % 5 == 0:
4350
# Simulate failed request
@@ -63,26 +70,26 @@ def test_migrate_to_merge_index_endpoints(app, auth_env, client, db):
6370
for i in range(total_requests):
6471
request_class = random.choice((RequestAdd, RequestMergeIndexImage, RequestRm))
6572
if request_class == RequestAdd:
66-
data = {
67-
'binary_image': 'quay.io/namespace/binary_image:latest',
68-
'bundles': [f'quay.io/namespace/bundle:{i}'],
69-
'from_index': f'quay.io/namespace/repo:{i}',
70-
}
71-
request = RequestAdd.from_json(data)
73+
data = AddPydanticModel(
74+
binary_image='quay.io/namespace/binary_image:latest',
75+
bundles=[f'quay.io/namespace/bundle:{i}'],
76+
from_index=f'quay.io/namespace/repo:{i}',
77+
)
78+
request = RequestAdd.from_json_replacement(data)
7279
elif request_class == RequestRm:
73-
data = {
74-
'binary_image': 'quay.io/namespace/binary_image:latest',
75-
'operators': [f'operator-{i}'],
76-
'from_index': f'quay.io/namespace/repo:{i}',
77-
}
78-
request = RequestRm.from_json(data)
80+
data = RmPydanticModel(
81+
binary_image='quay.io/namespace/binary_image:latest',
82+
operators=[f'operator-{i}'],
83+
from_index=f'quay.io/namespace/repo:{i}',
84+
)
85+
request = RequestRm.from_json_replacement(data)
7986
elif request_class == RequestMergeIndexImage:
80-
data = {
81-
'source_from_index': f'quay.io/namespace/repo:{i}',
82-
'target_index': f'quay.io/namespace/repo:{i}',
83-
'binary_image': 'quay.io/namespace/binary_image:latest',
84-
}
85-
request = RequestMergeIndexImage.from_json(data)
87+
data = MergeIndexImagePydanticModel(
88+
source_from_index=f'quay.io/namespace/repo:{i}',
89+
target_index=f'quay.io/namespace/repo:{i}',
90+
binary_image='quay.io/namespace/binary_image:latest',
91+
)
92+
request = RequestMergeIndexImage.from_json_replacement(data)
8693

8794
if i % 5 == 0:
8895
# Simulate failed request
@@ -104,31 +111,35 @@ def test_abort_when_downgrading_from_regenerate_bundle_request(app, auth_env, cl
104111
# flask_login.current_user is used in Request*.from_json which requires a request context
105112
with app.test_request_context(environ_base=auth_env):
106113
# Always add a RequestRegenerateBundle to ensure sufficient test data is available
107-
data = {'from_bundle_image': 'quay.io/namespace/bundle-image:latest'}
108-
request = RequestRegenerateBundle.from_json(data)
114+
data = RegenerateBundlePydanticModel(
115+
from_bundle_image='quay.io/namespace/bundle-image:latest'
116+
)
117+
request = RequestRegenerateBundle.from_json_replacement(data)
109118
db.session.add(request)
110119

111120
# One request was already added, let's add the remaining ones
112121
for i in range(total_requests - 1):
113122
request_class = random.choice((RequestAdd, RequestRm, RequestRegenerateBundle))
114123
if request_class == RequestAdd:
115-
data = {
116-
'binary_image': 'quay.io/namespace/binary_image:latest',
117-
'bundles': [f'quay.io/namespace/bundle:{i}'],
118-
'from_index': f'quay.io/namespace/repo:{i}',
119-
}
120-
request = RequestAdd.from_json(data)
124+
data = AddPydanticModel(
125+
binary_image='quay.io/namespace/binary_image:latest',
126+
bundles=[f'quay.io/namespace/bundle:{i}'],
127+
from_index=f'quay.io/namespace/repo:{i}',
128+
)
129+
request = RequestAdd.from_json_replacement(data)
121130

122131
elif request_class == RequestRm:
123-
data = {
124-
'binary_image': 'quay.io/namespace/binary_image:latest',
125-
'operators': [f'operator-{i}'],
126-
'from_index': f'quay.io/namespace/repo:{i}',
127-
}
128-
request = RequestRm.from_json(data)
132+
data = RmPydanticModel(
133+
binary_image='quay.io/namespace/binary_image:latest',
134+
operators=[f'operator-{i}'],
135+
from_index=f'quay.io/namespace/repo:{i}',
136+
)
137+
request = RequestRm.from_json_replacement(data)
129138
else:
130-
data = {'from_bundle_image': 'quay.io/namespace/bundle-image:latest'}
131-
request = RequestRegenerateBundle.from_json(data)
139+
data = RegenerateBundlePydanticModel(
140+
from_bundle_image='quay.io/namespace/bundle-image:latest'
141+
)
142+
request = RequestRegenerateBundle.from_json_replacement(data)
132143
db.session.add(request)
133144

134145
db.session.commit()
@@ -148,35 +159,35 @@ def test_create_empty_index_image_request(app, auth_env, client, db):
148159
# which requires a request context
149160
with app.test_request_context(environ_base=auth_env):
150161
# Generate some data to verify migration
151-
data = {
152-
'from_index': 'quay.io/namespace/index_image:latest',
153-
'binary_image': 'quay.io/namespace/binary_image:latest',
154-
}
155-
request = RequestCreateEmptyIndex.from_json(data)
162+
data = CreateEmptyIndexPydanticModel(
163+
from_index='quay.io/namespace/index_image:latest',
164+
binary_image='quay.io/namespace/binary_image:latest',
165+
)
166+
request = RequestCreateEmptyIndex.from_json_replacement(data)
156167
db.session.add(request)
157168

158169
for i in range(total_requests):
159170
request_class = random.choice((RequestAdd, RequestRm, RequestCreateEmptyIndex))
160171
if request_class == RequestAdd:
161-
data = {
162-
'binary_image': 'quay.io/namespace/binary_image:latest',
163-
'bundles': [f'quay.io/namespace/bundle:{i}'],
164-
'from_index': f'quay.io/namespace/repo:{i}',
165-
}
166-
request = RequestAdd.from_json(data)
172+
data = AddPydanticModel(
173+
binary_image='quay.io/namespace/binary_image:latest',
174+
bundles=[f'quay.io/namespace/bundle:{i}'],
175+
from_index=f'quay.io/namespace/repo:{i}',
176+
)
177+
request = RequestAdd.from_json_replacement(data)
167178
elif request_class == RequestRm:
168-
data = {
169-
'binary_image': 'quay.io/namespace/binary_image:latest',
170-
'operators': [f'operator-{i}'],
171-
'from_index': f'quay.io/namespace/repo:{i}',
172-
}
173-
request = RequestRm.from_json(data)
179+
data = RmPydanticModel(
180+
binary_image='quay.io/namespace/binary_image:latest',
181+
operators=[f'operator-{i}'],
182+
from_index=f'quay.io/namespace/repo:{i}',
183+
)
184+
request = RequestRm.from_json_replacement(data)
174185
elif request_class == RequestCreateEmptyIndex:
175-
data = {
176-
'from_index': f'quay.io/namespace/index_image:{i}',
177-
'binary_image': 'quay.io/namespace/binary_image:latest',
178-
}
179-
request = RequestCreateEmptyIndex.from_json(data)
186+
data = CreateEmptyIndexPydanticModel(
187+
from_index=f'quay.io/namespace/index_image:{i}',
188+
binary_image='quay.io/namespace/binary_image:latest',
189+
)
190+
request = RequestCreateEmptyIndex.from_json_replacement(data)
180191

181192
if i % 5 == 0:
182193
# Simulate failed request

0 commit comments

Comments
 (0)