microsoft/teams.net

Public

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

CodeCommitsIssuesPull requestsActionsInsightsSecurity
next/core

Branches

Tags

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

Clone

HTTPS

Download ZIP

core/test/Microsoft.Teams.Bot.Apps.UnitTests/RouterTests.cs

109lines · modecode

1// Copyright (c) Microsoft Corporation.
2// Licensed under the MIT License.
3
4using Microsoft.Extensions.Logging.Abstractions;
5using Microsoft.Teams.Bot.Apps.Handlers;
6using Microsoft.Teams.Bot.Apps.Routing;
7using Microsoft.Teams.Bot.Apps.Schema;
8
9namespace Microsoft.Teams.Bot.Apps.UnitTests;
10
11public class RouterTests
12{
13 private static Route<TActivity> MakeRoute<TActivity>(string name) where TActivity : TeamsActivity
14 => new() { Name = name, Selector = _ => true };
15
16 // ==================== Duplicate name ====================
17
18 [Fact]
19 public void Register_DuplicateName_Throws()
20 {
21 Router router = new(NullLogger.Instance);
22 router.Register(MakeRoute<MessageActivity>("Message"));
23
24 InvalidOperationException ex = Assert.Throws<InvalidOperationException>(()
25 => router.Register(MakeRoute<MessageActivity>("Message")));
26
27 Assert.Contains("Message", ex.Message);
28 }
29
30 [Fact]
31 public void Register_UniqueNames_Succeeds()
32 {
33 Router router = new(NullLogger.Instance);
34 router.Register(MakeRoute<MessageActivity>("Message/hello"));
35 router.Register(MakeRoute<MessageActivity>("Message/bye"));
36
37 Assert.Equal(2, router.GetRoutes().Count);
38 }
39
40 // ==================== Invoke conflict ====================
41
42 [Fact]
43 public void Register_CatchAllInvokeAfterSpecific_Throws()
44 {
45 Router router = new(NullLogger.Instance);
46 router.Register(MakeRoute<InvokeActivity>($"{TeamsActivityType.Invoke}/{InvokeNames.AdaptiveCardAction}"));
47
48 InvalidOperationException ex = Assert.Throws<InvalidOperationException>(()
49 => router.Register(MakeRoute<InvokeActivity>(TeamsActivityType.Invoke)));
50
51 Assert.Contains("catch-all", ex.Message);
52 }
53
54 [Fact]
55 public void Register_SpecificInvokeAfterCatchAll_Throws()
56 {
57 Router router = new(NullLogger.Instance);
58 router.Register(MakeRoute<InvokeActivity>(TeamsActivityType.Invoke));
59
60 InvalidOperationException ex = Assert.Throws<InvalidOperationException>(()
61 => router.Register(MakeRoute<InvokeActivity>($"{TeamsActivityType.Invoke}/{InvokeNames.TaskFetch}")));
62
63 Assert.Contains("invoke", ex.Message);
64 }
65
66 [Fact]
67 public void Register_MultipleCatchAllInvokes_ThrowsDuplicateName()
68 {
69 Router router = new(NullLogger.Instance);
70 router.Register(MakeRoute<InvokeActivity>(TeamsActivityType.Invoke));
71
72 Assert.Throws<InvalidOperationException>(()
73 => router.Register(MakeRoute<InvokeActivity>(TeamsActivityType.Invoke)));
74 }
75
76 [Fact]
77 public void Register_MultipleSpecificInvokeHandlers_Succeeds()
78 {
79 Router router = new(NullLogger.Instance);
80 router.Register(MakeRoute<InvokeActivity>($"{TeamsActivityType.Invoke}/{InvokeNames.AdaptiveCardAction}"));
81 router.Register(MakeRoute<InvokeActivity>($"{TeamsActivityType.Invoke}/{InvokeNames.TaskFetch}"));
82 router.Register(MakeRoute<InvokeActivity>($"{TeamsActivityType.Invoke}/{InvokeNames.TaskSubmit}"));
83
84 Assert.Equal(3, router.GetRoutes().Count);
85 }
86
87 // ==================== Non-invoke catch-all + specific is allowed ====================
88
89 [Fact]
90 public void Register_ConversationUpdateCatchAllAndSpecific_Succeeds()
91 {
92 Router router = new(NullLogger.Instance);
93 router.Register(MakeRoute<ConversationUpdateActivity>(TeamsActivityType.ConversationUpdate));
94 router.Register(MakeRoute<ConversationUpdateActivity>($"{TeamsActivityType.ConversationUpdate}/membersAdded"));
95
96 Assert.Equal(2, router.GetRoutes().Count);
97 }
98
99 [Fact]
100 public void Register_InstallUpdateCatchAllAndSpecific_Succeeds()
101 {
102 Router router = new(NullLogger.Instance);
103 router.Register(MakeRoute<InstallUpdateActivity>(TeamsActivityType.InstallationUpdate));
104 router.Register(MakeRoute<InstallUpdateActivity>($"{TeamsActivityType.InstallationUpdate}/add"));
105 router.Register(MakeRoute<InstallUpdateActivity>($"{TeamsActivityType.InstallationUpdate}/remove"));
106
107 Assert.Equal(3, router.GetRoutes().Count);
108 }
109}
110