Files
jobtrackingapp/JobTrackerApi.Tests/CoverLetterDocumentLanguageTests.cs
T

43 lines
2.7 KiB
C#

using System.Text;
using System.Text.Json;
using JobTrackerApi.Models;
using JobTrackerApi.Services;
using Microsoft.Data.Sqlite;
using Microsoft.EntityFrameworkCore;
using Moq;
using Xunit;
namespace JobTrackerApi.Tests;
public sealed partial class CoverLetterWriterTests
{
[Fact]
public async Task Letter_language_is_a_reviewed_snapshot_in_history_and_frozen_bytes()
{
await using var connection = new SqliteConnection("Data Source=:memory:");
await connection.OpenAsync();
await using var db = Context(connection);
var job = await Seed(db);
var service = Assets(db);
var norwegian = CoverLetterDocumentSettingsJson.Deserialize("{\"language\":\"nb\",\"senderName\":\"Åse\"}");
await service.SaveCoverLetterAsync(Owner, job.Id, "Gjennomgått søknad — æøå", CoverLetterSources.Manual, null, job.Version, default, norwegian);
var settingsBytes = Encoding.UTF8.GetBytes(job.CoverLetterDocumentSettingsJson!);
var packages = new SubmittedApplicationPackageService(db, Mock.Of<ICvVariantService>(), Mock.Of<IAttachmentStorage>());
var captured = await packages.CaptureAsync(Owner, job.Id, new("Fallback", null), default);
var frozen = await db.SubmittedApplicationPackages.AsNoTracking().SingleAsync(x => x.Id == captured!.Id);
Assert.Contains("<html lang=\"nb-NO\">", frozen.RenderedCoverLetterHtml);
Assert.Equal("nb-NO", JsonDocument.Parse(frozen.CoverLetterDocumentSettingsJson!).RootElement.GetProperty("language").GetString());
var htmlBytes = Encoding.UTF8.GetBytes(frozen.RenderedCoverLetterHtml!);
await service.SaveCoverLetterAsync(Owner, job.Id, "English revision", CoverLetterSources.Manual, null, job.Version, default, new());
Assert.Contains("<html lang=\"en\">", (await service.RenderSavedCoverLetterAsync(Owner, job.Id, job.Version, default))!.Html);
await service.RestoreCoverLetterAsync(Owner, job.Id, 1, job.Version, default);
Assert.Equal(settingsBytes, Encoding.UTF8.GetBytes(job.CoverLetterDocumentSettingsJson!));
var history = await db.CoverLetterVersions.Where(x => x.JobApplicationId == job.Id).OrderBy(x => x.Version).ToListAsync();
Assert.Equal(new[] { "nb-NO", "en", "nb-NO" }, history.Select(x => JsonDocument.Parse(x.DocumentSettingsJson!).RootElement.GetProperty("language").GetString()));
var detail = await packages.GetAsync(Owner, job.Id, captured!.Id, default);
Assert.Equal(htmlBytes, Encoding.UTF8.GetBytes(detail!.RenderedCoverLetterHtml!));
Assert.Equal(settingsBytes, Encoding.UTF8.GetBytes(CoverLetterDocumentSettingsJson.Serialize(detail.CoverLetterDocumentSettings)));
}
}