feat: complete phase 2 UX improvements
This commit is contained in:
@@ -1,3 +1,5 @@
|
||||
using System.Reflection;
|
||||
using JobTrackerApi.Controllers;
|
||||
using JobTrackerApi.Models;
|
||||
using Xunit;
|
||||
|
||||
@@ -74,4 +76,71 @@ public sealed class CvExtractionCoverageTests
|
||||
Assert.NotEmpty(profile.Certifications);
|
||||
Assert.Equal(2, profile.Languages.Count);
|
||||
}
|
||||
[Fact]
|
||||
public void Normalized_markdown_strips_skill_group_labels()
|
||||
{
|
||||
var profile = InvokeProfileBuilder("""
|
||||
# Skills
|
||||
Development: C#
|
||||
DevOps & Infrastructure: Docker
|
||||
Practices: CI/CD
|
||||
""");
|
||||
|
||||
Assert.Equal(new[] { "C#", "CI/CD", "Docker" }, profile.Skills);
|
||||
Assert.DoesNotContain(profile.Skills, skill => skill.StartsWith("Development", System.StringComparison.OrdinalIgnoreCase));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Normalized_markdown_separates_glued_dates_from_job_title()
|
||||
{
|
||||
var profile = InvokeProfileBuilder("""
|
||||
# Work Experience
|
||||
2015–2023System Developer
|
||||
Warwickshire County Council, UK
|
||||
- Built APIs
|
||||
""");
|
||||
|
||||
var job = Assert.Single(profile.Jobs);
|
||||
Assert.Equal("2015", job.Start);
|
||||
Assert.Equal("2023", job.End);
|
||||
Assert.Contains("System Developer", job.Title ?? string.Empty);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Extraction_repairs_common_utf8_as_latin1_mojibake()
|
||||
{
|
||||
var method = typeof(ProfileCvController).GetMethod("RepairKnownMojibake", BindingFlags.NonPublic | BindingFlags.Static)!;
|
||||
var repaired = Assert.IsType<string>(method.Invoke(null, new object[] { "Tønsberg 2015–2023" }));
|
||||
|
||||
Assert.Equal("Tønsberg 2015–2023", repaired);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Earlier_part_time_roles_become_separate_experience_entries()
|
||||
{
|
||||
var profile = InvokeProfileBuilder("""
|
||||
# Work Experience
|
||||
System Developer
|
||||
Warwickshire County Council
|
||||
2015–2023
|
||||
- Built APIs
|
||||
|
||||
Earlier roles (part-time)
|
||||
- Sales Assistant — Royal Vapes | 2013–2015
|
||||
- Labourer — The Hodcarrier | 2014–2016
|
||||
- Lifeguard — Nuffield Health | 2012–2014
|
||||
""");
|
||||
|
||||
Assert.Contains(profile.Jobs, job => job.Title == "Sales Assistant" && job.Company == "Royal Vapes");
|
||||
Assert.Contains(profile.Jobs, job => job.Title == "Labourer" && job.Company == "The Hodcarrier");
|
||||
Assert.Contains(profile.Jobs, job => job.Title == "Lifeguard" && job.Company == "Nuffield Health");
|
||||
Assert.Equal(4, profile.Jobs.Count);
|
||||
}
|
||||
|
||||
private static StructuredCvProfile InvokeProfileBuilder(string markdown)
|
||||
{
|
||||
var method = typeof(ProfileCvController).GetMethod("BuildStructuredCvFromNormalizedMarkdown", BindingFlags.NonPublic | BindingFlags.Static)!;
|
||||
return Assert.IsType<StructuredCvProfile>(method.Invoke(null, new object[] { markdown }));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user