public void CancelButton_Cancels_Login()
        {
            var scheduler = new TestScheduler();

            LoginViewModel sut = new LoginViewModelBuilder()
                                 .WithScheduler(scheduler)
                                 .WithUserName("coolusername")
                                 .WithPassword("excellentpassword");

            scheduler.AdvanceByMs(TimeSpan.FromSeconds(1).Milliseconds);

            sut.Login.Subscribe(x => x.Should().Be(true));

            Observable
            .Return(Unit.Default)
            .InvokeCommand(sut.Login);

            sut.Cancel.CanExecute.Subscribe(x => x.Should().Be(true));

            scheduler.AdvanceByMs(1000);

            Observable
            .Return(Unit.Default)
            .InvokeCommand(sut.Cancel);
        }
        public void CancelButton_IsAvailableUntil_TwoSeconds()
        {
            var actual    = false;
            var scheduler = new TestScheduler();

            LoginViewModel sut = new LoginViewModelBuilder()
                                 .WithScheduler(scheduler)
                                 .WithUserName("coolusername")
                                 .WithPassword("excellentpassword");

            sut.Cancel.CanExecute.Subscribe(x =>
            {
                actual = x;
            });

            Observable.Return(Unit.Default).InvokeCommand(sut.Login);

            actual.Should().Be(false);

            // 50ms
            scheduler.AdvanceByMs(50);

            actual.Should().Be(true);

            // 1sec 50ms
            scheduler.AdvanceByMs(TimeSpan.FromSeconds(1).TotalMilliseconds);

            actual.Should().Be(true);

            // 2sec 50sms
            scheduler.AdvanceByMs(TimeSpan.FromSeconds(1).TotalMilliseconds);

            actual.Should().Be(false);
        }
Пример #3
0
        public async Task User_CanLogin_WithCorrect_Password()
        {
            LoginViewModel sut = new LoginViewModelBuilder()
                                 .WithUserName("coolusername")
                                 .WithPassword("Mr. Goodbytes");

            Assert.False(true);
        }
Пример #4
0
        public async Task LoginButton_IsDisabled_ByDefault()
        {
            LoginViewModel sut = new LoginViewModelBuilder();

            var result = await sut.Login.CanExecute.FirstAsync();

            result.Should().BeFalse();
        }
        public async Task LoginButton_IsEnabled_WhenUserNameAndPassword_IsNotEmptyAsync(string userName, string password)
        {
            LoginViewModel sut = new LoginViewModelBuilder()
                                 .WithUserName(userName)
                                 .WithPassword(password);

            (await sut.Login.CanExecute.FirstAsync()).Should().Be(true);
        }
Пример #6
0
        public async Task CancelButton_IsDisabled_WhenNot_LoggingIn()
        {
            LoginViewModel sut = new LoginViewModelBuilder();

            var result = await sut.Cancel.CanExecute.FirstAsync();

            result.Should().BeFalse();
        }
Пример #7
0
        public async Task User_CannotLogin_WithIncorrect_Password()
        {
            LoginViewModel sut = new LoginViewModelBuilder()
                                 .WithUserName("coolusername")
                                 .WithPassword("incorrectpassword");

            Assert.False(true);
        }
Пример #8
0
        public async Task LoginButton_IsDisabled_WhenUserNameOrPassword_IsEmpty(string userName, string password)
        {
            LoginViewModel sut = new LoginViewModelBuilder()
                                 .WithUserName(userName)
                                 .WithPassword(password);

            (await sut.Login.CanExecute.FirstAsync()).ShouldBe(false);
        }
Пример #9
0
        public void CancelButton_IsDisabled_WhenNot_LoggingIn()
        {
            var sut = new LoginViewModelBuilder()
                      .Build();

            sut.Cancel.CanExecute
            .FirstAsync().Wait()
            .Should().BeFalse();;
        }
Пример #10
0
        public void LoginButton_IsDisabled_ByDefault()
        {
            var sut = new LoginViewModelBuilder()
                      .Build();

            sut.Login.CanExecute
            .FirstAsync().Wait()
            .Should().BeFalse();;
        }
Пример #11
0
        public void User_CannotLogin_WithIncorrect_Password()
        {
            var sut = new LoginViewModelBuilder()
                      .WithUserName("coolusername")
                      .WithPassword("incorrectpassword")
                      .Build();


            Assert.False(true);
        }
