예제 #1
0
        public async Task ExtractsMethodCallsBetweenServiceAndRepositoryClasses_When_EF60_NWProjectIsUsed()
        {
            //Arrange
            Solution solution = await new RoslynSolutionGenerator().GetSolutionAsync(@"..\..\..\..\ProjectsUnderTest\EF60_NW\EF60_NW.sln");

            var progressIndicator = new ProgressStub();

            var context            = new ContextStub <EntityFramework>();
            var dataContextDecExtr = new DataContextDeclarationExtractor(context);
            await dataContextDecExtr.FindDataContextDeclarationsAsync(solution, progressIndicator);

            var dbEntityExtractor = new DatabaseEntityDeclarationExtractorUsingDbContextProperties(context);
            await dbEntityExtractor.FindDatabaseEntityDeclarationsAsync(solution, progressIndicator);

            var dbAccessingMethodCallsExtractor = new DatabaseAccessingMethodCallExtractor(context);
            await dbAccessingMethodCallsExtractor.FindDatabaseAccessingMethodCallsAsync(solution, progressIndicator);

            var target = new CodeExecutionPathGenerator(context);

            //Act
            await target.GenerateCodeExecutionPathsAsync(solution, progressIndicator);

            //Assert
            Assert.IsTrue(target.CodeExecutionPaths.Count() == 2);
        }
        public async Task DetectsThreeDatabaseEntityDeclarations_When_EF60_NWProjectIsUsed()
        {
            //Arrange
            Solution EF60_NWSolution = await new RoslynSolutionGenerator().GetSolutionAsync(@"..\..\..\..\ProjectsUnderTest\EF60_NW\EF60_NW.sln");

            var progressIndicator = new ProgressStub();

            Context <EntityFramework> context = new ContextStub <EntityFramework>();
            var dataContextDecExtr            = new DataContextDeclarationExtractor(context);
            await dataContextDecExtr.FindDataContextDeclarationsAsync(EF60_NWSolution, progressIndicator);

            var target = new DatabaseEntityDeclarationExtractorUsingDbContextProperties(context);

            //Act
            await target.FindDatabaseEntityDeclarationsAsync(EF60_NWSolution, progressIndicator);

            //Assert
            Assert.IsTrue(target.DatabaseEntityDeclarations.Count == 3);

            IEnumerable <string> dbEntityNames = target.DatabaseEntityDeclarations.Select(d => d.Name);

            Assert.IsTrue(dbEntityNames.Contains("Customer"));
            Assert.IsTrue(dbEntityNames.Contains("Order"));
            Assert.IsTrue(dbEntityNames.Contains("OrderItem"));

            Assert.IsTrue(context.DatabaseEntityDeclarations == target.DatabaseEntityDeclarations);
        }
        public async Task ExtractsDatabaseAccessingMethodCallsWithRightParentMethodNames_When_EF60_NWProjectIsUsed()
        {
            //Arrange
            Solution solution = await new RoslynSolutionGenerator().GetSolutionAsync(@"..\..\..\..\ProjectsUnderTest\EF60_NW\EF60_NW.sln");

            var progressIndicator = new ProgressStub();

            var context            = new ContextStub <EntityFramework>();
            var dataContextDecExtr = new DataContextDeclarationExtractor(context);
            await dataContextDecExtr.FindDataContextDeclarationsAsync(solution, progressIndicator);

            var dbEntityExtractor = new DatabaseEntityDeclarationExtractorUsingDbContextProperties(context);
            await dbEntityExtractor.FindDatabaseEntityDeclarationsAsync(solution, progressIndicator);

            var target = new DatabaseAccessingMethodCallExtractor(context);

            //Act
            await target.FindDatabaseAccessingMethodCallsAsync(solution, progressIndicator);

            var result            = target.DatabaseAccessingMethodCalls;
            var parentMethodNames = result.Select(d => d.ParentMethodName);

            //Assert
            Assert.IsTrue(parentMethodNames.Contains("GetCustomerUsingQuerySyntaxAndAssignToVariable"));
            Assert.IsTrue(parentMethodNames.Contains("GetCustomerUsingQuerySyntax"));
            Assert.IsTrue(parentMethodNames.Contains("GetCustomerUsingMethodSyntax"));
            Assert.IsTrue(parentMethodNames.Contains("GetCustomerUsingMethodSyntaxAndAssignToVariable"));
            Assert.IsTrue(parentMethodNames.Contains("GetCustomerUsingMethodSyntaxAndQueryIsChangedInMultipleLines"));
            Assert.IsTrue(parentMethodNames.Contains("DoSomething"));
        }
예제 #4
0
        private async Task ExtractDataContexts(string solutionUnderTest, Solution solution)
        {
            await _dataContextDeclarationExtractor.FindDataContextDeclarationsAsync(solution, _progressIndicator);

            _progressIndicator.Report(new ExtractionProgress("Saving Data Context Declarations into json file."));
            await _serializer.Serialize(_dataContextDeclarationExtractor.DataContextDeclarations, solutionUnderTest);

            _progressIndicator.Report(new ExtractionProgress("Done"));
        }
        public async Task DetectsDbContextClass_When_ThereIsOneDbContextDeclaredInAProject()
        {
            //Arrange
            Solution EF60_NWSolution = await new RoslynSolutionGenerator().GetEF60_NWSolutionAsync();
            var      target          = new DataContextDeclarationExtractor();

            //Act
            await target.FindDataContextDeclarationsAsync(EF60_NWSolution);

            //Assert
            Assert.IsTrue(target.DataContextDeclarations.Count == 1);
        }
        public async Task DetectsDbContextClasses_When_VirtoCommerceSolutionIsCompiled()
        {
            //Arrange
            Solution EF60_NWSolution = await new RoslynSolutionGenerator().GetSolutionAsync(@"..\..\..\..\..\..\vc-community\PLATFORM\VirtoCommerce.WebPlatform.sln");
            //ToDo: Use target builder instead
            Context <EntityFramework> context = new ContextStub <EntityFramework>();
            var target = new DataContextDeclarationExtractor(context);

            var progressIndicator = new ProgressStub();

            //Act
            await target.FindDataContextDeclarationsAsync(EF60_NWSolution, progressIndicator);

            //Assert
            Assert.IsTrue(target.DataContextDeclarations.Count == 15);
        }
        public async Task DetectsDbContextClasses_When_EF60_NWProjectIsCompiled()
        {
            //Arrange
            Solution EF60_NWSolution = await new RoslynSolutionGenerator().GetSolutionAsync(@"..\..\..\..\ProjectsUnderTest\EF60_NW\EF60_NW.sln");

            //ToDo: Use target builder instead
            Context <EntityFramework> context = new ContextStub <EntityFramework>();

            var target = new DataContextDeclarationExtractor(context);

            var progressIndicator = new ProgressStub();

            //Act
            await target.FindDataContextDeclarationsAsync(EF60_NWSolution, progressIndicator);

            //Assert
            var item = target.DataContextDeclarations.First();

            Assert.IsTrue(target.DataContextDeclarations.Count == 1);
            Assert.IsTrue(item.Name == "NWDbContext");
            Assert.IsTrue(target.DataContextDeclarations.Count == 1);
            Assert.IsTrue(context.DataContextDeclarations == target.DataContextDeclarations);
        }