Exemple #1
0
        public void NoTypeRepository_Compiles(string input)
        {
            var sut  = new ModelBuilderExtensionGenerator();
            var code = sut.CreateModelBuilder(input);

            GetMethodDelegate(code);
        }
Exemple #2
0
        public void GeneratedCode_Compiles()
        {
            var sut  = new ModelBuilderExtensionGenerator();
            var code = sut.CreateModelBuilder("new LaDeak.JsonMergePatch.SourceGenerator.AspNetCore.Tests.TypeRepositoryHook()");

            GetMethodDelegate(code);
        }
    public void Execute(GeneratorExecutionContext context)
    {
        var currentAssemblyName   = context.Compilation.Assembly.Name;
        var namespaceName         = NameBuilder.GetNamespace(currentAssemblyName);
        var modelBuilderGenerator = new ModelBuilderExtensionGenerator();
        var mvcExtension          = modelBuilderGenerator.CreateModelBuilder($"{namespaceName}.TypeRepository.Instance");

        context.AddSource("LaDeakJsonMergePatchModelBuilderExtension", SourceText.From(mvcExtension, Encoding.UTF8));
    }
Exemple #4
0
        public void Adds_ITypeRepository_MvcOptions_ServiceRegistrations()
        {
            var sut        = new ModelBuilderExtensionGenerator();
            var code       = sut.CreateModelBuilder("new LaDeak.JsonMergePatch.SourceGenerator.AspNetCore.Tests.TypeRepositoryHook()");
            var mvcBuilder = Substitute.For <IMvcBuilder>();
            var services   = Substitute.For <IServiceCollection>();

            mvcBuilder.Services.Returns(services);

            GetMethodDelegate(code)(mvcBuilder, null, null);

            services.Received().Add(Arg.Is <ServiceDescriptor>(x => x.ServiceType == typeof(ITypeRepository)));
            services.Received().Add(Arg.Is <ServiceDescriptor>(x => x.ServiceType == typeof(IConfigureOptions <Microsoft.AspNetCore.Mvc.MvcOptions>)));
        }
Exemple #5
0
        public void AddsJsonMergePatchInputReader_ToMvcOptions()
        {
            var sut        = new ModelBuilderExtensionGenerator();
            var code       = sut.CreateModelBuilder("new LaDeak.JsonMergePatch.SourceGenerator.AspNetCore.Tests.TypeRepositoryHook()");
            var mvcBuilder = Substitute.For <IMvcBuilder>();
            var services   = Substitute.For <IServiceCollection>();

            mvcBuilder.Services.Returns(services);

            IConfigureOptions <Microsoft.AspNetCore.Mvc.MvcOptions> optionsSetup = null;

            services.When(y => y.Add(Arg.Is <ServiceDescriptor>(x => x.ServiceType == typeof(IConfigureOptions <Microsoft.AspNetCore.Mvc.MvcOptions>))))
            .Do(callInfo => optionsSetup = (callInfo[0] as ServiceDescriptor).ImplementationInstance as IConfigureOptions <Microsoft.AspNetCore.Mvc.MvcOptions>);
            var options = new Microsoft.AspNetCore.Mvc.MvcOptions();

            GetMethodDelegate(code)(mvcBuilder, null, null);
            optionsSetup.Configure(options);

            Assert.Contains(options.InputFormatters, x => x is JsonMergePatchInputReader);
        }
Exemple #6
0
        public void PassesCustom_TypeRepository_RegistersToServices()
        {
            var sut        = new ModelBuilderExtensionGenerator();
            var code       = sut.CreateModelBuilder("new LaDeak.JsonMergePatch.SourceGenerator.AspNetCore.Tests.TypeRepositoryHook()");
            var mvcBuilder = Substitute.For <IMvcBuilder>();
            var services   = Substitute.For <IServiceCollection>();

            mvcBuilder.Services.Returns(services);

            ITypeRepository registeredTypeRepository = null;

            services.When(y => y.Add(Arg.Is <ServiceDescriptor>(x => x.ServiceType == typeof(ITypeRepository))))
            .Do(callInfo => registeredTypeRepository = (callInfo[0] as ServiceDescriptor).ImplementationInstance as ITypeRepository);
            var options = new Microsoft.AspNetCore.Mvc.MvcOptions();

            var typeRepository = new TypeRepositoryHook();

            GetMethodDelegate(code)(mvcBuilder, null, typeRepository);

            Assert.Same(typeRepository, registeredTypeRepository);
        }