@scalar/snippetz 0.3.0 → 0.3.1

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 (70) hide show
  1. package/dist/clients.d.ts.map +1 -1
  2. package/dist/clients.js +2 -1
  3. package/dist/clients.js.map +2 -2
  4. package/dist/plugins/python/httpx/async.d.ts +6 -0
  5. package/dist/plugins/python/httpx/async.d.ts.map +1 -0
  6. package/dist/plugins/python/httpx/async.js +16 -0
  7. package/dist/plugins/python/httpx/async.js.map +7 -0
  8. package/dist/plugins/python/httpx/index.d.ts +3 -0
  9. package/dist/plugins/python/httpx/index.d.ts.map +1 -0
  10. package/dist/plugins/python/httpx/index.js +3 -0
  11. package/dist/plugins/python/httpx/index.js.map +7 -0
  12. package/dist/plugins/python/httpx/sync.d.ts +6 -0
  13. package/dist/plugins/python/httpx/sync.d.ts.map +1 -0
  14. package/dist/plugins/python/httpx/sync.js +13 -0
  15. package/dist/plugins/python/httpx/sync.js.map +7 -0
  16. package/dist/plugins/python/requests/requests.d.ts.map +1 -1
  17. package/dist/plugins/python/requests/requests.js +2 -93
  18. package/dist/plugins/python/requests/requests.js.map +3 -3
  19. package/dist/plugins/python/requestsLike.d.ts +3 -0
  20. package/dist/plugins/python/requestsLike.d.ts.map +1 -0
  21. package/dist/plugins/python/requestsLike.js +120 -0
  22. package/dist/plugins/python/requestsLike.js.map +7 -0
  23. package/dist/snippetz.d.ts +1 -1
  24. package/package.json +8 -3
  25. package/dist/plugins/c/libcurl/libcurl.test.js +0 -208
  26. package/dist/plugins/c/libcurl/libcurl.test.js.map +0 -7
  27. package/dist/plugins/clojure/clj_http/clj_http.test.js +0 -151
  28. package/dist/plugins/clojure/clj_http/clj_http.test.js.map +0 -7
  29. package/dist/plugins/dart/http/http.test.js +0 -550
  30. package/dist/plugins/dart/http/http.test.js.map +0 -7
  31. package/dist/plugins/go/native/native.test.js +0 -366
  32. package/dist/plugins/go/native/native.test.js.map +0 -7
  33. package/dist/plugins/http/http11/http11.test.js +0 -175
  34. package/dist/plugins/http/http11/http11.test.js.map +0 -7
  35. package/dist/plugins/java/okhttp/okhttp.test.js +0 -164
  36. package/dist/plugins/java/okhttp/okhttp.test.js.map +0 -7
  37. package/dist/plugins/js/fetch/fetch.test.js +0 -214
  38. package/dist/plugins/js/fetch/fetch.test.js.map +0 -7
  39. package/dist/plugins/js/ofetch/ofetch.test.js +0 -126
  40. package/dist/plugins/js/ofetch/ofetch.test.js.map +0 -7
  41. package/dist/plugins/kotlin/okhttp/okhttp.test.js +0 -164
  42. package/dist/plugins/kotlin/okhttp/okhttp.test.js.map +0 -7
  43. package/dist/plugins/node/fetch/fetch.test.js +0 -200
  44. package/dist/plugins/node/fetch/fetch.test.js.map +0 -7
  45. package/dist/plugins/node/ofetch/ofetch.test.js +0 -126
  46. package/dist/plugins/node/ofetch/ofetch.test.js.map +0 -7
  47. package/dist/plugins/node/undici/undici.test.js +0 -133
  48. package/dist/plugins/node/undici/undici.test.js.map +0 -7
  49. package/dist/plugins/php/curl/curl.test.js +0 -564
  50. package/dist/plugins/php/curl/curl.test.js.map +0 -7
  51. package/dist/plugins/php/guzzle/guzzle.test.js +0 -546
  52. package/dist/plugins/php/guzzle/guzzle.test.js.map +0 -7
  53. package/dist/plugins/python/requests/requests.test.js +0 -419
  54. package/dist/plugins/python/requests/requests.test.js.map +0 -7
  55. package/dist/plugins/ruby/native/native.test.js +0 -240
  56. package/dist/plugins/ruby/native/native.test.js.map +0 -7
  57. package/dist/plugins/shell/curl/curl.test.js +0 -427
  58. package/dist/plugins/shell/curl/curl.test.js.map +0 -7
  59. package/dist/plugins/shell/httpie/httpie.test.js +0 -113
  60. package/dist/plugins/shell/httpie/httpie.test.js.map +0 -7
  61. package/dist/plugins/shell/wget/wget.test.js +0 -143
  62. package/dist/plugins/shell/wget/wget.test.js.map +0 -7
  63. package/dist/plugins/swift/nsurlsession/nsurlsession.test.js +0 -344
  64. package/dist/plugins/swift/nsurlsession/nsurlsession.test.js.map +0 -7
  65. package/dist/snippetz.test.js +0 -79
  66. package/dist/snippetz.test.js.map +0 -7
  67. package/dist/utils/convertWithHttpSnippetLite.test.js +0 -106
  68. package/dist/utils/convertWithHttpSnippetLite.test.js.map +0 -7
  69. package/dist/utils/create-search-params.test.js +0 -49
  70. package/dist/utils/create-search-params.test.js.map +0 -7
