public async Task GenerateAsync_GivenDatabaseWithTablesAndViews_GeneratesFilesInExpectedLocations()
        {
            using var tempDir = new TemporaryDirectory();
            var projectPath = Path.Combine(tempDir.DirectoryPath, TestCsprojFilename);
            var tablesDir   = Path.Combine(tempDir.DirectoryPath, "Tables");
            var viewsDir    = Path.Combine(tempDir.DirectoryPath, "Views");

            var expectedTable1Path = Path.Combine(tablesDir, "Main", "ViewTestTable1.cs");
            var expectedView1Path  = Path.Combine(viewsDir, "Main", "TestView1.cs");
            var expectedView2Path  = Path.Combine(viewsDir, "Main", "TestView2.cs");

            var mockFs = new MockFileSystem(new Dictionary <string, MockFileData>
            {
                [tempDir.DirectoryPath + Path.PathSeparator] = new MockDirectoryData(),
                [expectedTable1Path] = MockFileData.NullObject,
                [expectedView1Path]  = MockFileData.NullObject,
                [expectedView2Path]  = MockFileData.NullObject
            });

            var nameTranslator  = new PascalCaseNameTranslator();
            var commentProvider = new EmptyRelationalDatabaseCommentProvider();
            var generator       = new PocoDataAccessGenerator(mockFs, Database, commentProvider, nameTranslator);
            await generator.GenerateAsync(projectPath, TestNamespace).ConfigureAwait(false);

            Assert.Multiple(() =>
            {
                Assert.That(mockFs.FileExists(projectPath), Is.True);
                Assert.That(mockFs.Directory.Exists(tablesDir), Is.True);
                Assert.That(mockFs.Directory.Exists(viewsDir), Is.True);
                Assert.That(mockFs.FileExists(expectedTable1Path), Is.True);
                Assert.That(mockFs.FileExists(expectedView1Path), Is.True);
                Assert.That(mockFs.FileExists(expectedView2Path), Is.True);
            });
        }
        public static void GenerateAsync_GivenNullProjectPath_ThrowsArgumentNullException(string projectPath)
        {
            var mockFs          = new MockFileSystem();
            var database        = Mock.Of <IRelationalDatabase>();
            var commentProvider = new EmptyRelationalDatabaseCommentProvider();
            var nameTranslator  = new VerbatimNameTranslator();
            var generator       = new PocoDataAccessGenerator(mockFs, database, commentProvider, nameTranslator);

            Assert.That(() => generator.GenerateAsync(projectPath, "test"), Throws.ArgumentNullException);
        }
        public static void GenerateAsync_GivenProjectPathNotACsproj_ThrowsArgumentException()
        {
            var mockFs          = new MockFileSystem();
            var database        = Mock.Of <IRelationalDatabase>();
            var commentProvider = new EmptyRelationalDatabaseCommentProvider();
            var nameTranslator  = new VerbatimNameTranslator();
            var generator       = new PocoDataAccessGenerator(mockFs, database, commentProvider, nameTranslator);

            using var tempDir = new TemporaryDirectory();
            var projectPath = Path.Combine(tempDir.DirectoryPath, "DataAccessGeneratorTest.vbproj");

            Assert.That(() => generator.GenerateAsync(projectPath, "test"), Throws.ArgumentException);
        }
        public static void GenerateAsync_GivenNullOrWhiteSpaceNamespace_ThrowsArgumentNullException(string ns)
        {
            var mockFs          = new MockFileSystem();
            var database        = Mock.Of <IRelationalDatabase>();
            var commentProvider = new EmptyRelationalDatabaseCommentProvider();
            var nameTranslator  = new VerbatimNameTranslator();
            var generator       = new PocoDataAccessGenerator(mockFs, database, commentProvider, nameTranslator);

            using var tempDir = new TemporaryDirectory();
            var projectPath = Path.Combine(tempDir.DirectoryPath, TestCsprojFileName);

            Assert.That(() => generator.GenerateAsync(projectPath, ns), Throws.ArgumentNullException);
        }
        public async Task Generate_GivenDatabaseWithTablesAndViews_BuildsProjectSuccessfully()
        {
            using var tempDir = new TemporaryDirectory();
            var projectPath = Path.Combine(tempDir.DirectoryPath, TestCsprojFilename);

            var fileSystem      = new FileSystem();
            var commentProvider = new EmptyRelationalDatabaseCommentProvider();
            var nameTranslator  = new PascalCaseNameTranslator();
            var generator       = new PocoDataAccessGenerator(fileSystem, Database, commentProvider, nameTranslator);
            await generator.GenerateAsync(projectPath, TestNamespace).ConfigureAwait(false);

            var buildsSuccessfully = await ProjectBuildsSuccessfullyAsync(projectPath).ConfigureAwait(false);

            Assert.That(buildsSuccessfully, Is.True);
        }
예제 #6
0
        public async Task <int> HandleCommandAsync(IConsole console, FileInfo projectPath, string baseNamespace, string convention, CancellationToken cancellationToken)
        {
            var fileSystem     = new FileSystem();
            var nameTranslator = GetNameTranslator(convention);
            var connection     = GetSchematicConnection();
            var database       = await connection.Dialect.GetRelationalDatabaseAsync(connection, cancellationToken).ConfigureAwait(false);

            var commentProvider = await connection.Dialect.GetRelationalDatabaseCommentProviderAsync(connection, cancellationToken).ConfigureAwait(false);

            var generator = new PocoDataAccessGenerator(fileSystem, database, commentProvider, nameTranslator);

            await generator.GenerateAsync(projectPath.FullName, baseNamespace, cancellationToken).ConfigureAwait(false);

            console.Out.Write("Project generated at: " + projectPath.FullName);
            return(ErrorCode.Success);
        }