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}'"); }
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); }
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); }