microsoft/teams.net

Public

mirrored fromhttps://github.com/microsoft/teams.netAvailable

CodeCommitsIssuesPull requestsActionsInsightsSecurity
copilot/close-pull-request

Branches

Tags

  • No tags available.
0Branches0Tags
Go to file
Add file
Code

Clone

HTTPS

Download ZIP

Tests/Microsoft.Teams.Apps.Tests/Activities/ActivityTests.cs

118lines · modecode

1using Microsoft.Teams.Api.Activities;
2using Microsoft.Teams.Api.Auth;
3using Microsoft.Teams.Apps.Activities;
4using Microsoft.Teams.Apps.Annotations;
5using Microsoft.Teams.Apps.Testing.Plugins;
6
7namespace Microsoft.Teams.Apps.Tests.Activities;
8
9public class ActivityTests
10{
11 private readonly App _app = new();
12 private readonly IToken _token = Globals.Token;
13 private readonly TestPlugin _plugin = new();
14 private readonly Controller _controller = new();
15
16 public ActivityTests()
17 {
18 _app.AddPlugin(_plugin);
19 _app.AddController(_controller);
20 }
21
22 [Fact]
23 public async Task Should_CallHandler_OnMessage()
24 {
25 var calls = 0;
26
27 _app.OnActivity(context =>
28 {
29 calls++;
30 Assert.True(context.Activity.Type.IsMessage);
31 return Task.CompletedTask;
32 });
33
34 var res = await _app.Process<TestPlugin>(_token, new MessageActivity());
35
36 Assert.Equal(System.Net.HttpStatusCode.OK, res.Status);
37 Assert.Equal(1, calls);
38 Assert.Equal(1, _controller.Calls);
39 Assert.Equal(2, res.Meta.Routes);
40 }
41
42 [Fact]
43 public async Task Should_CallHandler_OnTyping()
44 {
45 var calls = 0;
46
47 _app.OnActivity(context =>
48 {
49 calls++;
50 Assert.True(context.Activity.Type.IsTyping);
51 return Task.CompletedTask;
52 });
53
54 var res = await _app.Process<TestPlugin>(_token, new TypingActivity());
55
56 Assert.Equal(System.Net.HttpStatusCode.OK, res.Status);
57 Assert.Equal(1, calls);
58 Assert.Equal(1, _controller.Calls);
59 Assert.Equal(2, res.Meta.Routes);
60 }
61
62 [Fact]
63 public async Task Should_Pass_Extra_OnActivity()
64 {
65 IDictionary<string, object?>? extra = null;
66 _app.OnActivity(context =>
67 {
68 extra = context.Extra;
69 return Task.CompletedTask;
70 });
71
72 var extraFromParameter = new Dictionary<string, object?>
73 {
74 { "paramContextKey", "value" }
75 };
76 var res = await _app.Process<TestPlugin>(_token, new MessageActivity(), extraFromParameter);
77
78 Assert.Equal(extra!["paramContextKey"], "value");
79 }
80
81 [Fact]
82 public async Task Should_Pass_Extra_AcrossActivityHandlers()
83 {
84
85 _app.OnActivity(async context =>
86 {
87 // Set the context in the first handler
88 context.Extra["key1"] = "value1";
89 // Call the next handler in the pipeline
90 await context.Next();
91 });
92
93 IDictionary<string, object?>? extra = null;
94 _app.OnActivity(context =>
95 {
96 // Retrieve the context data set in the previous handler
97 extra = context.Extra;
98 return Task.CompletedTask;
99 });
100
101 var res = await _app.Process<TestPlugin>(_token, new MessageActivity());
102 Assert.Equal(System.Net.HttpStatusCode.OK, res.Status);
103 Assert.Equal(extra!["key1"], "value1");
104 }
105
106 [TeamsController]
107 public class Controller
108 {
109 public int Calls { get; private set; } = 0;
110
111 [Activity]
112 public void OnActivity([Context] IContext.Next next)
113 {
114 Calls++;
115 next();
116 }
117 }
118}