public async Task WriteDto_ExistingSolution_ComputerDTORewritePreserveCustomCode() { var msWorkspace = MSBuildWorkspace.Create(); var solution = msWorkspace.OpenSolutionAsync(this.TestSolution.FullName).Result; solution = solution.GetIsolatedSolution(); var computerClassDoc = solution.Projects .SelectMany(p => p.Documents) .Where(p => p.Name == "Computer.cs") .FirstOrDefault(); var vm = await EntityViewModel.CreateRecursive(computerClassDoc); vm.DtoName = "ComputerDTO"; var dtoLocation = solution.GetMostLikelyDtoLocation(); var modifiedSolution = await solution.WriteDto(dtoLocation, vm.ConvertToMetadata(), true, false, false); Assert.IsNotNull(modifiedSolution); var computerDto = modifiedSolution.GetChanges(solution) .GetProjectChanges().Single() .GetChangedDocuments() .Select(p => modifiedSolution.GetProject(p.ProjectId).GetDocument(p)) .Where(p => p.Name == "ComputerDTO.cs") .FirstOrDefault(); Assert.IsNotNull(computerDto); var source = await computerDto.GetTextAsync(); var sourceCode = source.ToString(); Assert.IsTrue(sourceCode.IndexOf("private int _customField;") > sourceCode.IndexOf("////BCC/ BEGIN CUSTOM CODE SECTION")); Assert.IsTrue(sourceCode.IndexOf("public void EndMethod()") < sourceCode.IndexOf("////ECC/ END CUSTOM CODE SECTION")); sourceCode = sourceCode.Substring(sourceCode.IndexOf("public class ComputerMapper")); Assert.IsTrue(sourceCode.IndexOf("public Expression<Func<City, ComputerDTO>> SelectorExpressionFromCity") > sourceCode.IndexOf("////BCC/ BEGIN CUSTOM CODE SECTION")); Assert.IsTrue(sourceCode.IndexOf("public void Test()") < sourceCode.IndexOf("////ECC/ END CUSTOM CODE SECTION")); sourceCode = sourceCode.Substring(sourceCode.IndexOf("public override Expression<Func<Computer, ComputerDTO>> SelectorExpression")); Assert.IsTrue(sourceCode.IndexOf("Xy = 77,") > sourceCode.IndexOf("////BCC/ BEGIN CUSTOM CODE SECTION")); Assert.IsTrue(sourceCode.IndexOf("// another comment") < sourceCode.IndexOf("////ECC/ END CUSTOM CODE SECTION")); sourceCode = sourceCode.Substring(sourceCode.IndexOf("public override void MapToModel")); Assert.IsTrue(sourceCode.IndexOf("var x = 0;") > sourceCode.IndexOf("////BCC/ BEGIN CUSTOM CODE SECTION")); Assert.IsTrue(sourceCode.IndexOf("model.Cpus = x;") < sourceCode.IndexOf("////ECC/ END CUSTOM CODE SECTION")); }
public async Task WriteDto_ExistingSolution_FishWithIdOverride() { var msWorkspace = MSBuildWorkspace.Create(); var solution = msWorkspace.OpenSolutionAsync(this.TestSolution.FullName).Result; solution = solution.GetIsolatedSolution(); var fishClassDoc = solution.Projects .SelectMany(p => p.Documents) .Where(p => p.Name == "Fish.cs") .FirstOrDefault(); var vm = await EntityViewModel.CreateRecursive(fishClassDoc); vm.DtoName = "FishDTO"; var dtoLocation = solution.GetMostLikelyDtoLocation(); var modifiedSolution = await solution.WriteDto(dtoLocation, vm.ConvertToMetadata(), true, false, false); Assert.IsNotNull(modifiedSolution); var changeSet = modifiedSolution.GetChanges(solution); Assert.AreEqual(1, changeSet.GetProjectChanges().Count()); var projectChanges = changeSet.GetProjectChanges().Single(); Assert.AreEqual(2, projectChanges.GetAddedDocuments().Count()); var addedDocs = projectChanges .GetAddedDocuments() .Select(p => modifiedSolution.GetProject(p.ProjectId).GetDocument(p)); var fishDto = addedDocs .Where(p => p.Name == "FishDTO.cs") .FirstOrDefault(); Assert.IsNotNull(fishDto); var source = await fishDto.GetTextAsync(); var sourceCode = source.ToString(); Assert.IsTrue(sourceCode.IndexOf("public int Id { get; set; }") > 0); Assert.AreEqual(sourceCode.IndexOf("public int Id { get; set; }"), sourceCode.LastIndexOf("public int Id { get; set; }")); }
public async Task WriteDto_ExistingSolution_CityDTORewrite() { var msWorkspace = MSBuildWorkspace.Create(); var solution = msWorkspace.OpenSolutionAsync(this.TestSolution.FullName).Result; solution = solution.GetIsolatedSolution(); var personClassDoc = solution.Projects .SelectMany(p => p.Documents) .Where(p => p.Name == "City.cs") .FirstOrDefault(); var vm = await EntityViewModel.CreateRecursive(personClassDoc); vm.DtoName = "CityDTO"; var dtoLocation = solution.GetMostLikelyDtoLocation(); var modifiedSolution = await solution.WriteDto(dtoLocation, vm.ConvertToMetadata(), true, false); Assert.IsNotNull(modifiedSolution); var cityDto = modifiedSolution.GetChanges(solution) .GetProjectChanges().Single() .GetChangedDocuments() .Select(p => modifiedSolution.GetProject(p.ProjectId).GetDocument(p)) .Where(p => p.Name == "CityDTO.cs") .FirstOrDefault(); Assert.IsNotNull(cityDto); var source = await cityDto.GetTextAsync(); var sourceCode = source.ToString(); Assert.AreEqual(3, Regex.Matches(sourceCode, CustomCodeCommentWrapper.CustomCodeCommentBegin).Count); Assert.AreEqual(3, Regex.Matches(sourceCode, CustomCodeCommentWrapper.CustomCodeCommentEnd).Count); Assert.IsTrue(sourceCode.Contains("CustomProperty = p.Name + p.PostalCode,")); }
public async Task WriteDto_ExistingSolution_DataContract() { var msWorkspace = MSBuildWorkspace.Create(); var solution = msWorkspace.OpenSolutionAsync(this.TestSolution.FullName).Result; solution = solution.GetIsolatedSolution(); var personClassDoc = solution.Projects .SelectMany(p => p.Documents) .Where(p => p.Name == "City.cs") .FirstOrDefault(); var vm = await EntityViewModel.CreateRecursive(personClassDoc); vm.DtoName = "CityDTO"; var dtoLocation = solution.GetMostLikelyDtoLocation(); var modifiedSolution = await solution.WriteDto(dtoLocation, vm.ConvertToMetadata(), false, true); Assert.IsNotNull(modifiedSolution); var cityDto = modifiedSolution.GetChanges(solution) .GetProjectChanges().Single() .GetChangedDocuments() .Select(p => modifiedSolution.GetProject(p.ProjectId).GetDocument(p)) .Where(p => p.Name == "CityDTO.cs") .FirstOrDefault(); Assert.IsNotNull(cityDto); var source = await cityDto.GetTextAsync(); var sourceCode = source.ToString(); Assert.IsTrue(sourceCode.Contains("[DataContract]")); Assert.IsTrue(sourceCode.Contains("[DataMember]")); Assert.IsTrue(sourceCode.Contains("using System.Runtime.Serialization;")); }
public async Task EntityViewModel_GetRelatedEntity_FromTestSolution() { var msWorkspace = MSBuildWorkspace.Create(); var solution = msWorkspace.OpenSolutionAsync(this.TestSolution.FullName).Result; var personClassDoc = solution.Projects .SelectMany(p => p.Documents) .Where(p => p.Name == "Person.cs") .FirstOrDefault(); var vm = await EntityViewModel.CreateRecursive(personClassDoc); var relatedEntity = vm.Properties .Where(p => p.Name == "City") .Select(p => p.RelatedEntity) .Single(); Assert.IsNotNull(relatedEntity); Assert.AreEqual("City", relatedEntity.EntityName); Assert.IsTrue(relatedEntity.Properties.Any(p => p.Name == "UniqueId")); msWorkspace.Dispose(); }
public async Task WriteDto_ExistingSolution_Scenario() { var msWorkspace = MSBuildWorkspace.Create(); var solution = msWorkspace.OpenSolutionAsync(this.TestSolution.FullName).Result; solution = solution.GetIsolatedSolution(); var personClassDoc = solution.Projects .SelectMany(p => p.Documents) .Where(p => p.Name == "Person.cs") .FirstOrDefault(); var vm = await EntityViewModel.CreateRecursive(personClassDoc); vm.DtoName = "PersonDTO"; var dtoLocation = solution.GetMostLikelyDtoLocation(); var modifiedSolution = await solution.WriteDto(dtoLocation, vm.ConvertToMetadata(), true, false); Assert.IsNotNull(modifiedSolution); var changeSet = modifiedSolution.GetChanges(solution); Assert.AreEqual(1, changeSet.GetProjectChanges().Count()); var projectChanges = changeSet.GetProjectChanges().Single(); Assert.AreEqual(2, projectChanges.GetAddedDocuments().Count()); var addedDocs = projectChanges.GetAddedDocuments() .Select(p => modifiedSolution.GetProject(p.ProjectId).GetDocument(p)) .ToList(); Assert.IsTrue(addedDocs.Any(p => p.Name == "PersonDTO.cs")); Assert.IsTrue(addedDocs.Any(p => p.Name == "MapperBase.cs")); }
public async Task WriteDto_ExistingSolution_PersonContact() { var msWorkspace = MSBuildWorkspace.Create(); var solution = msWorkspace.OpenSolutionAsync(this.TestSolution.FullName).Result; solution = solution.GetIsolatedSolution(); var personContactClass = solution.Projects .SelectMany(p => p.Documents) .Where(p => p.Name == "PersonContact.cs") .FirstOrDefault(); var vm = await EntityViewModel.CreateRecursive(personContactClass); vm.DtoName = "PersonContactDTO"; var typeProp = vm.Properties.Where(p => p.Name == "Type").Single(); typeProp.IsSelected = true; var personProp = vm.Properties.Where(p => p.Name == "Person").Single(); personProp.IsSelected = true; foreach (var p in personProp.RelatedEntity.Properties) { if (p.Name == "FullName" || p.Name == "Contacts" || p.Name == "City") { p.IsSelected = true; } if (p.Name == "City") { var cityNameProp = p.RelatedEntity.Properties.Where(c => c.Name == "Name").Single(); cityNameProp.IsSelected = true; } } var dtoLocation = solution.GetMostLikelyDtoLocation(); var modifiedSolution = await solution.WriteDto(dtoLocation, vm.ConvertToMetadata(), true, false); Assert.IsNotNull(modifiedSolution); var changeSet = modifiedSolution.GetChanges(solution); Assert.AreEqual(1, changeSet.GetProjectChanges().Count()); var projectChanges = changeSet.GetProjectChanges().Single(); Assert.AreEqual(2, projectChanges.GetAddedDocuments().Count()); var addedDocs = projectChanges.GetAddedDocuments() .Select(p => modifiedSolution.GetProject(p.ProjectId).GetDocument(p)) .ToList(); var personContactDto = addedDocs .Where(p => p.Name == "PersonContactDTO.cs") .SingleOrDefault(); Assert.IsNotNull(personContactDto); var source = await personContactDto.GetTextAsync(); var sourceCode = source.ToString(); Assert.IsTrue(sourceCode.Contains("public ContactType Type { get; set; }")); }