コード例 #1
0
        public virtual async Task SaveAndLoadContainsAllEventsForAnAggregate()
        {
            _logger.LogInformation("Running SaveAndLoadContainsAllEventsForAnAggregate");
            await Task.Delay(0).ConfigureAwait(false);

            var store = CreateInstance();

            {
                var @event = FakeEvent.Create();
                await store.SaveEventsAsync <FakeAggregate>(@event.AggregateId, new IDomainEvent[] { @event }, 0).ConfigureAwait(false);

                var loaded = await store.GetEventsForAggregateAsync <FakeAggregate>(@event.AggregateId).ConfigureAwait(false);

                loaded.Should().Contain(x => x.EventData.Id == @event.Id);
            }


            {
                var save = FakeEvent.CreateList(155).ToArray();
                await store.SaveEventsAsync <FakeAggregate>(save.First().AggregateId, save, 154).ConfigureAwait(false);

                var loaded = await store.GetEventsForAggregateAsync <FakeAggregate>(save.First().AggregateId).ConfigureAwait(false);

                foreach (var savedEvent in save)
                {
                    loaded.Should().Contain(x => x.EventData.Id == savedEvent.Id);
                }
            }
        }
        public async Task ProjectionReaderTest()
        {
            var setup = GetService <EventStoreSetup>();
            var store = GetService <IEventStore>();
            var proj  = GetService <IProjectionReader>();

            var name  = $"tests{Guid.NewGuid().ToString().Replace("-", "")}";
            var query = TestFiles.GetFileContent("FakeCounterProjection.js");

            await setup.AddOpsUserToAdminsAsync();

            if (!await setup.CheckProjectionIsRunningAsync("$by_category"))
            {
                await setup.EnableProjectionAsync("$by_category");
            }
            (await setup.CheckProjectionIsRunningAsync("$by_category")).Should().BeTrue();


            await setup.CreateContinousProjectionAsync(name, query);

            (await setup.CheckContinousProjectionIsCreatedAsync(name, query)).Should().BeTrue();
            (await setup.CheckProjectionIsRunningAsync(name)).Should().BeTrue();

            var save = FakeEvent.CreateList(155).ToArray();

            store.SaveEventsAsync <FakeAggregate>(save.First().AggregateId, save, 154).Wait();
            await Task.Delay(1500);

            var result = await proj.GetStateAsync <X1>(name, save.First().AggregateId.Replace("-", ""));

            result.Should().NotBeNull();
            result.Ids.Length.Should().Be(save.Length);
        }
コード例 #3
0
        public void LoadThrowsExceptionOnWrongVersionAsync()
        {
            var events = FakeEvent.CreateList(10).ToArray();
            var @event = events[0];

            IList <EventDescriptor> list = new List <EventDescriptor>();

            for (int i = 0; i < events.Length; i++)
            {
                list.Add(new EventDescriptor(events[i], i));
            }

            var mockStore = new Mock <IEventStore>();

            mockStore.Setup(x => x.GetEventsForAggregateAsync <FakeAggregate>(@event.AggregateId))
            .ReturnsAsync(list);

            ServiceCollection
            .AddSingleton(mockStore.Object)
            .AddSingleton(Mock.Of <IMessagePublisher>())
            ;

            var repo = CreateInstance();

            Action act = () => repo.GetByIdAsync <FakeAggregate>(@event.AggregateId, 2).GetAwaiter().GetResult();

            act.Should().Throw <ConcurrencyException>();
        }
コード例 #4
0
        public async Task ProjectionReaderTest2()
        {
            var setup = GetService <EventStoreSetup>();
            var store = GetService <IEventStore>();
            var proj  = GetService <IEventStoreReader>();

            var prov = GetService <EventStoreConnectionProvider>();
            await prov.InitializeAsync(CancellationToken.None);

            var name  = $"tests{Guid.NewGuid().ToString().Replace("-", "")}";
            var query = TestFiles.GetFileContent("FakeCounterProjection.js");

            await setup.AddOpsUserToAdminsAsync();

            if (!await setup.CheckProjectionIsRunningAsync("$by_category"))
            {
                await setup.EnableProjectionAsync("$by_category");
            }
            (await setup.CheckProjectionIsRunningAsync("$by_category")).Should().BeTrue();


            await setup.CreateContinousProjectionAsync(name, query);

            (await setup.CheckContinousProjectionIsCreatedAsync(name, query)).Should().BeTrue();
            (await setup.CheckProjectionIsRunningAsync(name)).Should().BeTrue();

            var save = FakeEvent.CreateList(155).ToArray();
            await store.SaveEventsAsync <FakeAggregate>(save.First().AggregateId, save, 154);

            await Task.Delay(1500);

            var definition = new
            {
                Ids = new string[0]
            };

            var result = await proj.GetProjectionStateAsyncAnonymousType(name, definition, save.First().AggregateId.Replace("-", ""));

            result.Should().NotBeNull();
            result.Ids.Length.Should().Be(save.Length);
        }