Ejemplo n.º 1
0
        public async Task FindSagasAsync_ByClassId()
        {
            Guid saga1Id      = Guid.Parse("6B3577DF-B0F7-444A-8506-029591BC9894");
            Guid saga2Id      = Guid.Parse("75E24A6E-29BF-4863-AB6A-299EB107947D");
            Guid saga1ClassId = Guid.Parse("D3F5C4A9-DC44-49F7-B629-230852265B87");
            Guid saga2ClassId = Guid.Parse("B68CFFB0-5ECD-424B-B837-BCC4394F5465");

            var sagaMetadata1 = new SagaMetadataRecord(saga1Id, saga1ClassId);
            var sagaMetadata2 = new SagaMetadataRecord(saga2Id, saga2ClassId);

            inMemoryCrudRepository.AttachRange(new[]
            {
                sagaMetadata1, sagaMetadata2
            });

            SagaMatch[] result = await sut.FindSagasAsync(saga1ClassId);

            result.Should().BeEquivalentTo(new[]
            {
                new SagaMatch()
                {
                    Id = sagaMetadata1.Id, ClassId = sagaMetadata1.ClassId
                }
            });
        }
Ejemplo n.º 2
0
        public async Task SetSagaMetadataAsync_UpdatesSome()
        {
            var sagaMetadata1 = new SagaMetadataRecord(Guid.Parse("B3F5E8E2-2681-4F57-8F9D-5577B9198CA8"), Guid.NewGuid());

            inMemoryCrudRepository.Attach(sagaMetadata1);
            sagaMetadata1.Keys.AddRange(new[]
            {
                new SagaMetadataKey(Guid.NewGuid(), sagaMetadata1.Id, "key", "value1"),
                new SagaMetadataKey(Guid.NewGuid(), sagaMetadata1.Id, "key", "value2")
            });
            inMemoryCrudRepository.AttachRange(sagaMetadata1.Keys);

            await sut.SetSagaKeysAsync(sagaMetadata1.Id, new[]
            {
                new KeyValuePair <string, string>("key", "value2"),
                new KeyValuePair <string, string>("key", "value3")
            });

            await inMemoryCrudRepository.SaveChangesAsync();

            var allMetadataKeys = inMemoryCrudRepository.FindAllWithAdded <SagaMetadataKey>().ToList();

            allMetadataKeys.Count.Should().Be(2);
            allMetadataKeys.Should().Contain(x => x.KeyName == "key" && x.KeyValue == "value2" && x.SagaId == sagaMetadata1.Id);
            allMetadataKeys.Should().Contain(x => x.KeyName == "key" && x.KeyValue == "value3" && x.SagaId == sagaMetadata1.Id);
            sagaMetadata1.Keys.Should().BeEquivalentTo(allMetadataKeys);
        }
Ejemplo n.º 3
0
        public async Task FindSagasByKeyAsync_ReflectsCachedChanges()
        {
            Guid saga1Id     = Guid.Parse("6B3577DF-B0F7-444A-8506-029591BC9894");
            Guid saga2Id     = Guid.Parse("75E24A6E-29BF-4863-AB6A-299EB107947D");
            Guid saga3Id     = Guid.Parse("03A96C89-8004-42DB-874D-D25C3D3C2476");
            Guid sagaClassId = Guid.Parse("D3F5C4A9-DC44-49F7-B629-230852265B87");

            var sagaMetadata1 = new SagaMetadataRecord(saga1Id, sagaClassId);

            sagaMetadata1.Keys.AddRange(new[]
            {
                new SagaMetadataKey(Guid.Parse("FC9083F9-0FB1-46DE-BC50-EECD5D5B1A79"), saga1Id, "key", "value")
            });

            var sagaMetadata2 = new SagaMetadataRecord(saga2Id, sagaClassId);

            sagaMetadata2.Keys.AddRange(new[]
            {
                new SagaMetadataKey(Guid.Parse("919274C2-E501-430D-A60D-60DFD486C0EB"), saga2Id, "key", "value2")
            });

            var sagaMetadata3 = new SagaMetadataRecord(saga3Id, sagaClassId);

            sagaMetadata3.Keys.AddRange(new[]
            {
                new SagaMetadataKey(Guid.Parse("919274C2-E501-430D-A60D-60DFD486C0EB"), sagaMetadata3.Id, "key", "value")
            });

            inMemoryCrudRepository.AttachRange(sagaMetadata1.Keys.Concat(sagaMetadata2.Keys).Concat(sagaMetadata3.Keys));
            inMemoryCrudRepository.AttachRange(new[]
            {
                sagaMetadata1, sagaMetadata2, sagaMetadata3
            });

            await sut.SetSagaKeysAsync(sagaMetadata2.Id, new[]
            {
                new KeyValuePair <string, string>("key", "value"),
            });

            await sut.SetSagaKeysAsync(sagaMetadata3.Id, new[]
            {
                new KeyValuePair <string, string>("key", "value3"),
            });

            SagaMatch[] result = await sut.FindSagasByKeyAsync(sagaClassId, "key", "value");

            result.Should().BeEquivalentTo(new[]
            {
                new SagaMatch()
                {
                    Id = sagaMetadata1.Id, ClassId = sagaMetadata1.ClassId
                },
                new SagaMatch()
                {
                    Id = sagaMetadata2.Id, ClassId = sagaMetadata2.ClassId
                }
            });
        }
