feat(workspace): refine career workflows

Make job/CV comparisons language-aware and filter recruitment noise. Improve responsive career navigation, shared spacing, dashboard priorities, settings, localized workspace controls, and portable browser tests.
This commit is contained in:
cesnimda
2026-08-29 16:44:44 +02:00
parent 4d4af47651
commit 9edcbfc5de
29 changed files with 827 additions and 236 deletions
@@ -395,4 +395,29 @@ public sealed class ApplicationIntelligenceTests
// Reading the match must not itself call the AI or append history.
Assert.Equal(interactionsBefore, await db.AiInteractions.CountAsync());
}
[Fact]
public async Task Match_uses_saved_English_translation_when_linked_cv_is_English()
{
var (db, intelligence, _) = New("user-1");
await using var _d = db;
var job = await SeedJobAsync(db, "user-1", j =>
{
j.Description = "Vi ser etter en utvikler med erfaring fra C# og skalerbare systemer.";
j.DescriptionLanguage = "nb-NO";
j.TranslatedDescription = "We need a developer with C# and scalable systems experience.";
});
await SeedProfileAsync(db, "user-1");
await AttachCvAsync(db, "user-1", job.Id, new CvVariantSettings { Language = "en" });
var match = await intelligence.MatchAsync("user-1", job.Id, default);
Assert.NotNull(match);
Assert.Equal("nb", match!.JobLanguage);
Assert.Equal("en", match.CvLanguage);
Assert.True(match.LanguageMismatch);
Assert.True(match.UsedTranslatedJobDescription);
Assert.Contains("C#", match.MatchedSkills);
Assert.DoesNotContain(match.MissingSkills, value => value.Equals("utvikler", StringComparison.OrdinalIgnoreCase));
}
}
@@ -18,7 +18,15 @@ public sealed class JobCvMatchServiceTests
"Senior systemutvikler",
"Vi ser etter deg som har erfaring med C# og ASP.NET Core. Du vil designe skalerbare distribuerte systemer. Gode samarbeidsevner er en fordel.",
new[] { "C#", "ASP.NET Core", "designe skalerbare distribuerte systemer" },
new[] { "med", "til", "for", "som", "erfaring", "ser" },
new[] { "med", "til", "for", "som", "erfaring", "ser", "både", "del", "dnbs", "faglig", "får", "god", "hos", "utvikling" },
};
yield return new object[]
{
"Norwegian recruitment filler",
"Systemutvikler",
"Hos DNBs faglige miljø får du både være del av god utvikling og bidra til moderne løsninger med C# og Azure.",
new[] { "C#", "Azure" },
new[] { "både", "del", "dnbs", "faglig", "får", "god", "hos", "utvikling", "bidra", "løsninger" },
};
yield return new object[]
{