0.3.0: UGC removed, battlepass context-carrying API, scenario behavior aligned with web SDK, CI publish
CI / check (push) Successful in 50s
CI / publish (push) Failing after 37s

This commit is contained in:
edmand46
2026-08-19 17:48:58 +03:00
parent 9d8fb29a7c
commit 2a8d5d4f2f
22 changed files with 234 additions and 388 deletions
@@ -22,7 +22,6 @@ public sealed class RudderClientTests
Assert.NotNull(client.Inventory);
Assert.NotNull(client.BattlePass);
Assert.NotNull(client.Quests);
Assert.NotNull(client.Ugc);
Assert.NotNull(client.Scenario);
Assert.NotNull(client.Realtime);
}
+42 -13
View File
@@ -265,7 +265,7 @@ public sealed class ScenarioServiceTests
}
[Fact]
public async Task Quest_Progress_Response_Can_Start_Continuation_Plan()
public async Task Quest_Progress_Completed_Response_Completes_The_Node()
{
var transport = new FakeTransport();
transport.Enqueue(new TriggerScenarioResponse
@@ -275,16 +275,12 @@ public sealed class ScenarioServiceTests
Plan("plan", Node("quest", "quest"))
}
});
transport.Enqueue(new UpdateScenarioCounterResponse
{
Completed = true,
Plan = Plan("continuation", Node("done", "notification"))
});
transport.Enqueue(new UpdateScenarioCounterResponse { Completed = true });
var client = CreateClient(transport);
QuestSession? quest = null;
var notifications = 0;
var completed = 0;
client.Scenario.OnQuest += session => quest = session;
client.Scenario.OnNotification += _ => notifications++;
client.Scenario.OnScenarioCompleted += _ => completed++;
await client.Scenario.TriggerAsync("login");
await quest!.AddProgressAsync("wins", 1);
@@ -293,11 +289,40 @@ public sealed class ScenarioServiceTests
transport.Calls.Single(call => call.Path == "/sdk/v1/scenarios/counter").Request);
Assert.Equal("quest", counter.NodeId);
Assert.Equal("wins", counter.CounterKey);
Assert.Equal(1, notifications);
Assert.Equal(1, completed);
Assert.Empty(client.Scenario.ActiveRuns);
}
[Fact]
public async Task Unknown_Nodes_Are_Logged_And_Ignored()
public async Task Quest_Progress_Failure_Does_Not_Fail_The_Run()
{
var transport = new FakeTransport();
transport.Enqueue(new TriggerScenarioResponse
{
Plans = new List<ExecutionPlan>
{
Plan("plan", Node("quest", "quest"))
}
});
transport.Enqueue(new InvalidOperationException("boom"));
var logger = new FakeLogger();
var client = CreateClient(transport, logger: logger);
QuestSession? quest = null;
var failed = 0;
client.Scenario.OnQuest += session => quest = session;
client.Scenario.OnScenarioFailed += _ => failed++;
await client.Scenario.TriggerAsync("login");
await quest!.AddProgressAsync("wins", 1);
Assert.Equal(0, failed);
Assert.Single(client.Scenario.ActiveRuns);
Assert.Contains(logger.Messages, m =>
m.Level == RudderLogLevel.Warning && m.Message.Contains("counter update failed"));
}
[Fact]
public async Task Unknown_Nodes_Fail_The_Run()
{
var transport = new FakeTransport();
transport.Enqueue(new TriggerScenarioResponse
@@ -309,12 +334,16 @@ public sealed class ScenarioServiceTests
});
var logger = new FakeLogger();
var client = CreateClient(transport, logger: logger);
ScenarioFailedEvent? failure = null;
client.Scenario.OnScenarioFailed += e => failure = e;
await client.Scenario.TriggerAsync("login");
var (level, message) = Assert.Single(logger.Messages);
Assert.Equal(RudderLogLevel.Warning, level);
Assert.Contains("Unsupported scenario node type 'future_node'", message);
Assert.NotNull(failure);
Assert.Equal("future", failure!.NodeId);
Assert.Empty(client.Scenario.ActiveRuns);
Assert.Contains(logger.Messages, m =>
m.Level == RudderLogLevel.Warning && m.Message.Contains("Unsupported scenario node type 'future_node'"));
}
private static RudderClient CreateClient(