public async Task ExtractsORMModelTree_When_MethodHasADbAccessingMethodCallStatement()
        {
            //Arrange
            var solGen   = new RoslynComplexSolutionGenerator();
            var solution = solGen.GetRoslynSolution();

            SyntaxNode rootNodeCustomerRepository
                = await solGen.GetRootNodeForCustomerRepositoryClassDocument();

            IEnumerable <MethodDeclarationSyntax> methodDeclarations = rootNodeCustomerRepository.DescendantNodes().OfType <MethodDeclarationSyntax>();

            SemanticModel model = await solGen.GetSemanticModelForCustomerRepositoryClass();

            await ExtractEntityDeclarations(solution);

            var dbQueryExtractor = new LINQToSQLDatabaseQueryExtractor(model, dbEntityDeclarations);

            dbQueryExtractor.Visit(rootNodeCustomerRepository);
            var databaseQueries = dbQueryExtractor.DatabaseQueries;

            target = new RoslynORMModelTreeExtractor(databaseQueries);
            //Act
            ORMModelTree result = target.Extract(methodDeclarations.First());

            //Assert
            Assert.IsTrue(result.RootNode.Model is MethodDeclaration);
            Assert.IsTrue((result.RootNode as MethodDeclaration).MethodName == "GetCustomer");

            Assert.IsTrue(result.RootNode.ChildNodes[0] is DatabaseAccessingMethodCallStatement <LINQToSQL>);
        }
        public async Task DetectsDatabaseEntityDeclarations_When_RoslynComplexSolutionIsUsed()
        {
            //Arrange
            var solGen   = new RoslynComplexSolutionGenerator();
            var solution = solGen.GetRoslynSolution();

            //ToDo: change to use TargetBuilder
            Context <LINQToSQL> context = new ContextStub <LINQToSQL>();

            target = new DatabaseEntityDeclarationExtractor(context);

            var progressIndicator = new ProgressStub();
            //Act
            await target.FindDatabaseEntityDeclarationsAsync(solution, progressIndicator);

            var result = target.DatabaseEntityDeclarations;

            //Assert
            Assert.IsTrue(result.Count() == 3);
            Assert.IsTrue(result.ToList().Exists(x => x.Name == "Customer"));
            Assert.IsTrue(result.ToList().Exists(x => x.Name == "Order"));
            Assert.IsTrue(result.ToList().Exists(x => x.Name == "OrderItem"));
        }