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); }
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); }