Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Provide the ability to Mock WorkflowActivityContext #1358

Merged
merged 72 commits into from
Dec 28, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
72 commits
Select commit Hold shift + click to select a range
1a376cf
Make context mockable
svegiraju-microsoft Oct 10, 2024
f51def0
Fix project
svegiraju-microsoft Oct 10, 2024
43d8ee2
Consolidated version of coverlet.msbuild, coverlet.collector, xunit, …
m3nax Jun 26, 2024
3ce4685
Make context mockable
svegiraju-microsoft Oct 10, 2024
d083483
Fix project
svegiraju-microsoft Oct 10, 2024
0653902
Added unit test to prove out concern raised on Discord
WhitWaldo Sep 13, 2024
a7c37ce
Removed unused using
WhitWaldo Sep 19, 2024
2b408c6
Added unit test to validate that headers aren't being stripped off re…
WhitWaldo Oct 7, 2024
8277fc2
Fixed spelling typo
WhitWaldo Oct 7, 2024
53d7a0c
Added fix to handle null return values
WhitWaldo Oct 6, 2024
cf9f1ca
Removed unnecessary null check
WhitWaldo Oct 11, 2024
5dcc4e5
Removed deprecated methods from DaprClient and tests as well as unuse…
WhitWaldo Sep 3, 2024
11b3aec
Removed unused (and invalid) reference
WhitWaldo Sep 3, 2024
c6eb1d8
Removed E2E workflow test as it validated DaprClient and the function…
WhitWaldo Oct 11, 2024
0b89433
Adding instance-based CreateInvokableHttpClient (#1319)
WhitWaldo Oct 14, 2024
d1b6479
Fixed security advisory updates across dependencies (transitive and d…
WhitWaldo Oct 15, 2024
b148bc4
Removes floating classes and introduces Dapr.Common project (#1365)
WhitWaldo Oct 16, 2024
614a92b
Extracted Protos out to common project (#1367)
WhitWaldo Oct 16, 2024
a8e1b79
Improvement of the dotnet-contributing files (#1330)
Shubhdeep02 Oct 16, 2024
d538b26
Support case insensitive cloudevent payloads and forward cloudevent p…
IliasP91 Oct 17, 2024
453da80
Updating actor serialization documentation (#1371)
WhitWaldo Oct 18, 2024
e07a12e
Prioritize retrieval of environment variables from IConfiguration ins…
WhitWaldo Oct 18, 2024
d4f2ff1
cleanup: Removed Serilog nuget from Directory.Packages.props (#1376)
m3nax Oct 22, 2024
01eddad
Removed sample folder (#1375)
m3nax Oct 22, 2024
0b4eeda
Remove unused variables (#1314)
RafaelJCamara Oct 24, 2024
ed86404
Remove unused using statements. (#1313)
RafaelJCamara Oct 24, 2024
d5af95c
Incremental source generator for actors (#1334)
m3nax Oct 28, 2024
03995c7
Add .NET client for Dapr Jobs API (#1384)
WhitWaldo Nov 1, 2024
d1aa92b
Updated prereqs to specify .NET 6 and .NET 8 in v1.15 (#1398)
WhitWaldo Nov 1, 2024
a06605c
Refactor DaprWorkflowClientBuilderFactory and WorkflowRuntimeOptions …
humandigital-ruud Nov 4, 2024
c464294
Fix for DI registration not completing as expected (#1386)
WhitWaldo Nov 5, 2024
372d428
Add .NET client for pub/sub support - streaming subscriptions (#1381)
WhitWaldo Nov 5, 2024
a3da0aa
ci: set fail-fast to false (#1405)
mikeee Nov 12, 2024
3cbc50f
Added async operations workflow sample (#1394)
WhitWaldo Nov 12, 2024
c0a5a35
Added workflow example: Fan out/fan in (#1396)
WhitWaldo Nov 13, 2024
33d94a5
Added workflow sample: Sub-workflows (#1395)
WhitWaldo Nov 14, 2024
e04af4e
Added workflow sample: Task chaining (#1387)
WhitWaldo Nov 14, 2024
a972d2f
Added workflow sample: Monitor (#1388)
WhitWaldo Nov 14, 2024
f9c9e23
Added workflow example: External interaction (#1389)
WhitWaldo Nov 18, 2024
105f798
Optional DI lifecycle change (#1408)
WhitWaldo Nov 21, 2024
7933066
Additional lifecycle registration changes (#1410)
WhitWaldo Nov 24, 2024
072c060
Preserve comparer of the original dictionary from ConfigurationProvid…
tomhreb Nov 30, 2024
4ed3480
Update all.sln
WhitWaldo Nov 30, 2024
ed68f28
Bug/476 multiple methods per interface with JSON serialization doesn´…
paule96 Dec 3, 2024
2afde01
Support .NET 9 (#1404)
WhitWaldo Dec 4, 2024
b343ecb
update .net workflow docs to stable (#1418)
hhunter-ms Dec 4, 2024
4ed55b3
FIX: Actor source generator generates invalid code for generic interf…
m3nax Dec 5, 2024
d21a686
Add .NET client for LLM Conversations support (#1382)
WhitWaldo Dec 10, 2024
2fe08c9
Updated protos to latest in dapr/dapr (#1420)
WhitWaldo Dec 11, 2024
1e77e39
Conversation builder consistency changes (#1423)
WhitWaldo Dec 11, 2024
9d36d3e
#906 -Added methods in status API supports for saving and reading bin…
divzi-p Dec 11, 2024
dd06c48
Fixes + unit tests for streaming PubSub implementation (#1415)
WhitWaldo Dec 11, 2024
3dd8019
Fix nulls
svegiraju-microsoft Dec 20, 2024
f188fd1
Merge branch 'master' into users/svegira/make-context-mockable
siri-varma Dec 20, 2024
ce7b2d8
Delete examples/Client/PublishSubscribe/StreamingSubscriptionExample/…
siri-varma Dec 20, 2024
63bad79
Delete examples/AI/ConversationalAI/Properties/launchSettings.json
siri-varma Dec 20, 2024
57c93d2
Delete daprdocs/content/en/dotnet-sdk-docs/dotnet-ai/dotnet-ai-usage.md
siri-varma Dec 20, 2024
dd6b3c3
Update dotnet-jobs-howto.md
siri-varma Dec 20, 2024
e11bf0e
Update dotnet-jobs-howto.md
siri-varma Dec 20, 2024
0684a6c
Update dotnet-workflowclient-usage.md
siri-varma Dec 20, 2024
94763b3
Update dotnet-workflowclient-usage.md
siri-varma Dec 20, 2024
b519b62
fix thing
svegiraju-microsoft Dec 20, 2024
8f27ba7
Update WorkflowActivityContext.cs
siri-varma Dec 20, 2024
096664a
Update WorkflowActivityContext.cs
siri-varma Dec 21, 2024
dbda89d
fix things
svegiraju-microsoft Dec 21, 2024
1c4cc5b
Fix version
svegiraju-microsoft Dec 21, 2024
e3e6b0a
Update Dapr.Workflow.Test.csproj
siri-varma Dec 21, 2024
f32fb8e
fix things
svegiraju-microsoft Dec 21, 2024
b55699c
Delete examples/AI/ConversationalAI/Properties/launchSettings.json
siri-varma Dec 21, 2024
ea4ac28
Delete examples/Client/PublishSubscribe/StreamingSubscriptionExample/…
siri-varma Dec 21, 2024
df7c70c
Update WorkflowActivityContext.cs
siri-varma Dec 28, 2024
3077035
Merge branch 'master' into users/svegira/make-context-mockable
WhitWaldo Dec 28, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
37 changes: 37 additions & 0 deletions src/Dapr.Workflow/DaprWorkflowActivityContext.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
// ------------------------------------------------------------------------
// Copyright 2022 The Dapr Authors
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
// http://www.apache.org/licenses/LICENSE-2.0
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// ------------------------------------------------------------------------

namespace Dapr.Workflow
{
using System;
using Microsoft.DurableTask;

/// <summary>
/// Defines properties and methods for task activity context objects.
/// </summary>
public class DaprWorkflowActivityContext : WorkflowActivityContext
{
readonly TaskActivityContext innerContext;

internal DaprWorkflowActivityContext(TaskActivityContext innerContext)
{
this.innerContext = innerContext ?? throw new ArgumentNullException(nameof(innerContext));
}

/// <inheritdoc/>
public override TaskName Name => this.innerContext.Name;

/// <inheritdoc/>
public override string InstanceId => this.innerContext.InstanceId;
}
}
14 changes: 3 additions & 11 deletions src/Dapr.Workflow/WorkflowActivityContext.cs
Original file line number Diff line number Diff line change
Expand Up @@ -13,29 +13,21 @@

namespace Dapr.Workflow
{
using System;
using Microsoft.DurableTask;

/// <summary>
/// Defines properties and methods for task activity context objects.
/// </summary>
public class WorkflowActivityContext
public abstract class WorkflowActivityContext
{
readonly TaskActivityContext innerContext;

internal WorkflowActivityContext(TaskActivityContext innerContext)
{
this.innerContext = innerContext ?? throw new ArgumentNullException(nameof(innerContext));
}

/// <summary>
/// Gets the name of the activity.
/// </summary>
public TaskName Name => this.innerContext.Name;
public abstract TaskName Name { get; }

/// <summary>
/// Gets the unique ID of the current workflow instance.
/// </summary>
public string InstanceId => this.innerContext.InstanceId;
public abstract string InstanceId { get; }
}
}
4 changes: 2 additions & 2 deletions src/Dapr.Workflow/WorkflowRuntimeOptions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,7 @@ public void RegisterActivity<TInput, TOutput>(string name, Func<WorkflowActivity
{
registry.AddActivityFunc<TInput, TOutput>(name, (innerContext, input) =>
{
WorkflowActivityContext activityContext = new(innerContext);
WorkflowActivityContext activityContext = new DaprWorkflowActivityContext(innerContext);
return implementation(activityContext, input);
});
WorkflowLoggingService.LogActivityName(name);
Expand Down Expand Up @@ -183,7 +183,7 @@ public ActivityWrapper(IWorkflowActivity activity)

public Task<object?> RunAsync(TaskActivityContext context, object? input)
{
return this.activity.RunAsync(new WorkflowActivityContext(context), input);
return this.activity.RunAsync(new DaprWorkflowActivityContext(context), input);
}
}
}
Expand Down
4 changes: 1 addition & 3 deletions test/Dapr.Workflow.Test/Dapr.Workflow.Test.csproj
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
Expand All @@ -14,14 +13,13 @@
<PackageReference Include="xunit" />
<PackageReference Include="xunit.extensibility.core" />
<PackageReference Include="xunit.runner.visualstudio" />
<PackageReference Include="Moq" />
</ItemGroup>

<ItemGroup>
<Using Include="Xunit"/>
</ItemGroup>

<ItemGroup>
<ProjectReference Include="..\..\src\Dapr.Workflow\Dapr.Workflow.csproj" />
</ItemGroup>

</Project>
55 changes: 55 additions & 0 deletions test/Dapr.Workflow.Test/WorkflowActivityTest.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
// ------------------------------------------------------------------------
// Copyright 2021 The Dapr Authors
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
// http://www.apache.org/licenses/LICENSE-2.0
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// ------------------------------------------------------------------------

namespace Dapr.Workflow.Test
{
using Moq;
using System.Threading.Tasks;
using Xunit;
using Xunit.Sdk;

/// <summary>
/// Contains tests for WorkflowActivityContext.
/// </summary>
public class WorkflowActivityTest
{
private IWorkflowActivity workflowActivity;

private Mock<WorkflowActivityContext> workflowActivityContextMock;

public WorkflowActivityTest()
{
this.workflowActivity = new TestDaprWorkflowActivity();
this.workflowActivityContextMock = new Mock<WorkflowActivityContext>();
}

[Fact]
public async Task RunAsync_ShouldReturnCorrectContextInstanceId()
{
this.workflowActivityContextMock.Setup((x) => x.InstanceId).Returns("instanceId");

string result = (string) (await this.workflowActivity.RunAsync(this.workflowActivityContextMock.Object, "input"))!;

Assert.Equal("instanceId", result);
}


public class TestDaprWorkflowActivity : WorkflowActivity<string, string>
{
public override Task<string> RunAsync(WorkflowActivityContext context, string input)
{
return Task.FromResult(context.InstanceId);
}
}
}
}
Loading