Пример #12
0
        public void LoginButton_IsEnabled_WhenUserNameAndPassword_IsNotEmptyAsync(string userName, string password)
        {
            var sut = new LoginViewModelBuilder()
                      .WithUserName(userName)
                      .WithPassword(password)
                      .Build();

            sut.Login.CanExecute
            .FirstAsync().Wait()
            .Should().BeTrue();
        }
Пример #13
0
        public void LoginButton_IsDisabled_WhenUserNameOrPassword_IsEmpty(string userName, string password)
        {
            var sut = new LoginViewModelBuilder()
                      .WithUserName(userName)
                      .WithPassword(password)
                      .Build();

            sut.Login.CanExecute
            .FirstAsync().Wait()
            .Should().BeFalse();;
        }
        public void CanLogin_TicksCorrectly()
        {
            var            scheduler = new TestScheduler();
            LoginViewModel sut       = new LoginViewModelBuilder()
                                       .WithScheduler(scheduler)
                                       .WithUserName("coolusername")
                                       .WithPassword("Mr. Goodbytes");

            sut.Cancel.CanExecute.ToObservableChangeSet(ImmediateScheduler.Instance).Bind(out var collection).Subscribe();

            Observable.Return(Unit.Default).InvokeCommand(sut.Login);

            scheduler.AdvanceByMs(TimeSpan.FromSeconds(5).TotalMilliseconds);

            collection.ToList().Should().BeEquivalentTo(new[] { false, true, false });
        }
Пример #15
0
        public async Task CancelButton_Cancels_Login()
        {
            await new TestScheduler().With(async sched =>
            {
                LoginViewModel sut = new LoginViewModelBuilder()
                                     .WithScheduler(sched)
                                     .WithUserName("coolusername")
                                     .WithPassword("excellentpassword");

                sut.Login.Subscribe(x => x.Should().BeTrue());

                sched.AdvanceByMs(TimeSpan.FromSeconds(1).Milliseconds);

                var result = await sut.Cancel.CanExecute.FirstAsync();
                result.Should().BeTrue();
            }).ConfigureAwait(false);
        }
        public void User_CannotLogin_WithIncorrect_Password()
        {
            var            scheduler = new TestScheduler();
            LoginViewModel sut       = new LoginViewModelBuilder()
                                       .WithScheduler(scheduler)
                                       .WithUserName("coolusername")
                                       .WithPassword("incorrectpassword");

            bool?value = null;

            sut.Login.Subscribe(x => value = x);

            Observable.Return(Unit.Default).InvokeCommand(sut.Login);

            scheduler.AdvanceByMs(TimeSpan.FromSeconds(3).TotalMilliseconds);

            value.Should().Be(false);
        }
Пример #17
0
        public async Task CancelButton_IsAvailableUntil_TwoSeconds()
        {
            new TestScheduler().With(sched =>
            {
                LoginViewModel sut = new LoginViewModelBuilder()
                                     .WithScheduler(sched)
                                     .WithUserName("coolusername")
                                     .WithPassword("excellentpassword");

                sut.Login.Execute().Subscribe();

                sut.Cancel.CanExecute
                .FirstAsync().Wait()
                .Should().BeFalse();

                // 50ms
                sched.AdvanceByMs(50);

                sut.Cancel.CanExecute
                .FirstAsync().Wait()
                .Should().BeTrue();

                // 1sec 50ms
                sched.AdvanceByMs(TimeSpan.FromSeconds(1).Milliseconds);

                sut.Cancel.CanExecute
                .FirstAsync().Wait()
                .Should().BeTrue();

                // 2sec 50sms
                sched.AdvanceByMs(TimeSpan.FromSeconds(1).Milliseconds);

                sut.Cancel.CanExecute
                .FirstAsync().Wait()
                .Should().BeFalse();
            });
        }
Пример #18
0
        public void CancelButton_Cancels_Login()
        {
            (new TestScheduler()).With(sched => {
                var sut = new LoginViewModelBuilder()
                          .WithScheduler(sched)
                          .WithUserName("coolusername")
                          .WithPassword("excellentpassword")
                          .Build();

                sut.Login.Subscribe(x => {
                    x.Should().BeTrue();
                });

                //sut.Login.Execute();

                sched.AdvanceByMs(TimeSpan.FromSeconds(1).Milliseconds);

                sut.Cancel.CanExecute
                .FirstAsync().Wait()
                .Should().BeTrue();

                //sut.Cancel.Execute();
            });
        }
        public async Task CancelButton_IsDisabled_WhenNot_LoggingIn()
        {
            LoginViewModel sut = new LoginViewModelBuilder();

            (await sut.Cancel.CanExecute.FirstAsync()).Should().Be(false);
        }