@@ -1,419 +0,0 @@
1
- import { describe, expect, it } from "vitest";
2
- import { pythonRequests } from "./requests.js";
3
- describe("pythonRequests", () => {
4
- it("returns a basic request", () => {
5
- const result = pythonRequests.generate({
6
- url: "https://example.com"
7
- });
8
- expect(result).toBe('requests.get("https://example.com")');
9
- });
10
- it("returns a POST request", () => {
11
- const result = pythonRequests.generate({
12
- url: "https://example.com",
13
- method: "post"
14
- });
15
- expect(result).toBe('requests.post("https://example.com")');
16
- });
17
- it("has headers", () => {
18
- const result = pythonRequests.generate({
19
- url: "https://example.com",
20
- headers: [
21
- {
22
- name: "Content-Type",
23
- value: "application/json"
24
- }
25
- ]
26
- });
27
- expect(result).toBe(`requests.get("https://example.com",
28
- headers={
29
- "Content-Type": "application/json"
30
- }
31
- )`);
32
- });
33
- it("doesn\u2019t add empty headers", () => {
34
- const result = pythonRequests.generate({
35
- url: "https://example.com",
36
- headers: []
37
- });
38
- expect(result).toBe('requests.get("https://example.com")');
39
- });
40
- it("has JSON body", () => {
41
- const result = pythonRequests.generate({
42
- url: "https://example.com",
43
- method: "POST",
44
- headers: [
45
- {
46
- name: "Content-Type",
47
- value: "application/json"
48
- }
49
- ],
50
- postData: {
51
- mimeType: "application/json",
52
- text: JSON.stringify({
53
- hello: "world"
54
- })
55
- }
56
- });
57
- expect(result).toBe(`requests.post("https://example.com",
58
- headers={
59
- "Content-Type": "application/json"
60
- },
61
- json={
62
- "hello": "world"
63
- }
64
- )`);
65
- });
66
- it("has query string", () => {
67
- const result = pythonRequests.generate({
68
- url: "https://example.com",
69
- queryString: [
70
- {
71
- name: "foo",
72
- value: "bar"
73
- },
74
- {
75
- name: "bar",
76
- value: "foo"
77
- }
78
- ]
79
- });
80
- expect(result).toBe(`requests.get("https://example.com",
81
- params={
82
- "foo": "bar",
83
- "bar": "foo"
84
- }
85
- )`);
86
- });
87
- it("has cookies", () => {
88
- const result = pythonRequests.generate({
89
- url: "https://example.com",
90
- cookies: [
91
- {
92
- name: "foo",
93
- value: "bar"
94
- },
95
- {
96
- name: "bar",
97
- value: "foo"
98
- }
99
- ]
100
- });
101
- expect(result).toBe(`requests.get("https://example.com",
102
- cookies={
103
- "foo": "bar",
104
- "bar": "foo"
105
- }
106
- )`);
107
- });
108
- it("doesn\u2019t add empty cookies", () => {
109
- const result = pythonRequests.generate({
110
- url: "https://example.com",
111
- cookies: []
112
- });
113
- expect(result).toBe('requests.get("https://example.com")');
114
- });
115
- it("adds basic auth credentials", () => {
116
- const result = pythonRequests.generate(
117
- {
118
- url: "https://example.com"
119
- },
120
- {
121
- auth: {
122
- username: "user",
123
- password: "pass"
124
- }
125
- }
126
- );
127
- expect(result).toBe(`requests.get("https://example.com",
128
- auth=("user", "pass")
129
- )`);
130
- });
131
- it("handles multipart form data with files", () => {
132
- const result = pythonRequests.generate({
133
- url: "https://example.com",
134
- method: "POST",
135
- postData: {
136
- mimeType: "multipart/form-data",
137
- params: [
138
- {
139
- name: "file",
140
- fileName: "test.txt"
141
- },
142
- {
143
- name: "field",
144
- value: "value"
145
- }
146
- ]
147
- }
148
- });
149
- expect(result).toBe(`requests.post("https://example.com",
150
- files=[
151
- ("file", open("test.txt", "rb"))
152
- ],
153
- data={
154
- "field": "value"
155
- }
156
- )`);
157
- });
158
- it("handles multipart form data with multiple files", () => {
159
- const result = pythonRequests.generate({
160
- url: "https://example.com",
161
- method: "POST",
162
- postData: {
163
- mimeType: "multipart/form-data",
164
- params: [
165
- {
166
- name: "file",
167
- fileName: "test.txt"
168
- },
169
- {
170
- name: "file",
171
- fileName: "another.txt"
172
- }
173
- ]
174
- }
175
- });
176
- expect(result).toBe(`requests.post("https://example.com",
177
- files=[
178
- ("file", open("test.txt", "rb")),
179
- ("file", open("another.txt", "rb"))
180
- ]
181
- )`);
182
- });
183
- it("handles url-encoded form data", () => {
184
- const result = pythonRequests.generate({
185
- url: "https://example.com",
186
- method: "POST",
187
- postData: {
188
- mimeType: "application/x-www-form-urlencoded",
189
- params: [
190
- {
191
- name: "special chars!@#",
192
- value: "value"
193
- }
194
- ]
195
- }
196
- });
197
- expect(result).toBe(`requests.post("https://example.com",
198
- data={
199
- "special chars!@#": "value"
200
- }
201
- )`);
202
- });
203
- it("handles binary data flag", () => {
204
- const result = pythonRequests.generate({
205
- url: "https://example.com",
206
- method: "POST",
207
- postData: {
208
- mimeType: "application/octet-stream",
209
- text: "binary content"
210
- }
211
- });
212
- expect(result).toBe(`requests.post("https://example.com",
213
- data=b"binary content"
214
- )`);
215
- });
216
- it("handles compressed response", () => {
217
- const result = pythonRequests.generate({
218
- url: "https://example.com",
219
- headers: [
220
- {
221
- name: "Accept-Encoding",
222
- value: "gzip, deflate"
223
- }
224
- ]
225
- });
226
- expect(result).toBe(`requests.get("https://example.com",
227
- headers={
228
- "Accept-Encoding": "gzip, deflate"
229
- }
230
- )`);
231
- });
232
- it("handles special characters in URL", () => {
233
- const result = pythonRequests.generate({
234
- url: "https://example.com/path with spaces/[brackets]"
235
- });
236
- expect(result).toBe(`requests.get(
237
- "https://example.com/path with spaces/[brackets]"
238
- )`);
239
- });
240
- it("handles special characters in query parameters", () => {
241
- const result = pythonRequests.generate({
242
- url: "https://example.com",
243
- queryString: [
244
- {
245
- name: "q",
246
- value: "hello world & more"
247
- },
248
- {
249
- name: "special",
250
- value: "!@#$%^&*()"
251
- }
252
- ]
253
- });
254
- expect(result).toBe(`requests.get("https://example.com",
255
- params={
256
- "q": "hello world & more",
257
- "special": "!@#$%^&*()"
258
- }
259
- )`);
260
- });
261
- it("handles empty URL", () => {
262
- const result = pythonRequests.generate({
263
- url: ""
264
- });
265
- expect(result).toBe('requests.get("")');
266
- });
267
- it("doesn\u2019t add a line break for a short URL", () => {
268
- const result = pythonRequests.generate({
269
- url: "https://example.com"
270
- });
271
- expect(result).toBe('requests.get("https://example.com")');
272
- });
273
- it("handles extremely long URLs", () => {
274
- const result = pythonRequests.generate({
275
- url: "https://example.com/" + "a".repeat(2e3)
276
- });
277
- expect(result).toBe(`requests.get(
278
- "https://example.com/${"a".repeat(2e3)}"
279
- )`);
280
- });
281
- it("handles multiple headers with same name", () => {
282
- const result = pythonRequests.generate({
283
- url: "https://example.com",
284
- headers: [
285
- { name: "X-Custom", value: "value1" },
286
- { name: "X-Custom", value: "value2" }
287
- ]
288
- });
289
- expect(result).toBe(`requests.get("https://example.com",
290
- headers={
291
- "X-Custom": "value1"
292
- }
293
- )`);
294
- });
295
- it("handles headers with empty values", () => {
296
- const result = pythonRequests.generate({
297
- url: "https://example.com",
298
- headers: [{ name: "X-Empty", value: "" }]
299
- });
300
- expect(result).toBe(`requests.get("https://example.com",
301
- headers={
302
- "X-Empty": ""
303
- }
304
- )`);
305
- });
306
- it("handles multipart form data with empty file names", () => {
307
- const result = pythonRequests.generate({
308
- url: "https://example.com",
309
- method: "POST",
310
- postData: {
311
- mimeType: "multipart/form-data",
312
- params: [
313
- {
314
- name: "file",
315
- fileName: ""
316
- }
317
- ]
318
- }
319
- });
320
- expect(result).toBe(`requests.post("https://example.com",
321
- files=[
322
- ("file", open("", "rb"))
323
- ]
324
- )`);
325
- });
326
- it("handles JSON body with special characters", () => {
327
- const result = pythonRequests.generate({
328
- url: "https://example.com",
329
- method: "POST",
330
- headers: [
331
- {
332
- name: "Content-Type",
333
- value: "application/json"
334
- }
335
- ],
336
- postData: {
337
- mimeType: "application/json",
338
- text: JSON.stringify({
339
- key: '"quotes" and \\backslashes\\',
340
- nested: {
341
- array: ["item1", null, void 0]
342
- }
343
- })
344
- }
345
- });
346
- expect(result).toBe(`requests.post("https://example.com",
347
- headers={
348
- "Content-Type": "application/json"
349
- },
350
- json={
351
- "key": "\\"quotes\\" and \\\\backslashes\\\\",
352
- "nested": {
353
- "array": [
354
- "item1",
355
- null,
356
- null
357
- ]
358
- }
359
- }
360
- )`);
361
- });
362
- it("handles cookies with special characters", () => {
363
- const result = pythonRequests.generate({
364
- url: "https://example.com",
365
- cookies: [
366
- {
367
- name: "special;cookie",
368
- value: "value with spaces"
369
- }
370
- ]
371
- });
372
- expect(result).toBe(`requests.get("https://example.com",
373
- cookies={
374
- "special;cookie": "value with spaces"
375
- }
376
- )`);
377
- });
378
- it("prettifies JSON body", () => {
379
- const result = pythonRequests.generate({
380
- url: "https://example.com",
381
- method: "POST",
382
- headers: [
383
- {
384
- name: "Content-Type",
385
- value: "application/json"
386
- }
387
- ],
388
- postData: {
389
- mimeType: "application/json",
390
- text: JSON.stringify({
391
- nested: {
392
- array: [1, 2, 3],
393
- object: { foo: "bar" }
394
- },
395
- simple: "value"
396
- })
397
- }
398
- });
399
- expect(result).toBe(`requests.post("https://example.com",
400
- headers={
401
- "Content-Type": "application/json"
402
- },
403
- json={
404
- "nested": {
405
- "array": [
406
- 1,
407
- 2,
408
- 3
409
- ],
410
- "object": {
411
- "foo": "bar"
412
- }
413
- },
414
- "simple": "value"
415
- }
416
- )`);
417
- });
418
- });
419
- //# sourceMappingURL=requests.test.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../../src/plugins/python/requests/requests.test.ts"],
4
- "sourcesContent": ["import { describe, expect, it } from 'vitest'\nimport { pythonRequests } from './requests'\n\ndescribe('pythonRequests', () => {\n it('returns a basic request', () => {\n const result = pythonRequests.generate({\n url: 'https://example.com',\n })\n\n expect(result).toBe('requests.get(\"https://example.com\")')\n })\n\n it('returns a POST request', () => {\n const result = pythonRequests.generate({\n url: 'https://example.com',\n method: 'post',\n })\n\n expect(result).toBe('requests.post(\"https://example.com\")')\n })\n\n it('has headers', () => {\n const result = pythonRequests.generate({\n url: 'https://example.com',\n headers: [\n {\n name: 'Content-Type',\n value: 'application/json',\n },\n ],\n })\n\n expect(result).toBe(`requests.get(\"https://example.com\",\n headers={\n \"Content-Type\": \"application/json\"\n }\n)`)\n })\n\n it('doesn\u2019t add empty headers', () => {\n const result = pythonRequests.generate({\n url: 'https://example.com',\n headers: [],\n })\n\n expect(result).toBe('requests.get(\"https://example.com\")')\n })\n\n it('has JSON body', () => {\n const result = pythonRequests.generate({\n url: 'https://example.com',\n method: 'POST',\n headers: [\n {\n name: 'Content-Type',\n value: 'application/json',\n },\n ],\n postData: {\n mimeType: 'application/json',\n text: JSON.stringify({\n hello: 'world',\n }),\n },\n })\n\n expect(result).toBe(`requests.post(\"https://example.com\",\n headers={\n \"Content-Type\": \"application/json\"\n },\n json={\n \"hello\": \"world\"\n }\n)`)\n })\n\n it('has query string', () => {\n const result = pythonRequests.generate({\n url: 'https://example.com',\n queryString: [\n {\n name: 'foo',\n value: 'bar',\n },\n {\n name: 'bar',\n value: 'foo',\n },\n ],\n })\n\n expect(result).toBe(`requests.get(\"https://example.com\",\n params={\n \"foo\": \"bar\",\n \"bar\": \"foo\"\n }\n)`)\n })\n\n it('has cookies', () => {\n const result = pythonRequests.generate({\n url: 'https://example.com',\n cookies: [\n {\n name: 'foo',\n value: 'bar',\n },\n {\n name: 'bar',\n value: 'foo',\n },\n ],\n })\n\n expect(result).toBe(`requests.get(\"https://example.com\",\n cookies={\n \"foo\": \"bar\",\n \"bar\": \"foo\"\n }\n)`)\n })\n\n it('doesn\u2019t add empty cookies', () => {\n const result = pythonRequests.generate({\n url: 'https://example.com',\n cookies: [],\n })\n\n expect(result).toBe('requests.get(\"https://example.com\")')\n })\n\n it('adds basic auth credentials', () => {\n const result = pythonRequests.generate(\n {\n url: 'https://example.com',\n },\n {\n auth: {\n username: 'user',\n password: 'pass',\n },\n },\n )\n\n expect(result).toBe(`requests.get(\"https://example.com\",\n auth=(\"user\", \"pass\")\n)`)\n })\n\n it('handles multipart form data with files', () => {\n const result = pythonRequests.generate({\n url: 'https://example.com',\n method: 'POST',\n postData: {\n mimeType: 'multipart/form-data',\n params: [\n {\n name: 'file',\n fileName: 'test.txt',\n },\n {\n name: 'field',\n value: 'value',\n },\n ],\n },\n })\n\n expect(result).toBe(`requests.post(\"https://example.com\",\n files=[\n (\"file\", open(\"test.txt\", \"rb\"))\n ],\n data={\n \"field\": \"value\"\n }\n)`)\n })\n\n it('handles multipart form data with multiple files', () => {\n const result = pythonRequests.generate({\n url: 'https://example.com',\n method: 'POST',\n postData: {\n mimeType: 'multipart/form-data',\n params: [\n {\n name: 'file',\n fileName: 'test.txt',\n },\n {\n name: 'file',\n fileName: 'another.txt',\n },\n ],\n },\n })\n\n expect(result).toBe(`requests.post(\"https://example.com\",\n files=[\n (\"file\", open(\"test.txt\", \"rb\")),\n (\"file\", open(\"another.txt\", \"rb\"))\n ]\n)`)\n })\n\n it('handles url-encoded form data', () => {\n const result = pythonRequests.generate({\n url: 'https://example.com',\n method: 'POST',\n postData: {\n mimeType: 'application/x-www-form-urlencoded',\n params: [\n {\n name: 'special chars!@#',\n value: 'value',\n },\n ],\n },\n })\n\n expect(result).toBe(`requests.post(\"https://example.com\",\n data={\n \"special chars!@#\": \"value\"\n }\n)`)\n })\n\n it('handles binary data flag', () => {\n const result = pythonRequests.generate({\n url: 'https://example.com',\n method: 'POST',\n postData: {\n mimeType: 'application/octet-stream',\n text: 'binary content',\n },\n })\n\n expect(result).toBe(`requests.post(\"https://example.com\",\n data=b\"binary content\"\n)`)\n })\n\n it('handles compressed response', () => {\n const result = pythonRequests.generate({\n url: 'https://example.com',\n headers: [\n {\n name: 'Accept-Encoding',\n value: 'gzip, deflate',\n },\n ],\n })\n\n expect(result).toBe(`requests.get(\"https://example.com\",\n headers={\n \"Accept-Encoding\": \"gzip, deflate\"\n }\n)`)\n })\n\n it('handles special characters in URL', () => {\n const result = pythonRequests.generate({\n url: 'https://example.com/path with spaces/[brackets]',\n })\n\n expect(result).toBe(`requests.get(\n \"https://example.com/path with spaces/[brackets]\"\n)`)\n })\n\n it('handles special characters in query parameters', () => {\n const result = pythonRequests.generate({\n url: 'https://example.com',\n queryString: [\n {\n name: 'q',\n value: 'hello world & more',\n },\n {\n name: 'special',\n value: '!@#$%^&*()',\n },\n ],\n })\n\n expect(result).toBe(`requests.get(\"https://example.com\",\n params={\n \"q\": \"hello world & more\",\n \"special\": \"!@#$%^&*()\"\n }\n)`)\n })\n\n it('handles empty URL', () => {\n const result = pythonRequests.generate({\n url: '',\n })\n\n expect(result).toBe('requests.get(\"\")')\n })\n\n it('doesn\u2019t add a line break for a short URL', () => {\n const result = pythonRequests.generate({\n url: 'https://example.com',\n })\n\n expect(result).toBe('requests.get(\"https://example.com\")')\n })\n\n it('handles extremely long URLs', () => {\n const result = pythonRequests.generate({\n url: 'https://example.com/' + 'a'.repeat(2000),\n })\n\n expect(result).toBe(`requests.get(\n \"https://example.com/${'a'.repeat(2000)}\"\n)`)\n })\n\n it('handles multiple headers with same name', () => {\n const result = pythonRequests.generate({\n url: 'https://example.com',\n headers: [\n { name: 'X-Custom', value: 'value1' },\n { name: 'X-Custom', value: 'value2' },\n ],\n })\n\n expect(result).toBe(`requests.get(\"https://example.com\",\n headers={\n \"X-Custom\": \"value1\"\n }\n)`)\n })\n\n it('handles headers with empty values', () => {\n const result = pythonRequests.generate({\n url: 'https://example.com',\n headers: [{ name: 'X-Empty', value: '' }],\n })\n\n expect(result).toBe(`requests.get(\"https://example.com\",\n headers={\n \"X-Empty\": \"\"\n }\n)`)\n })\n\n it('handles multipart form data with empty file names', () => {\n const result = pythonRequests.generate({\n url: 'https://example.com',\n method: 'POST',\n postData: {\n mimeType: 'multipart/form-data',\n params: [\n {\n name: 'file',\n fileName: '',\n },\n ],\n },\n })\n\n expect(result).toBe(`requests.post(\"https://example.com\",\n files=[\n (\"file\", open(\"\", \"rb\"))\n ]\n)`)\n })\n\n it('handles JSON body with special characters', () => {\n const result = pythonRequests.generate({\n url: 'https://example.com',\n method: 'POST',\n headers: [\n {\n name: 'Content-Type',\n value: 'application/json',\n },\n ],\n postData: {\n mimeType: 'application/json',\n text: JSON.stringify({\n key: '\"quotes\" and \\\\backslashes\\\\',\n nested: {\n array: ['item1', null, undefined],\n },\n }),\n },\n })\n\n expect(result).toBe(`requests.post(\"https://example.com\",\n headers={\n \"Content-Type\": \"application/json\"\n },\n json={\n \"key\": \"\\\\\"quotes\\\\\" and \\\\\\\\backslashes\\\\\\\\\",\n \"nested\": {\n \"array\": [\n \"item1\",\n null,\n null\n ]\n }\n }\n)`)\n })\n\n it('handles cookies with special characters', () => {\n const result = pythonRequests.generate({\n url: 'https://example.com',\n cookies: [\n {\n name: 'special;cookie',\n value: 'value with spaces',\n },\n ],\n })\n\n expect(result).toBe(`requests.get(\"https://example.com\",\n cookies={\n \"special;cookie\": \"value with spaces\"\n }\n)`)\n })\n\n it('prettifies JSON body', () => {\n const result = pythonRequests.generate({\n url: 'https://example.com',\n method: 'POST',\n headers: [\n {\n name: 'Content-Type',\n value: 'application/json',\n },\n ],\n postData: {\n mimeType: 'application/json',\n text: JSON.stringify({\n nested: {\n array: [1, 2, 3],\n object: { foo: 'bar' },\n },\n simple: 'value',\n }),\n },\n })\n\n expect(result).toBe(`requests.post(\"https://example.com\",\n headers={\n \"Content-Type\": \"application/json\"\n },\n json={\n \"nested\": {\n \"array\": [\n 1,\n 2,\n 3\n ],\n \"object\": {\n \"foo\": \"bar\"\n }\n },\n \"simple\": \"value\"\n }\n)`)\n })\n})\n"],
5
- "mappings": "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",
6
- "names": []
7
- }
@@ -1,240 +0,0 @@
1
- import { describe, expect, it } from "vitest";
2
- import { rubyNative } from "./native.js";
3
- describe("rubyNative", () => {
4
- it("returns a basic request", () => {
5
- const result = rubyNative.generate({
6
- url: "https://example.com"
7
- });
8
- expect(result).toBe(
9
- `require 'uri'
10
- require 'net/http'
11
-
12
- url = URI("https://example.com")
13
-
14
- http = Net::HTTP.new(url.host, url.port)
15
- http.use_ssl = true
16
-
17
- request = Net::HTTP::Get.new(url)
18
-
19
- response = http.request(request)
20
- puts response.read_body`
21
- );
22
- });
23
- it("returns a POST request", () => {
24
- const result = rubyNative.generate({
25
- url: "https://example.com",
26
- method: "post"
27
- });
28
- expect(result).toBe(
29
- `require 'uri'
30
- require 'net/http'
31
-
32
- url = URI("https://example.com")
33
-
34
- http = Net::HTTP.new(url.host, url.port)
35
- http.use_ssl = true
36
-
37
- request = Net::HTTP::Post.new(url)
38
-
39
- response = http.request(request)
40
- puts response.read_body`
41
- );
42
- });
43
- it("has headers", () => {
44
- const result = rubyNative.generate({
45
- url: "https://example.com",
46
- headers: [
47
- {
48
- name: "Content-Type",
49
- value: "application/json"
50
- }
51
- ]
52
- });
53
- expect(result).toBe(
54
- `require 'uri'
55
- require 'net/http'
56
-
57
- url = URI("https://example.com")
58
-
59
- http = Net::HTTP.new(url.host, url.port)
60
- http.use_ssl = true
61
-
62
- request = Net::HTTP::Get.new(url)
63
- request["Content-Type"] = 'application/json'
64
-
65
- response = http.request(request)
66
- puts response.read_body`
67
- );
68
- });
69
- it("handles multipart form data with files", () => {
70
- const result = rubyNative.generate({
71
- url: "https://example.com",
72
- method: "POST",
73
- postData: {
74
- mimeType: "multipart/form-data",
75
- params: [
76
- {
77
- name: "file",
78
- fileName: "test.txt"
79
- },
80
- {
81
- name: "field",
82
- value: "value"
83
- }
84
- ]
85
- }
86
- });
87
- expect(result).toBe(
88
- `require 'uri'
89
- require 'net/http'
90
-
91
- url = URI("https://example.com")
92
-
93
- http = Net::HTTP.new(url.host, url.port)
94
- http.use_ssl = true
95
-
96
- request = Net::HTTP::Post.new(url)
97
-
98
- response = http.request(request)
99
- puts response.read_body`
100
- );
101
- });
102
- it.skip("handles url-encoded form data with special characters", () => {
103
- const result = rubyNative.generate({
104
- url: "https://example.com",
105
- method: "POST",
106
- postData: {
107
- mimeType: "application/x-www-form-urlencoded",
108
- params: [
109
- {
110
- name: "special chars!@#",
111
- value: "value"
112
- }
113
- ]
114
- }
115
- });
116
- expect(result).toBe(
117
- `require 'uri'
118
- require 'net/http'
119
-
120
- url = URI("https://example.com")
121
-
122
- http = Net::HTTP.new(url.host, url.port)
123
- http.use_ssl = true
124
-
125
- request = Net::HTTP::Post.new(url)
126
- request["Content-Type"] = "application/x-www-form-urlencoded"
127
-
128
- response = http.request(request)
129
- puts response.read_body`
130
- );
131
- });
132
- it.skip("handles binary data", () => {
133
- const result = rubyNative.generate({
134
- url: "https://example.com",
135
- method: "POST",
136
- postData: {
137
- mimeType: "application/octet-stream",
138
- text: "binary content"
139
- }
140
- });
141
- expect(result).toBe(
142
- `require 'uri'
143
- require 'net/http'
144
-
145
- url = URI("https://example.com")
146
-
147
- http = Net::HTTP.new(url.host, url.port)
148
- http.use_ssl = true
149
-
150
- request = Net::HTTP::Post.new(url)
151
-
152
- response = http.request(request)
153
- puts response.read_body`
154
- );
155
- });
156
- it("handles special characters in URL", () => {
157
- const result = rubyNative.generate({
158
- url: "https://example.com/path with spaces/[brackets]"
159
- });
160
- expect(result).toBe(
161
- `require 'uri'
162
- require 'net/http'
163
-
164
- url = URI("https://example.com/path%20with%20spaces/[brackets]")
165
-
166
- http = Net::HTTP.new(url.host, url.port)
167
- http.use_ssl = true
168
-
169
- request = Net::HTTP::Get.new(url)
170
-
171
- response = http.request(request)
172
- puts response.read_body`
173
- );
174
- });
175
- it("handles multiple headers with same name", () => {
176
- const result = rubyNative.generate({
177
- url: "https://example.com",
178
- headers: [
179
- { name: "X-Custom", value: "value1" },
180
- { name: "X-Custom", value: "value2" }
181
- ]
182
- });
183
- expect(result).toBe(
184
- `require 'uri'
185
- require 'net/http'
186
-
187
- url = URI("https://example.com")
188
-
189
- http = Net::HTTP.new(url.host, url.port)
190
- http.use_ssl = true
191
-
192
- request = Net::HTTP::Get.new(url)
193
- request["X-Custom"] = 'value2'
194
-
195
- response = http.request(request)
196
- puts response.read_body`
197
- );
198
- });
199
- it("handles headers with empty values", () => {
200
- const result = rubyNative.generate({
201
- url: "https://example.com",
202
- headers: [{ name: "X-Empty", value: "" }]
203
- });
204
- expect(result).toBe(
205
- `require 'uri'
206
- require 'net/http'
207
-
208
- url = URI("https://example.com")
209
-
210
- http = Net::HTTP.new(url.host, url.port)
211
- http.use_ssl = true
212
-
213
- request = Net::HTTP::Get.new(url)
214
- request["X-Empty"] = ''
215
-
216
- response = http.request(request)
217
- puts response.read_body`
218
- );
219
- });
220
- it("handles query string parameters", () => {
221
- const result = rubyNative.generate({
222
- url: "https://example.com/api?param1=value1&param2=special value&param3=123"
223
- });
224
- expect(result).toBe(
225
- `require 'uri'
226
- require 'net/http'
227
-
228
- url = URI("https://example.com/api?param1=value1&param2=special%20value&param3=123")
229
-
230
- http = Net::HTTP.new(url.host, url.port)
231
- http.use_ssl = true
232
-
233
- request = Net::HTTP::Get.new(url)
234
-
235
- response = http.request(request)
236
- puts response.read_body`
237
- );
238
- });
239
- });
240
- //# sourceMappingURL=native.test.js.map