karrio-server-graph 2025.5rc1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. karrio/server/graph/__init__.py +1 -0
  2. karrio/server/graph/admin.py +3 -0
  3. karrio/server/graph/apps.py +5 -0
  4. karrio/server/graph/forms.py +59 -0
  5. karrio/server/graph/management/__init__.py +0 -0
  6. karrio/server/graph/management/commands/__init__.py +0 -0
  7. karrio/server/graph/management/commands/export_schema.py +9 -0
  8. karrio/server/graph/migrations/0001_initial.py +37 -0
  9. karrio/server/graph/migrations/0002_auto_20210512_1353.py +22 -0
  10. karrio/server/graph/migrations/__init__.py +0 -0
  11. karrio/server/graph/models.py +44 -0
  12. karrio/server/graph/schema.py +46 -0
  13. karrio/server/graph/schemas/__init__.py +2 -0
  14. karrio/server/graph/schemas/base/__init__.py +367 -0
  15. karrio/server/graph/schemas/base/inputs.py +582 -0
  16. karrio/server/graph/schemas/base/mutations.py +871 -0
  17. karrio/server/graph/schemas/base/types.py +1365 -0
  18. karrio/server/graph/serializers.py +388 -0
  19. karrio/server/graph/templates/graphql/graphiql.html +142 -0
  20. karrio/server/graph/templates/karrio/email_change_email.html +13 -0
  21. karrio/server/graph/templates/karrio/email_change_email.txt +13 -0
  22. karrio/server/graph/templates/karrio/password_reset_email.html +14 -0
  23. karrio/server/graph/tests/__init__.py +9 -0
  24. karrio/server/graph/tests/base.py +124 -0
  25. karrio/server/graph/tests/test_carrier_connections.py +219 -0
  26. karrio/server/graph/tests/test_metafield.py +404 -0
  27. karrio/server/graph/tests/test_rate_sheets.py +348 -0
  28. karrio/server/graph/tests/test_templates.py +677 -0
  29. karrio/server/graph/tests/test_user_info.py +71 -0
  30. karrio/server/graph/urls.py +10 -0
  31. karrio/server/graph/utils.py +304 -0
  32. karrio/server/graph/views.py +93 -0
  33. karrio/server/settings/graph.py +7 -0
  34. karrio_server_graph-2025.5rc1.dist-info/METADATA +29 -0
  35. karrio_server_graph-2025.5rc1.dist-info/RECORD +37 -0
  36. karrio_server_graph-2025.5rc1.dist-info/WHEEL +5 -0
  37. karrio_server_graph-2025.5rc1.dist-info/top_level.txt +2 -0
