public async Task TestReset()
        {
            var fsMock = new Mock <IFileService>();

            fsMock
            .Setup(f => f.OpenLoadAsNatalChart())
            .Returns(() => Task.FromResult(new FileInformation("file.ext", new MemoryStream(Encoding.UTF8.GetBytes(NatalChart1)))));
            var fs  = fsMock.Object;
            var ass = new Mock <IAstroService>().Object;
            var vm  = new NatalChartViewModel(fs, null, ass);

            Assert.True(await vm.LoadFromFile());
            Assert.NotNull(vm.FileName);
            Assert.NotNull(vm.Definition);
            Assert.Null(vm.NatalChart);
            Assert.False(vm.IsDirty);
            Assert.False(vm.IsBusy);
            vm.IsDirty = true;
            var def = vm.Definition;

            vm.Reset();
            Assert.Null(vm.FileName);
            Assert.NotNull(vm.Definition);
            Assert.NotSame(def, vm.Definition);
            Assert.Null(vm.NatalChart);
            Assert.False(vm.IsDirty);
            Assert.False(vm.IsBusy);
        }
        public void TestAsINatalChartViewModel()
        {
            var fs  = new Mock <IFileService>().Object;
            var ass = new Mock <IAstroService>().Object;
            INatalChartViewModel vm = new NatalChartViewModel(fs, null, ass);

            Assert.Null(vm.FileName);
            Assert.NotNull(vm.Definition);
            Assert.Null(vm.NatalChart);
            Assert.False(vm.IsDirty);
            Assert.False(vm.IsBusy);
        }
        public async Task TestSave()
        {
            // Test d'enregistrements normaux
            var fsMock = new Mock <IFileService>();

            fsMock
            .Setup(f => f.OpenSaveAsNatalChart())
            .Returns(() => Task.FromResult(new FileInformation("file.ext", new MemoryStream())));
            fsMock
            .Setup(f => f.OpenSaveNatalChart(It.IsAny <String>()))
            .Returns <String>(n => Task.FromResult(new FileInformation(n, new MemoryStream())));
            var fs  = fsMock.Object;
            var ass = new Mock <IAstroService>().Object;
            var vm  = new NatalChartViewModel(fs, null, ass);

            vm.IsDirty = true;
            Assert.Null(vm.FileName);
            Assert.True(await vm.Save());
            Assert.Equal("file.ext", vm.FileName);
            Assert.False(vm.IsDirty);
            Assert.True(await vm.SaveAs("other-file.ext"));
            Assert.Equal("other-file.ext", vm.FileName);
            Assert.True(await vm.Save());
            Assert.Equal("other-file.ext", vm.FileName);
            Assert.False(vm.IsDirty);
            Assert.False(vm.IsBusy);

            Assert.True(await vm.SaveAs(null));
            Assert.Equal("file.ext", vm.FileName);
            Assert.False(vm.IsDirty);

            fsMock.Verify(f => f.OpenSaveAsNatalChart(), Times.Exactly(2));
            fsMock.Verify(f => f.OpenSaveNatalChart("other-file.ext"), Times.Exactly(2));

            // Test de chargement avec un délai
            fsMock = new Mock <IFileService>();
            fsMock
            .Setup(f => f.OpenSaveAsNatalChart())
            .Returns(() => Task.Delay(100).ContinueWith <FileInformation>(_ => new FileInformation("file.ext", new MemoryStream())));
            fs = fsMock.Object;
            vm = new NatalChartViewModel(fs, null, ass);
            var task = vm.Save();

            vm.IsDirty = true;
            Assert.True(vm.IsBusy);
            Assert.False(await vm.Save());
            Assert.True(await task);
            Assert.False(vm.IsDirty);
            Assert.False(vm.IsBusy);
        }
        public async Task TestLoad()
        {
            // Test de chargement normaux
            var fsMock = new Mock <IFileService>();

            fsMock
            .Setup(f => f.OpenLoadAsNatalChart())
            .Returns(() => Task.FromResult(new FileInformation("file.ext", new MemoryStream(Encoding.UTF8.GetBytes(NatalChart1)))));
            fsMock
            .Setup(f => f.OpenLoadNatalChart(It.IsAny <String>()))
            .Returns <String>(n => Task.FromResult(new FileInformation(n, new MemoryStream(Encoding.UTF8.GetBytes(NatalChart1)))));
            var fs  = fsMock.Object;
            var ass = new Mock <IAstroService>().Object;
            var vm  = new NatalChartViewModel(fs, null, ass);

            vm.IsDirty = true;
            Assert.Null(vm.FileName);
            Assert.True(await vm.LoadFromFile());
            Assert.Equal("file.ext", vm.FileName);
            Assert.Equal("Test", vm.Definition.Definition.Name);
            Assert.Null(vm.NatalChart);
            var chart = vm.NatalChart;

            Assert.True(await vm.LoadFromFile("other-file.ext"));
            Assert.Equal("other-file.ext", vm.FileName);
            Assert.Null(vm.NatalChart);
            Assert.False(vm.IsDirty);
            Assert.False(vm.IsBusy);
            await Assert.ThrowsAsync <ArgumentNullException>(() => vm.LoadFromFile(null));

            fsMock.Verify(f => f.OpenLoadAsNatalChart(), Times.Once());
            fsMock.Verify(f => f.OpenLoadNatalChart("other-file.ext"), Times.Once());

            // Test de chargement avec un délai
            fsMock = new Mock <IFileService>();
            fsMock
            .Setup(f => f.OpenLoadAsNatalChart())
            .Returns(Task.Delay(100).ContinueWith <FileInformation>(_ => new FileInformation("file.ext", new MemoryStream(Encoding.UTF8.GetBytes(NatalChart1)))));
            fs = fsMock.Object;
            vm = new NatalChartViewModel(fs, null, ass);
            var task = vm.LoadFromFile();

            vm.IsDirty = true;
            Assert.True(vm.IsBusy);
            Assert.False(await vm.LoadFromFile());
            Assert.True(await task);
            Assert.False(vm.IsDirty);
            Assert.False(vm.IsBusy);
        }