public async Task DeletePhotosRemovesPhotosFromStoreTest() { var profileId = Guid.NewGuid(); var photoReferences = Model.Create <List <Guid> >(); var store = Substitute.For <IPhotoStore>(); var resizer = Substitute.For <IPhotoResizer>(); var config = Substitute.For <IPhotoConfig>(); using (var tokenSource = new CancellationTokenSource()) { store.GetPhotos(profileId, tokenSource.Token).Returns(photoReferences); var sut = new PhotoCommand(store, resizer, config); await sut.DeletePhotos(profileId, tokenSource.Token).ConfigureAwait(false); await store.Received(photoReferences.Count).DeletePhoto(profileId, Arg.Any <Guid>(), tokenSource.Token).ConfigureAwait(false); foreach (var photoReference in photoReferences) { await store.Received().DeletePhoto(profileId, photoReference, tokenSource.Token).ConfigureAwait(false); } } }
public async Task CreatePhotoStoresResizedPhotoTest() { var expected = Model.Ignoring <Photo>(x => x.Data).Create <Photo>(); var details = Model.Create <PhotoDetails>(); var store = Substitute.For <IPhotoStore>(); var resizer = Substitute.For <IPhotoResizer>(); var config = Substitute.For <IPhotoConfig>(); var resizedPhoto = Substitute.For <Photo>(); config.MaxHeight.Returns(Environment.TickCount); config.MaxWidth = config.MaxHeight + 1; var sut = new PhotoCommand(store, resizer, config); using (resizedPhoto) { resizer.Resize(expected, config.MaxHeight, config.MaxWidth).Returns(resizedPhoto); using (var tokenSource = new CancellationTokenSource()) { store.StorePhoto(resizedPhoto, tokenSource.Token).Returns(details); var actual = await sut.CreatePhoto(expected, tokenSource.Token).ConfigureAwait(false); actual.Should().BeEquivalentTo(details); resizedPhoto.Received().Dispose(); } } }
/// <summary> /// コンストラクタで処理を購読 /// </summary> public MainWindowViewModel() { StartCommand.Subscribe(async() => await StartPreview()); StopCommand.Subscribe(_ => StopPreview()); PhotoCommand = IsStop.ObserveHasErrors.CombineLatest( InputText.ObserveHasErrors, (x, y) => !x && !y).ToReactiveCommand(); OptionCommand.Subscribe(_ => IsOption.Value = !IsOption.Value); PhotoCommand.Subscribe(_ => Photo()); IsPhoto = InputText.Select(x => x.Length != 0).ToReactiveProperty(); }
public void DeletePhotosThrowsExceptionWithEmptyProfileIdTest() { var store = Substitute.For <IPhotoStore>(); var resizer = Substitute.For <IPhotoResizer>(); var config = Substitute.For <IPhotoConfig>(); var sut = new PhotoCommand(store, resizer, config); Func <Task> action = async() => await sut.DeletePhotos(Guid.Empty, CancellationToken.None).ConfigureAwait(false); action.Should().Throw <ArgumentException>(); }
public void CreatePhotoThrowsExceptionWithNullPhotoTest() { var store = Substitute.For <IPhotoStore>(); var resizer = Substitute.For <IPhotoResizer>(); var config = Substitute.For <IPhotoConfig>(); var sut = new PhotoCommand(store, resizer, config); Func <Task> action = async() => await sut.CreatePhoto(null, CancellationToken.None).ConfigureAwait(false); action.Should().Throw <ArgumentNullException>(); }