import CSharpRestSharp from './csharp.restsharp' import { Config, Http } from '../utils/generate' import { describe, test, expect } from 'vitest' describe('CSharpRestSharp.generate', () => { test('should build a basic GET request', () => { const httpRequest: Http = { method: 'GET', url: 'https://example.com' } const config: Config = {} const result = CSharpRestSharp.generate(config, httpRequest) expect(result).toBe( ` using RestSharp; namespace RestSharpExample { class Program { static void Main(string[] args) { var client = new RestClient("https://example.com"); var request = new RestRequest(Method.GET); IRestResponse response = client.Execute(request); Console.WriteLine(response.Content); } } } `.trim() ) }) test('should build a POST request with headers', () => { const httpRequest: Http = { method: 'POST', url: 'https://example.com', headers: { 'Content-Type': 'application/json', Authorization: 'Bearer token' } } const config: Config = {} const result = CSharpRestSharp.generate(config, httpRequest) expect(result).toBe( ` using RestSharp; namespace RestSharpExample { class Program { static void Main(string[] args) { var client = new RestClient("https://example.com"); var request = new RestRequest(Method.POST); request.AddHeader("Content-Type", "application/json"); request.AddHeader("Authorization", "Bearer token"); IRestResponse response = client.Execute(request); Console.WriteLine(response.Content); } } } `.trim() ) }) test('should build a GET request with cookies', () => { const httpRequest: Http = { method: 'GET', url: 'https://example.com', cookies: { session: 'abc123', user: 'testuser' } } const config: Config = {} const result = CSharpRestSharp.generate(config, httpRequest) expect(result).toBe( ` using RestSharp; namespace RestSharpExample { class Program { static void Main(string[] args) { var client = new RestClient("https://example.com"); var request = new RestRequest(Method.GET); request.AddHeader("Cookie", "session=abc123; user=testuser"); IRestResponse response = client.Execute(request); Console.WriteLine(response.Content); } } } `.trim() ) }) test('should build a POST request with body', () => { const httpRequest: Http = { method: 'POST', url: 'https://example.com', body: { key1: 'value1' } } const config: Config = {} const result = CSharpRestSharp.generate(config, httpRequest) expect(result).toBe( ` using RestSharp; namespace RestSharpExample { class Program { static void Main(string[] args) { var client = new RestClient("https://example.com"); var request = new RestRequest(Method.POST); request.AddJsonBody({ "key1": "value1" }); IRestResponse response = client.Execute(request); Console.WriteLine(response.Content); } } } `.trim() ) }) test('should build a POST request with advanced json body', () => { const httpRequest: Http = { method: 'POST', url: 'https://example.com', body: { key1: 'value1', key2: { nestedKey: 'nestedValue' }, key3: ['value1', 'value2'], key4: [{ key: 'value1' }, { key: 'value2' }] } } const config: Config = {} const result = CSharpRestSharp.generate(config, httpRequest) expect(result).toBe( ` using RestSharp; namespace RestSharpExample { class Program { static void Main(string[] args) { var client = new RestClient("https://example.com"); var request = new RestRequest(Method.POST); request.AddJsonBody({ "key1": "value1", "key2": { "nestedKey": "nestedValue" }, "key3": [ "value1", "value2" ], "key4": [{ "key": "value1" },{ "key": "value2" } ] }); IRestResponse response = client.Execute(request); Console.WriteLine(response.Content); } } } `.trim() ) }) test('should build a POST request with text/plain body', () => { const httpRequest: Http = { method: 'POST', url: 'https://example.com', headers: { 'Content-Type': 'text/plain' }, body: 'Plain text content' } const config: Config = {} const result = CSharpRestSharp.generate(config, httpRequest) expect(result).toBe( ` using RestSharp; namespace RestSharpExample { class Program { static void Main(string[] args) { var client = new RestClient("https://example.com"); var request = new RestRequest(Method.POST); request.AddHeader("Content-Type", "text/plain"); request.AddParameter("text/plain", "Plain text content", ParameterType.RequestBody); IRestResponse response = client.Execute(request); Console.WriteLine(response.Content); } } } `.trim() ) }) test('should build a POST request with XML body', () => { const httpRequest: Http = { method: 'POST', url: 'https://example.com', headers: { 'Content-Type': 'application/xml' }, body: 'content' } const config: Config = {} const result = CSharpRestSharp.generate(config, httpRequest) expect(result).toBe( ` using RestSharp; namespace RestSharpExample { class Program { static void Main(string[] args) { var client = new RestClient("https://example.com"); var request = new RestRequest(Method.POST); request.AddHeader("Content-Type", "application/xml"); request.AddParameter("application/xml", "content", ParameterType.RequestBody); IRestResponse response = client.Execute(request); Console.WriteLine(response.Content); } } } `.trim() ) }) test('should build a GET request with URL parameters', () => { const httpRequest: Http = { method: 'GET', url: 'https://example.com', params: { 'address.zip': '66031', 'address.country': 'Wallis' } } const config: Config = {} const result = CSharpRestSharp.generate(config, httpRequest) expect(result).toBe( ` using RestSharp; namespace RestSharpExample { class Program { static void Main(string[] args) { var client = new RestClient("https://example.com"); var request = new RestRequest(Method.GET); request.AddParameter("address.zip", "66031", ParameterType.QueryString); request.AddParameter("address.country", "Wallis", ParameterType.QueryString); IRestResponse response = client.Execute(request); Console.WriteLine(response.Content); } } } `.trim() ) }) test('should build a GET request with array URL parameters', () => { const httpRequest: Http = { method: 'GET', url: 'https://example.com', params: { tags: ['csharp', 'restsharp'], category: 'backend' } } const config: Config = {} const result = CSharpRestSharp.generate(config, httpRequest) expect(result).toContain('request.AddParameter("tags", "csharp", ParameterType.QueryString);') expect(result).toContain('request.AddParameter("tags", "restsharp", ParameterType.QueryString);') expect(result).toContain('request.AddParameter("category", "backend", ParameterType.QueryString);') }) test('should build a POST request with URL parameters and body', () => { const httpRequest: Http = { method: 'POST', url: 'https://example.com', params: { version: '1.0' }, headers: { 'Content-Type': 'application/json' }, body: { name: 'John' } } const config: Config = {} const result = CSharpRestSharp.generate(config, httpRequest) expect(result).toContain('request.AddParameter("version", "1.0", ParameterType.QueryString);') expect(result).toContain('"name": "John"') }) test('should build a POST request with error handling', () => { const httpRequest: Http = { method: 'POST', url: 'https://example.com', headers: { 'Content-Type': 'application/json' }, body: { test: 'data' } } const config: Config = { handleErrors: true } const result = CSharpRestSharp.generate(config, httpRequest) expect(result).toBe( ` using RestSharp; using System; namespace RestSharpExample { class Program { static void Main(string[] args) { try { var client = new RestClient("https://example.com"); var request = new RestRequest(Method.POST); request.AddHeader("Content-Type", "application/json"); request.AddJsonBody({ "test": "data" }); IRestResponse response = client.Execute(request); Console.WriteLine(response.Content); } catch (Exception ex) { Console.WriteLine($"Error: {ex.Message}"); } } } } `.trim() ) }) })