public async Task TokenNotExchanged_PreconditionFailed() { // Arrange bool wasCalled = false; var adapter = new TeamsSSOAdapter(CreateConversationReference()) .Use(new TeamsSSOTokenExchangeMiddleware(new MemoryStorage(), ConnectionName)); // since this test does not setup adapter.AddExchangeableToken, the exchange will not happen // Act await new TestFlow(adapter, async(context, cancellationToken) => { wasCalled = true; await Task.CompletedTask; }) .Send("test") .AssertReply((activity) => { Assert.Equal(ActivityTypesEx.InvokeResponse, activity.Type); var invokeResponse = (activity as Activity).Value as InvokeResponse; var tokenExchangeRequest = invokeResponse.Body as TokenExchangeInvokeResponse; Assert.Equal(ConnectionName, tokenExchangeRequest.ConnectionName); Assert.Equal(ExchangeId, tokenExchangeRequest.Id); Assert.Equal(412, invokeResponse.Status); //412:PreconditionFailed }) .StartTestAsync(); // Assert Assert.False(wasCalled, "Delegate was called"); }
public async Task TokenExchanged_OnTurnFires() { // Arrange bool wasCalled = false; var adapter = new TeamsSSOAdapter(CreateConversationReference()) .Use(new TeamsSSOTokenExchangeMiddleware(new MemoryStorage(), ConnectionName)); adapter.AddExchangeableToken(ConnectionName, Channels.Msteams, TeamsUserId, FakeExchangeableItem, Token); // Act await new TestFlow(adapter, async(context, cancellationToken) => { // note the Middleware should not cause the Responded flag to be set Assert.False(context.Responded); wasCalled = true; await context.SendActivityAsync("processed", cancellationToken: cancellationToken); await Task.CompletedTask; }) .Send("test") .AssertReply("processed") .StartTestAsync(); // Assert Assert.True(wasCalled, "Delegate was not called"); }
public async Task TokenNotExchanged_DirectLineChannel() { // Arrange bool wasCalled = false; var adapter = new TeamsSSOAdapter(CreateConversationReference(Channels.Directline)) .Use(new TeamsSSOTokenExchangeMiddleware(new MemoryStorage(), ConnectionName)); // Act await new TestFlow(adapter, async(context, cancellationToken) => { wasCalled = true; await context.SendActivityAsync("processed", cancellationToken: cancellationToken); await Task.CompletedTask; }) .Send("test") .AssertReply("processed") .StartTestAsync(); // Assert Assert.True(wasCalled, "Delegate was not called"); }
public async Task TokenExchanged_SecondSendsInvokeResponse() { // Arrange int calledCount = 0; var adapter = new TeamsSSOAdapter(CreateConversationReference()) .Use(new TeamsSSOTokenExchangeMiddleware(new MemoryStorage(), ConnectionName)); adapter.AddExchangeableToken(ConnectionName, Channels.Msteams, TeamsUserId, FakeExchangeableItem, Token); // Act await new TestFlow(adapter, async(context, cancellationToken) => { // note the Middleware should not cause the Responded flag to be set Assert.False(context.Responded); calledCount++; await context.SendActivityAsync("processed", cancellationToken: cancellationToken); await Task.CompletedTask; }) .Send("test") .AssertReply("processed") .Send("test") .AssertReply((activity) => { // When the 2nd message goes through, it is not processed due to deduplication // but an invokeResponse of 200 status with empty body is sent back Assert.Equal(ActivityTypesEx.InvokeResponse, activity.Type); var invokeResponse = (activity as Activity).Value as InvokeResponse; Assert.Null(invokeResponse.Body); Assert.Equal(200, invokeResponse.Status); }) .StartTestAsync(); // Assert Assert.False(calledCount == 0, "Delegate was not called"); Assert.True(calledCount == 1, "OnTurn delegate called more than once"); }