Exemplo n.º 1
0
        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");
        }
Exemplo n.º 2
0
        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 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 RehydrateState_fails_if_state_not_exists(
     IStateRehydrator <State1> rehydrator, Guid streamId)
 {
     Mock.Get(rehydrator).Setup(x => x.TryRehydrateState(streamId)).ReturnsAsync(default(State1));
     Func <Task> action = () => rehydrator.RehydrateState(streamId);
     await action.Should().ThrowAsync <InvalidOperationException>();
 }
 public BlobSnapshotter(IStateRehydrator <T> rehydrator,
                        IJsonProcessor jsonProcessor,
                        CloudBlobContainer container)
 {
     _rehydrator    = rehydrator;
     _jsonProcessor = jsonProcessor;
     _container     = container;
 }
        public async Task RehydrateState_returns_state_correctly(
            IStateRehydrator <State1> rehydrator, Guid streamId, State1 state)
        {
            Mock.Get(rehydrator).Setup(x => x.TryRehydrateState(streamId)).ReturnsAsync(state);
            State1 actual = await rehydrator.RehydrateState(streamId);

            actual.Should().BeSameAs(state);
        }
        public static async Task <T> RehydrateState <T>(
            this IStateRehydrator <T> rehydrator, Guid streamId)
            where T : class
        {
            if (rehydrator is null)
            {
                throw new ArgumentNullException(nameof(rehydrator));
            }

            return(await rehydrator.TryRehydrateState(streamId).ConfigureAwait(continueOnCapturedContext: false) switch
            {
                T state => state,
                _ => throw new InvalidOperationException($"Could not rehydrate state with stream id '{streamId}'.")
            });
Exemplo n.º 8
0
        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>();
        }
Exemplo n.º 9
0
 private static BlobSnapshotter <State> GenerateSut(IStateRehydrator <State> rehydrator) =>
 new BlobSnapshotter <State>(
     rehydrator,
     jsonProcessor: new JsonProcessor(new JsonSerializer()),
     container: StorageEmulator.SnapshotContainer);