Ejemplo n.º 4
0
        public async Task GetSagaMetadataAsync_GetsFromRepo()
        {
            var sagaMetadata1 = new SagaMetadataRecord(Guid.Parse("46FA66FF-C8AC-4E24-AE74-11DAFF21D3D4"), Guid.Parse("39F01E63-CA48-463E-B9C9-F049832DE92E"));

            inMemoryCrudRepository.Attach(sagaMetadata1);

            var result = await sut.GetSagaMetadataAsync(sagaMetadata1.Id);

            result.ClassId.Should().Be(sagaMetadata1.ClassId);
        }
Ejemplo n.º 5
0
        public void AddSaga(Guid id, Guid classId)
        {
            if (metadataRecords.ContainsKey(id))
            {
                throw new ArgumentException($"Saga with ID {id} already has metadata added");
            }

            var metadataRecord = metadataRecords[id] = new SagaMetadataRecord(id, classId);

            crudRepository.Add(metadataRecord);
        }
Ejemplo n.º 6
0
        public async Task FindSagasByKeyAsync_WithCorrespondingKeys()
        {
            Guid saga1Id     = Guid.Parse("6B3577DF-B0F7-444A-8506-029591BC9894");
            Guid saga2Id     = Guid.Parse("75E24A6E-29BF-4863-AB6A-299EB107947D");
            Guid sagaClassId = Guid.Parse("D3F5C4A9-DC44-49F7-B629-230852265B87");

            var sagaMetadata1 = new SagaMetadataRecord(saga1Id, sagaClassId);

            sagaMetadata1.Keys.AddRange(new[]
            {
                new SagaMetadataKey(Guid.Parse("FC9083F9-0FB1-46DE-BC50-EECD5D5B1A79"), saga1Id, "key", "value")
            });

            var sagaMetadata2 = new SagaMetadataRecord(saga2Id, sagaClassId);

            sagaMetadata2.Keys.AddRange(new[]
            {
                new SagaMetadataKey(Guid.Parse("919274C2-E501-430D-A60D-60DFD486C0EB"), saga2Id, "key", "value")
            });

            var sagaMetadata3 = new SagaMetadataRecord(Guid.NewGuid(), sagaClassId);

            sagaMetadata3.Keys.AddRange(new[]
            {
                new SagaMetadataKey(Guid.NewGuid(), sagaMetadata3.Id, "key2", "value")
            });

            inMemoryCrudRepository.AttachRange(sagaMetadata1.Keys.Concat(sagaMetadata2.Keys).Concat(sagaMetadata3.Keys));
            inMemoryCrudRepository.AttachRange(new[]
            {
                sagaMetadata1, sagaMetadata2, sagaMetadata3
            });

            SagaMatch[] result = await sut.FindSagasByKeyAsync(sagaClassId, "key", "value");

            result.Should().BeEquivalentTo(new[]
            {
                new SagaMatch()
                {
                    Id = sagaMetadata1.Id, ClassId = sagaMetadata1.ClassId
                },
                new SagaMatch()
                {
                    Id = sagaMetadata2.Id, ClassId = sagaMetadata2.ClassId
                }
            });
        }
Ejemplo n.º 7
0
        public async Task SetSagaMetadataAsync_RemovesUnmatched()
        {
            var sagaMetadata1 = new SagaMetadataRecord(Guid.Parse("B3F5E8E2-2681-4F57-8F9D-5577B9198CA8"), Guid.NewGuid());

            inMemoryCrudRepository.Attach(sagaMetadata1);
            var key = new SagaMetadataKey(Guid.Parse("FC9083F9-0FB1-46DE-BC50-EECD5D5B1A79"), sagaMetadata1.Id, "key", "value");

            sagaMetadata1.Keys.AddRange(new[]
            {
                key
            });
            inMemoryCrudRepository.AttachRange(sagaMetadata1.Keys);

            await sut.SetSagaKeysAsync(sagaMetadata1.Id, new KeyValuePair <string, string>[] {});

            inMemoryCrudRepository.GetEntityState(key).Should().Be(EntityState.Deleted);
            sagaMetadata1.Keys.Should().BeEmpty();
        }