using CoreLibrary.Core;
using CoreLibrary.Events;
using CoreLibrary.Joueurs;
using System.Reflection;
using Xunit;

namespace UnitTesting
{
    public class JoueurBuilderUT
    {
        [Fact]
        public void JoueurBuilderTest()
        {
            string nom = "Céleste";
            string? nomEvenement = "";

            JoueurBuilder builder = new JoueurBuilder();
            builder.ConstruireJoueur += (Object? sender, ConstruireJoueurEventArgs e) => nomEvenement = e.Nom;

            builder.Nom(nom);

            Assert.Equal(nom, nomEvenement);
        }

        [Fact]
        public void JoueurBuilderQuandConstruireJoueur()
        {
            string nom = "Céleste";
            string? nomEvenement = "";

            JoueurBuilder builder = new JoueurBuilder();
            builder.ConstruireJoueur += (Object? sender, ConstruireJoueurEventArgs e) => nomEvenement = e.Nom;

            Type type = typeof(JoueurBuilder);
            MethodInfo? methodInfo = type.GetMethod("QuandConstruireJoueur", BindingFlags.NonPublic | BindingFlags.Instance);
            Assert.NotNull(methodInfo);
            methodInfo.Invoke(builder, [nom]);

            Assert.Equal(nom, nomEvenement);
        }

        [Fact]
        public void JoueurBuilderQuandConstruireJoueurSansBranchement()
        {
            JoueurBuilder builder = new JoueurBuilder();

            Assert.Null(Record.Exception(() => builder.Nom("Pauline")));
        }
    }
}
