Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Replace TypeScript string contain asserts with Verify tests
  • Loading branch information
lahma committed Jul 26, 2025
commit 77edef655237a775cbe5431a245ab39552de0fa2
1 change: 0 additions & 1 deletion src/NSwag.CodeGeneration.Tests/CodeGenerationTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@
using NSwag.CodeGeneration.CSharp;
using NSwag.CodeGeneration.OperationNameGenerators;
using NSwag.CodeGeneration.TypeScript;
using Xunit;

namespace NSwag.CodeGeneration.Tests
{
Expand Down
14 changes: 5 additions & 9 deletions src/NSwag.CodeGeneration.TypeScript.Tests/AngularJSTests.cs
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
using Xunit;
using NSwag.Generation.WebApi;
using NSwag.Generation.WebApi;
using Microsoft.AspNetCore.Mvc;
using NJsonSchema;
using NJsonSchema.NewtonsoftJson.Generation;
using NSwag.CodeGeneration.Tests;

namespace NSwag.CodeGeneration.TypeScript.Tests
{
Expand Down Expand Up @@ -57,8 +57,7 @@ public async Task When_export_types_is_true_then_add_export_before_classes()
var code = codeGen.GenerateFile();

// Assert
Assert.Contains("export class DiscussionClient", code);
Assert.Contains("export interface IDiscussionClient", code);
await VerifyHelper.Verify(code);
}

[Fact]
Expand Down Expand Up @@ -88,8 +87,7 @@ public async Task When_export_types_is_false_then_dont_add_export_before_classes
var code = codeGen.GenerateFile();

// Assert
Assert.DoesNotContain("export class DiscussionClient", code);
Assert.DoesNotContain("export interface IDiscussionClient", code);
await VerifyHelper.Verify(code);
}

[Fact]
Expand All @@ -116,9 +114,7 @@ public async Task When_consumes_is_url_encoded_then_construct_url_encoded_reques
var code = codeGen.GenerateFile();

// Assert
Assert.Contains("content_", code);
Assert.DoesNotContain("FormData", code);
Assert.Contains("\"Content-Type\": \"application/x-www-form-urlencoded\"", code);
await VerifyHelper.Verify(code);
}
}
}
19 changes: 7 additions & 12 deletions src/NSwag.CodeGeneration.TypeScript.Tests/AngularTests.cs
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
using Xunit;
using NSwag.Generation.WebApi;
using NSwag.Generation.WebApi;
using Microsoft.AspNetCore.Mvc;
using System.ComponentModel.DataAnnotations;
using NJsonSchema;
using NJsonSchema.NewtonsoftJson.Generation;
using NSwag.CodeGeneration.Tests;

namespace NSwag.CodeGeneration.TypeScript.Tests
{
Expand Down Expand Up @@ -96,7 +96,7 @@ public async Task When_return_value_is_void_then_client_returns_observable_of_vo
var code = codeGen.GenerateFile();

// Assert
Assert.Contains("addMessage(message: Foo): Observable<void>", code);
await VerifyHelper.Verify(code);
}

[Fact]
Expand Down Expand Up @@ -125,8 +125,7 @@ public async Task When_export_types_is_true_then_add_export_before_classes()
var code = codeGen.GenerateFile();

// Assert
Assert.Contains("export class DiscussionClient", code);
Assert.Contains("export interface IDiscussionClient", code);
await VerifyHelper.Verify(code);
}

[Fact]
Expand Down Expand Up @@ -155,8 +154,7 @@ public async Task When_export_types_is_false_then_dont_add_export_before_classes
var code = codeGen.GenerateFile();

// Assert
Assert.DoesNotContain("export class DiscussionClient", code);
Assert.DoesNotContain("export interface IDiscussionClient", code);
await VerifyHelper.Verify(code);
}

[Fact]
Expand Down Expand Up @@ -185,8 +183,7 @@ public async Task When_generic_request()
var code = codeGen.GenerateFile();

