Skip to content

Commit

Permalink
PLV8 related features are extracted to Marten.PLv8. Closes JasperFxGH…
Browse files Browse the repository at this point in the history
  • Loading branch information
jeremydmiller committed May 21, 2021
1 parent 7eec6c1 commit dbe88ee
Show file tree
Hide file tree
Showing 99 changed files with 1,479 additions and 1,990 deletions.
8 changes: 6 additions & 2 deletions martenbuild.cs
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,11 @@ private static void Main(string[] args)
Target("test-marten", DependsOn("compile", "test-noda-time"), () =>
Run("dotnet", $"test src/Marten.Testing/Marten.Testing.csproj --framework {framework} --configuration {configuration} --no-build"));

Target("test", DependsOn("setup-test-parallelization", "test-marten", "test-noda-time", "test-commands", "test-schema"));
Target("test-plv8", DependsOn("compile"), () =>
Run("dotnet", $"test src/Marten.PLv8.Testing/Marten.PLv8.Testing.csproj --framework {framework} --configuration {configuration} --no-build"));


Target("test", DependsOn("setup-test-parallelization", "test-marten", "test-noda-time", "test-commands", "test-schema", "test-plv8"));

Target("storyteller", DependsOn("compile"), () =>
Run("dotnet", $"run --framework {framework} --culture en-US", "src/Marten.Storyteller"));
Expand Down Expand Up @@ -99,7 +103,7 @@ private static void Main(string[] args)
}
});

