Public Access
Add attendee transformation workflows
This commit is contained in:
@@ -310,6 +310,10 @@ public sealed class MeetingWorkflowEngineTests
|
||||
[InlineData("speaker_identified:\n name: ADA", "speaker", null, null, "ada", true)]
|
||||
[InlineData("speaker_identified:\n name: Ada", "speaker", null, null, "Grace", false)]
|
||||
[InlineData("speaker_identified: {}", "speaker", null, null, "Grace", true)]
|
||||
[InlineData("attendee_added:\n equals: Ada Lovelace", "attendee", null, null, "ada lovelace", true)]
|
||||
[InlineData("attendee_added:\n contains: contoso", "attendee", null, null, "Ada (Contoso)", true)]
|
||||
[InlineData("attendee_added:\n regex: '^Ada .+Contoso\\)$'", "attendee", null, null, "Ada (Contoso)", true)]
|
||||
[InlineData("attendee_added:\n regex: '^Grace'", "attendee", null, null, "Ada (Contoso)", false)]
|
||||
public async Task TriggerMatchingScenarios(
|
||||
string triggerYaml,
|
||||
string eventKind,
|
||||
@@ -318,6 +322,16 @@ public sealed class MeetingWorkflowEngineTests
|
||||
string? speaker,
|
||||
bool shouldRun)
|
||||
{
|
||||
var stepYaml = eventKind == "attendee"
|
||||
? """
|
||||
- uses: set_property
|
||||
property: attendee.name
|
||||
value: Triggered
|
||||
"""
|
||||
: """
|
||||
- uses: add_project
|
||||
value: Triggered
|
||||
""";
|
||||
var fixture = await WorkflowFixture.CreateAsync(
|
||||
$$"""
|
||||
rules:
|
||||
@@ -325,14 +339,21 @@ public sealed class MeetingWorkflowEngineTests
|
||||
on:
|
||||
- {{triggerYaml}}
|
||||
steps:
|
||||
- uses: add_project
|
||||
value: Triggered
|
||||
{{stepYaml}}
|
||||
""");
|
||||
|
||||
await fixture.Engine.RunAsync(
|
||||
CreateEvent(eventKind, fixture.Artifacts, from, to, speaker),
|
||||
fixture.Options,
|
||||
CancellationToken.None);
|
||||
var workflowEvent = CreateEvent(eventKind, fixture.Artifacts, from, to, speaker);
|
||||
if (eventKind == "attendee")
|
||||
{
|
||||
var transformed = await fixture.Engine.TransformAttendeeAsync(
|
||||
workflowEvent,
|
||||
fixture.Options,
|
||||
CancellationToken.None);
|
||||
Assert.Equal(shouldRun ? "Triggered" : speaker, transformed);
|
||||
return;
|
||||
}
|
||||
|
||||
await fixture.Engine.RunAsync(workflowEvent, fixture.Options, CancellationToken.None);
|
||||
|
||||
var meeting = await fixture.ReadMeetingAsync();
|
||||
Assert.Equal(shouldRun, meeting.Frontmatter.Projects.Contains("Triggered"));
|
||||
@@ -603,6 +624,34 @@ public sealed class MeetingWorkflowEngineTests
|
||||
Assert.Equal(["Ada Lovelace"], meeting.Frontmatter.Attendees);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task AttendeeAddedRuleCanTransformWorkflowAddedAttendee()
|
||||
{
|
||||
var fixture = await WorkflowFixture.CreateAsync(
|
||||
"""
|
||||
rules:
|
||||
- name: add-raw-attendee
|
||||
on:
|
||||
- created: {}
|
||||
steps:
|
||||
- uses: add_attendee
|
||||
value: 'Ada Lovelace (Contoso)'
|
||||
- name: clean-contoso-attendee
|
||||
on:
|
||||
- attendee_added:
|
||||
contains: 'Contoso'
|
||||
steps:
|
||||
- uses: set_property
|
||||
property: attendee.name
|
||||
value: '@Model.Attendee.Name.Replace(" (Contoso)", "")'
|
||||
""");
|
||||
|
||||
await RunCreatedAsync(fixture);
|
||||
|
||||
var meeting = await fixture.ReadMeetingAsync();
|
||||
Assert.Equal(["Ada Lovelace"], meeting.Frontmatter.Attendees);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task AddAttendeeDoesNotDuplicateExistingDisplayNameFromEmailAddress()
|
||||
{
|
||||
@@ -792,6 +841,7 @@ public sealed class MeetingWorkflowEngineTests
|
||||
{
|
||||
"created" => MeetingWorkflowEvent.Created(artifacts),
|
||||
"speaker" => MeetingWorkflowEvent.SpeakerIdentified(artifacts, speaker ?? "Ada"),
|
||||
"attendee" => MeetingWorkflowEvent.AttendeeAdded(artifacts, speaker ?? "Ada"),
|
||||
"state" => MeetingWorkflowEvent.StateTransition(
|
||||
artifacts,
|
||||
ParseState(from ?? "collecting metadata"),
|
||||
|
||||
Reference in New Issue
Block a user