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 void DetectsExcessiveDataAntiPattern_When_ThereIsOneQueryInTheTreeThatFetchesEagerlyAndEagerlyFetchedEntityIsNotUsed() { //Arrange var codeExecutionPath = new CodeExecutionPathGenerator() .WithEagerLoadingDatabaseAccessingMethodCall() .Build(); //Act bool result = target.AppliesToModelTree(codeExecutionPath); //Assert Assert.IsTrue(result); }
public IExtractionManager GetExtractionManager() { var context = new ConcreteContext <EntityFramework>(); var dataContextDecExt = new DataContextDeclarationExtractor(context); var dbEntityExt = new DatabaseEntityDeclarationExtractorUsingDbContextProperties(context); var dbAccessingMethodCallExt = new DatabaseAccessingMethodCallExtractor(context); var codeExecutionPathExt = new CodeExecutionPathGenerator(context); var progressIndicator = new Progress <ExtractionProgress>((e) => ProgressChanged(e)); var serializer = new NewtonsoftSerializer <EntityFramework>(); IExtractionManager extractionManager = new ExtractionManager <EntityFramework>(dataContextDecExt, dbEntityExt, dbAccessingMethodCallExt, codeExecutionPathExt, progressIndicator, serializer); return(extractionManager); }
public ExtractionManager(DataContextDeclarationExtractor <T> dataContextDeclarationExtractor , DatabaseEntityDeclarationExtractor <T> databaseEntityDeclarationExtractor , DatabaseAccessingMethodCallExtractor <T> databaseAccessingMethodCallExtractor , CodeExecutionPathGenerator <T> codeExecutionPathExtractor , IProgress <ExtractionProgress> progressIndicator , ISerializer <T> serializer) { _dataContextDeclarationExtractor = dataContextDeclarationExtractor; _databaseEntityDeclarationExtractor = databaseEntityDeclarationExtractor; _databaseAccessingMethodCallExtractor = databaseAccessingMethodCallExtractor; _codeExecutionPathExtractor = codeExecutionPathExtractor; _progressIndicator = progressIndicator; _serializer = serializer; }
public void DetectsAntiPattern_When_ThereIsOneQueryInTheTreeThatDoesLazyLoadingAndRelatedEntityIsUsedInALoop() { //Arrange var codeExecutionPath = new CodeExecutionPathGenerator() .WithLazyLoadingDatabaseAccessingMethodCall() .WithDatabaseEntityVariableAssignedByDatabaseAccessingMethodCall() .WithCallToRelatedEntityOnDatabaseEntityVariableAssignedByDatabaseAccessingMethodCall() .Build(); ////Act bool result = target.AppliesToModelTree(codeExecutionPath); ////Assert Assert.IsTrue(result); }