public virtual async Task DefaultProjectDtosProviderShouldReturnDtosAsDesired()
        {
            using (Workspace workspace = GetWorkspace())
            {
                Solution solution = workspace.CurrentSolution;

                IProjectDtosProvider projectDtosProvider = new DefaultProjectDtosProvider(new DefaultProjectDtoControllersProvider());

                IList <Dto> dtos = projectDtosProvider.GetProjectDtos(solution.Projects.Single(p => p.Name == "Bit.Model"))
                                   .Union(projectDtosProvider.GetProjectDtos(solution.Projects.Single(p => p.Name == "Foundation.Api"))).ToList();

                Assert.IsTrue(dtos.Select(d => d.DtoSymbol.Name).SequenceEqual(new[] { "UserSetting", "JobInfo", "ClientLogDto" }));
            }
        }
Exemple #2
0
        public virtual async Task IDtoShouldNotHaveIsSyncedPropertyWhenItIsNotISyncable()
        {
            const string sourceCodeOfDtoControllerWithActionAndParameter = @"

public interface IDto {
}

public interface ISyncableDto : IDto {
}

public class TestDto : IDto {
}

public class DtoController<TDto>
    where TDto : IDto
{

}

public class TestController : DtoController<TestDto>
{

}
";

            IProjectDtosProvider projectDtosProvider = new DefaultProjectDtosProvider(new DefaultProjectDtoControllersProvider());

            Assert.AreEqual(0, (await projectDtosProvider.GetProjectDtos(CreateProjectFromSourceCodes(sourceCodeOfDtoControllerWithActionAndParameter))).Single().Properties.Count);
        }
        public async Task ITypeSymbolExtensionsShouldDetectNullableTypeSymbolAsDesired()
        {
            string dtoCode = @"
public interface IDto {
}

public class SampleDto : IDto {
    public virtual int Id {get;set;}
    public virtual int? Id2 {get;set;}
    public virtual string Id3 {get;set;}
}

public class DtoController<TDto>
    where TDto : IDto
{

}

public class SamplesController : DtoController<SampleDto>
{

}

";
            DefaultProjectDtosProvider dtosProvider = new DefaultProjectDtosProvider(new DefaultProjectDtoControllersProvider());

            Dto dto = (await dtosProvider.GetProjectDtos(CreateProjectFromSourceCodes(dtoCode))).Single();

            Assert.IsFalse(dto.Properties.ElementAt(0).Type.IsNullable());
            Assert.IsTrue(dto.Properties.ElementAt(1).Type.IsNullable());
            Assert.IsTrue(dto.Properties.ElementAt(2).Type.IsNullable());
        }
        public void IPropertySymbolExtensionsShouldDeterminateConcurrencyCheckPropertiesAsDesired()
        {
            string dtoCode = @"

public interface IDto {
}

public class SampleDto : IDto {
    [ConcurrencyCheckAttribute]
    public virtual int Concurrency{get;set;}
    public virtual int NonConcurrency{get;set;}

}

public class DtoController<TDto>
    where TDto : IDto
{

}

public class SamplesController : DtoController<SampleDto>
{

}

";
            DefaultProjectDtosProvider dtosProvider = new DefaultProjectDtosProvider(new DefaultProjectDtoControllersProvider());

            Dto dto = dtosProvider.GetProjectDtos(CreateProjectFromSourceCodes(dtoCode)).Single();

            Assert.IsTrue(dto.Properties.ElementAt(0).HasConcurrencyCheck());
            Assert.AreEqual(1, dto.Properties.Count(p => p.HasConcurrencyCheck()));
        }
        public virtual async Task ISyncableDtoShouldHaveISVProperty()
        {
            const string sourceCodeOfDtoControllerWithActionAndParameter = @"

public interface IDto {
}

public interface ISyncableDto : IDto {
}

public class TestDto : ISyncableDto {
    public bool ISV { get; set; }
}

public class DtoController<TDto>
    where TDto : IDto
{

}

public class TestController : DtoController<TestDto>
{

}
";

            IProjectDtosProvider projectDtosProvider = new DefaultProjectDtosProvider(new DefaultProjectDtoControllersProvider());

            Assert.AreEqual(1, projectDtosProvider.GetProjectDtos(CreateProjectFromSourceCodes(sourceCodeOfDtoControllerWithActionAndParameter)).Single().Properties.Count);
        }
        public async Task ITypeSymbolExtensionsShouldReturnTypeScriptElementTypeNameAsDesired()
        {
            string dtoCode = @"

public interface IDto {
}

public class SampleDto : IDto {
    public virtual System.Linq.IQueryable<int> Id {get;set;}
}

public class DtoController<TDto>
    where TDto : IDto
{

}

public class SamplesController : DtoController<SampleDto>
{

}

";
            DefaultProjectDtosProvider dtosProvider = new DefaultProjectDtosProvider(new DefaultProjectDtoControllersProvider());

            Dto dto = (await dtosProvider.GetProjectDtos(CreateProjectFromSourceCodes(dtoCode))).Single();

            Assert.AreEqual("number", (dto.Properties.ElementAt(0).Type as INamedTypeSymbol).GetTypeScriptElementTypeName());
        }
        public void ITypeSymbolExtensionsShouldDetectUnderlyingTypeSymbolAsDesired()
        {
            string dtoCode = @"
public interface IDto {
}

public class SampleDto : IDto {
    public virtual int Id {get;set;}
    public virtual int? Id2 {get;set;}
    public virtual Task<int> Id3 {get;set;}
}

public class DtoController<TDto>
    where TDto : IDto
{

}

public class SamplesController : DtoController<SampleDto>
{

}

";
            DefaultProjectDtosProvider dtosProvider = new DefaultProjectDtosProvider(new DefaultProjectDtoControllersProvider());

            Dto dto = dtosProvider.GetProjectDtos(CreateProjectFromSourceCodes(dtoCode)).Single();

            Assert.AreEqual("Int32", dto.Properties.ElementAt(0).Type.GetUnderlyingTypeSymbol().Name);
            Assert.AreEqual("Int32", dto.Properties.ElementAt(1).Type.GetUnderlyingTypeSymbol().Name);
            Assert.AreEqual("Int32", dto.Properties.ElementAt(2).Type.GetUnderlyingTypeSymbol().Name);
        }
        public virtual async Task DefaultDtosProviderShouldReturnDtosInOrdered()
        {
            const string sourceCodes = @"

public interface IDto {
}

public class DtoController<TDto>
    where TDto : IDto
{

}

public class XDto : CityDto
{
    public CustomerDto Customer { get; set; }
}

public class PersonDto : IDto
{
    public int Id { get; set; }
}

public class CustomerDto : PersonDto
{
    public CityDto City { get; set; }
}

public class CityDto : IDto
{
    public int Id { get; set; }
}

public class PeopleController : DtoController<PersonDto>
{
}

public class CustomersController : DtoController<CustomerDto>
{
}

public class CitiesController : DtoController<CityDto>
{
}

public class XController : DtoController<XDto>
{
}

";

            IProjectDtosProvider projectDtosProvider = new DefaultProjectDtosProvider(new DefaultProjectDtoControllersProvider());

            IList <Dto> result = projectDtosProvider.GetProjectDtos(CreateProjectFromSourceCodes(sourceCodes));

            Assert.IsTrue(result.Select(dto => dto.DtoSymbol.Name).SequenceEqual(new[] { "CityDto", "XDto", "PersonDto", "CustomerDto" }));
        }
        public virtual async Task ITypeSymbolExtensionsShouldFindDtosAsDesired()
        {
            string dtoCode = @"
public interface IDto {

}

public interface ISyncableDto : IDto {
}

public class Person : IDto {
    
}

public class Person2 : ISyncableDto {

}

public class Person3 : IDto , ISyncableDto {

}

public class Person4 {

}

public class DtoController<TDto>
    where TDto : IDto
{

}

public class PeopleController : DtoController<Person>
{

}

public class People2Controller : DtoController<Person2>
{

}

public class People3Controller : DtoController<Person3>
{

}

";
            DefaultProjectDtosProvider dtosProvider = new DefaultProjectDtosProvider(new DefaultProjectDtoControllersProvider());

            Dto[] dtos = (await dtosProvider.GetProjectDtos(CreateProjectFromSourceCodes(dtoCode))).ToArray();

            Assert.IsTrue(new[] { "Person3", "Person2", "Person" }.SequenceEqual(dtos.Select(d => d.DtoSymbol.Name).ToArray()));
        }
