Files
jobtrackingapp/JobTrackerApi.Tests/CvDocumentFontsTests.cs
T

49 lines
2.0 KiB
C#

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);
}
}