Esempio n. 1
0
        private async Task AppendReadingsCollectedEvents(string streamId, DateTime fromDate, int dayCount)
        {
            var eventStore = new CosmosDBEventStore(EndpointUri, AuthKey, Database);

            var stream = await eventStore.LoadStreamAsync(streamId);

            // Only append more ReadingsCollected events if we haven't done this before.
            // This can be detected by looking at the stream version.
            if (stream.Version <= 3)
            {
                var events = Enumerable.Range(0, dayCount - 1)
                             .Select(i => new MeterReadingsCollected
                {
                    Date     = fromDate.AddDays(i),
                    Readings = GenerateMeterReadings(fromDate.AddDays(i)).ToArray()
                })
                             .ToList();

                await eventStore.AppendToStreamAsync(streamId, stream.Version, events);

                // Wait a little while before adding the last one.
                // This ensures that the last event will be at a different timestamp
                // which is better for explaining the mechanism.
                await Task.Delay(TimeSpan.FromSeconds(2));

                await eventStore.AppendToStreamAsync(streamId, stream.Version + events.Count, new IEvent[]
                {
                    new MeterReadingsCollected
                    {
                        Date     = fromDate.AddDays(dayCount),
                        Readings = GenerateMeterReadings(fromDate.AddDays(dayCount)).ToArray()
                    }
                });
            }
        }
Esempio n. 2
0
        public async Task SC02_DomainAsync()
        {
            var eventStore = new CosmosDBEventStore(EndpointUri, AuthKey, Database);

            // Request parameters.
            var meterId        = "2";
            var postalCode     = "111 64";
            var houseNumber    = "4";
            var activationCode = "supersecret";

            // 1. New domain object.
            var meter = new Meter(meterId, postalCode, houseNumber, activationCode);

            var repository = new MeterRepository(eventStore);
            var succes     = await repository.SaveMeterAsync(meter);

            Assert.IsTrue(succes, "Unexpected stream version encountered.");

            // 2. Call business logic on domain object.
            meter = await repository.LoadMeterAsync(meterId);

            meter.Activate(activationCode);

            succes = await repository.SaveMeterAsync(meter);

            Assert.IsTrue(succes, "Unexpected stream version encountered.");
        }
        public async Task SC03_DomainAddAsync()
        {
            var eventStore = new CosmosDBEventStore(EndpointUri, AuthKey, Database);

            // Request parameters.
            var meterId        = "87000002";
            var postalCode     = "9999 BB";
            var houseNumber    = "4";
            var activationCode = "supersecret";

            // New domain object.
            var meter = new Meter(meterId, postalCode, houseNumber, activationCode);

            var repository = new MeterRepository(eventStore);
            var succes     = await repository.SaveMeterAsync(meter);

            Assert.IsTrue(succes, "Unexpected stream version encountered.");
        }
        public async Task SC04_DomainUpdateAsync()
        {
            var eventStore = new CosmosDBEventStore(EndpointUri, AuthKey, Database);

            // Request parameters.
            var meterId        = "87000002";
            var activationCode = "supersecret";

            // Load domain object.
            var repository = new MeterRepository(eventStore);
            var meter      = await repository.LoadMeterAsync(meterId);

            // Call business logic on domain object.
            meter.Activate(activationCode);

            var succes = await repository.SaveMeterAsync(meter);

            Assert.IsTrue(succes, "Unexpected stream version encountered.");
        }
        public async Task SC02_AppendToExistingStreamAsync()
        {
            var eventStore = new CosmosDBEventStore(EndpointUri, AuthKey, Database);

            var streamId = $"meter:87000001";
            var stream   = await eventStore.LoadStreamAsync(streamId);

            var readingsCollected = new MeterReadingsCollected
            {
                Date     = DateTime.Today,
                Readings = GenerateMeterReadings(DateTime.Today).ToArray()
            };

            var succes = await eventStore.AppendToStreamAsync(
                streamId,
                stream.Version,
                new IEvent[] { readingsCollected });

            Assert.IsTrue(succes, "Unexpected stream version encountered.");
        }
Esempio n. 6
0
        public async Task SC01_StreamsAsync()
        {
            var eventStore = new CosmosDBEventStore(EndpointUri, AuthKey, Database);

            var meterRegistered = new MeterRegistered
            {
                MeterId        = "1",
                PostalCode     = "1852ER",
                HouseNumber    = "25",
                ActivationCode = "supersecret"
            };

            var meterActivated = new MeterActivated();

            // 1. Add a new stream.
            var streamId = $"meter:{meterRegistered.MeterId}";

            var succes = await eventStore.AppendToStreamAsync(
                streamId,
                0,
                new IEvent[] { meterRegistered, meterActivated });

            Assert.IsTrue(succes, "Unexpected stream version encountered.");
        }
Esempio n. 7
0
        private OrderSystemRepository GetOrderSystemRepository()
        {
            var eventTypeResolver = new EventTypeResolver();

            if (_testConfig.UseInMemoryEventStore)
            {
                var eventStore = new InMemoryEventStore(
                    eventTypeResolver,
                    new Dictionary <string, List <string> >());
                return(new OrderSystemRepository(eventStore, null));
            }
            else
            {
                var eventStore = new CosmosDBEventStore(
                    eventTypeResolver,
                    _testConfig.EventsEndpointUri,
                    _testConfig.EventsAuthKey, _testConfig.EventsDatabase, _testConfig.EventContainer);

                var snapshotStore = new CosmosSnapshotStore(_testConfig.SnapshotsEndpointUri,
                                                            _testConfig.SnapshotsAuthKey,
                                                            _testConfig.SnapshotsDatabase, _testConfig.SnapshotsContainer);
                return(new OrderSystemRepository(eventStore, snapshotStore));
            }
        }