Skip to content

Commit 0bccd8d

Browse files
authored
fix(compilation_artifacts): check sources constraints for all source files (#28)
1 parent cf2e629 commit 0bccd8d

2 files changed

Lines changed: 34 additions & 17 deletions

File tree

database.sql

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -406,7 +406,7 @@ DECLARE
406406
are_object_values_valid bool;
407407
are_ids_unique bool;
408408
BEGIN
409-
SELECT (
409+
SELECT bool_and (
410410
-- file name must be non-empty string
411411
length(key) > 0 AND
412412
-- the corresponding value is expected to be an object with only the 'id' key

tests/test_constraint_compilation_artifacts_json_schema.py

Lines changed: 33 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -79,24 +79,32 @@ def test_missing_storage_layout_fails(self, connection, dummy_code, dummy_compil
7979
check_constraint_fails(
8080
lambda: dummy_compiled_contract.insert(connection, dummy_code.code_hash, dummy_code.code_hash), 'compilation_artifacts_json_schema')
8181

82-
@pytest.mark.parametrize("value", [0, "", {}], ids=["number", "string", "object"])
83-
def test_abi_invalid_type_fails(self, value, connection, dummy_code, dummy_compiled_contract):
84-
dummy_compiled_contract.compilation_artifacts["abi"] = value
85-
check_constraint_fails(
86-
lambda: dummy_compiled_contract.insert(connection, dummy_code.code_hash, dummy_code.code_hash), 'compilation_artifacts_json_schema')
87-
8882
def test_unknown_field_fails(self, connection, dummy_code, dummy_compiled_contract):
8983
dummy_compiled_contract.compilation_artifacts['unknown_key'] = None
9084
check_constraint_fails(
9185
lambda: dummy_compiled_contract.insert(connection, dummy_code.code_hash, dummy_code.code_hash), 'compilation_artifacts_json_schema')
9286

87+
88+
class TestAbi:
89+
@pytest.mark.parametrize("value", [0, "", {}], ids=["number", "string", "object"])
90+
def test_invalid_type_fails(self, value, connection, dummy_code, dummy_compiled_contract):
91+
dummy_compiled_contract.compilation_artifacts["abi"] = value
92+
check_constraint_fails(
93+
lambda: dummy_compiled_contract.insert(
94+
connection, dummy_code.code_hash, dummy_code.code_hash),
95+
'compilation_artifacts_json_schema')
96+
97+
98+
class TestSources:
9399
@pytest.mark.parametrize("value", [0, "", []], ids=["number", "string", "array"])
94-
def test_sources_invalid_type_fails(self, value, connection, dummy_code, dummy_compiled_contract):
100+
def test_invalid_type_fails(self, value, connection, dummy_code, dummy_compiled_contract):
95101
dummy_compiled_contract.compilation_artifacts['sources'] = value
96102
check_constraint_fails(
97-
lambda: dummy_compiled_contract.insert(connection, dummy_code.code_hash, dummy_code.code_hash), "compilation_artifacts_json_schema")
103+
lambda: dummy_compiled_contract.insert(
104+
connection, dummy_code.code_hash, dummy_code.code_hash),
105+
"compilation_artifacts_json_schema")
98106

99-
def test_sources_file_name_empty_string_fails(self, connection, dummy_code, dummy_compiled_contract):
107+
def test_file_name_empty_string_fails(self, connection, dummy_code, dummy_compiled_contract):
100108
dummy_compiled_contract.compilation_artifacts['sources'] = {
101109
"file.sol": {"id": 0}, "": {"id": 1}}
102110
check_constraint_fails(
@@ -105,24 +113,24 @@ def test_sources_file_name_empty_string_fails(self, connection, dummy_code, dumm
105113
"compilation_artifacts_json_schema")
106114

107115
@pytest.mark.parametrize("value", [None, 0, "", []], ids=["null", "number", "string", "array"])
108-
def test_sources_id_subkey_values_invalid_type_fails(self, value, connection, dummy_code,
109-
dummy_compiled_contract):
116+
def test_id_subkey_values_invalid_type_fails(self, value, connection, dummy_code,
117+
dummy_compiled_contract):
110118
dummy_compiled_contract.compilation_artifacts['sources'] = {
111119
"file.sol": value}
112120
check_constraint_fails(
113121
lambda: dummy_compiled_contract.insert(
114122
connection, dummy_code.code_hash, dummy_code.code_hash),
115123
"compilation_artifacts_json_schema")
116124

117-
def test_sources_missing_id_subkey_fails(self, connection, dummy_code, dummy_compiled_contract):
125+
def test_missing_id_subkey_fails(self, connection, dummy_code, dummy_compiled_contract):
118126
dummy_compiled_contract.compilation_artifacts['sources'] = {
119127
"file.sol": {}}
120128
check_constraint_fails(
121129
lambda: dummy_compiled_contract.insert(
122130
connection, dummy_code.code_hash, dummy_code.code_hash),
123131
"compilation_artifacts_json_schema")
124132

125-
def test_sources_extra_subkey_fails(self, connection, dummy_code, dummy_compiled_contract):
133+
def test_extra_subkey_fails(self, connection, dummy_code, dummy_compiled_contract):
126134
dummy_compiled_contract.compilation_artifacts['sources'] = {
127135
"file.sol": {"id": 0, "extra": 1}}
128136
check_constraint_fails(
@@ -131,15 +139,16 @@ def test_sources_extra_subkey_fails(self, connection, dummy_code, dummy_compiled
131139
"compilation_artifacts_json_schema")
132140

133141
@pytest.mark.parametrize("value", [None, "", [], dict()], ids=["null", "string", "array", "object"])
134-
def test_sources_id_subkey_value_type_is_not_number_fails(self, value, connection, dummy_code, dummy_compiled_contract):
142+
def test_id_subkey_value_type_is_not_number_fails(self, value, connection, dummy_code,
143+
dummy_compiled_contract):
135144
dummy_compiled_contract.compilation_artifacts['sources'] = {
136145
"file.sol": {"id": value}}
137146
check_constraint_fails(
138147
lambda: dummy_compiled_contract.insert(
139148
connection, dummy_code.code_hash, dummy_code.code_hash),
140149
"compilation_artifacts_json_schema")
141150

142-
def test_sources_id_subkey_value_is_negative_fails(self, connection, dummy_code, dummy_compiled_contract):
151+
def test_id_subkey_value_is_negative_fails(self, connection, dummy_code, dummy_compiled_contract):
143152
dummy_compiled_contract.compilation_artifacts['sources'] = {
144153
"file.sol": {"id": -1}}
145154
check_constraint_fails(
@@ -148,10 +157,18 @@ def test_sources_id_subkey_value_is_negative_fails(self, connection, dummy_code,
148157
), "compilation_artifacts_json_schema"
149158
)
150159

151-
def test_sources_repetitive_id_subkey_values_fails(self, connection, dummy_code, dummy_compiled_contract):
160+
def test_repetitive_id_subkey_values_fails(self, connection, dummy_code, dummy_compiled_contract):
152161
dummy_compiled_contract.compilation_artifacts['sources'] = {
153162
"file.sol": {"id": 0}, "file2.sol": {"id": 0}}
154163
check_constraint_fails(
155164
lambda: dummy_compiled_contract.insert(
156165
connection, dummy_code.code_hash, dummy_code.code_hash),
157166
"compilation_artifacts_json_schema")
167+
168+
def test_that_all_files_are_checked(self, connection, dummy_code, dummy_compiled_contract):
169+
dummy_compiled_contract.compilation_artifacts['sources'] = {
170+
"file.sol": {"id": 0}, "file2.sol": {}}
171+
check_constraint_fails(
172+
lambda: dummy_compiled_contract.insert(
173+
connection, dummy_code.code_hash, dummy_code.code_hash),
174+
"compilation_artifacts_json_schema")

0 commit comments

Comments
 (0)