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);
        }
Esempio n. 3
0
 private IObservable <TModel> create(TThreadsafeModel entity)
 => entity == null
         ? Observable.Throw <TModel>(new ArgumentNullException(nameof(entity)))
         : limiter.WaitForFreeSlot()
 .ThenExecute(() => api.Create(entity));
Esempio n. 4
0
 private IObservable <TThreadsafeModel> create(TThreadsafeModel entity)
 => entity == null
         ? Observable.Throw <TThreadsafeModel>(new ArgumentNullException(nameof(entity)))
         : api.Create(entity).Select(convertToThreadsafeModel);