Merge pull request #4326 from dotnet/namc/user-secrets

Add migration rule for 'userSecretsId'
This commit is contained in:
Nate McMaster 2016-10-05 16:40:38 -07:00 committed by GitHub
commit b38f644347
3 changed files with 109 additions and 0 deletions

View file

@ -12,6 +12,7 @@ namespace Microsoft.DotNet.ProjectJsonMigration
new MigrateRootOptionsRule(),
new MigrateTFMRule(),
new MigrateBuildOptionsRule(),
new MigrateJsonPropertiesRule(),
new MigratePackOptionsRule(),
new MigrateRuntimeOptionsRule(),
new MigratePublishOptionsRule(),

View file

@ -0,0 +1,52 @@
// 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 System.Collections.Generic;
using System.IO;
using Microsoft.DotNet.ProjectJsonMigration.Transforms;
using Microsoft.Build.Construction;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
namespace Microsoft.DotNet.ProjectJsonMigration.Rules
{
public class MigrateJsonPropertiesRule : IMigrationRule
{
private Dictionary<string, ConditionalTransform<JToken, ProjectPropertyElement>> _propertyMappings
= new Dictionary<string, ConditionalTransform<JToken, ProjectPropertyElement>>
{
["userSecretsId"] = new AddPropertyTransform<JToken>("UserSecretsId",
j => j.Value<string>(),
j => !string.IsNullOrEmpty(j.Value<string>()))
};
private readonly ITransformApplicator _transformApplicator;
public MigrateJsonPropertiesRule(ITransformApplicator transformApplicator = null)
{
_transformApplicator = transformApplicator ?? new TransformApplicator();
}
public void Apply(MigrationSettings migrationSettings, MigrationRuleInputs migrationRuleInputs)
{
var propertyGroup = migrationRuleInputs.CommonPropertyGroup;
var projectFile = migrationRuleInputs.DefaultProjectContext.ProjectFile.ProjectFilePath;
using (var stream = new FileStream(projectFile, FileMode.Open))
using (var streamReader = new StreamReader(stream))
using (var jsonReader = new JsonTextReader(streamReader))
{
var rawProject = JObject.Load(jsonReader);
foreach (var prop in _propertyMappings)
{
var token = rawProject.GetValue(prop.Key);
if (token != null)
{
_transformApplicator.Execute(prop.Value.Transform(token), propertyGroup);
}
}
}
}
}
}

View file

@ -0,0 +1,56 @@
// 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 System.Linq;
using Microsoft.Build.Construction;
using Microsoft.DotNet.Tools.Test.Utilities;
using FluentAssertions;
using Microsoft.DotNet.ProjectJsonMigration.Rules;
using Xunit;
namespace Microsoft.DotNet.ProjectJsonMigration.Tests
{
public class GivenThatIWantToMigrateJsonProperties : TestBase
{
[Fact]
public void It_does_not_migrate_missing_props()
{
var mockProj = RunPropertiesRuleOnPj(@"
{}");
mockProj.Properties.Count().Should().Be(0);
}
[Fact]
public void It_migrates_userSecretsId()
{
var mockProj = RunPropertiesRuleOnPj(@"
{
""userSecretsId"": ""XYZ""
}");
mockProj.Properties.Count(p => p.Name == "UserSecretsId").Should().Be(1);
mockProj.Properties.First(p => p.Name == "UserSecretsId").Value.Should().Be("XYZ");
}
[Fact]
public void It_migrates_empty_userSecretsId()
{
var mockProj = RunPropertiesRuleOnPj(@"
{
""userSecretsId"": """"
}");
mockProj.Properties.Count(p => p.Name == "UserSecretsId").Should().Be(0);
}
private ProjectRootElement RunPropertiesRuleOnPj(string project, string testDirectory = null)
{
testDirectory = testDirectory ?? Temp.CreateDirectory().Path;
return TemporaryProjectFileRuleRunner.RunRules(new IMigrationRule[]
{
new MigrateJsonPropertiesRule()
}, project, testDirectory);
}
}
}