fix: embed portable static fonts for CV preview and PDF fidelity
This commit is contained in:
@@ -0,0 +1,48 @@
|
||||
using JobTrackerApi.Models;
|
||||
using JobTrackerApi.Services;
|
||||
using Xunit;
|
||||
|
||||
namespace JobTrackerApi.Tests;
|
||||
|
||||
public sealed class CvDocumentFontsTests
|
||||
{
|
||||
[Fact]
|
||||
public void Embedded_fonts_use_static_outlines_for_the_CLI_renderer()
|
||||
{
|
||||
var assembly = typeof(ThemedCvRenderer).Assembly;
|
||||
var fonts = assembly.GetManifestResourceNames().Where(name => name.StartsWith("CvFonts.") && name.EndsWith(".ttf")).ToArray();
|
||||
Assert.NotEmpty(fonts);
|
||||
foreach (var name in fonts)
|
||||
{
|
||||
using var stream = assembly.GetManifestResourceStream(name)!;
|
||||
using var bytes = new MemoryStream();
|
||||
stream.CopyTo(bytes);
|
||||
var data = bytes.ToArray();
|
||||
var count = System.Buffers.Binary.BinaryPrimitives.ReadUInt16BigEndian(data.AsSpan(4, 2));
|
||||
var tables = Enumerable.Range(0, count).Select(i => System.Text.Encoding.ASCII.GetString(data, 12 + i * 16, 4));
|
||||
Assert.DoesNotContain("fvar", tables);
|
||||
}
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[InlineData("modern")]
|
||||
[InlineData("minimal")]
|
||||
[InlineData("executive")]
|
||||
[InlineData("technical")]
|
||||
[InlineData("creative")]
|
||||
[InlineData("code")]
|
||||
public void Document_is_self_contained_and_does_not_depend_on_installed_fonts(string themeId)
|
||||
{
|
||||
var profile = new StructuredCvProfile { Contact = { FullName = "Åse æøå" }, Summary = { "Retained career content." } };
|
||||
var settings = new CvVariantSettings { ThemeId = themeId };
|
||||
var model = CvVariantResolver.Build(profile, settings, "Fallback", null);
|
||||
var html = new ThemedCvRenderer().Render(model, CvThemeCatalog.Resolve(themeId), settings).Html;
|
||||
Assert.Contains("@font-face", html);
|
||||
Assert.Contains("data:font/ttf;base64,", html);
|
||||
Assert.DoesNotContain("src:local(", html);
|
||||
Assert.Contains("Retained career content.", html);
|
||||
Assert.Null(settings.BodyFont);
|
||||
Assert.Null(settings.HeadingFont);
|
||||
Assert.Equal("Åse æøå", profile.Contact.FullName);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user