public async Task TakeSnapshot_updates_snapshot_blob_if_exists( Guid streamId, State pastState, State newState, IStateRehydrator <State> rehydrator) { // Arrange Mock.Get(rehydrator) .Setup(x => x.TryRehydrateState(streamId)) .ReturnsAsync(pastState); BlobSnapshotter <State> sut = GenerateSut(rehydrator); await sut.TakeSnapshot(streamId); Mock.Get(rehydrator) .Setup(x => x.TryRehydrateState(streamId)) .ReturnsAsync(newState); // Act await sut.TakeSnapshot(streamId); // Assert ICloudBlob blob = await GetBlob(streamId); string content = await DownloadContent(blob); State snapshot = JsonConvert.DeserializeObject <State>(content); snapshot.Should().BeEquivalentTo(newState); }
public async Task TakeSnapshot_sets_blob_properties_correctly_if_snapshot_blob_exists( Guid streamId, State state, IStateRehydrator <State> rehydrator) { // Arrange Mock.Get(rehydrator) .Setup(x => x.TryRehydrateState(streamId)) .ReturnsAsync(state); BlobSnapshotter <State> sut = GenerateSut(rehydrator); await sut.TakeSnapshot(streamId); ICloudBlob blob = await GetBlob(streamId); blob.Properties.ContentType = "application/text"; blob.Properties.ContentEncoding = Encoding.ASCII.WebName; await blob.SetPropertiesAsync(); // Act await sut.TakeSnapshot(streamId); // Assert ICloudBlob actual = await GetBlob(streamId); actual.Properties.ContentType.Should().Be("application/json"); actual.Properties.ContentEncoding.Should().BeEquivalentTo("UTF-8"); }
public async Task TryRestoreSnapshot_restores_snapshot_correctly_if_it_exists() { // Arrange BlobSnapshotReader <State> sut = GenerateSut(); var streamId = Guid.NewGuid(); State state = new Fixture().Create <State>(); IStateRehydrator <State> rehydrator = Mock.Of <IStateRehydrator <State> >(); Mock.Get(rehydrator) .Setup(x => x.TryRehydrateState(streamId)) .ReturnsAsync(state); var snapshotter = new BlobSnapshotter <State>( rehydrator, JsonProcessor, SnapshotContainer); await snapshotter.TakeSnapshot(streamId); // Act State actual = await sut.TryRestoreSnapshot(streamId); // Assert actual.Should().BeEquivalentTo(state); }
public async Task TakeSnapshot_throws_exception_if_state_not_exists( Guid streamId, IStateRehydrator <State> rehydrator) { // Arrange Mock.Get(rehydrator) .Setup(x => x.TryRehydrateState(streamId)) .ReturnsAsync(default(State)); BlobSnapshotter <State> sut = GenerateSut(rehydrator); // Act Func <Task> action = () => sut.TakeSnapshot(streamId); // Assert await action.Should().ThrowAsync <InvalidOperationException>(); }