Skip to content

Commit

Permalink
Producing migration script ensures directory exists before writing to…
Browse files Browse the repository at this point in the history
… file (#5828)

Fix #5535
  • Loading branch information
natemcmaster authored Jun 22, 2016
1 parent 66e1977 commit 53e27b8
Show file tree
Hide file tree
Showing 4 changed files with 43 additions and 15 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,12 @@ private static int Execute(CommonOptions commonOptions,
}
else
{
var directory = Path.GetDirectoryName(output);
if (!string.IsNullOrWhiteSpace(directory))
{
Directory.CreateDirectory(directory);
}

ConsoleCommandLogger.Verbose("Writing SQL script to '" + output + "'".Bold().Black());
File.WriteAllText(output, sql, Encoding.UTF8);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,13 +35,13 @@ public void MigrationsOnDesktop()
[Fact(Skip = SkipReason)]
public void MigrationsOnNetStandardClassLibraryWithExternalStartup()
{
AddAndApplyMigrationImpl("NetStandardClassLibrary", "NetStandardContext", "initialLibrary", startupProject: "NetCoreStartupApp");
AddAndApplyMigrationImpl("NetStandardClassLibrary", "NetStandardContext", "initialLibrary", startupProjectName: "NetCoreStartupApp");
}

[Fact(Skip = SkipReason)]
public void MigrationsOnDesktopClassLibraryWithExternalStartup()
{
AddAndApplyMigrationImpl("DesktopClassLibrary", "DesktopContext", "initialLibrary", startupProject: "DesktopStartupApp");
AddAndApplyMigrationImpl("DesktopClassLibrary", "DesktopContext", "initialLibrary", startupProjectName: "DesktopStartupApp");
}

[Fact(Skip = SkipReason)]
Expand All @@ -67,42 +67,45 @@ public void MigrationCommandsForNetCoreApps(string project)
=> AddAndApplyMigrationImpl(project, "TestContext", "Initial");

private void AddAndApplyMigrationImpl(
string targetProject,
string targetProjectName,
string contextName,
string migrationName,
string startupProject = null)
string startupProjectName = null)
{
var targetDir = Path.Combine(_fixture.TestProjectRoot, targetProject, "project.json");
var startupProjectDir = startupProject != null
? Path.Combine(_fixture.TestProjectRoot, startupProject, "project.json")
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 = " + targetDir);
_output.WriteLine("Target dir = " + targetProject);

var migrationDir = Path.Combine(Path.GetDirectoryName(targetDir), "Migrations");
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(targetDir, _output, _fixture.TestProjectRoot);
_fixture.InstallTool(targetProject, _output, _fixture.TestProjectRoot);

if (startupProjectDir != null)
if (startupProject != null)
{
_fixture.InstallTool(startupProjectDir, _output, _fixture.TestProjectRoot);
_fixture.InstallTool(startupProject, _output, _fixture.TestProjectRoot);
}

var args = $"--context {contextName}";

AssertCommand.Pass(new MigrationAddCommand(targetDir, migrationName, _output, startupProjectDir)
AssertCommand.Pass(new MigrationAddCommand(targetProject, migrationName, _output, startupProject)
.Execute(args));

Assert.True(Directory.EnumerateFiles(migrationDir, snapshotFile, SearchOption.AllDirectories).Any());

AssertCommand.Pass(new DatabaseUpdateCommand(targetDir, _output, startupProjectDir)
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")));
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,8 @@
},
"Microsoft.AspNetCore.Hosting": "1.0.0-*",
"Microsoft.Extensions.Configuration.UserSecrets": "1.0.0-*",
"Microsoft.Extensions.Configuration.Json": "1.0.0-*"
"Microsoft.Extensions.Configuration.Json": "1.0.0-*",
"Newtonsoft.Json": "9.0.1"
},
"frameworks": {
"netcoreapp1.0": { }
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
// Copyright (c) .NET Foundation and contributors. All rights reserved.
// Licensed under the MIT license. See LICENSE file in the project root for full license information.

using Xunit.Abstractions;

namespace Microsoft.EntityFrameworkCore.Tools.Cli.FunctionalTests
{
public class MigrationScriptCommand : EfCommand
{
public MigrationScriptCommand(string targetProject, ITestOutputHelper output, string startupProject = null)
: base(targetProject, output, startupProject)
{
}

protected override string BuildArgs()
=> "migrations script ";
}
}

0 comments on commit 53e27b8

Please sign in to comment.