private void AddAndApplyMigrationImpl( string project, string contextName, string migrationName) { var targetProject = Path.Combine(_fixture.TestProjectRoot, project, "project.json"); var migrationDir = Path.Combine(Path.GetDirectoryName(targetProject), "Migrations"); var snapshotFile = contextName + "ModelSnapshot.cs"; if (Directory.Exists(migrationDir)) { Assert.False(Directory.EnumerateFiles(migrationDir, snapshotFile, SearchOption.AllDirectories).Any()); } _fixture.InstallTool(targetProject, _output, _fixture.TestProjectRoot); var args = $" --context {contextName}"; AssertCommand.Pass(new MigrationAddCommand(targetProject, migrationName, _output) .Execute(args)); Assert.True(Directory.EnumerateFiles(migrationDir, snapshotFile, SearchOption.AllDirectories).Any()); AssertCommand.Pass(new DatabaseUpdateCommand(targetProject, _output) .Execute(args)); }
private void AddAndApplyMigrationImpl(string project, string contextName, string migrationName) { var ignoredJson = Path.Combine(_testProjectRoot, project, "project.json.ignore"); var testProject = Path.Combine(_testProjectRoot, project, "project.json"); File.Move(ignoredJson, testProject); var migrationDir = Path.Combine(Path.GetDirectoryName(testProject), "Migrations"); var snapshotFile = contextName + "ModelSnapshot.cs"; try { if (Directory.Exists(migrationDir)) { Assert.False(Directory.EnumerateFiles(migrationDir, snapshotFile, SearchOption.AllDirectories).Any()); } _fixture.InstallTool(testProject, _output, _testProjectRoot); AssertCommand.Passes(new MigrationAddCommand(testProject, migrationName, _output) .Execute($" --context {contextName}")); Assert.True(Directory.EnumerateFiles(migrationDir, snapshotFile, SearchOption.AllDirectories).Any()); AssertCommand.Passes(new DatabaseUpdateCommand(testProject, _output) .Execute($" --context {contextName}")); } finally { // project.json, even nested in bin/, will fail dotnet-restore on the solution File.Move(testProject, ignoredJson); } }
private void BuildToolsPackages(ITestOutputHelper logger) { if (_toolsBuilt) { return; } _toolsBuilt = true; var start = new DateTime(2015, 1, 1); var seconds = (long)(DateTime.UtcNow - start).TotalSeconds; var suffix = "t" + seconds.ToString("x").PadLeft(9, (char)'0'); var toolsProject = JsonConvert.DeserializeAnonymousType( File.ReadAllText( Path.Combine(_solutionDir, "src", "Microsoft.EntityFrameworkCore.Tools", Constants.ProjectFileName)), new { version = "" }); _toolVersion = toolsProject.version.Replace("*", suffix); foreach (var pkg in PackagesToBuild) { logger?.WriteLine($"Building {pkg} version {_toolVersion}"); // TODO can remove when https://github.com/NuGet/Home/issues/2469 is available AssertCommand.Pass( new PackCommand( Path.Combine(_solutionDir, "src", pkg, Constants.ProjectFileName), _localArtifacts, logger) .Execute($"--version-suffix {suffix}")); } }
public void MigrationsForAspNetApp() { var libraryProject = Path.Combine(_fixture.TestProjectRoot, "LibraryUsingSqlite", "project.json"); AssertCommand.Pass(new RestoreCommand(libraryProject, _output) .Execute(" --verbosity error ")); AddAndApplyMigrationImpl("AspNetHostingPortableApp", "LibraryContext", "initialLibrary"); AddAndApplyMigrationImpl("AspNetHostingPortableApp", "TestContext", "initialTest"); }
public void Unsupported_MigrationsOnNetCoreClassLibrary() { var targetProject = Path.Combine(_fixture.TestProjectRoot, "NetStandardClassLibrary/project.json"); _fixture.InstallTool(targetProject, _output, _fixture.TestProjectRoot); var result = new MigrationAddCommand(targetProject, "Initial", _output) .ExecuteWithCapturedOutput(); AssertCommand.Fail(result); Assert.Contains("does not support", result.StdErr); }
public void AddMigrationToDifferentFolder() { var libraryProject = Path.Combine(_fixture.TestProjectRoot, "PortableApp", "project.json"); Assert.False(Directory.Exists(Path.Combine(_fixture.TestProjectRoot, "SomeOtherDir"))); _fixture.InstallTool(libraryProject, _output, _fixture.TestProjectRoot); AssertCommand.Pass(new MigrationAddCommand(libraryProject, "OtherFolderMigration", _output) .Execute($" --context TestContext --output-dir ../SomeOtherDir")); Assert.True(Directory.Exists(Path.Combine(_fixture.TestProjectRoot, "SomeOtherDir"))); Assert.True(Directory.EnumerateFiles(Path.Combine(_fixture.TestProjectRoot, "SomeOtherDir"), "*.cs").Any()); }
public void InstallTool(string projectPath, ITestOutputHelper logger, params string[] fallbackRestoreLocations) { BuildToolsPackages(logger); var json = File.ReadAllText(projectPath); File.WriteAllText(projectPath, json.Replace("$toolVersion$", _suffix)); var fallbacks = new [] { LocalArtifacts } .Concat(fallbackRestoreLocations ?? Enumerable.Empty <string>()) .Select(s => "--fallbacksource " + s); AssertCommand.Passes( new RestoreCommand(projectPath, logger) .Execute(string.Join(" ", fallbacks)) ); }
public void Unsupported_MigrationsOnDesktopClassLibrary() { if (!RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) { return; } var targetProject = Path.Combine(_fixture.TestProjectRoot, "DesktopClassLibrary/project.json"); _fixture.InstallTool(targetProject, _output, _fixture.TestProjectRoot); var result = new MigrationAddCommand(targetProject, "Initial", _output) .ExecuteWithCapturedOutput(); AssertCommand.Fail(result); Assert.Contains("does not support", result.StdErr); }
public void InstallTool(string projectPath, ITestOutputHelper logger, params string[] fallbackRestoreLocations) { BuildToolsPackages(logger); var json = File.ReadAllText(projectPath); File.WriteAllText(projectPath, json.Replace("$toolVersion$", _toolVersion)); var fallbacks = new[] { _localArtifacts } .Concat(fallbackRestoreLocations ?? Enumerable.Empty <string>()) .Select(s => "--fallbacksource " + s); Reporter.Output.WriteLine($"Restoring packages to test project {projectPath}".Bold().Black()); AssertCommand.Pass( new RestoreCommand(projectPath, logger) .Execute(" --verbosity error " + string.Join(" ", fallbacks)) ); }
public void Unsupported_MigrationsOnDesktopClassLibrary() { if (!PlatformServices.Default.Runtime.OperatingSystem.Equals("Windows", StringComparison.OrdinalIgnoreCase)) { return; } var targetProject = Path.Combine(_fixture.TestProjectRoot, "DesktopClassLibrary/project.json"); _fixture.InstallTool(targetProject, _output, _fixture.TestProjectRoot); var result = new MigrationAddCommand(targetProject, "Initial", _output) .ExecuteWithCapturedOutput(); AssertCommand.Fail(result); Assert.Contains("does not support", result.StdErr); }
public void RunsMigrationsForAspNetApp() { var ignoredJson = Path.Combine(_testProjectRoot, "LibraryUsingSqlite", "project.json.ignore"); var libraryProject = Path.Combine(_testProjectRoot, "LibraryUsingSqlite", "project.json"); File.Move(ignoredJson, libraryProject); try { AssertCommand.Passes(new RestoreCommand(libraryProject, _output) .Execute()); AddAndApplyMigrationImpl("AspNetHostingPortableApp", "LibraryContext", "initialLibrary"); AddAndApplyMigrationImpl("AspNetHostingPortableApp", "TestContext", "initialTest"); } finally { File.Move(libraryProject, ignoredJson); } }
private void AddAndApplyMigrationImpl( string targetProjectName, string contextName, string migrationName, string startupProjectName = null) { var targetProject = Path.Combine(_fixture.TestProjectRoot, targetProjectName, "project.json"); var startupProject = startupProjectName != null ? Path.Combine(_fixture.TestProjectRoot, startupProjectName, "project.json") : null; _output.WriteLine("Target dir = " + targetProject); var migrationDir = Path.Combine(Path.GetDirectoryName(targetProject), "Migrations"); var snapshotFile = contextName + "ModelSnapshot.cs"; if (Directory.Exists(migrationDir)) { Assert.False(Directory.EnumerateFiles(migrationDir, snapshotFile, SearchOption.AllDirectories).Any()); } _fixture.InstallTool(targetProject, _output, _fixture.TestProjectRoot); if (startupProject != null) { _fixture.InstallTool(startupProject, _output, _fixture.TestProjectRoot); } var args = $"--context {contextName}"; AssertCommand.Pass(new MigrationAddCommand(targetProject, migrationName, _output, startupProject) .Execute(args)); Assert.True(Directory.EnumerateFiles(migrationDir, snapshotFile, SearchOption.AllDirectories).Any()); AssertCommand.Pass(new DatabaseUpdateCommand(targetProject, _output, startupProject) .Execute(args)); AssertCommand.Pass(new MigrationScriptCommand(targetProject, _output, startupProject) .Execute("--output " + Path.Combine(Path.GetDirectoryName(targetProject), "obj/dotnet-ef/migrations.sql"))); }
private void BuildToolsPackages(ITestOutputHelper logger) { if (_toolsBuilt) { return; } _toolsBuilt = true; _suffix = "t" + DateTime.UtcNow.ToString("yyMMddHHmmss"); foreach (var pkg in PackagesToBuild) { logger?.WriteLine($"Building {pkg} version {_suffix}"); // TODO can remove when https://github.com/NuGet/Home/issues/2469 is available AssertCommand.Passes( new PackCommand( Path.Combine(_solutionDir, "src", pkg, Constants.ProjectFileName), LocalArtifacts, logger) .Execute($"--version-suffix {_suffix}")); } }