Exemple #10
0
        public virtual async Task DefaultProjectDtosProviderShouldReturnDtosAsDesired()
        {
            using (Workspace workspace = await GetWorkspace())
            {
                Solution solution = workspace.CurrentSolution;

                IProjectDtosProvider projectDtosProvider = new DefaultProjectDtosProvider(new DefaultProjectDtoControllersProvider());

                IList <Dto> dtos = (await projectDtosProvider.GetProjectDtos(solution.Projects.Single(p => p.Name == "Bit.Server.OData"), allSourceProjects: solution.Projects.Where(p => p.Name == "Bit.Server.OData" || p.Name == "Bit.Universal.Model").ToList())).ToList();

                Assert.IsTrue(dtos.Select(d => d.DtoSymbol.Name).SequenceEqual(new[] { "UserSetting", "RefDto", "JobInfoDto", "ClientLogDto" }));
            }
        }
        public virtual async Task DefaultProjectDtosProviderShouldReturnDtosOfTestProjectAsDesired()
        {
            using (Workspace workspace = GetWorkspace())
            {
                Solution solution = workspace.CurrentSolution;

                IProjectDtosProvider projectDtosProvider = new DefaultProjectDtosProvider(new DefaultProjectDtoControllersProvider());

                IList <Dto> dtos = projectDtosProvider.GetProjectDtos(solution.Projects.Single(p => p.Name == "Foundation.Test")).ToList();

                Assert.AreEqual(11, dtos.Count);
            }
        }
        public virtual async Task DefaultDtosProviderShouldReturnDtosOfGenericDesign()
        {
            const string         sourceCodes         = @"

public interface IDto {
}

public class DtoController<TDto>
    where TDto : IDto
{

}

public class PersonDto : IDto
{
    public int Id { get; set; }
}

public class CustomerDto : PersonDto
{
    
}

public class EmployeeDto : PersonDto
{
    
}

public class PeopleController<TPersonDto> : DtoController<TPersonDto>
    where TPersonDto : PersonDto
{
}

public class CustomersController : PeopleController<CustomerDto>
{
}

public class EmployeesController : PeopleController<EmployeeDto>
{
}

";
            IProjectDtosProvider projectDtosProvider = new DefaultProjectDtosProvider(new DefaultProjectDtoControllersProvider());

            IList <Dto> result = projectDtosProvider.GetProjectDtos(CreateProjectFromSourceCodes(sourceCodes));

            Assert.IsTrue(result.Select(dto => dto.DtoSymbol.Name).SequenceEqual(new[] { "PersonDto", "EmployeeDto", "CustomerDto" }));
        }
        public async Task ITypeSymbolExtensionsShouldReturnEdmTypeNameAsDesired()
        {
            string dtoCode = @"
public interface IDto {
}

public class Person : IDto {
    
}

public class SampleDto : IDto {
    public virtual int Id {get;set;}
    public virtual string Id2 {get;set;}
    public virtual Task<string> Id3 {get;set;}
    public virtual int? Id4 {get;set;}
    public virtual IEnumerable<int> Id5 {get;set;}
    public virtual System.Linq.IQueryable<int> Id6 {get;set;}
    public virtual System.Threading.Tasks.Task<int[]> Id7 {get;set;}
    public virtual System.Threading.Tasks.Task<System.Linq.IQueryable<int>> Id8 {get;set;}
    public virtual Person Id9 {get;set;}
}

public class DtoController<TDto>
    where TDto : IDto
{

}

public class SamplesController : DtoController<SampleDto>
{

}

";
            DefaultProjectDtosProvider dtosProvider = new DefaultProjectDtosProvider(new DefaultProjectDtoControllersProvider());

            Dto dto = (await dtosProvider.GetProjectDtos(CreateProjectFromSourceCodes(dtoCode))).Last();

            Assert.AreEqual("Edm.Int32", (dto.Properties.ElementAt(0).Type as INamedTypeSymbol).GetEdmTypeName(useArrayForIEnumerableTypes: true));
            Assert.AreEqual("Edm.String", (dto.Properties.ElementAt(1).Type as INamedTypeSymbol).GetEdmTypeName(useArrayForIEnumerableTypes: true));
            Assert.AreEqual("Edm.String", (dto.Properties.ElementAt(2).Type as INamedTypeSymbol).GetEdmTypeName(useArrayForIEnumerableTypes: true));
            Assert.AreEqual("Edm.Int32", (dto.Properties.ElementAt(3).Type as INamedTypeSymbol).GetEdmTypeName(useArrayForIEnumerableTypes: true));
            Assert.AreEqual("Array", (dto.Properties.ElementAt(4).Type as INamedTypeSymbol).GetEdmTypeName(useArrayForIEnumerableTypes: true));
            Assert.AreEqual("Array", (dto.Properties.ElementAt(5).Type as INamedTypeSymbol).GetEdmTypeName(useArrayForIEnumerableTypes: true));
            Assert.AreEqual("Array", (dto.Properties.ElementAt(6).Type as INamedTypeSymbol).GetEdmTypeName(useArrayForIEnumerableTypes: true));
            Assert.AreEqual("Array", (dto.Properties.ElementAt(7).Type as INamedTypeSymbol).GetEdmTypeName(useArrayForIEnumerableTypes: true));
            Assert.AreEqual("Person", (dto.Properties.ElementAt(8).Type as INamedTypeSymbol).GetEdmTypeName(useArrayForIEnumerableTypes: true));
        }
        public async Task ITypeSymbolExtensionsShouldDetectIsCollectionTypeAsDesired()
        {
            string dtoCode = @"

public interface IDto {
}

public class SampleDto : IDto {
    public virtual int Id {get;set;}
    public virtual string Id2 {get;set;}
    public virtual Task<string> Id3 {get;set;}
    public virtual int? Id4 {get;set;}
    public virtual IEnumerable<int> Id5 {get;set;}
    public virtual int[] Id6 {get;set;}
    public virtual System.Linq.IQueryable<int> Id7 {get;set;}
    public virtual System.Threading.Tasks.Task<int[]> Id8 {get;set;}
    public virtual System.Threading.Tasks.Task<System.Linq.IQueryable<int>> Id9 {get;set;}
}

public class DtoController<TDto>
    where TDto : IDto
{

}

public class SamplesController : DtoController<SampleDto>
{

}

";

            DefaultProjectDtosProvider dtosProvider = new DefaultProjectDtosProvider(new DefaultProjectDtoControllersProvider());

            Dto dto = (await dtosProvider.GetProjectDtos(CreateProjectFromSourceCodes(dtoCode))).Single();

            Assert.IsFalse(dto.Properties.ElementAt(0).Type.IsCollectionType());
            Assert.IsFalse(dto.Properties.ElementAt(1).Type.IsCollectionType());
            Assert.IsFalse(dto.Properties.ElementAt(2).Type.IsCollectionType());
            Assert.IsFalse(dto.Properties.ElementAt(3).Type.IsCollectionType());
            Assert.IsTrue(dto.Properties.ElementAt(4).Type.IsCollectionType());
            Assert.IsTrue(dto.Properties.ElementAt(5).Type.IsCollectionType());
            Assert.IsTrue(dto.Properties.ElementAt(6).Type.IsCollectionType());
            Assert.IsTrue(dto.Properties.ElementAt(7).Type.IsCollectionType());
            Assert.IsTrue(dto.Properties.ElementAt(8).Type.IsCollectionType());
        }
