49 lines
2.0 KiB
C#
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);
|
|
}
|
|
}
|