Esempio n. 1
0
        public void GetAssembly_GivenNullStreamReturned_ThrowsException()
        {
            //Arrange
            BuildProject buildProject = new BuildProject
            {
                SpecificationId = specificationId,
            };

            ISourceFileRepository sourceFileRepository = CreateSourceFileRepository();

            sourceFileRepository
            .DoesAssemblyExist(Arg.Is(specificationId))
            .Returns(true);

            sourceFileRepository
            .GetAssembly(Arg.Is(specificationId))
            .Returns((Stream)null);

            ILogger logger = CreateLogger();

            SourceCodeService sourceCodeService = CreateSourceCodeService(sourceFileRepository, logger);

            //Act
            Func <Task> test = async() => await sourceCodeService.GetAssembly(buildProject);

            //Assert
            test
            .Should()
            .ThrowExactly <Exception>()
            .Which
            .Message
            .Should()
            .Be($"Failed to get assembly for specification id: '{specificationId}'");
        }
Esempio n. 2
0
        public async Task GetAssembly_GivenStreamReturned_ReturnsAssembly()
        {
            //Arrange
            BuildProject buildProject = new BuildProject
            {
                SpecificationId = specificationId,
            };

            ISourceFileRepository sourceFileRepository = CreateSourceFileRepository();

            sourceFileRepository
            .DoesAssemblyExist(Arg.Is(specificationId))
            .Returns(true);

            Stream stream = new MemoryStream(new byte[100]);

            sourceFileRepository
            .GetAssembly(Arg.Is(specificationId))
            .Returns(stream);

            ILogger logger = CreateLogger();

            SourceCodeService sourceCodeService = CreateSourceCodeService(sourceFileRepository, logger);

            //Act
            byte[] assembly = await sourceCodeService.GetAssembly(buildProject);

            //Assert
            assembly
            .Should()
            .NotBeNull();

            assembly
            .Length
            .Should()
            .Be(100);
        }
Esempio n. 3
0
        public async Task GetAssembly_GivenAssemblyDoesNotExist_CompilesNewAssembly()
        {
            //Arrange
            BuildProject buildProject = new BuildProject
            {
                SpecificationId = specificationId,
            };

            Calculation calculation = new Calculation
            {
                Id              = calculationId,
                BuildProjectId  = buildProjectId,
                Current         = new CalculationVersion(),
                SpecificationId = specificationId,
                Name            = "TestFunction"
            };

            IEnumerable <Calculation> calculations = new List <Calculation>()
            {
                calculation
            };

            ISourceFileRepository sourceFileRepository = CreateSourceFileRepository();

            sourceFileRepository
            .DoesAssemblyExist(Arg.Is(specificationId))
            .Returns(false);

            List <SourceFile> sourceFiles = new List <SourceFile>
            {
                new SourceFile {
                    FileName = "project.vbproj", SourceCode = "<Project Sdk=\"Microsoft.NET.Sdk\"><PropertyGroup><TargetFramework>netcoreapp2.0</TargetFramework></PropertyGroup></Project>"
                },
                new SourceFile {
                    FileName = "ExampleClass.vb", SourceCode = "Public Class ExampleClass\nPublic Property ProviderType() As String\nEnd Class"
                },
                new SourceFile {
                    FileName = "Calculation.vb", SourceCode = "code"
                }
            };

            buildProject.Build = new Build
            {
                SourceFiles = sourceFiles,
            };

            Build newBuild = new Build
            {
                SourceFiles = sourceFiles,
                Assembly    = new byte[100]
            };

            ISourceFileGenerator sourceFileGenerator = Substitute.For <ISourceFileGenerator>();

            sourceFileGenerator
            .GenerateCode(Arg.Is(buildProject), Arg.Any <IEnumerable <Calculation> >(), Arg.Any <CompilerOptions>())
            .Returns(sourceFiles);

            ISourceFileGeneratorProvider sourceFileGeneratorProvider = CreateSourceFileGeneratorProvider();

            sourceFileGeneratorProvider
            .CreateSourceFileGenerator(Arg.Any <TargetLanguage>())
            .Returns(sourceFileGenerator);

            ICompiler compiler = CreateCompiler();

            compiler
            .GenerateCode(Arg.Any <List <SourceFile> >())
            .Returns(newBuild);

            ICompilerFactory compilerFactory = CreateCompilerFactory(compiler, sourceFiles);

            SourceCodeService sourceCodeService = CreateSourceCodeService(sourceFileGeneratorProvider: sourceFileGeneratorProvider, compilerFactory: compilerFactory);

            //Act
            byte[] assembly = await sourceCodeService.GetAssembly(buildProject);

            //Assert
            assembly
            .Should()
            .NotBeNull();

            assembly
            .Length
            .Should()
            .Be(100);
        }