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