Skip to content

Commit 376f652

Browse files
author
Pedro Crespo
committed
Fixes enveloped schemas to have null error.
Modifies the test_conventions... to adapt to new criteria
1 parent c034676 commit 376f652

File tree

8 files changed

+31
-72
lines changed

8 files changed

+31
-72
lines changed

api/specs/webserver/v0/components/schemas/error.yaml

+1
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ ErrorType:
2222
# - e.g. metadata can serialize an exception in server that can be reproduced in client side
2323
#
2424
type: object
25+
nullable: true
2526
properties:
2627
logs:
2728
description: log messages

api/specs/webserver/v0/components/schemas/fake.yaml

-4
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,10 @@ FakeEnveloped:
22
type: object
33
required:
44
- data
5-
- error
65
properties:
76
data:
87
$ref: '#/FakeType'
9-
nullable: true
10-
default: null
118
error:
12-
$ref: "./error.yaml#/ErrorType"
139
nullable: true
1410
default: null
1511

api/specs/webserver/v0/components/schemas/health_check.yaml

-4
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,10 @@ HealthCheckEnveloped:
22
type: object
33
required:
44
- data
5-
- error
65
properties:
76
data:
87
$ref: '#/HealthCheckType'
9-
nullable: true
10-
default: null
118
error:
12-
$ref: "./error.yaml#/ErrorType"
139
nullable: true
1410
default: null
1511

api/specs/webserver/v0/components/schemas/log_message.yaml

-4
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,10 @@ LogMessageEnveloped:
22
type: object
33
required:
44
- data
5-
- error
65
properties:
76
data:
87
$ref: "#/LogMessageType"
9-
nullable: true
10-
default: null
118
error:
12-
$ref: "./error.yaml#/ErrorType"
139
nullable: true
1410
default: null
1511

api/specs/webserver/v0/components/schemas/login.yaml

-4
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,10 @@ LoginEnveloped:
22
type: object
33
required:
44
- data
5-
- error
65
properties:
76
data:
87
$ref: '#/LoginFormType'
9-
nullable: true
10-
default: null
118
error:
12-
$ref: "./error.yaml#/ErrorType"
139
nullable: true
1410
default: null
1511

api/specs/webserver/v0/components/schemas/my.yaml

+26-31
Original file line numberDiff line numberDiff line change
@@ -35,46 +35,41 @@ Token:
3535
service: 'github-api-v1'
3636
token_key: foo
3737

38-
3938
# enveloped and array versions --------------------------
4039

41-
42-
# TODO: move this as base class??
43-
ErrorEnvelopeModel:
40+
ProfileEnveloped:
4441
type: object
42+
required:
43+
- data
4544
properties:
45+
data:
46+
$ref: '#/Profile'
4647
error:
47-
$ref: "./error.yaml#/ErrorType"
4848
nullable: true
49-
50-
51-
ProfileEnveloped:
52-
allOf:
53-
- $ref: '#/ErrorEnvelopeModel'
54-
- type: object
55-
properties:
56-
data:
57-
$ref: '#/Profile'
58-
nullable: true
49+
default: null
5950

6051

6152
TokenEnveloped:
62-
allOf:
63-
- $ref: '#/ErrorEnvelopeModel'
64-
- type: object
65-
properties:
66-
data:
67-
$ref: '#/Token'
68-
nullable: true
53+
type: object
54+
required:
55+
- data
56+
properties:
57+
data:
58+
$ref: '#/Token'
59+
error:
60+
nullable: true
61+
default: null
6962

7063

7164
TokensArrayEnveloped:
72-
allOf:
73-
- $ref: '#/ErrorEnvelopeModel'
74-
- type: object
75-
properties:
76-
data:
77-
type: array
78-
items:
79-
$ref: '#/Token'
80-
nullable: true
65+
type: object
66+
required:
67+
- data
68+
properties:
69+
data:
70+
type: array
71+
items:
72+
$ref: '#/Token'
73+
error:
74+
nullable: true
75+
default: null

api/specs/webserver/v0/components/schemas/registration.yaml

-4
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,10 @@ RegistrationEnveloped:
22
type: object
33
required:
44
- data
5-
- error
65
properties:
76
data:
87
$ref: '#/RegistrationType'
9-
nullable: true
10-
default: null
118
error:
12-
$ref: "./error.yaml#/ErrorType"
139
nullable: true
1410
default: null
1511

api/tests/test_conventions_openapi.py

+4-21
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
from utils import list_files_in_api_specs
1010

1111
# Conventions
12-
_REQUIRED_FIELDS = ["error", "data"]
12+
_REQUIRED_FIELDS = ["data", ]
1313
CONVERTED_SUFFIX = "-converted.yaml"
1414

1515
# TESTS ----------------------------------------------------------
@@ -20,7 +20,6 @@
2020
if not pathstr.endswith(CONVERTED_SUFFIX) ] # skip converted schemas
2121

2222

23-
@pytest.mark.skip(reason="TODO: discuss with sanderegg")
2423
@pytest.mark.parametrize("path", non_converted_yamls)
2524
def test_openapi_envelope_required_fields(path: str):
2625
with io.open(path) as file_stream:
@@ -29,25 +28,9 @@ def test_openapi_envelope_required_fields(path: str):
2928
if "Envelope" in key:
3029
assert "required" in value, "field required is missing from {file}".format(file=path)
3130
required_fields = value["required"]
31+
3232
assert "properties" in value, "field properties is missing from {file}".format(file=path)
3333
fields_definitions = value["properties"]
34-
for field in _REQUIRED_FIELDS:
35-
assert field in required_fields, ("field {field} is missing in {file}".format(field=field, file=path))
36-
assert field in fields_definitions, ("field {field} is missing in {file}".format(field=field, file=path))
37-
3834

39-
@pytest.mark.skip(reason="TODO: discuss with sanderegg")
40-
@pytest.mark.parametrize("path", non_converted_yamls)
41-
def test_openapi_type_name(path: str):
42-
with io.open(path) as file_stream:
43-
oas_dict = yaml.safe_load(file_stream)
44-
45-
for key, value in oas_dict.items():
46-
if "Envelope" in key:
47-
assert "properties" in value, ("field properties is missing from {file}".format(file=path))
48-
fields_definitions = value["properties"]
49-
for field_key, field_value in fields_definitions.items():
50-
data_values = field_value
51-
for data_key, data_value in data_values.items():
52-
if "$ref" in data_key:
53-
assert str(data_value).endswith("Type"), ("field {field} name is not finishing with Type in {file}".format(field=field_key, file=path))
35+
assert 'error' in required_fields or 'data' in required_fields
36+
assert 'error' in fields_definitions or 'data' in fields_definitions

0 commit comments

Comments
 (0)