fix(email): retire legacy SMTP follow-up
CI and Deploy / test (pull_request) Failing after 55s
CI and Deploy / deploy (pull_request) Has been skipped

Keep follow-up draft generation but remove the direct application SMTP delivery boundary. Route users to the provider-aware Job email flow and return 410 for legacy API callers.
This commit is contained in:
cesnimda
2026-08-10 00:43:52 +02:00
parent d7b556e494
commit 8fe39031ea
14 changed files with 46 additions and 96 deletions
@@ -125,9 +125,7 @@ public sealed class AiWorkspaceNotePersistenceTests
var controller = new JobApplicationsController(
db,
summarizer,
Mock.Of<IAppEmailSender>(),
TestHostFactory.CreateUserManager(user).Object,
NullLogger<JobApplicationsController>.Instance,
Mock.Of<ICvTemplateRenderer>(),
Mock.Of<ICvPdfExporter>());
controller.ControllerContext = new ControllerContext
@@ -114,9 +114,7 @@ public sealed class InterviewPrepPersistenceTests
var controller = new JobApplicationsController(
db,
summarizer,
Mock.Of<IAppEmailSender>(),
TestHostFactory.CreateUserManager(null).Object,
NullLogger<JobApplicationsController>.Instance,
Mock.Of<ICvTemplateRenderer>(),
Mock.Of<ICvPdfExporter>());
controller.ControllerContext = new ControllerContext
@@ -455,9 +455,7 @@ public sealed class JobApplicationsApplicationPackageTests
var controller = new JobApplicationsController(
db,
summarizer,
Mock.Of<IAppEmailSender>(),
CreateUserManager(user).Object,
NullLogger<JobApplicationsController>.Instance,
renderer ?? new TestCvTemplateRenderer(),
exporter ?? new TestCvPdfExporter());
controller.ControllerContext = new ControllerContext
@@ -115,7 +115,7 @@ public sealed class JobApplicationsAppliedDateHistoryTests
private static JobApplicationsController CreateController(JobTrackerContext db, string userId)
{
var controller = new JobApplicationsController(db, Mock.Of<ISummarizerService>(), Mock.Of<IAppEmailSender>(), TestHostFactory.CreateUserManager().Object, NullLogger<JobApplicationsController>.Instance);
var controller = new JobApplicationsController(db, Mock.Of<ISummarizerService>(), TestHostFactory.CreateUserManager().Object);
controller.ControllerContext = new ControllerContext
{
HttpContext = new DefaultHttpContext
@@ -88,7 +88,7 @@ public sealed class JobApplicationsAuthorizationTests
{
var summarizer = new Mock<ISummarizerService>();
var users = TestHostFactory.CreateUserManager();
return new JobApplicationsController(db, summarizer.Object, Mock.Of<IAppEmailSender>(), users.Object, NullLogger<JobApplicationsController>.Instance)
return new JobApplicationsController(db, summarizer.Object, users.Object)
{
ControllerContext = new ControllerContext
{
@@ -295,7 +295,7 @@ public sealed class JobApplicationsEndpointBehaviorTests
summarizer.Setup(x => x.SummarizeSectionAsync(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<int>(), It.IsAny<int>())).ReturnsAsync("generated text");
var users = CreateUserManager();
var controller = new JobApplicationsController(db, summarizer.Object, Mock.Of<IAppEmailSender>(), users.Object, NullLogger<JobApplicationsController>.Instance);
var controller = new JobApplicationsController(db, summarizer.Object, users.Object);
controller.ControllerContext = new ControllerContext
{
HttpContext = new DefaultHttpContext
@@ -103,9 +103,29 @@ public sealed class JobApplicationsFollowUpDraftTests
Assert.Contains("Maria Recruiter", payload.LastCorrespondenceFrom ?? string.Empty);
}
[Fact]
public void Legacy_follow_up_delivery_is_gone_and_has_no_smtp_dependency()
{
using var db = CreateDb();
var controller = CreateController(db, Mock.Of<ISummarizerService>(), "user-1");
var result = controller.SendFollowUp(42, new SendFollowUpRequest(
"recruiter@example.test",
"Synthetic subject",
"Synthetic body",
DateTime.UtcNow.AddDays(3)), default);
var gone = Assert.IsType<ObjectResult>(result);
Assert.Equal(StatusCodes.Status410Gone, gone.StatusCode);
Assert.Equal("Legacy email delivery retired", Assert.IsType<ProblemDetails>(gone.Value).Title);
Assert.Empty(db.Correspondences);
Assert.DoesNotContain(typeof(JobApplicationsController).GetConstructors().Single().GetParameters(),
parameter => parameter.ParameterType == typeof(IAppEmailSender));
}
private static JobApplicationsController CreateController(JobTrackerContext db, ISummarizerService summarizer, string userId)
{
var controller = new JobApplicationsController(db, summarizer, Mock.Of<IAppEmailSender>(), CreateUserManager().Object, NullLogger<JobApplicationsController>.Instance);
var controller = new JobApplicationsController(db, summarizer, CreateUserManager().Object);
controller.ControllerContext = new ControllerContext
{
HttpContext = new DefaultHttpContext
@@ -41,7 +41,7 @@ public sealed class JobApplicationsMariaDraftTests
summarizer.Setup(x => x.SummarizeSectionAsync(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<int>(), It.IsAny<int>())).ReturnsAsync("generated text");
var users = CreateUserManager();
var controller = new JobApplicationsController(db, summarizer.Object, Mock.Of<IAppEmailSender>(), users.Object, NullLogger<JobApplicationsController>.Instance);
var controller = new JobApplicationsController(db, summarizer.Object, users.Object);
controller.ControllerContext = new ControllerContext
{
HttpContext = new DefaultHttpContext
@@ -110,7 +110,7 @@ public sealed class JobApplicationsWorkflowSignalsTests
private static JobApplicationsController CreateController(JobTrackerContext db, string userId)
{
var controller = new JobApplicationsController(db, Mock.Of<ISummarizerService>(), Mock.Of<IAppEmailSender>(), CreateUserManager().Object, NullLogger<JobApplicationsController>.Instance);
var controller = new JobApplicationsController(db, Mock.Of<ISummarizerService>(), CreateUserManager().Object);
controller.ControllerContext = new ControllerContext
{
HttpContext = new DefaultHttpContext