feat: Add legal compliance changes

- Replace 'diploma mill' language with objective 'unaccredited institution' terminology
- Rename DiplomaMills.cs to UnaccreditedInstitutions.cs with neutral language
- Update EducationVerificationResult.IsUnaccredited property
- Update flag titles to 'Unaccredited Institution' and 'Institution Requires Verification'
- Add legal disclaimer to verification report page
- Add Privacy Policy page (/privacy) with UK GDPR compliance info
- Add Terms of Service page (/terms) with candidate notice requirements
- Add footer links to Privacy and Terms pages
- Update all tests to use new terminology

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
2026-01-25 04:52:12 +00:00
parent 49e4f74768
commit 0c42842655
9 changed files with 401 additions and 57 deletions

View File

@@ -8,14 +8,14 @@ public sealed class EducationVerifierServiceTests
{
private readonly EducationVerifierService _sut = new();
#region Diploma Mill Detection
#region Unaccredited Institution Detection
[Theory]
[InlineData("Belford University")]
[InlineData("Ashwood University")]
[InlineData("Rochville University")]
[InlineData("St Regis University")]
public void Verify_DiplomaMillInstitution_ReturnsDiplomaMill(string institution)
public void Verify_UnaccreditedInstitution_ReturnsUnaccredited(string institution)
{
// Arrange
var education = new EducationEntry
@@ -31,14 +31,14 @@ public sealed class EducationVerifierServiceTests
var result = _sut.Verify(education);
// Assert
result.Status.Should().Be("DiplomaMill");
result.IsDiplomaMill.Should().BeTrue();
result.Status.Should().Be("Unaccredited");
result.IsUnaccredited.Should().BeTrue();
result.IsSuspicious.Should().BeTrue();
result.IsVerified.Should().BeFalse();
}
[Fact]
public void Verify_DiplomaMillInstitution_IncludesVerificationNotes()
public void Verify_UnaccreditedInstitution_IncludesVerificationNotes()
{
// Arrange
var education = new EducationEntry
@@ -51,7 +51,7 @@ public sealed class EducationVerifierServiceTests
var result = _sut.Verify(education);
// Assert
result.VerificationNotes.Should().Contain("diploma mill blacklist");
result.VerificationNotes.Should().Contain("QAA/HESA register");
}
#endregion
@@ -76,7 +76,7 @@ public sealed class EducationVerifierServiceTests
// Assert
result.Status.Should().Be("Suspicious");
result.IsSuspicious.Should().BeTrue();
result.IsDiplomaMill.Should().BeFalse();
result.IsUnaccredited.Should().BeFalse();
result.IsVerified.Should().BeFalse();
}
@@ -109,7 +109,7 @@ public sealed class EducationVerifierServiceTests
// Assert
result.Status.Should().Be("Recognised");
result.IsVerified.Should().BeTrue();
result.IsDiplomaMill.Should().BeFalse();
result.IsUnaccredited.Should().BeFalse();
result.IsSuspicious.Should().BeFalse();
result.MatchedInstitution.Should().Be(expectedMatch);
}
@@ -167,7 +167,7 @@ public sealed class EducationVerifierServiceTests
// Assert
result.Status.Should().Be("Unknown");
result.IsVerified.Should().BeFalse();
result.IsDiplomaMill.Should().BeFalse();
result.IsUnaccredited.Should().BeFalse();
result.IsSuspicious.Should().BeFalse();
result.VerificationNotes.Should().Contain("international institution");
}
@@ -289,7 +289,7 @@ public sealed class EducationVerifierServiceTests
// Assert
results.Should().HaveCount(3);
results[0].Status.Should().Be("Recognised");
results[1].Status.Should().Be("DiplomaMill");
results[1].Status.Should().Be("Unaccredited");
results[2].Status.Should().Be("Unknown");
}