53 lines
2.0 KiB
C#
53 lines
2.0 KiB
C#
using Moq;
|
|
using WpfViewModelFirst.Part1;
|
|
using WpfViewModelFirst.Part2;
|
|
|
|
namespace WpfViewModelFirst.Tests
|
|
{
|
|
public class MainWindowViewModelTests
|
|
{
|
|
[Fact]
|
|
public void Part1WillSetPart1ViewModelToCurrentViewModel()
|
|
{
|
|
Part1ViewModel part1ViewModel = new(() => Task.CompletedTask);
|
|
Mock<IViewModelFactory> mockViewModelFactory = new Mock<IViewModelFactory>();
|
|
mockViewModelFactory.Setup(vmf => vmf.GetPart1ViewModel(It.IsAny<Func<Task>>()))
|
|
.Returns(part1ViewModel);
|
|
MainWindowViewModel main = new(mockViewModelFactory.Object);
|
|
main.Part1(null);
|
|
Assert.Equal(part1ViewModel, main.CurrentViewModel);
|
|
}
|
|
[Fact]
|
|
public async Task Part1CallbackIsSuccessfull()
|
|
{
|
|
TaskCompletionSource<bool> taskCompletionSource = new TaskCompletionSource<bool>();
|
|
Mock<IViewModelFactory> mockViewModelFactory = new Mock<IViewModelFactory>();
|
|
mockViewModelFactory.Setup(vmf => vmf.GetPart1ViewModel(It.IsAny<Func<Task>>()))
|
|
|
|
.Returns(() => new Part1ViewModel(() =>
|
|
{
|
|
taskCompletionSource.SetResult(true);
|
|
return Task.CompletedTask;
|
|
}))
|
|
.Callback<Func<Task>>(c =>
|
|
{
|
|
c.Invoke().ContinueWith(t =>
|
|
{
|
|
taskCompletionSource.SetResult(true);
|
|
});
|
|
})
|
|
;
|
|
mockViewModelFactory.Setup(vmf => vmf.GetPart2ViewModel())
|
|
.Returns(() => new Part2ViewModel());
|
|
MainWindowViewModel main = new(mockViewModelFactory.Object);
|
|
main.Part1(null);
|
|
await taskCompletionSource.Task.WaitAsync(CancellationToken.None);
|
|
Assert.IsType<Part2ViewModel>(main.CurrentViewModel);
|
|
}
|
|
|
|
Func<Task> Part1Func()
|
|
{
|
|
return () => Task.CompletedTask;
|
|
}
|
|
}
|
|
} |