using Json2CSharpCodeGenerator.Lib;
using Json2CSharpCodeGenerator.Lib.CodeWriters;
using Microsoft.VisualStudio.TestTools.UnitTesting;

namespace Json2CSharpCodeGenerator.Tests;

[TestClass]
public class Test_11_NoListSetter
{
    [TestMethod]
    public void Run()
    {
        string path = Path.Combine(AppContext.BaseDirectory, "Test_11_NoListSetter_INPUT.txt");
        string resultPath = Path.Combine(AppContext.BaseDirectory, "Test_11_NoListSetter_OUTPUT.txt");
        string input = File.ReadAllText(path);

        CSharpCodeWriter csharpCodeWriter = new();
        JsonClassGenerator jsonClassGenerator = new()
        {
            MutableClasses =
                {
                    ReadOnlyCollectionProperties = true
                },
            AttributeLibrary = JsonLibrary.SystemTextJson,
            AttributeUsage = JsonPropertyAttributeUsage.Always,
            UsePascalCase = true
        };

        jsonClassGenerator.CodeWriter = csharpCodeWriter;
        string returnVal = jsonClassGenerator.GenerateClasses(input, out string errorMessage).ToString();
        string resultsCompare = File.ReadAllText(resultPath);

        Assert.AreEqual(expected: resultsCompare.NormalizeOutput(), actual: returnVal.NormalizeOutput());
        Assert.AreEqual(expected: string.Empty, errorMessage);
    }

    [TestMethod]
    public void Run2()
    {
        string path = Path.Combine(AppContext.BaseDirectory, "Test_11_NoListSetter_INPUT1.txt");
        string resultPath = Path.Combine(AppContext.BaseDirectory, "Test_11_NoListSetter_OUTPUT1.txt");
        string input = File.ReadAllText(path);

        CSharpCodeWriter csharpCodeWriter = new();
        JsonClassGenerator jsonClassGenerator = new()
        {
            MutableClasses =
                {
                    ReadOnlyCollectionProperties = true
                },
            CollectionType = OutputCollectionType.Array,
            AttributeLibrary = JsonLibrary.SystemTextJson,
            AttributeUsage = JsonPropertyAttributeUsage.Always,
            UsePascalCase = true
        };

        jsonClassGenerator.CodeWriter = csharpCodeWriter;
        string returnVal = jsonClassGenerator.GenerateClasses(input, out string errorMessage).ToString();
        string resultsCompare = File.ReadAllText(resultPath);

        Assert.AreEqual(expected: resultsCompare.NormalizeOutput(), actual: returnVal.NormalizeOutput());
        Assert.AreEqual(string.Empty, errorMessage);
    }
}