using System.Reflection;
using JobTrackerApi.Controllers;
using Xunit;

namespace JobTrackerApi.Tests;

public sealed class JobApplicationsControllerTests
{
    [Fact]
    public void Application_package_record_exposes_expected_fields()
    {
        var type = typeof(GenerateApplicationPackageDto);
        Assert.NotNull(type);

        var props = type!.GetProperties(BindingFlags.Public | BindingFlags.Instance).Select(x => x.Name).ToHashSet();
        Assert.Contains("TailoredCvText", props);
        Assert.Contains("CoverLetterDraft", props);
        Assert.Contains("ApplicationAnswerDraft", props);
        Assert.Contains("RecruiterMessageDraft", props);
        Assert.Contains("KeyPoints", props);
    }

    [Fact]
    public void Save_application_drafts_request_supports_the_complete_application_package()
    {
        var type = typeof(SaveApplicationDraftsRequest);
        Assert.NotNull(type);

        var ctor = type!.GetConstructors().Single();
        var parameters = ctor.GetParameters().Select(x => x.Name).Where(x => x is not null).Select(x => x!).ToHashSet(StringComparer.OrdinalIgnoreCase);
        Assert.Contains("coverLetterText", parameters);
        Assert.Contains("notes", parameters);
        Assert.Contains("applicationAnswerDraft", parameters);
        Assert.Contains("recruiterMessageDraft", parameters);
    }
}