Exemple #15
0
        public async Task ISymbolExtensionsShouldReturnCommentsAsDesired()
        {
            string dtoCode = @"

public interface IDto {
}

public class SampleDto : IDto {
    /// <summary>
    /// Test
    /// </summary>
    public virtual int Id {get;set;}
    public virtual string Test {get;set;}
}

public class DtoController<TDto>
    where TDto : IDto
{

}

public class SamplesController : DtoController<SampleDto>
{

}

";
            DefaultProjectDtosProvider dtosProvider = new DefaultProjectDtosProvider(new DefaultProjectDtoControllersProvider());

            Dto dto = (await dtosProvider.GetProjectDtos(CreateProjectFromSourceCodes(dtoCode))).Single();

            Assert.AreEqual(@"/**
    Test
    */", dto.Properties.ElementAt(0).GetDocumentationSummary());

            Assert.AreEqual("", dto.Properties.ElementAt(1).GetDocumentationSummary());
        }
        public void IPropertySymbolExtensionsShouldDeterminateKeyPropertiesAsDesired()
        {
            string dtoCode = @"

public interface IDto {
}

public class SampleDto : IDto {
    public virtual int Id {get;set;}
    public virtual int SampleDtoId {get;set;}
    [KeyAttribute]
    public virtual int SomeKye{get;set;}
    public virtual string NotAKey{get;set;}
}

public class DtoController<TDto>
    where TDto : IDto
{

}

public class SamplesController : DtoController<SampleDto>
{

}

";
            DefaultProjectDtosProvider dtosProvider = new DefaultProjectDtosProvider(new DefaultProjectDtoControllersProvider());

            Dto dto = dtosProvider.GetProjectDtos(CreateProjectFromSourceCodes(dtoCode)).Single();

            Assert.IsFalse(dto.Properties.ElementAt(0).IsKey());
            Assert.IsFalse(dto.Properties.ElementAt(1).IsKey());
            Assert.IsTrue(dto.Properties.ElementAt(2).IsKey());
            Assert.IsFalse(dto.Properties.ElementAt(3).IsKey());
        }
        public virtual void DefaultDtosProviderShouldReturnComplexTypesOfSourceProjectsOnly()
        {
            string sourceProjectCodes = @"

public interface IDto {

}

public class DtoController<TDto>
    where TDto : IDto
{

}

public class TestComplexController : DtoController<TestComplexDto>
{
    [FunctionAttribute]
    public System.Threading.Tasks.Task<ComplexObj3[]> GetComplexObjects()
    {
        return null;
    }
}

public class TestComplexDto : IDto
{
    public virtual int EntityId { get; set; }

    public virtual ComplexObj ComplexObj { get; set; }

    public virtual ComplexObj2 ComplexObj2 { get; set; }
}

[System.ComponentModel.DataAnnotations.Schema.ComplexType]
public class ComplexObj
{
    public virtual string Name { get; set; }
}

[System.ComponentModel.DataAnnotations.Schema.ComplexType]
public class ComplexObj3
{
    public virtual string Name { get; set; }
}

";

            string otherProjectCodes = @"

namespace System.ComponentModel.DataAnnotations.Schema
{
    public class ComplexTypeAttribute : Attribute
    {
    }
}

[System.ComponentModel.DataAnnotations.Schema.ComplexType]
public class ComplexObj2
{
    public virtual string Name { get; set; }
}

";

            Project otherProject  = CreateProjectFromSourceCodes(otherProjectCodes);
            Project sourceProject = CreateProjectFromSourceCodesWithExistingSolution(otherProject.Solution, sourceProjectCodes);

            sourceProject = sourceProject.AddProjectReference(new ProjectReference(otherProject.Id));

            DefaultProjectDtosProvider projectDtosProvider = new DefaultProjectDtosProvider(new DefaultProjectDtoControllersProvider());

            Dto[] dtos = projectDtosProvider.GetProjectDtos(sourceProject).ToArray();

            Assert.IsTrue(dtos.Select(d => d.DtoSymbol.Name).SequenceEqual(new[] { "ComplexObj3", "ComplexObj", "TestComplexDto" }));
        }
Exemple #18
0
        public virtual async Task NestedObjectsTest()
        {
            string sourceProjectCodes = @"

public interface IDto {

}

public class DtoController<TDto>
    where TDto : IDto
{

}

public class TestComplexController : DtoController<TestComplexDto>
{
    [FunctionAttribute]
    public System.Threading.Tasks.Task<ComplexObj3[]> GetComplexObjects()
    {
        return null;
    }

    public class SomeActionArgs
    {
        public ComplexObj5 Test5 { get; set; }
        public string Test { get; set; }
    }

    [ActionAttribute]
    public void SomeAction(SomeActionArgs args)
    {
        
    }
}

public class TestComplexDto : IDto
{
    public virtual int EntityId { get; set; }

    public virtual ComplexObj ComplexObj { get; set; }

    public virtual ComplexObj2 ComplexObj2 { get; set; }
}

[System.ComponentModel.DataAnnotations.Schema.ComplexType]
public class ComplexObj
{
    public virtual string Name { get; set; }
}

[System.ComponentModel.DataAnnotations.Schema.ComplexType]
public class ComplexObj3
{
    public virtual string Name { get; set; }

    public virtual ComplexObj4 Obj4 { get; set; }
}

[System.ComponentModel.DataAnnotations.Schema.ComplexType]
public class ComplexObj4
{
    public virtual string Name { get; set; }

    public virtual Test Test { get; set; }
}

[System.ComponentModel.DataAnnotations.Schema.ComplexType]
public class ComplexObj5
{
    public virtual string Name { get; set; }

    public virtual Test2 Test2 { get; set; }
}

public enum Test
{
}

public enum Test2
{
}

";

            string otherProjectCodes = @"

namespace System.ComponentModel.DataAnnotations.Schema
{
    public class ComplexTypeAttribute : Attribute
    {
    }
}

[System.ComponentModel.DataAnnotations.Schema.ComplexType]
public class ComplexObj2
{
    public virtual string Name { get; set; }

    public virtual Test Test { get; set; }
}

public enum Test3
{
}

";

            Project otherProject  = CreateProjectFromSourceCodes(otherProjectCodes);
            Project sourceProject = CreateProjectFromSourceCodesWithExistingSolution(otherProject.Solution, sourceProjectCodes);

            sourceProject = sourceProject.AddProjectReference(new ProjectReference(otherProject.Id));

            DefaultProjectDtoControllersProvider dtoControllersProvider = new DefaultProjectDtoControllersProvider();
            DefaultProjectDtosProvider           projectDtosProvider    = new DefaultProjectDtosProvider(dtoControllersProvider);
            DefaultProjectEnumTypesProvider      enumTypesProvider      = new DefaultProjectEnumTypesProvider(dtoControllersProvider, projectDtosProvider);

            Dto[] dtos = (await projectDtosProvider.GetProjectDtos(sourceProject)).ToArray();

            EnumType[] enums = (await enumTypesProvider.GetProjectEnumTypes(sourceProject)).ToArray();

            Assert.IsTrue(dtos.Select(d => d.DtoSymbol.Name).SequenceEqual(new[] { "ComplexObj5", "ComplexObj4", "ComplexObj3", "ComplexObj2", "ComplexObj", "TestComplexDto" }));

            Assert.IsTrue(enums.Select(d => d.EnumTypeSymbol.Name).SequenceEqual(new[] { "Test2", "Test" }));
        }