// Assert
Assert.Contains("this.request = new RequestBodyBase()", code);
Assert.Contains("this.request = new RequestBody()", code);
await VerifyHelper.Verify(code);
}

[Fact]
Expand All @@ -213,9 +210,7 @@ public async Task When_consumes_is_url_encoded_then_construct_url_encoded_reques
var code = codeGen.GenerateFile();

// Assert
Assert.Contains("content_", code);
Assert.DoesNotContain("FormData", code);
Assert.Contains("\"Content-Type\": \"application/x-www-form-urlencoded\"", code);
await VerifyHelper.Verify(code);
}
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
using Xunit;
using NSwag.CodeGeneration.Tests;

namespace NSwag.CodeGeneration.TypeScript.Tests
{
Expand Down Expand Up @@ -65,7 +65,8 @@ public async Task When_parameter_is_array_then_TypeScript_is_correct()
var code = generator.GenerateFile();

// Assert
Assert.Contains(@"elementId.forEach(item => { url_ += ""elementId="" + encodeURIComponent("""" + item) + ""&""; });", code);
await VerifyHelper.Verify(code);
CodeCompiler.AssertCompile(code);
}


Expand Down Expand Up @@ -139,8 +140,8 @@ public async Task when_content_is_formdata_with_property_array_then_content_shou
var code = codeGenerator.GenerateFile();

// Assert
Assert.Contains("const content_ = new FormData();", code);
Assert.Contains("arrayOfIds.forEach(item_ => content_.append(\"arrayOfIds\", item_.toString()));", code);
await VerifyHelper.Verify(code);
CodeCompiler.AssertCompile(code);
}
}
}
26 changes: 14 additions & 12 deletions src/NSwag.CodeGeneration.TypeScript.Tests/AxiosTests.cs
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
using Xunit;
using NSwag.Generation.WebApi;
using NSwag.Generation.WebApi;
using Microsoft.AspNetCore.Mvc;
using NJsonSchema;
using NJsonSchema.NewtonsoftJson.Generation;
using NSwag.CodeGeneration.Tests;

namespace NSwag.CodeGeneration.TypeScript.Tests
{
Expand Down Expand Up @@ -63,8 +63,8 @@ public async Task When_export_types_is_true_then_add_export_before_classes()
var code = codeGen.GenerateFile();

// Assert
Assert.Contains("export class DiscussionClient", code);
Assert.Contains("export interface IDiscussionClient", code);
await VerifyHelper.Verify(code);
CodeCompiler.AssertCompile(code);
}

[Fact]
Expand Down Expand Up @@ -94,8 +94,8 @@ public async Task When_export_types_is_false_then_dont_add_export_before_classes
var code = codeGen.GenerateFile();

// Assert
Assert.DoesNotContain("export class DiscussionClient", code);
Assert.DoesNotContain("export interface IDiscussionClient", code);
await VerifyHelper.Verify(code);
CodeCompiler.AssertCompile(code);
}

[Fact]
Expand Down Expand Up @@ -123,9 +123,8 @@ public async Task When_consumes_is_url_encoded_then_construct_url_encoded_reques
var code = codeGen.GenerateFile();

// Assert
Assert.Contains("content_", code);
Assert.DoesNotContain("FormData", code);
Assert.Contains("\"Content-Type\": \"application/x-www-form-urlencoded\"", code);
await VerifyHelper.Verify(code);
CodeCompiler.AssertCompile(code);
}

[Fact]
Expand Down Expand Up @@ -154,7 +153,8 @@ public async Task Add_cancel_token_to_every_call()
var code = codeGen.GenerateFile();

// Assert
Assert.Contains("cancelToken?: CancelToken", code);
await VerifyHelper.Verify(code);
CodeCompiler.AssertCompile(code);
}

[Fact]
Expand Down Expand Up @@ -186,7 +186,8 @@ public async Task When_abort_signal()
var code = codeGen.GenerateFile();

// Assert
Assert.Contains("signal?: AbortSignal", code);
await VerifyHelper.Verify(code);
CodeCompiler.AssertCompile(code);
}

[Fact]
Expand Down Expand Up @@ -219,7 +220,8 @@ public async Task When_abort_signal_and_generate_client_interfaces_contains_sign
var code = codeGen.GenerateFile();

// Assert
Assert.Contains("signal?: AbortSignal", code);
await VerifyHelper.Verify(code);
CodeCompiler.AssertCompile(code);
}
}
}
25 changes: 9 additions & 16 deletions src/NSwag.CodeGeneration.TypeScript.Tests/BinaryTests.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
using Xunit;
using NSwag.CodeGeneration.Tests;

namespace NSwag.CodeGeneration.TypeScript.Tests
{
Expand Down Expand Up @@ -50,10 +50,8 @@ public async Task When_body_is_binary_then_blob_is_used_as_parameter_in_TypeScri
var code = codeGenerator.GenerateFile();

// Assert
Assert.Contains("addFile(body: Blob | undefined): ", code);
Assert.Contains("\"Content-Type\": \"image/png\"", code);
Assert.Contains("\"Accept\": \"application/xml\"", code);
Assert.Contains("const content_ = body;", code);
await VerifyHelper.Verify(code);
CodeCompiler.AssertCompile(code);
}

[Fact]
Expand Down Expand Up @@ -117,12 +115,10 @@ public async Task WhenSpecContainsFormDataInSingleMultipartFile_ThenFormDataIsUs
var code = codeGenerator.GenerateFile();

// Assert
Assert.Contains("const content_ = new FormData();", code);
Assert.Contains("interface FileParameter", code);
Assert.Contains("content_.append(\"file\", file.data, file.fileName ? file.fileName : \"file\");", code);
await VerifyHelper.Verify(code);
CodeCompiler.AssertCompile(code);
}


[Fact]
public async Task WhenSpecContainsFormDataInMultipartFileArray_ThenFormDataIsUsedInTypeScript()
{
Expand Down Expand Up @@ -187,9 +183,8 @@ public async Task WhenSpecContainsFormDataInMultipartFileArray_ThenFormDataIsUse
var code = codeGenerator.GenerateFile();

// Assert
Assert.Contains("const content_ = new FormData();", code);
Assert.Contains("interface FileParameter", code);
Assert.Contains("content_.append(\"files\", item_.data, item_.fileName ? item_.fileName : \"files\")", code);
await VerifyHelper.Verify(code);
CodeCompiler.AssertCompile(code);
}

[Fact]
Expand Down Expand Up @@ -266,10 +261,8 @@ public async Task WhenSpecContainsFormDataInNestedMultipartForm_ThenFormDataIsUs
var code = codeGenerator.GenerateFile();

// Assert
Assert.Contains("const content_ = new FormData();", code);
Assert.Contains("interface FileParameter", code);
Assert.Contains("content_.append(\"Contents\", contents.data, contents.fileName ? contents.fileName : \"Contents\");", code);
await VerifyHelper.Verify(code);
CodeCompiler.AssertCompile(code);
}

}
}
12 changes: 9 additions & 3 deletions src/NSwag.CodeGeneration.TypeScript.Tests/CodeCompiler.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,13 @@ public class CodeCompiler

public static void AssertCompile(string source)
{
var tempFilePath = Path.Combine(Path.GetTempPath(), $"temp_{Guid.NewGuid()}.ts");
File.WriteAllText(tempFilePath, source);

var workingDirectory = Path.Combine(
Directory.GetCurrentDirectory(),
"../../../../src/NSwag.CodeGeneration.TypeScript.Tests");

var tempFilePath = Path.Combine(workingDirectory, $"temp_{Guid.NewGuid()}.ts");
File.WriteAllText(tempFilePath, source);

try
{
var process = new Process
Expand Down Expand Up @@ -46,6 +46,12 @@ public static void AssertCompile(string source)
{
File.Delete(tempFilePath);
}

var jsFilePAth = tempFilePath!.Replace(".ts", ".js");
if (File.Exists(jsFilePAth))
{
File.Delete(jsFilePAth);
}
}
}

Expand Down
Loading
Loading