fix(cv): bind letter proposals to current sources and preserve document choices
This commit is contained in:
@@ -1,11 +1,34 @@
|
||||
using JobTrackerApi.Models;
|
||||
using JobTrackerApi.Services;
|
||||
using System.Text.Json;
|
||||
using Xunit;
|
||||
|
||||
namespace JobTrackerApi.Tests;
|
||||
|
||||
public sealed class CoverLetterDocumentContractTests
|
||||
{
|
||||
[Theory]
|
||||
[InlineData(null, "en")]
|
||||
[InlineData("{}", "en")]
|
||||
[InlineData("{\"senderName\":\"Legacy sender\"}", "en")]
|
||||
[InlineData("{\"language\":\"en\"}", "en")]
|
||||
[InlineData("{\"language\":\"nb\"}", "nb-NO")]
|
||||
[InlineData("{\"language\":\"nb-NO\"}", "nb-NO")]
|
||||
[InlineData("{\"language\":\" NB-no \"}", "nb-NO")]
|
||||
[InlineData("{\"language\":null}", "en")]
|
||||
[InlineData("{\"language\":\"fr\"}", "en")]
|
||||
[InlineData("{\"language\":\"en\\\" onload=alert(1)\"}", "en")]
|
||||
public void Document_language_defaults_normalizes_and_roundtrips_only_supported_values(string? json, string expected)
|
||||
{
|
||||
var settings = CoverLetterDocumentSettingsJson.Deserialize(json);
|
||||
var normalized = CoverLetterDocumentSettingsJson.Serialize(settings);
|
||||
Assert.Equal(expected, JsonDocument.Parse(normalized).RootElement.GetProperty("language").GetString());
|
||||
Assert.Equal(normalized, CoverLetterDocumentSettingsJson.Serialize(CoverLetterDocumentSettingsJson.Deserialize(normalized)));
|
||||
var html = new CoverLetterDocumentRenderer().Render("Reviewed letter — æøå", settings).Html;
|
||||
Assert.Contains($"<html lang=\"{expected}\">", html);
|
||||
Assert.DoesNotContain("onload=", html);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Document_style_reuses_cv_allowlists_clamps_non_finite_values_and_escapes_all_metadata()
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user