public async Task GenerateAsync_GivenDatabaseWithTables_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 expectedAppContextPath = Path.Combine(tempDir.DirectoryPath, "AppContext.cs"); var expectedTablePath = Path.Combine(tablesDir, "Main", "Actor.cs"); var expectedViewPath = Path.Combine(viewsDir, "Main", "CustomerList.cs"); var mockFs = new MockFileSystem(new Dictionary <string, MockFileData> { [tempDir.DirectoryPath + Path.PathSeparator] = new MockDirectoryData(), [expectedAppContextPath] = MockFileData.NullObject, [expectedTablePath] = MockFileData.NullObject, [expectedViewPath] = MockFileData.NullObject }); var nameTranslator = new PascalCaseNameTranslator(); var generator = new EFCoreDataAccessGenerator(mockFs, Database, new EmptyRelationalDatabaseCommentProvider(), nameTranslator); await generator.GenerateAsync(projectPath, TestNamespace).ConfigureAwait(false); Assert.Multiple(() => { Assert.That(mockFs.FileExists(projectPath), Is.True); Assert.That(mockFs.FileExists(expectedAppContextPath), Is.True); Assert.That(mockFs.Directory.Exists(tablesDir), Is.True); Assert.That(mockFs.Directory.Exists(viewsDir), Is.True); Assert.That(mockFs.FileExists(expectedTablePath), Is.True); Assert.That(mockFs.FileExists(expectedViewPath), Is.True); }); }
public static void GenerateAsync_GivenNullOrWhiteSpaceProjectPath_ThrowsArgumentNullException(string projectPath) { var mockFs = new MockFileSystem(); var database = Mock.Of <IRelationalDatabase>(); var commentProvider = new EmptyRelationalDatabaseCommentProvider(); var nameTranslator = new VerbatimNameTranslator(); var generator = new EFCoreDataAccessGenerator(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 EFCoreDataAccessGenerator(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 EFCoreDataAccessGenerator(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 GenerateAsync_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 EFCoreDataAccessGenerator(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 EFCoreDataAccessGenerator(fileSystem, database, commentProvider, nameTranslator); await generator.GenerateAsync(projectPath.FullName, baseNamespace, cancellationToken).ConfigureAwait(false); console.Out.Write("Project generated at: " + projectPath.FullName); return(ErrorCode.Success); }