Coverage for databases/sync_tests/types/test_string.py: 97%
54 statements
« prev ^ index » next coverage.py v7.2.7, created at 2024-08-27 18:25 +0000
« prev ^ index » next coverage.py v7.2.7, created at 2024-08-27 18:25 +0000
1from dirty_equals import IsPartialDict
3from prisma import Prisma
4from prisma.models import Types
5from prisma._compat import PYDANTIC_V2, model_json_schema
8def test_filtering(client: Prisma) -> None:
9 """Finding records by a String value"""
10 start = ord('a')
11 with client.batch_() as batcher:
12 for i in range(10):
13 batcher.types.create({'string': chr(start + i)})
15 total = client.types.count(where={'string': {'gte': 'e'}})
16 assert total == 6
18 found = client.types.find_first(
19 where={
20 'string': {
21 'equals': 'a',
22 },
23 },
24 )
25 assert found is not None
26 assert found.string == 'a'
28 results = client.types.find_many(
29 where={
30 'string': {
31 'in': ['a', 'd', 'f', 'z'],
32 },
33 },
34 order={
35 'string': 'asc',
36 },
37 )
38 assert len(results) == 3
39 assert results[0].string == 'a'
40 assert results[1].string == 'd'
41 assert results[2].string == 'f'
43 results = client.types.find_many(
44 where={
45 'string': {
46 'not_in': ['a', 'b', 'c', 'd', 'f', 'g', 'h', 'i'],
47 },
48 },
49 order={
50 'string': 'asc',
51 },
52 )
53 assert len(results) == 2
54 assert results[0].string == 'e'
55 assert results[1].string == 'j'
57 found = client.types.find_first(
58 where={
59 'string': {
60 'lt': 'g',
61 },
62 },
63 order={
64 'string': 'desc',
65 },
66 )
67 assert found is not None
68 assert found.string == 'f'
70 found = client.types.find_first(
71 where={
72 'string': {
73 'lte': 'f',
74 },
75 },
76 order={
77 'string': 'desc',
78 },
79 )
80 assert found is not None
81 assert found.string == 'f'
83 found = client.types.find_first(
84 where={
85 'string': {
86 'gt': 'f',
87 },
88 },
89 order={
90 'string': 'asc',
91 },
92 )
93 assert found is not None
94 assert found.string == 'g'
96 found = client.types.find_first(
97 where={
98 'string': {
99 'gte': 'g',
100 },
101 },
102 order={
103 'string': 'asc',
104 },
105 )
106 assert found is not None
107 assert found.string == 'g'
109 found = client.types.find_first(
110 where={
111 'string': {
112 'not': 'a',
113 },
114 },
115 order={'string': 'asc'},
116 )
117 assert found is not None
118 assert found.string == 'b'
121def test_filtering_nulls(client: Prisma) -> None:
122 """None is a valid filter for nullable String fields"""
123 client.types.create(
124 {
125 'string': 'a',
126 'optional_string': None,
127 },
128 )
129 client.types.create(
130 {
131 'string': 'b',
132 'optional_string': 'null',
133 },
134 )
135 client.types.create(
136 {
137 'string': 'c',
138 'optional_string': 'robert@craigie.dev',
139 },
140 )
142 found = client.types.find_first(
143 where={
144 'NOT': [
145 {
146 'optional_string': None,
147 },
148 ],
149 },
150 order={
151 'string': 'asc',
152 },
153 )
154 assert found is not None
155 assert found.string == 'b'
156 assert found.optional_string == 'null'
158 count = client.types.count(
159 where={
160 'optional_string': None,
161 },
162 )
163 assert count == 1
165 count = client.types.count(
166 where={
167 'NOT': [
168 {
169 'optional_string': None,
170 },
171 ],
172 },
173 )
174 assert count == 2
176 # TODO: test passing 'null'
179def test_json_schema() -> None:
180 """Ensure a JSON Schema definition can be created"""
181 if PYDANTIC_V2: 181 ↛ 198line 181 didn't jump to line 198, because the condition on line 181 was never false
182 assert model_json_schema(Types) == IsPartialDict(
183 properties=IsPartialDict(
184 {
185 'string': {
186 'title': 'String',
187 'type': 'string',
188 },
189 'optional_string': {
190 'title': 'Optional String',
191 'anyOf': [{'type': 'string'}, {'type': 'null'}],
192 'default': None,
193 },
194 }
195 )
196 )
197 else:
198 assert model_json_schema(Types) == IsPartialDict(
199 properties=IsPartialDict(
200 {
201 'string': {
202 'title': 'String',
203 'type': 'string',
204 },
205 'optional_string': {
206 'title': 'Optional String',
207 'type': 'string',
208 },
209 }
210 )
211 )