public async Task RestoreSession_DisablesCertificateValidator_IfWebExceptionIsTrustFailureAndUserContinues() { var mattermost = new Mock <IClient>(); var session = new Mock <ISession>(); var clientfactory = SetupClientFactoryMock(mattermost); var exception = new WebException("", new Exception("invalid ssl"), WebExceptionStatus.TrustFailure, It.IsAny <HttpWebResponse>()); var certValidator = new Mock <IServerCertificateValidator>(); mattermost.SetupSequence( x => x.LoginByUsername(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>())) .Throws(exception) .Returns(session.Object); var settingsLoadService = new Mock <ISettingsLoadService>(); var settings = new AddInSettings("myUrl", "testTeamId", "Donald Duck", "channels", MattermostVersion.ApiVersionFour); settingsLoadService.Setup(x => x.Load()).Returns(settings); var invalidSslQuestion = new Mock <ITrustInvalidSslQuestion>(); invalidSslQuestion.Setup(x => x.GetAnswer(settings.MattermostUrl, exception.InnerException.Message)) .Returns(true); var cut = new SingleSignOnSessionRepository(clientfactory.Object, settingsLoadService.Object, new Mock <IPasswordProvider>().Object, invalidSslQuestion.Object, certValidator.Object); var result = await cut.RestoreSession(); result.ShouldBeEquivalentTo(session.Object); certValidator.Verify(x => x.DisableValidation()); }
public async Task RestoreSession_CreatesNewSession_IfCacheInvalidated() { var mattermost = new Mock <IClient>(); var session1 = new Mock <ISession>(); var session2 = new Mock <ISession>(); var settingsLoadService = new Mock <ISettingsLoadService>(); var settings = new AddInSettings("myUrl", "testTeamId", "Donald Duck", "channels", MattermostVersion.ApiVersionOne); settingsLoadService.Setup(x => x.Load()).Returns(settings); var clientFactory = SetupClientFactoryMock(mattermost); mattermost.SetupSequence( x => x.LoginByUsername(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>())) .Returns(session1.Object) .Returns(session2.Object); var classUnderTest = new SingleSignOnSessionRepository(clientFactory.Object, settingsLoadService.Object, Mock.Of <IPasswordProvider>()); var result1 = await classUnderTest.RestoreSession(); classUnderTest.Invalidate(); var result2 = await classUnderTest.RestoreSession(); result1.Should().Be(session1.Object); result2.Should().Be(session2.Object); }
protected override Office.IRibbonExtensibility CreateRibbonExtensibilityObject() { var httpClient = new DotNetHttpClient(); var clientFactory = new MattermostClientFactory(httpClient); var passwordDialog = new PasswordDialogShell(); var caches = new CompositeCache(); var settingsService = new ApplicationSettingsService(caches); var invalidCertificateDialog = new InvalidCertificateDialogShell(); var staticValidationManager = new StaticServicePointManager(); var sessionRepository = new SingleSignOnSessionRepository(clientFactory, settingsService, passwordDialog, invalidCertificateDialog, staticValidationManager); caches.Add(sessionRepository); var explorerService = new OutlookExplorerService(); var mailExplorer = new OutlookMailExplorer(explorerService); var errorDisplay = new MessageBoxErrorDisplay(); var settingsUi = new WpfSettingsUserInterface(settingsService, settingsService); var permalinkUi = new PermalinkDialogShell(); var postIdFilter = new PostIdFromPermalinkFilter(permalinkUi); return(new MailItemContextMenuEntry( mailExplorer, settingsService, settingsService, errorDisplay, settingsUi, sessionRepository, postIdFilter)); }
public void RestoreSession_ThrowsUserAbortException_IfUserAbortsOnTrustFailureException() { var mattermost = new Mock <IClient>(); var session = new Mock <ISession>(); var clientfactory = SetupClientFactoryMock(mattermost); var exception = new WebException("", new Exception("invalid ssl"), WebExceptionStatus.TrustFailure, It.IsAny <HttpWebResponse>()); mattermost.SetupSequence( x => x.LoginByUsername(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>())) .Throws(exception) .Returns(session.Object); var settingsLoadService = new Mock <ISettingsLoadService>(); var settings = new AddInSettings("myUrl", "testTeamId", "Donald Duck", "channels", MattermostVersion.ApiVersionFour); settingsLoadService.Setup(x => x.Load()).Returns(settings); var invalidSslQuestion = new Mock <ITrustInvalidSslQuestion>(); invalidSslQuestion.Setup(x => x.GetAnswer(settings.MattermostUrl, exception.InnerException.Message)) .Returns(false); var cut = new SingleSignOnSessionRepository(clientfactory.Object, settingsLoadService.Object, new Mock <IPasswordProvider>().Object, invalidSslQuestion.Object, new Mock <IServerCertificateValidator>().Object); Func <Task> func = async() => { await cut.RestoreSession(); }; func.ShouldThrow <UserAbortException>(); }
public async Task RestoreSession_ReturnsNewSessionFromClient() { var settingsLoadService = new Mock <ISettingsLoadService>(); var settings = new AddInSettings("myUrl", "testTeamId", "Donald Duck", "channels", It.IsAny <MattermostVersion>()); settingsLoadService.Setup(x => x.Load()).Returns(settings); var mattermost = new Mock <IClient>(); var clientFactory = SetupClientFactoryMock(mattermost); var session = new Mock <ISession>(); mattermost.Setup( x => x.LoginByUsername(settings.MattermostUrl, settings.TeamId, settings.Username, It.IsAny <string>())) .Returns(session.Object); var classUnderTest = new SingleSignOnSessionRepository(clientFactory.Object, settingsLoadService.Object, Mock.Of <IPasswordProvider>(), Mock.Of <ITrustInvalidSslQuestion>(), Mock.Of <IServerCertificateValidator>()); var result = await classUnderTest.RestoreSession(); result.Should().Be(session.Object); }
public async Task RestoreSession_HasCachingSemantics() { var mattermost = new Mock <IClient>(); var session1 = new Mock <ISession>(); var session2 = new Mock <ISession>(); var clientFactory = SetupClientFactoryMock(mattermost); mattermost.SetupSequence( x => x.LoginByUsername(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>())) .Returns(session1.Object) .Returns(session2.Object); var classUnderTest = new SingleSignOnSessionRepository(clientFactory.Object, DefaultSettingsLoadService, Mock.Of <IPasswordProvider>(), Mock.Of <ITrustInvalidSslQuestion>(), Mock.Of <IServerCertificateValidator>()); var result1 = await classUnderTest.RestoreSession(); var result2 = await classUnderTest.RestoreSession(); result1.Should().Be(session1.Object); result2.Should().Be(session1.Object); }
public void Invalidate_EnablesCertificationValidator() { var certValidator = new Mock <IServerCertificateValidator>(); var cut = new SingleSignOnSessionRepository(new Mock <IClientFactory>().Object, new Mock <ISettingsLoadService>().Object, new Mock <IPasswordProvider>().Object, new Mock <ITrustInvalidSslQuestion>().Object, certValidator.Object); cut.Invalidate(); certValidator.Verify(x => x.EnableValidation()); }
public async Task RestoreSession_UsesProvidedPassword() { const string password = "******"; var passwordProvider = new Mock <IPasswordProvider>(); passwordProvider.Setup(x => x.GetPassword(It.IsAny <string>())).Returns(password); var mattermost = new Mock <IClient>(); var session = new Mock <ISession>(); var clientFactory = SetupClientFactoryMock(mattermost); mattermost.Setup( x => x.LoginByUsername(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>(), password)) .Returns(session.Object); var classUnderTest = new SingleSignOnSessionRepository(clientFactory.Object, DefaultSettingsLoadService, passwordProvider.Object); var result = await classUnderTest.RestoreSession(); result.Should().Be(session.Object); }
public async Task OnPostIntoChannelClick_CanHandleUserPasswordAbort() { var control = MockOfRibbonControl(); var passwordProvider = new Mock <IPasswordProvider>(); passwordProvider.Setup(x => x.GetPassword(It.IsAny <string>())).Throws <Exception>(); var sessionCache = new SingleSignOnSessionRepository(Mock.Of <IClientFactory>(), DefaultSettingsLoadService, passwordProvider.Object); var classUnderTest = new MailItemContextMenuEntry( MockOfMailExplorer(), DefaultSettingsLoadService, Mock.Of <ISettingsSaveService>(), Mock.Of <IErrorDisplay>(), Mock.Of <ISettingsUserInterface>(), sessionCache, Mock.Of <IStringProvider>()); await classUnderTest.OnPostIntoChannelClick(control); }