// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.

using System;
using Xunit;

namespace Microsoft.AspNetCore.Cors.Infrastructure
{
    public class CorsOptionsTest
    {
        [Fact]
        public void AddDefaultPolicy_SetsDefaultPolicyName()
        {
            // Arrange
            var corsOptions = new CorsOptions();
            var expectedPolicy = new CorsPolicy();

            // Act
            corsOptions.AddPolicy("policy1", new CorsPolicy());
            corsOptions.AddDefaultPolicy(expectedPolicy);
            corsOptions.AddPolicy("policy3", new CorsPolicy());

            // Assert
            var actualPolicy = corsOptions.GetPolicy(corsOptions.DefaultPolicyName);
            Assert.Same(expectedPolicy, actualPolicy);
        }

        [Fact]
        public void AddDefaultPolicy_OverridesDefaultPolicyName()
        {
            // Arrange
            var corsOptions = new CorsOptions();
            var expectedPolicy = new CorsPolicy();

            // Act
            corsOptions.AddDefaultPolicy(new CorsPolicy());
            corsOptions.AddDefaultPolicy(expectedPolicy);

            // Assert
            var actualPolicy = corsOptions.GetPolicy(corsOptions.DefaultPolicyName);
            Assert.Same(expectedPolicy, actualPolicy);
        }

        [Fact]
        public void AddDefaultPolicy_UsingPolicyBuilder_SetsDefaultPolicyName()
        {
            // Arrange
            var corsOptions = new CorsOptions();
            CorsPolicy expectedPolicy = null;

            // Act
            corsOptions.AddPolicy("policy1", policyBuilder =>
            {
                policyBuilder.AllowAnyOrigin().Build();
            });
            corsOptions.AddDefaultPolicy(policyBuilder =>
            {
                expectedPolicy = policyBuilder.AllowAnyOrigin().Build();
            });
            corsOptions.AddPolicy("policy3", new CorsPolicy());

            // Assert
            var actualPolicy = corsOptions.GetPolicy(corsOptions.DefaultPolicyName);
            Assert.Same(expectedPolicy, actualPolicy);
        }
    }
}