public void ReturnsSuccessfulTransitionWhenEverythingWorks() { var state = (CreateEntityState <ITestModel, IDatabaseTestModel, IThreadSafeTestModel>)CreateState(); var entity = new TestModel(-1, SyncStatus.SyncFailed); var withPositiveId = new TestModel(13, SyncStatus.InSync); api.Create(Arg.Any <ITestModel>()) .Returns(Observable.Return(withPositiveId)); dataSource.OverwriteIfOriginalDidNotChange( Arg.Any <IThreadSafeTestModel>(), Arg.Any <IThreadSafeTestModel>()) .Returns(x => Observable.Return(new[] { new UpdateResult <IThreadSafeTestModel>(entity.Id, entityWithId((IThreadSafeTestModel)x[1], entity.Id)) })); dataSource.ChangeId(entity.Id, withPositiveId.Id).Returns(Observable.Return(withPositiveId)); var transition = state.Start(entity).SingleAsync().Wait(); var persistedEntity = ((Transition <IThreadSafeTestModel>)transition).Parameter; dataSource.Received().ChangeId(entity.Id, withPositiveId.Id); transition.Result.Should().Be(state.Done); persistedEntity.Id.Should().Be(withPositiveId.Id); persistedEntity.SyncStatus.Should().Be(SyncStatus.InSync); }
public void ReturnsSuccessfulTransitionWhenEverythingWorks() { var state = (CreateEntityState <ITestModel, IThreadSafeTestModel>)CreateState(); var entity = new TestModel(-1, SyncStatus.SyncFailed); var withPositiveId = new TestModel(Math.Abs(entity.Id), SyncStatus.InSync); api.Create(Arg.Any <ITestModel>()) .Returns(Observable.Return(withPositiveId)); dataSource.Overwrite(Arg.Any <IThreadSafeTestModel>(), Arg.Any <IThreadSafeTestModel>()) .Returns(x => Observable.Return((IThreadSafeTestModel)x[1])); var transition = state.Start(entity).SingleAsync().Wait(); var persistedEntity = ((Transition <IThreadSafeTestModel>)transition).Parameter; transition.Result.Should().Be(state.CreatingFinished); persistedEntity.Id.Should().NotBe(entity.Id); persistedEntity.Id.Should().BeGreaterThan(0); persistedEntity.SyncStatus.Should().Be(SyncStatus.InSync); }
private IObservable <TModel> create(TThreadsafeModel entity) => entity == null ? Observable.Throw <TModel>(new ArgumentNullException(nameof(entity))) : limiter.WaitForFreeSlot() .ThenExecute(() => api.Create(entity));
private IObservable <TThreadsafeModel> create(TThreadsafeModel entity) => entity == null ? Observable.Throw <TThreadsafeModel>(new ArgumentNullException(nameof(entity))) : api.Create(entity).Select(convertToThreadsafeModel);