Mercurial > hgrepos > Python > libs > data-schema
comparison tests/test_schema.py @ 28:db3491e1b590
Allow to customize the loading of the schema dict
| author | Franz Glasner <fzglas.hg@dom66.de> |
|---|---|
| date | Sat, 08 Jul 2023 13:51:20 +0200 |
| parents | c3a0fe8d4587 |
| children | 68286d27f27d |
comparison
equal
deleted
inserted
replaced
| 27:88ee7d1cc0bb | 28:db3491e1b590 |
|---|---|
| 138 | 138 |
| 139 def test_root_context(self): | 139 def test_root_context(self): |
| 140 obj = object() | 140 obj = object() |
| 141 schema = object() | 141 schema = object() |
| 142 settings = data_schema.ValidationSettings( | 142 settings = data_schema.ValidationSettings( |
| 143 skip_keys=[], break_on_keynames_problems=True) | 143 skip_keys=[], break_on_keynames_problems=True, |
| 144 schema_loader=data_schema.default_schema_loader) | |
| 144 ctx = data_schema.Context( | 145 ctx = data_schema.Context( |
| 145 None, root_object=obj, root_schema=schema, settings=settings) | 146 None, root_object=obj, root_schema=schema, settings=settings) |
| 146 self.assertEqual("<ROOT>", str(ctx)) | 147 self.assertEqual("<ROOT>", str(ctx)) |
| 147 self.assertTrue(ctx.root_object is obj) | 148 self.assertTrue(ctx.root_object is obj) |
| 148 self.assertTrue(ctx.root_schema is schema) | 149 self.assertTrue(ctx.root_schema is schema) |
| 150 | 151 |
| 151 def test_parent_of_root_context(self): | 152 def test_parent_of_root_context(self): |
| 152 obj = object() | 153 obj = object() |
| 153 schema = object() | 154 schema = object() |
| 154 settings = data_schema.ValidationSettings( | 155 settings = data_schema.ValidationSettings( |
| 155 skip_keys=[], break_on_keynames_problems=True) | 156 skip_keys=[], break_on_keynames_problems=True, |
| 157 schema_loader=data_schema.default_schema_loader) | |
| 156 ctx = data_schema.Context( | 158 ctx = data_schema.Context( |
| 157 None, root_object=obj, root_schema=schema, settings=settings) | 159 None, root_object=obj, root_schema=schema, settings=settings) |
| 158 self.assertTrue(ctx.is_root) | 160 self.assertTrue(ctx.is_root) |
| 159 self.assertIsNone(ctx.parent) | 161 self.assertIsNone(ctx.parent) |
| 160 try: | 162 try: |
| 165 self.fail( | 167 self.fail( |
| 166 "Context.safe_parent was expected to raise for a root context") | 168 "Context.safe_parent was expected to raise for a root context") |
| 167 | 169 |
| 168 def test_root_context_init_root_empty(self): | 170 def test_root_context_init_root_empty(self): |
| 169 settings = data_schema.ValidationSettings( | 171 settings = data_schema.ValidationSettings( |
| 170 skip_keys=[], break_on_keynames_problems=True) | 172 skip_keys=[], break_on_keynames_problems=True, |
| 173 schema_loader=data_schema.default_schema_loader) | |
| 171 self.assertRaises( | 174 self.assertRaises( |
| 172 TypeError, | 175 TypeError, |
| 173 data_schema.Context, None, key="key", settings=settings) | 176 data_schema.Context, None, key="key", settings=settings) |
| 174 self.assertRaises( | 177 self.assertRaises( |
| 175 TypeError, | 178 TypeError, |
| 176 data_schema.Context, None, index="key", settings=settings) | 179 data_schema.Context, None, index="key", settings=settings) |
| 177 | 180 |
| 178 def test_root_context_init_only_one_of_key_index(self): | 181 def test_root_context_init_only_one_of_key_index(self): |
| 179 settings = data_schema.ValidationSettings( | 182 settings = data_schema.ValidationSettings( |
| 180 skip_keys=[], break_on_keynames_problems=True) | 183 skip_keys=[], break_on_keynames_problems=True, |
| 184 schema_loader=data_schema.default_schema_loader) | |
| 181 root = data_schema.Context(None, settings=settings) | 185 root = data_schema.Context(None, settings=settings) |
| 182 self.assertRaises( | 186 self.assertRaises( |
| 183 ValueError, | 187 ValueError, |
| 184 data_schema.Context, root, key="key", index="index") | 188 data_schema.Context, root, key="key", index="index") |
| 185 | 189 |
| 186 def test_root_context_init_exactly_one(self): | 190 def test_root_context_init_exactly_one(self): |
| 187 settings = data_schema.ValidationSettings( | 191 settings = data_schema.ValidationSettings( |
| 188 skip_keys=[], break_on_keynames_problems=True) | 192 skip_keys=[], break_on_keynames_problems=True, |
| 193 schema_loader=data_schema.default_schema_loader) | |
| 189 root = data_schema.Context(None, settings=settings) | 194 root = data_schema.Context(None, settings=settings) |
| 190 self.assertRaises(TypeError, data_schema.Context, root) | 195 self.assertRaises(TypeError, data_schema.Context, root) |
| 191 | 196 |
| 192 def test_nonroot_rootobj_schema(self): | 197 def test_nonroot_rootobj_schema(self): |
| 193 settings = data_schema.ValidationSettings( | 198 settings = data_schema.ValidationSettings( |
| 194 skip_keys=[], break_on_keynames_problems=True) | 199 skip_keys=[], break_on_keynames_problems=True, |
| 200 schema_loader=data_schema.default_schema_loader) | |
| 195 obj = object() | 201 obj = object() |
| 196 schema = object() | 202 schema = object() |
| 197 ctx = data_schema.Context( | 203 ctx = data_schema.Context( |
| 198 None, root_object=obj, root_schema=schema, settings=settings) | 204 None, root_object=obj, root_schema=schema, settings=settings) |
| 199 self.assertEqual("<ROOT>", str(ctx)) | 205 self.assertEqual("<ROOT>", str(ctx)) |
| 205 self.assertRaises(TypeError, data_schema.Context, ctx, index=0, | 211 self.assertRaises(TypeError, data_schema.Context, ctx, index=0, |
| 206 root_schema=object()) | 212 root_schema=object()) |
| 207 | 213 |
| 208 def test_str(self): | 214 def test_str(self): |
| 209 settings = data_schema.ValidationSettings( | 215 settings = data_schema.ValidationSettings( |
| 210 skip_keys=[], break_on_keynames_problems=True) | 216 skip_keys=[], break_on_keynames_problems=True, |
| 217 schema_loader=data_schema.default_schema_loader) | |
| 211 root = data_schema.Context(None, settings=settings) | 218 root = data_schema.Context(None, settings=settings) |
| 212 ctx1 = data_schema.Context(root, key="key1") | 219 ctx1 = data_schema.Context(root, key="key1") |
| 213 ctx2 = data_schema.Context(ctx1, index=2) | 220 ctx2 = data_schema.Context(ctx1, index=2) |
| 214 ctx3 = data_schema.Context(ctx2, key="key3") | 221 ctx3 = data_schema.Context(ctx2, key="key3") |
| 215 self.assertEqual("key1 / INDEX:2 / key3", str(ctx3)) | 222 self.assertEqual("key1 / INDEX:2 / key3", str(ctx3)) |
| 216 | 223 |
| 217 def test_repr(self): | 224 def test_repr(self): |
| 218 settings = data_schema.ValidationSettings( | 225 settings = data_schema.ValidationSettings( |
| 219 skip_keys=[], break_on_keynames_problems=True) | 226 skip_keys=[], break_on_keynames_problems=True, |
| 227 schema_loader=data_schema.default_schema_loader) | |
| 220 root = data_schema.Context(None, settings=settings) | 228 root = data_schema.Context(None, settings=settings) |
| 221 ctx1 = data_schema.Context(root, key="key1") | 229 ctx1 = data_schema.Context(root, key="key1") |
| 222 ctx2 = data_schema.Context(ctx1, index=2) | 230 ctx2 = data_schema.Context(ctx1, index=2) |
| 223 ctx3 = data_schema.Context(ctx2, key="key3") | 231 ctx3 = data_schema.Context(ctx2, key="key3") |
| 224 self.assertEqual("<Context path=`key1 / INDEX:2 / key3'>", repr(ctx3)) | 232 self.assertEqual("<Context path=`key1 / INDEX:2 / key3'>", repr(ctx3)) |
| 225 | 233 |
| 226 def test_root(self): | 234 def test_root(self): |
| 227 settings = data_schema.ValidationSettings( | 235 settings = data_schema.ValidationSettings( |
| 228 skip_keys=[], break_on_keynames_problems=True) | 236 skip_keys=[], break_on_keynames_problems=True, |
| 237 schema_loader=data_schema.default_schema_loader) | |
| 229 root = data_schema.Context(None, settings=settings) | 238 root = data_schema.Context(None, settings=settings) |
| 230 self.assertTrue(root.is_root) | 239 self.assertTrue(root.is_root) |
| 231 self.assertTrue(root is root.root) | 240 self.assertTrue(root is root.root) |
| 232 self.assertTrue(root.settings is settings) | 241 self.assertTrue(root.settings is settings) |
| 233 ctx1 = data_schema.Context(root, key="key1") | 242 ctx1 = data_schema.Context(root, key="key1") |
| 242 self.assertTrue(ctx3.root is root) | 251 self.assertTrue(ctx3.root is root) |
| 243 self.assertTrue(ctx3.settings is settings) | 252 self.assertTrue(ctx3.settings is settings) |
| 244 | 253 |
| 245 def test_extra_settings_in_between(self): | 254 def test_extra_settings_in_between(self): |
| 246 settings = data_schema.ValidationSettings( | 255 settings = data_schema.ValidationSettings( |
| 247 skip_keys=[], break_on_keynames_problems=True) | 256 skip_keys=[], break_on_keynames_problems=True, |
| 257 schema_loader=data_schema.default_schema_loader) | |
| 248 settings2 = data_schema.ValidationSettings( | 258 settings2 = data_schema.ValidationSettings( |
| 249 skip_keys=[], break_on_keynames_problems=True) | 259 skip_keys=[], break_on_keynames_problems=True, |
| 260 schema_loader=data_schema.default_schema_loader) | |
| 250 root = data_schema.Context(None, settings=settings) | 261 root = data_schema.Context(None, settings=settings) |
| 251 self.assertTrue(root.is_root) | 262 self.assertTrue(root.is_root) |
| 252 self.assertTrue(root is root.root) | 263 self.assertTrue(root is root.root) |
| 253 self.assertTrue(root.settings is settings) | 264 self.assertTrue(root.settings is settings) |
| 254 ctx1 = data_schema.Context(root, key="key1") | 265 ctx1 = data_schema.Context(root, key="key1") |
| 263 self.assertTrue(ctx3.root is root) | 274 self.assertTrue(ctx3.root is root) |
| 264 self.assertTrue(ctx3.settings is settings2) | 275 self.assertTrue(ctx3.settings is settings2) |
| 265 | 276 |
| 266 def test_key_xor_index(self): | 277 def test_key_xor_index(self): |
| 267 settings = data_schema.ValidationSettings( | 278 settings = data_schema.ValidationSettings( |
| 268 skip_keys=[], break_on_keynames_problems=True) | 279 skip_keys=[], break_on_keynames_problems=True, |
| 280 schema_loader=data_schema.default_schema_loader) | |
| 269 root = data_schema.Context(None, settings=settings) | 281 root = data_schema.Context(None, settings=settings) |
| 270 self.assertRaises( | 282 self.assertRaises( |
| 271 ValueError, | 283 ValueError, |
| 272 data_schema.Context, | 284 data_schema.Context, |
| 273 root, | 285 root, |
| 274 index=0, | 286 index=0, |
| 275 key="huhu") | 287 key="huhu") |
| 276 | 288 |
| 277 def test_keyindex_requires_key(self): | 289 def test_keyindex_requires_key(self): |
| 278 settings = data_schema.ValidationSettings( | 290 settings = data_schema.ValidationSettings( |
| 279 skip_keys=[], break_on_keynames_problems=True) | 291 skip_keys=[], break_on_keynames_problems=True, |
| 292 schema_loader=data_schema.default_schema_loader) | |
| 280 self.assertRaises( | 293 self.assertRaises( |
| 281 ValueError, | 294 ValueError, |
| 282 data_schema.Context, | 295 data_schema.Context, |
| 283 None, | 296 None, |
| 284 key_index=0, | 297 key_index=0, |
| 1231 self.assertRaises( | 1244 self.assertRaises( |
| 1232 data_schema.SchemaError, | 1245 data_schema.SchemaError, |
| 1233 data_schema.process_schema_conditionals, | 1246 data_schema.process_schema_conditionals, |
| 1234 schema, | 1247 schema, |
| 1235 self._ctx) | 1248 self._ctx) |
| 1249 | |
| 1250 def test_raise_no_schema_loader_available(self): | |
| 1251 settings = data_schema.ValidationSettings( | |
| 1252 skip_keys=[], break_on_keynames_problems=True, | |
| 1253 schema_loader=None) | |
| 1254 schema = data_schema._Schema( | |
| 1255 None, True, {"$ref": "schema:file:/tmp/xxx#/"}) | |
| 1256 ctx = data_schema.Context( | |
| 1257 None, root_schema=schema, settings=settings) | |
| 1258 self.assertRaises( | |
| 1259 data_schema.SchemaError, | |
| 1260 data_schema.process_schema_references, | |
| 1261 schema, | |
| 1262 ctx) | |
| 1263 | |
| 1264 def test_raise_schema_loader_available_but_invalid_basedir(self): | |
| 1265 settings = data_schema.ValidationSettings( | |
| 1266 skip_keys=[], break_on_keynames_problems=True, | |
| 1267 schema_loader=data_schema.default_schema_loader) | |
| 1268 schema = data_schema._Schema( | |
| 1269 None, True, {"$ref": "schema:file:/tmp/xxx#/"}) | |
| 1270 ctx = data_schema.Context( | |
| 1271 None, root_schema=schema, settings=settings) | |
| 1272 self.assertRaises( | |
| 1273 TypeError, # no basedir given | |
| 1274 data_schema.process_schema_references, | |
| 1275 schema, | |
| 1276 ctx) | |
| 1236 | 1277 |
| 1237 def test_raise_if_scheme_ref_is_not_the_single_key(self): | 1278 def test_raise_if_scheme_ref_is_not_the_single_key(self): |
| 1238 schema = data_schema._Schema( | 1279 schema = data_schema._Schema( |
| 1239 None, True, {"$ref": "schema:#/", | 1280 None, True, {"$ref": "schema:#/", |
| 1240 "type": None | 1281 "type": None |
