File: test_custom.py

package info (click to toggle)
python-genson 1.3.0-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 344 kB
  • sloc: python: 1,385; makefile: 16
file content (74 lines) | stat: -rw-r--r-- 1,983 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
from genson import SchemaBuilder
from genson.schema.strategies import SchemaStrategy, Number
from . import base


class MaxTenStrategy(Number):
    KEYWORDS = tuple(list(Number.KEYWORDS) + ['maximum'])

    def to_schema(self):
        schema = super().to_schema()
        schema['maximum'] = 10
        return schema


class FalseStrategy(SchemaStrategy):
    KEYWORDS = tuple(list(SchemaStrategy.KEYWORDS) + ['const'])

    @classmethod
    def match_schema(self, schema):
        return True

    @classmethod
    def match_object(self, obj):
        return True

    def to_schema(self):
        schema = super().to_schema()
        schema['type'] = 'boolean'
        schema['const'] = False
        return schema


class MaxTenSchemaBuilder(SchemaBuilder):
    EXTRA_STRATEGIES = (MaxTenStrategy,)


class FalseSchemaBuilder(SchemaBuilder):
    STRATEGIES = (FalseStrategy,)


class TestExtraStrategies(base.SchemaNodeTestCase):
    CLASS = MaxTenSchemaBuilder

    def test_add_object(self):
        self.add_object(5)
        self.assertResult({
            '$schema': 'http://json-schema.org/schema#',
            'type': 'integer',
            'maximum': 10})

    def test_add_schema(self):
        self.add_schema({'type': 'integer'})
        self.assertResult({
            '$schema': 'http://json-schema.org/schema#',
            'type': 'integer',
            'maximum': 10})


class TestClobberStrategies(base.SchemaNodeTestCase):
    CLASS = FalseSchemaBuilder

    def test_add_object(self):
        self.add_object("Any Norwegian Jarlsberger?")
        self.assertResult({
            '$schema': 'http://json-schema.org/schema#',
            'type': 'boolean',
            'const': False}, enforceUserContract=False)

    def test_add_schema(self):
        self.add_schema({'type': 'string'})
        self.assertResult({
            '$schema': 'http://json-schema.org/schema#',
            'type': 'boolean',
            'const': False}, enforceUserContract=False)