public void Test1()
        {
            if (Directory.Exists(PATH))
            {
                Directory.Delete(PATH, true);
            }
            var es = new FilesInFolderEventstore(PATH);

            var sut = new CounterManagement(es);

            sut.Handle(new Increment {
                Name = "a"
            });
            sut.Handle(new Increment {
                Name = "b"
            });
            sut.Handle(new Increment {
                Name = "a"
            });
            var result = sut.Handle(new Value {
                Name = "a"
            });

            Assert.Equal(2, result.Value);
        }
        public void UseCase()
        {
            const string PATH = "usecase_test";

            if (Directory.Exists(PATH))
            {
                Directory.Delete(PATH, true);
            }
            var sut = new FilesInFolderEventstore(PATH);

            sut.Record(new Increment {
                Id = "a"
            });
            sut.Record(new Increment {
                Id = "b"
            });
            sut.Record(new Increment {
                Id = "a"
            });
            sut.Record(new Decrement {
                Id = "b"
            });                                   // 0
            sut.Record(new Increment {
                Id = "a"
            });                                   // 3

            var events = sut.Replay(typeof(Decrement));

            Assert.Single(events);

            events = sut.Replay(typeof(Increment));
            Assert.Equal(4, events.Length);
            Assert.Equal(5, sut.Length);
        }
        public MessageHandling(string path = "calculator.db")
        {
            var es = new FilesInFolderEventstore(path);

            _mp = new MessagePump(es);
            _mp.RegisterCommandPipeline(new ExpandNumberPipeline());
            _mp.RegisterQueryPipeline(new NumberPipeline());
            _mp.RegisterQueryPipeline(new ResultPipeline());
            _mp.RegisterCommandPipeline(new AppendOperatorPipeline());
        }
Beispiel #4
0
        public void Run()
        {
            const string PATH = "msgpump_tests";

            if (Directory.Exists(PATH))
            {
                Directory.Delete(PATH, true);
            }
            var es = new FilesInFolderEventstore(PATH);

            var sut = new MessagePump(es);

            sut.RegisterCommandPipeline(new IncrementPipeline());
            sut.RegisterCommandPipeline(new DecrementPipeline());
            sut.RegisterQueryPipeline(new CounterValuePipeline());


            var result = sut.Handle(new Increment {
                CounterId = "a"
            });

            Assert.IsType <Success>(result.response);
            result = sut.Handle(new Increment {
                CounterId = "b"
            });
            Assert.IsType <Success>(result.response);
            result = sut.Handle(new Increment {
                CounterId = "a"
            });
            Assert.IsType <Success>(result.response);

            var qresult = sut.Handle <CounterValue.Result>(new CounterValue {
                CounterId = "a"
            });

            Assert.Equal(2, qresult.response.Value);

            result = sut.Handle(new Decrement()
            {
                CounterId = "x"
            });
            Assert.IsType <Failure>(result.response);

            result = sut.Handle(new Decrement()
            {
                CounterId = "a"
            });
            Assert.IsType <Success>(result.response);
            qresult = sut.Handle <CounterValue.Result>(new CounterValue {
                CounterId = "a"
            });
            Assert.Equal(1, qresult.response.Value);
        }
        public void UseCase_with_versioning()
        {
            const string PATH = "usecase_test";

            if (Directory.Exists(PATH))
            {
                Directory.Delete(PATH, true);
            }
            var sut = new FilesInFolderEventstore(PATH);

            var resultA = sut.Record(new Version("a"), new Increment {
                Id = "a"
            });

            Assert.Equal("1", resultA.version.Number);
            var resultB = sut.Record(new Version("b"), new Increment {
                Id = "b"
            });

            resultA = sut.Record(resultA.version, new Increment {
                Id = "a"
            });
            resultB = sut.Record(resultB.version, new Decrement {
                Id = "b"
            });
            Assert.Equal("2", resultB.version.Number);
            sut.Record(resultA.version, new Increment {
                Id = "a"
            });

            var ex = Assert.Throws <InvalidOperationException>(() => sut.Record(resultA.version, new Decrement()
            {
                Id = "a"
            }));

            Assert.StartsWith("Expected version", ex.Message);

            var version = sut.Version(resultA.version.Id);

            Assert.Equal("3", version.Number);
        }
        public void UseCase_retrieve_with_versions()
        {
            const string PATH = "usecase_test";

            if (Directory.Exists(PATH))
            {
                Directory.Delete(PATH, true);
            }
            var sut = new FilesInFolderEventstore(PATH);

            var resultA = sut.Record(new Version("a"), new Increment {
                Id = "a"
            });
            var resultB = sut.Record(new Version("b"), new Increment {
                Id = "b"
            });

            resultA = sut.Record(resultA.version, new Increment {
                Id = "a"
            });
            resultB = sut.Record(resultB.version, new Decrement {
                Id = "b"
            });
            sut.Record(resultA.version, new Increment {
                Id = "a"
            });

            var result = sut.ReplayWithVersion(MapToVersionId);

            Assert.Equal("3", result.versions[0].Number);
            Assert.Equal("2", result.versions[1].Number);

            string MapToVersionId(Event e) => e switch
            {
                Increment i => i.Id,
                Decrement d => d.Id
            };
        }