Skip to content

Commit

Permalink
Fix NTS scaffolding code generation (#1997)
Browse files Browse the repository at this point in the history
Following dotnet/efcore#26160

(cherry picked from commit 126a6b6)
  • Loading branch information
roji committed Dec 22, 2021
1 parent 5675010 commit 854d243
Show file tree
Hide file tree
Showing 2 changed files with 54 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Design;
using Microsoft.EntityFrameworkCore.Scaffolding;
using NetTopologySuite.Geometries;
using Npgsql.EntityFrameworkCore.PostgreSQL.Infrastructure;

namespace Npgsql.EntityFrameworkCore.PostgreSQL.NetTopologySuite.Scaffolding.Internal
Expand All @@ -12,7 +13,11 @@ public class NpgsqlNetTopologySuiteCodeGeneratorPlugin : ProviderCodeGeneratorPl
private static readonly MethodInfo _useNetTopologySuiteMethodInfo
= typeof(NpgsqlNetTopologySuiteDbContextOptionsBuilderExtensions).GetRequiredRuntimeMethod(
nameof(NpgsqlNetTopologySuiteDbContextOptionsBuilderExtensions.UseNetTopologySuite),
typeof(NpgsqlDbContextOptionsBuilder));
typeof(NpgsqlDbContextOptionsBuilder),
typeof(CoordinateSequenceFactory),
typeof(PrecisionModel),
typeof(Ordinates),
typeof(bool));

public override MethodCallCodeFragment GenerateProviderOptions()
=> new(_useNetTopologySuiteMethodInfo);
Expand Down
48 changes: 48 additions & 0 deletions test/EFCore.PG.Tests/Scaffolding/NpgsqlCodeGeneratorTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@
using Microsoft.EntityFrameworkCore.Design;
using Microsoft.EntityFrameworkCore.Scaffolding;
using Npgsql.EntityFrameworkCore.PostgreSQL.Infrastructure;
using Npgsql.EntityFrameworkCore.PostgreSQL.NetTopologySuite.Scaffolding.Internal;
using Npgsql.EntityFrameworkCore.PostgreSQL.NodaTime.Scaffolding.Internal;
using Npgsql.EntityFrameworkCore.PostgreSQL.Scaffolding.Internal;
using Xunit;

Expand Down Expand Up @@ -53,6 +55,52 @@ public virtual void Use_provider_method_is_generated_correctly_with_options()
Assert.Null(result.ChainedCall);
}

[ConditionalFact]
public virtual void Use_provider_method_is_generated_correctly_with_NetTopologySuite()
{
var codeGenerator = new NpgsqlCodeGenerator(
new ProviderCodeGeneratorDependencies(
new[] { new NpgsqlNetTopologySuiteCodeGeneratorPlugin() }));

var result = ((IProviderConfigurationCodeGenerator)codeGenerator).GenerateUseProvider("Data Source=Test");

Assert.Equal("UseNpgsql", result.Method);
Assert.Collection(
result.Arguments,
a => Assert.Equal("Data Source=Test", a),
a =>
{
var nestedClosure = Assert.IsType<NestedClosureCodeFragment>(a);

Assert.Equal("x", nestedClosure.Parameter);
Assert.Equal("UseNetTopologySuite", nestedClosure.MethodCalls[0].Method);
});
Assert.Null(result.ChainedCall);
}

[ConditionalFact]
public virtual void Use_provider_method_is_generated_correctly_with_NodaTime()
{
var codeGenerator = new NpgsqlCodeGenerator(
new ProviderCodeGeneratorDependencies(
new[] { new NpgsqlNodaTimeCodeGeneratorPlugin() }));

var result = ((IProviderConfigurationCodeGenerator)codeGenerator).GenerateUseProvider("Data Source=Test");

Assert.Equal("UseNpgsql", result.Method);
Assert.Collection(
result.Arguments,
a => Assert.Equal("Data Source=Test", a),
a =>
{
var nestedClosure = Assert.IsType<NestedClosureCodeFragment>(a);

Assert.Equal("x", nestedClosure.Parameter);
Assert.Equal("UseNodaTime", nestedClosure.MethodCalls[0].Method);
});
Assert.Null(result.ChainedCall);
}

private static readonly MethodInfo _setProviderOptionMethodInfo
= typeof(NpgsqlCodeGeneratorTest).GetRuntimeMethod(nameof(SetProviderOption), new[] { typeof(DbContextOptionsBuilder) });

Expand Down

0 comments on commit 854d243

Please sign in to comment.