Target("pack", DependsOn("compile"), ForEach("./src/Marten", "./src/Marten.CommandLine", "./src/Marten.NodaTime"), project =>
Target("pack", DependsOn("compile"), ForEach("./src/Marten", "./src/Marten.CommandLine", "./src/Marten.NodaTime", "./src/Marten.PLv8"), project =>
Run("dotnet", $"pack {project} -o ./artifacts --configuration Release"));

Target("init-db", () =>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="5.0.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.8.3" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.9.4" />
<PackageReference Include="Lamar" Version="5.0.3" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.3">
<PrivateAssets>all</PrivateAssets>
Expand Down
2 changes: 1 addition & 1 deletion src/Marten.NodaTime.Testing/Marten.NodaTime.Testing.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
</ItemGroup>

<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.8.3" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.9.4" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.3">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
Expand Down
19 changes: 18 additions & 1 deletion src/Marten.PLv8.Testing/Marten.PLv8.Testing.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.7.1" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.9.4" />
<PackageReference Include="xunit" Version="2.4.1" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.3">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
Expand All @@ -19,4 +19,21 @@
</PackageReference>
</ItemGroup>

<ItemGroup>
<ProjectReference Include="..\Marten.PLv8\Marten.PLv8.csproj" />
<ProjectReference Include="..\Marten.Testing\Marten.Testing.csproj" />
</ItemGroup>

<ItemGroup>
<None Update="default_username.js">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Update="get_fullname.js">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Update="get_target_float.js">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
</ItemGroup>

</Project>
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
using Marten.Patching;
using Marten.PLv8.Patching;
using Marten.Services;
using Marten.Testing.Harness;
using Weasel.Postgresql;
using Xunit;

namespace Marten.Testing.Bugs
namespace Marten.PLv8.Testing.Patching
{
public class PatchTypeA
{
Expand All @@ -31,6 +31,8 @@ public void can_support_typenamehandling()
});
_.Serializer(serializer);
_.AutoCreateSchemaObjects = AutoCreate.All;

_.UseJavascriptTransformsAndPatching();
}))
{
using (var session = store.OpenSession())
Expand Down Expand Up @@ -62,7 +64,7 @@ public void can_support_typenamehandling()
using (var session = store.OpenSession())
{
var result = session.Json.FindById<PatchTypeA>("1");
var expected = "{\"Id\": \"1\", \"$type\": \"Marten.Testing.Bugs.PatchTypeA, Marten.Testing\", \"TypeB\": {\"Name\": \"test2\", \"$type\": \"Marten.Testing.Bugs.PatchTypeB, Marten.Testing\"}}";
var expected = "{\"Id\": \"1\", \"$type\": \"Marten.PLv8.Testing.Patching.PatchTypeA, Marten.PLv8.Testing\", \"TypeB\": {\"Name\": \"test2\", \"$type\": \"Marten.PLv8.Testing.Patching.PatchTypeB, Marten.PLv8.Testing\"}}";
Assert.Equal(expected, result);
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,19 +1,23 @@
using System.Linq;
using System.Threading.Tasks;
using Weasel.Postgresql;
using Marten.Schema;
using Marten.PLv8.Patching;
using Marten.Testing.Harness;
using Shouldly;
using Weasel.Postgresql;
using Xunit;

namespace Marten.Testing.Bugs
namespace Marten.PLv8.Testing.Patching
{
public class Bug_593_patch_doc_function_should_be_built_in_designated_schema: BugIntegrationContext
{
[Fact]
public async Task should_stick_the_patch_doc_function_in_the_right_schema()
{
StoreOptions(_ => _.DatabaseSchemaName = "other");
StoreOptions(_ =>
{
_.DatabaseSchemaName = "other";
_.UseJavascriptTransformsAndPatching();
});

await theStore.Schema.ApplyAllConfiguredChangesToDatabase();

Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,14 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Threading.Tasks;
using Marten.Internal.Sessions;
using Marten.Internal.Storage;
using Marten.Linq.Filters;
using Marten.Patching;
using Marten.PLv8.Patching;
using Marten.PLv8.Transforms;
using Marten.Schema;
using Marten.Services;
using Marten.Services.Json;
using Marten.Storage;
using Marten.Testing.Documents;
Expand All @@ -14,16 +17,21 @@
using Shouldly;
using Xunit;

namespace Marten.Testing.Patching
namespace Marten.PLv8.Testing.Patching
{
public class PatchExpressionTests : IntegrationContext
[Collection("patching")]
public class PatchExpressionTests : OneOffConfigurationsContext
{
private readonly PatchExpression<Target> _expression;
private readonly ITenant _schema = Substitute.For<ITenant>();


public PatchExpressionTests(DefaultStoreFixture fixture) : base(fixture)

public PatchExpressionTests() : base("patching")
{
StoreOptions(x => x.UseJavascriptTransformsAndPatching());
theStore.Tenancy.Default.EnsureStorageExists(typeof(TransformSchema));

var storage = Substitute.For<IDocumentStorage>();
storage.DocumentType.Returns(typeof(Target));

Expand All @@ -34,6 +42,38 @@ public PatchExpressionTests(DefaultStoreFixture fixture) : base(fixture)
_expression = new PatchExpression<Target>(new ByGuidFilter(Guid.NewGuid()), (DocumentSessionBase)session);
}

[Fact]
public async Task does_not_blow_up()
{
var transform = theStore.Tenancy.Default.TransformFor("patch_doc");

(await theStore.Tenancy.Default.Functions())
.ShouldContain(transform.Identifier);
}

[Fact]
public async Task Patch_And_Load_Should_Return_Non_Stale_Result()
{

var id = Guid.NewGuid();
using (var sess = theStore.LightweightSession())
{
sess.Store(new Model() { Id = id, Name = "foo" });
sess.Patch<Model>(id).Set(x => x.Name, "bar");
await sess.SaveChangesAsync();
sess.Query<Model>().Where(x => x.Id == id).Select(x => x.Name).Single().ShouldBe("bar");
sess.Load<Model>(id).Name.ShouldBe("bar");
}
}

public class Model
{
public Guid Id { get; set; }
public string Name { get; set; }
}



[Fact]
public void builds_patch_for_set_name()
{
Expand Down Expand Up @@ -412,6 +452,7 @@ public void check_camel_case_serialized_property()
StoreOptions(_ =>
{
_.UseDefaultSerialization(casing: Casing.CamelCase);
_.UseJavascriptTransformsAndPatching();
});

using var session = theStore.LightweightSession();
Expand Down Expand Up @@ -522,5 +563,137 @@ public void can_insert_if_not_exists_with_sub_types_in_collection()
group2.Items[0].ShouldBeOfType<ColoredItem>();
}
}


[Fact]
public void save_large_bundle_of_operations()
{
var id1 = Guid.NewGuid();
var id2 = Guid.NewGuid();

using (var session = theStore.OpenSession())
{
session.DeleteWhere<TestModel5>(x => x.ObjectId == id1 && x.DefinitionId == 1 && x.Stage > 1);

session.Patch<TestModel5>(x => x.ObjectId == id1 && x.DefinitionId == 1 && x.Stage == 1)
.Set(x => x.Name, "Matrix 1");

session.DeleteWhere<TestModel6>(x => x.ObjectId == id1 && x.DefinitionId == 1 && x.Stage > 1);

session.Patch<TestModel6>(x => x.ObjectId == id1 && x.DefinitionId == 1 && x.Stage == 1)
.Set(x => x.Text, "");

Expression<Func<TestModel4, bool>> definitionFilter = x => x.ObjectId == id1 && x.DefinitionId == 1;
session.Patch(definitionFilter).Set(x => x.Stages, 1);
session.Patch(definitionFilter).Set(x => x.Bool5, false);
session.Patch(definitionFilter).Set(x => x.Text, "");
session.Patch(definitionFilter).Set(x => x.Bool4, false);
session.Patch(definitionFilter).Set(x => x.Mode, "Automatic");
session.Patch(definitionFilter).Set(x => x.Bool3, true);
session.Patch(definitionFilter).Set(x => x.Bool1, true);
session.Patch(definitionFilter).Set(x => x.Bool2, true);
session.Patch(definitionFilter).Set(x => x.Fields1, "||");
session.Patch(definitionFilter).Set(x => x.Fields2, "||");
session.Patch(definitionFilter).Set(x => x.Attr, "|gwk-id|pt-id|");

session.DeleteWhere<TestModel3>(x => x.ObjectId == id1 && x.DefinitionId == 1 && x.Stage > 1);
session.Patch<TestModel3>(x => x.ObjectId == id1 && x.DefinitionId == 1)
.Set(x => x.Cond1, 1);
session.Patch<TestModel3>(x => x.ObjectId == id1 && x.DefinitionId == 1)
.Set(x => x.Cond2, 1);

session.Patch<TestModel2>(Guid.NewGuid()).Set(x => x.Content, "test");
session.Patch<TestModel2>(Guid.NewGuid()).Set(x => x.Content, "test2");
session.Patch<TestModel2>(Guid.NewGuid()).Set(x => x.Content, "test3");
session.Patch<TestModel2>(Guid.NewGuid()).Set(x => x.Content, "test4");
session.Patch<TestModel2>(Guid.NewGuid()).Set(x => x.Content, "test5");
session.Patch<TestModel2>(Guid.NewGuid()).Set(x => x.Content, "test6");
session.Patch<TestModel2>(Guid.NewGuid()).Set(x => x.Content, "test7");
session.Patch<TestModel2>(Guid.NewGuid()).Set(x => x.Content, "test8");
session.Patch<TestModel2>(Guid.NewGuid()).Set(x => x.Content, "test9");
session.Patch<TestModel2>(Guid.NewGuid()).Set(x => x.Content, "test10");
session.Patch<TestModel2>(Guid.NewGuid()).Set(x => x.Content, "test11");
session.Patch<TestModel2>(Guid.NewGuid()).Set(x => x.Content, "test12");
session.Patch<TestModel2>(Guid.NewGuid()).Set(x => x.Content, "test13");
session.Patch<TestModel2>(Guid.NewGuid()).Set(x => x.Content, "test14");
session.Patch<TestModel2>(Guid.NewGuid()).Set(x => x.Content, "test15");
session.Patch<TestModel2>(Guid.NewGuid()).Set(x => x.Content, "test16");
session.Patch<TestModel2>(Guid.NewGuid()).Set(x => x.Content, "test17");

session.DeleteWhere<TestModel1>(x => x.ObjectId == id1 && x.DefinitionId == 1 && x.Stage > 1);
session.Patch<TestModel1>(x => x.ObjectId == id1 && x.DefinitionId == 1)
.Set(x => x.Mode, 1);

session.SaveChanges();
}
}

[DocumentAlias("testmodel1")]
public class TestModel1
{
public Guid Id { get; set; }
public Guid ObjectId { get; set; }
public int DefinitionId { get; set; }
public int Stage { get; set; }
public int Mode { get; set; }
}

[DocumentAlias("testmodel2")]
public class TestModel2
{
public Guid Id { get; set; }
public string Content { get; set; }
}

[DocumentAlias("testmodel3")]
public class TestModel3
{
public Guid Id { get; set; }
public Guid ObjectId { get; set; }
public int DefinitionId { get; set; }
public int Stage { get; set; }
public int Cond1 { get; set; }
public int Cond2 { get; set; }
}

[DocumentAlias("testmodel4")]
public class TestModel4
{
public Guid Id { get; set; }
public Guid ObjectId { get; set; }
public int DefinitionId { get; set; }
public bool Bool1 { get; set; }
public bool Bool2 { get; set; }
public bool Bool3 { get; set; }
public string Fields1 { get; set; }
public string Fields2 { get; set; }
public string Attr { get; set; }
public bool Bool5 { get; set; }
public int Stages { get; set; }
public string Text { get; set; }
public bool Bool4 { get; set; }
public string Mode { get; set; }
}

[DocumentAlias("testmodel5")]
public class TestModel5
{
public Guid Id { get; set; }
public Guid ObjectId { get; set; }
public int DefinitionId { get; set; }
public string Name { get; set; }
public int Stage { get; set; }
}

[DocumentAlias("testmodel6")]
public class TestModel6
{
public Guid Id { get; set; }
public Guid ObjectId { get; set; }
public int DefinitionId { get; set; }
public int Stage { get; set; }
public string Text { get; set; }
}

}
}
Loading

0 comments on commit dbe88ee

Please sign in to comment.