public async Task InitializesTheCurrentObservableWithTheStoredValueFromTheStorage() { var storage = Substitute.For <ISingleObjectStorage <IDatabaseTestModel> >(); var storedValue = new TestModel(456, SyncStatus.InSync); storage.Single().Returns(Observable.Return(storedValue)); var dataSource = new TestSingletonSource(storage, null); var value = await dataSource.Current.FirstAsync(); value.Id.Should().Be(storedValue.Id); }
public async Task InitializesTheCurrentObservableWithTheDefaultValueIfTheStorageDoesNotContainTheObject() { var storage = Substitute.For <ISingleObjectStorage <IDatabaseTestModel> >(); var defaultValue = new TestModel(123, SyncStatus.InSync); storage.Single().Returns(Observable.Throw <IDatabaseTestModel>(new Exception())); var dataSource = new TestSingletonSource(storage, defaultValue); var value = await dataSource.Current.FirstAsync(); value.Id.Should().Be(defaultValue.Id); }
public async Task IgnoresTheDefaultValueWhenTheStorageContainsSomeValue() { var storage = Substitute.For <ISingleObjectStorage <IDatabaseTestModel> >(); var defaultValue = new TestModel(123, SyncStatus.InSync); var storedValue = new TestModel(456, SyncStatus.InSync); storage.Single().Returns(Observable.Return(storedValue)); var dataSource = new TestSingletonSource(storage, defaultValue); var value = await dataSource.Current.FirstAsync(); value.Id.Should().Be(storedValue.Id); }
public async Task UpdatesTheCurrentObservableValueWhenTheStoredValueIsCreated() { var storage = Substitute.For <ISingleObjectStorage <IDatabaseTestModel> >(); var createdValue = new TestModel(123, SyncStatus.InSync); storage.Single().Returns(Observable.Throw <IDatabaseTestModel>(new Exception())); storage.BatchUpdate(null, null, null) .ReturnsForAnyArgs(Observable.Return(new[] { new CreateResult <IDatabaseTestModel>(createdValue) })); var dataSource = new TestSingletonSource(storage, null); await dataSource.UpdateWithConflictResolution(createdValue); var value = await dataSource.Current.FirstAsync(); value.Id.Should().Be(createdValue.Id); }
public async Task UpdatesTheCurrentObservableValue() { var storage = Substitute.For <ISingleObjectStorage <IDatabaseTestModel> >(); var updatedValue = new TestModel(123, SyncStatus.InSync); var storedValue = new TestModel(456, SyncStatus.InSync); storage.Single().Returns(Observable.Return(storedValue)); storage.Update(storedValue.Id, updatedValue).Returns(Observable.Return(updatedValue)); var dataSource = new TestSingletonSource(storage, null); await dataSource.Overwrite(storedValue, updatedValue); var value = await dataSource.Current.FirstAsync(); value.Id.Should().Be(updatedValue.Id); }
public async Task UpdatesTheCurrentObservableValue() { var storage = Substitute.For <ISingleObjectStorage <IDatabaseTestModel> >(); var updatedValue = new TestModel(123, SyncStatus.InSync); var storedValue = new TestModel(456, SyncStatus.InSync); storage.Single().Returns(Observable.Return(storedValue)); storage.BatchUpdate(null, null, null) .ReturnsForAnyArgs(Observable.Return(new[] { new UpdateResult <IDatabaseTestModel>(storedValue.Id, updatedValue) })); var dataSource = new TestSingletonSource(storage, null); await dataSource.OverwriteIfOriginalDidNotChange(storedValue, updatedValue); var value = await dataSource.Current.FirstAsync(); value.Id.Should().Be(updatedValue.Id); }