Esempio n. 1
0
    public void CreateManyRandomClassesFromInformationSchema()
    {
        string outputText = String.Empty;
        var    randomSqlTableReferences = RandomTableSelector.GetRandomSqlTableReferences(SqlConnectionProviders.AdventureWorksDb, 400);

        foreach (var sqlTableReference in randomSqlTableReferences)
        {
            var sqlTable    = SqlTableFactory.Create(sqlTableReference);
            var cSharpClass = CSharpClassGeneratorFromSqlTable.GenerateClass(sqlTable);
            outputText += cSharpClass;
        }
        Console.WriteLine(outputText);
    }
Esempio n. 2
0
    public void CreateManyRandomClassesFromDescribeResultSet()
    {
        string outputText = String.Empty;
        var    randomSqlTableReferences = RandomTableSelector.GetRandomSqlTableReferences(SqlConnectionProviders.AdventureWorksDb, 400).OrderBy(x => x.SchemaName).ThenBy(x => x.TableName);

        foreach (var sqlTableReference in randomSqlTableReferences)
        {
            var sqlTable    = SqlTableFactory.Create(sqlTableReference);
            var cSharpClass = CSharpClassGeneratorFromQueryViaSqlDescribeResultSet.GenerateClass(
                sqlTableReference.SqlConnectionProvider, $"SELECT * FROM {sqlTable.Schema}.{sqlTable.Name}", sqlTable.Name);
            outputText += cSharpClass + "\r\n";
        }
        Console.WriteLine(outputText);
    }
Esempio n. 3
0
    public void TestCompilationOfManyClasses()
    {
        int errorCount   = 0;
        int successCount = 0;
        IList <SqlTableReference> randomSqlTableReferences = null;

        "Given a list of SqlTableReferences"
        ._(() =>
        {
            randomSqlTableReferences =
                RandomTableSelector.GetRandomSqlTableReferences(SqlConnectionProviders.AdventureWorksDb, 400);
        });

        "Convert each table reference to a C# class and check for syntax errors using Roslyn"
        ._foreach(randomSqlTableReferences, sqlTableReference =>
        {
            var sqlTable      = SqlTableFactory.Create(sqlTableReference);
            var cSharpClass   = CSharpClassGeneratorFromSqlTable.GenerateClass(sqlTable);
            var compileResult = RoslynHelper.TryCompile(cSharpClass);

            if (compileResult.IsValid())
            {
                successCount++;
            }
            else
            {
                errorCount++;
                Console.WriteLine("Error found in the following:\r\n" + cSharpClass);
            }
        });

        "Then print out testing results"
        ._(() =>
        {
            Console.WriteLine("Successes: {0}", successCount);
            Console.WriteLine("Failures:  {0}", errorCount);
            errorCount.Should().Be(0);
        });
    }
Esempio n. 4
0
    public void InsertManyRandomRowsIntoManyRandomTables_UsingAutoFixture()
    {
        var testCaseResults          = new List <TestInsertDeleteCaseResult>();
        var typesToInsert            = new List <Type>();
        var randomSqlTableReferences = new List <SqlTableReference>();

        var db = SqlConnectionProviders.AdventureWorksDb;

        "Given a bunch of DB tables and CLR types that represent those tables"
        ._(() =>
        {
            randomSqlTableReferences = RandomTableSelector
                                       .GetRandomSqlTableReferences(db, 400)
                                       .OrderBy(x => x.SchemaName)
                                       .ThenBy(x => x.TableName)
                                       .ToList();

            typesToInsert = Assembly
                            .GetAssembly(typeof(BusinessEntityContact))
                            .GetTypes()
                            .Where(x => !x.IsAnonymousType())
                            .Where(x => x.GetProperties().All(p => p.PropertyType != typeof(XElement)))
                            .Where(x => x.GetProperties().All(p => p.PropertyType != typeof(SqlHierarchyId)))
                            .Where(x => !x.Name.StartsWith("v"))
                            .Where(x => x.Namespace.Equals("UniqueDb.ConnectionProvider.Tests.DataGeneration.AdventureWorks"))
                            .ToList();
        });

        var fixture = new Fixture();

        fixture.Inject(new SqlGeography());

        "For each table in the DB"
        ._(() =>
        {
            foreach (var sqlTableReference in randomSqlTableReferences)
            {
                TestInsertDeleteCaseResult testCase = null;
                var clrTypeForTable = typesToInsert.SingleOrDefault(t => t.Name.Equals(sqlTableReference.TableName));

                "Create a test case result"
                ._(() =>
                {
                    testCase = new TestInsertDeleteCaseResult()
                    {
                        SqlTableReference = sqlTableReference, ClrType = clrTypeForTable
                    };
                    testCaseResults.Add(testCase);
                });

                if (clrTypeForTable == null)
                {
                    continue;
                }
                object clrObjectForSqlTable = null;

                "Given a new, random instance of the CLR type representing the SqlTableReference"
                ._(() =>
                {
                    var context          = new SpecimenContext(fixture);
                    clrObjectForSqlTable = context.Resolve(new SeededRequest(clrTypeForTable, null));
                });

                "Try inserting into database"
                ._(() =>
                {
                    try
                    {
                        db.Insert(clrObjectForSqlTable, sqlTableReference.TableName, sqlTableReference.SchemaName);
                    }
                    catch (Exception e)
                    {
                        testCase.AddInsertException(e);
                    }
                });


                "Try updating the database"
                ._(() =>
                {
                    try
                    {
                        db.Update(clrObjectForSqlTable, null, sqlTableReference.TableName, sqlTableReference.SchemaName);
                    }
                    catch (Exception e)
                    {
                        testCase.AddUpdateException(e);
                    }
                });

                "Try deleting from database"
                ._(() =>
                {
                    try
                    {
                        db.Delete(clrObjectForSqlTable, null, sqlTableReference.TableName, sqlTableReference.SchemaName);
                    }
                    catch (Exception e)
                    {
                        testCase.AddDeleteException(e);
                    }
                });

                testCase.WrapUp();
            }
        });

        "Print out test results"
        ._(() =>
        {
            PrintSummary(testCaseResults);
            PrintDetails(testCaseResults);
        });
    }