using NATS.Server.Configuration;

namespace NATS.Server.Core.Tests.Configuration;

public class ConfigWarningsParityBatch1Tests
{
    [Fact]
    public void Config_warning_types_expose_message_and_source()
    {
        var warning = new ConfigWarningException("warn", "conf:1:2");
        var unknown = new UnknownConfigFieldWarning("mystery_field", "conf:3:1");

        warning.Message.ShouldBe("warn");
        warning.SourceLocation.ShouldBe("conf:1:2");
        unknown.Field.ShouldBe("mystery_field");
        unknown.SourceLocation.ShouldBe("conf:3:1");
        unknown.Message.ShouldContain("unknown field");
    }

    [Fact]
    public void ProcessConfig_collects_unknown_field_warnings_when_errors_are_present()
    {
        var ex = Should.Throw<ConfigProcessorException>(() => ConfigProcessor.ProcessConfig("""
            max_sub_tokens: 300
            totally_unknown_field: 1
            """));

        ex.Errors.ShouldNotBeEmpty();
        ex.Warnings.ShouldContain(w => w.Contains("unknown field totally_unknown_field", StringComparison.Ordinal));
    }
}