@@ -0,0 +1,348 @@
1
+ import karrio.lib as lib
2
+ from unittest.mock import ANY
3
+ from karrio.server.graph.tests.base import GraphTestCase
4
+ import karrio.server.providers.models as providers
5
+
6
+
7
+ class TestRateSheets(GraphTestCase):
8
+ def setUp(self):
9
+ super().setUp()
10
+
11
+ # Create a test rate sheet
12
+ self.rate_sheet = providers.RateSheet.objects.create(
13
+ name="Test Rate Sheet",
14
+ carrier_name="ups",
15
+ slug="test_rate_sheet",
16
+ created_by=self.user,
17
+ )
18
+
19
+ # Create a test service
20
+ self.service = providers.ServiceLevel.objects.create(
21
+ service_name="UPS Standard",
22
+ service_code="ups_standard",
23
+ carrier_service_code="11",
24
+ currency="USD",
25
+ active=True,
26
+ zones=[
27
+ {
28
+ "rate": 10.00,
29
+ "label": "Zone 1",
30
+ "cities": ["New York", "Los Angeles"],
31
+ }
32
+ ],
33
+ created_by=self.user,
34
+ )
35
+ self.rate_sheet.services.add(self.service)
36
+
37
+ def test_query_rate_sheets(self):
38
+ response = self.query(
39
+ """
40
+ query get_rate_sheets {
41
+ rate_sheets {
42
+ edges {
43
+ node {
44
+ id
45
+ name
46
+ carrier_name
47
+ slug
48
+ services {
49
+ id
50
+ service_name
51
+ service_code
52
+ carrier_service_code
53
+ active
54
+ currency
55
+ zones {
56
+ rate
57
+ label
58
+ cities
59
+ postal_codes
60
+ country_codes
61
+ }
62
+ }
63
+ }
64
+ }
65
+ }
66
+ }
67
+ """,
68
+ operation_name="get_rate_sheets",
69
+ )
70
+ response_data = response.data
71
+
72
+ self.assertResponseNoErrors(response)
73
+ self.assertDictEqual(
74
+ lib.to_dict(response_data),
75
+ RATE_SHEETS_RESPONSE,
76
+ )
77
+
78
+ def test_create_rate_sheet(self):
79
+ response = self.query(
80
+ """
81
+ mutation create_rate_sheet($data: CreateRateSheetMutationInput!) {
82
+ create_rate_sheet(input: $data) {
83
+ rate_sheet {
84
+ id
85
+ name
86
+ carrier_name
87
+ services {
88
+ id
89
+ service_name
90
+ service_code
91
+ currency
92
+ zones {
93
+ rate
94
+ label
95
+ postal_codes
96
+ }
97
+ }
98
+ }
99
+ }
100
+ }
101
+ """,
102
+ operation_name="create_rate_sheet",
103
+ variables=CREATE_RATE_SHEET_DATA,
104
+ )
105
+ response_data = response.data
106
+
107
+ self.assertResponseNoErrors(response)
108
+ self.assertDictEqual(response_data, CREATE_RATE_SHEET_RESPONSE)
109
+
110
+ def test_update_rate_sheet(self):
111
+ response = self.query(
112
+ """
113
+ mutation update_rate_sheet($data: UpdateRateSheetMutationInput!) {
114
+ update_rate_sheet(input: $data) {
115
+ rate_sheet {
116
+ id
117
+ name
118
+ services {
119
+ id
120
+ service_name
121
+ zones {
122
+ rate
123
+ label
124
+ country_codes
125
+ }
126
+ }
127
+ }
128
+ }
129
+ }
130
+ """,
131
+ operation_name="update_rate_sheet",
132
+ variables={
133
+ "data": {
134
+ "id": self.rate_sheet.id,
135
+ "name": "Updated Rate Sheet",
136
+ "services": [
137
+ {
138
+ "id": self.service.id,
139
+ "service_name": "Updated Service",
140
+ "zones": [
141
+ {
142
+ "rate": 20.0,
143
+ "label": "Updated Zone",
144
+ "country_codes": ["US", "CA"],
145
+ }
146
+ ],
147
+ }
148
+ ],
149
+ },
150
+ },
151
+ )
152
+ response_data = response.data
153
+
154
+ self.assertResponseNoErrors(response)
155
+ self.assertDictEqual(
156
+ lib.to_dict(response_data),
157
+ UPDATE_RATE_SHEET_RESPONSE,
158
+ )
159
+
160
+ def test_update_service_zone(self):
161
+ response = self.query(
162
+ """
163
+ mutation update_zone($data: UpdateServiceZoneMutationInput!) {
164
+ update_service_zone(input: $data) {
165
+ rate_sheet {
166
+ id
167
+ services {
168
+ id
169
+ zones {
170
+ rate
171
+ label
172
+ country_codes
173
+ }
174
+ }
175
+ }
176
+ }
177
+ }
178
+ """,
179
+ operation_name="update_zone",
180
+ variables={
181
+ "data": {
182
+ "id": self.rate_sheet.id,
183
+ "service_id": self.service.id,
184
+ **UPDATE_ZONE_DATA["data"],
185
+ },
186
+ },
187
+ )
188
+ response_data = response.data
189
+
190
+ self.assertResponseNoErrors(response)
191
+ self.assertDictEqual(
192
+ lib.to_dict(response_data),
193
+ UPDATE_ZONE_RESPONSE,
194
+ )
195
+
196
+
197
+ RATE_SHEETS_RESPONSE = {
198
+ "data": {
199
+ "rate_sheets": {
200
+ "edges": [
201
+ {
202
+ "node": {
203
+ "carrier_name": "ups",
204
+ "id": ANY,
205
+ "name": "Test Rate Sheet",
206
+ "services": [
207
+ {
208
+ "active": True,
209
+ "carrier_service_code": "11",
210
+ "currency": "USD",
211
+ "id": ANY,
212
+ "service_code": "ups_standard",
213
+ "service_name": "UPS Standard",
214
+ "zones": [
215
+ {
216
+ "cities": ["New York", "Los Angeles"],
217
+ "label": "Zone 1",
218
+ "rate": 10.0,
219
+ }
220
+ ],
221
+ }
222
+ ],
223
+ "slug": "test_rate_sheet",
224
+ }
225
+ }
226
+ ]
227
+ }
228
+ }
229
+ }
230
+
231
+ CREATE_RATE_SHEET_DATA = {
232
+ "data": {
233
+ "name": "New Rate Sheet",
234
+ "carrier_name": "fedex",
235
+ "services": [
236
+ {
237
+ "service_name": "FedEx Ground",
238
+ "service_code": "fedex_ground",
239
+ "carrier_service_code": "FEDEX_GROUND",
240
+ "currency": "USD",
241
+ "zones": [
242
+ {
243
+ "rate": 15.0,
244
+ "label": "Zone A",
245
+ "postal_codes": ["12345", "67890"],
246
+ }
247
+ ],
248
+ }
249
+ ],
250
+ }
251
+ }
252
+
253
+ CREATE_RATE_SHEET_RESPONSE = {
254
+ "data": {
255
+ "create_rate_sheet": {
256
+ "rate_sheet": {
257
+ "id": ANY,
258
+ "name": "New Rate Sheet",
259
+ "carrier_name": "fedex",
260
+ "services": [
261
+ {
262
+ "id": ANY,
263
+ "service_name": "FedEx Ground",
264
+ "service_code": "fedex_ground",
265
+ "currency": "USD",
266
+ "zones": [
267
+ {
268
+ "rate": 15.0,
269
+ "label": "Zone A",
270
+ "postal_codes": ["12345", "67890"],
271
+ }
272
+ ],
273
+ }
274
+ ],
275
+ }
276
+ }
277
+ }
278
+ }
279
+
280
+ UPDATE_RATE_SHEET_DATA = {
281
+ "data": {
282
+ "name": "Updated Rate Sheet",
283
+ "services": [
284
+ {
285
+ "id": ANY, # Will be replaced with actual service ID in test
286
+ "service_name": "Updated Service",
287
+ "zones": [
288
+ {
289
+ "rate": 20.0,
290
+ "label": "Updated Zone",
291
+ "country_codes": ["US", "CA"],
292
+ }
293
+ ],
294
+ }
295
+ ],
296
+ }
297
+ }
298
+
299
+ UPDATE_RATE_SHEET_RESPONSE = {
300
+ "data": {
301
+ "update_rate_sheet": {
302
+ "rate_sheet": {
303
+ "id": ANY,
304
+ "name": "Updated Rate Sheet",
305
+ "services": [
306
+ {
307
+ "id": ANY,
308
+ "service_name": "UPS Standard",
309
+ "zones": [{"label": "Zone 1", "rate": 10.0}],
310
+ }
311
+ ],
312
+ }
313
+ }
314
+ }
315
+ }
316
+
317
+ UPDATE_ZONE_DATA = {
318
+ "data": {
319
+ "zone_index": 0,
320
+ "zone": {
321
+ "rate": 25.0,
322
+ "label": "Modified Zone",
323
+ "country_codes": ["MX"],
324
+ },
325
+ }
326
+ }
327
+
328
+ UPDATE_ZONE_RESPONSE = {
329
+ "data": {
330
+ "update_service_zone": {
331
+ "rate_sheet": {
332
+ "id": ANY,
333
+ "services": [
334
+ {
335
+ "id": ANY,
336
+ "zones": [
337
+ {
338
+ "rate": 25.0,
339
+ "label": "Modified Zone",
340
+ "country_codes": ["MX"],
341
+ }
342
+ ],
343
+ }
344
+ ],
345
+ }
346
+ }
347
+ }
348
+ }