public async Task WhenConnectingByUrlWithUsername_ThenSuggestedUsernameForCredentialGenerationIsThisUsername()
        {
            var taskDialog = new Mock <ITaskDialog>();

            this.serviceRegistry.AddSingleton <ITaskDialog>(taskDialog.Object);
            taskDialog.Setup(t => t.ShowOptionsTaskDialog(
                                 It.IsAny <IWin32Window>(),
                                 It.IsAny <IntPtr>(),
                                 It.IsAny <string>(),
                                 It.IsAny <string>(),
                                 It.IsAny <string>(),
                                 It.IsAny <string>(),
                                 It.IsAny <IList <string> >(),
                                 It.IsAny <string>(),
                                 out It.Ref <bool> .IsAny)).Returns(0); // Generate new credentials

            var credentialsService = new Mock <ICredentialsService>();

            credentialsService.Setup(s => s.GenerateCredentialsAsync(
                                         It.IsAny <IWin32Window>(),
                                         It.IsAny <VmInstanceReference>(),
                                         It.IsAny <string>())).Returns(Task.FromResult(new NetworkCredential("user", "password")));
            this.serviceRegistry.AddSingleton <ICredentialsService>(credentialsService.Object);

            var service = new RemoteDesktopConnectionService(this.serviceRegistry);
            await service.ActivateOrConnectInstanceWithCredentialPromptAsync(
                null,
                IapRdpUrl.FromString("iap-rdp:///project/us-central-1/instance?username=john%20doe"));

            credentialsService.Verify(s => s.GenerateCredentialsAsync(
                                          It.IsAny <IWin32Window>(),
                                          It.IsAny <VmInstanceReference>(),
                                          It.Is <string>(user => user == "john doe")), Times.Once);
        }
        public async Task WhenConnectingByUrlWithoutUsername_ThenConnectionIsMadeWithoutUsername()
        {
            var taskDialog = new Mock <ITaskDialog>();

            this.serviceRegistry.AddSingleton <ITaskDialog>(taskDialog.Object);
            taskDialog.Setup(t => t.ShowOptionsTaskDialog(
                                 It.IsAny <IWin32Window>(),
                                 It.IsAny <IntPtr>(),
                                 It.IsAny <string>(),
                                 It.IsAny <string>(),
                                 It.IsAny <string>(),
                                 It.IsAny <string>(),
                                 It.IsAny <IList <string> >(),
                                 It.IsAny <string>(),
                                 out It.Ref <bool> .IsAny)).Returns(1); // Enter existing credentials

            var remoteDesktopService = new Mock <IRemoteDesktopService>();

            remoteDesktopService.Setup(s => s.Connect(
                                           It.IsAny <VmInstanceReference>(),
                                           "localhost",
                                           It.IsAny <ushort>(),
                                           It.IsAny <VmInstanceConnectionSettings>())).Returns <IRemoteDesktopSession>(null);

            this.serviceRegistry.AddSingleton <IRemoteDesktopService>(remoteDesktopService.Object);

            var service = new RemoteDesktopConnectionService(this.serviceRegistry);
            await service.ActivateOrConnectInstanceWithCredentialPromptAsync(
                null,
                IapRdpUrl.FromString("iap-rdp:///project/us-central-1/instance"));

            remoteDesktopService.Verify(s => s.Connect(
                                            It.IsAny <VmInstanceReference>(),
                                            "localhost",
                                            It.IsAny <ushort>(),
                                            It.Is <VmInstanceConnectionSettings>(i => i.Username == null)), Times.Once);
        }