using System.Collections.Generic; using System.IO; using CTA.Rules.Config; using CTA.Rules.Models; using CTA.Rules.ProjectFile; using NUnit.Framework; using Shouldly; namespace CTA.Rules.Test { public class ProjectFileCreatorTests { private ProjectFileCreator _vanillaProjectFileCreator; private ProjectFileCreator _mvcProjectFileCreator; private ProjectFileCreator _classLibraryProjectFileCreator; private ProjectFileCreator _webClassLibraryProjectFileCreator; private readonly string _vanillaMvcProfileFilePath = "vanilla-mvc.csproj"; private readonly string _mvcProjectFilePath = "mvc.csproj"; private readonly string _classLibraryProjectFilePath = "classLibrary.csproj"; private readonly string _webClassLibraryProjectFilePath = "webClassLibrary.csproj"; [SetUp] public void Setup() { CreateVanillaXmlProject(_vanillaMvcProfileFilePath); CreateEmptyXmlDocument(_mvcProjectFilePath); CreateEmptyXmlDocument(_classLibraryProjectFilePath); CreateEmptyXmlDocument(_webClassLibraryProjectFilePath); var targetFramework = new List { Constants.DefaultCoreVersion }; var sourceFramework = new List { Constants.DefaultNetFrameworkVersion }; var packages = new Dictionary { { "MyFirstPackage", "1.0.0" }, { "MySecondPackage", "2.0.0" } }; var projectReferences = new List { "TheMainProject", "TheDependency" }; var metaRefs = new List { @"C:\\RandomFile.dll" }; _vanillaProjectFileCreator = new ProjectFileCreator( _vanillaMvcProfileFilePath, targetFramework, packages: packages, projectReferences: new List(), ProjectType.CoreMvc, metaReferences: new List()); _mvcProjectFileCreator = new ProjectFileCreator( _mvcProjectFilePath, targetFramework, packages, projectReferences, ProjectType.Mvc, metaRefs, sourceFramework); _classLibraryProjectFileCreator = new ProjectFileCreator( _classLibraryProjectFilePath, targetFramework, packages, projectReferences, ProjectType.ClassLibrary, metaRefs, sourceFramework); _webClassLibraryProjectFileCreator = new ProjectFileCreator( _webClassLibraryProjectFilePath, targetFramework, packages, projectReferences, ProjectType.WebClassLibrary, metaRefs, sourceFramework); } [TearDown] public void TearDown() { var testFiles = new[] { _classLibraryProjectFilePath, _webClassLibraryProjectFilePath, _mvcProjectFilePath, _vanillaMvcProfileFilePath }; foreach (var testFile in testFiles) if (File.Exists(testFile)) File.Delete(testFile); } [Test] public void CanAddProjectReferencesToVanillaMvcProject() { bool success; success = _vanillaProjectFileCreator.Create(); success.ShouldBeTrue(); } [Test] public void Create_Produces_Formatted_Mvc_Project_File() { _mvcProjectFileCreator.Create(); var projectFileContents = File.ReadAllText(_mvcProjectFilePath); var expectedProjectFileContents = @" netcoreapp3.1 "; Assert.AreEqual(expectedProjectFileContents, projectFileContents); } [Test] public void Create_Produces_Formatted_ClassLibrary_Project_File() { _classLibraryProjectFileCreator.Create(); var projectFileContents = File.ReadAllText(_classLibraryProjectFilePath); var expectedProjectFileContents = @" netcoreapp3.1 "; Assert.AreEqual(expectedProjectFileContents, projectFileContents); } [Test] public void Create_Produces_Formatted_WebClassLibrary_Project_File() { _webClassLibraryProjectFileCreator.Create(); var projectFileContents = File.ReadAllText(_webClassLibraryProjectFilePath); var expectedProjectFileContents = @" netcoreapp3.1 "; Assert.AreEqual(expectedProjectFileContents, projectFileContents); } private void CreateVanillaXmlProject(string vanillaMvcProfileFilePath) { var vanillaMvcProject = @" netcoreapp3.1 "; File.WriteAllText(_vanillaMvcProfileFilePath, vanillaMvcProject); } private void CreateEmptyXmlDocument(string filePath) { File.WriteAllText(filePath, ""); } } }