public void Create_trades_and_apply_events()
        {
            using (var connector = new Connector(_config))
            {
                connector.AdminInterface().DropDatabase();

                connector.DeclareCollection <ProductEvent>();
                connector.DeclareCollection <Trade>();


                var events = connector.DataSource <ProductEvent>();
                var trades = connector.DataSource <Trade>();

                var factory = new ProductFactory(connector);

                var(trade, evt) =
                    factory.CreateOption(10, 100, "GOLDMAN.LDN", "OPTEUR", "AXA", 100, false, true, false, 6);

                events.Put(evt);
                trades.Put(trade);

                var tradeReloaded = trades.Single(t => t.ContractId == trade.ContractId);
                var eventReloaded = events.Single(e => e.DealId == trade.ContractId);

                Assert.AreEqual(tradeReloaded.Id, trade.Id);
                Assert.AreEqual(eventReloaded.EventId, evt.EventId);

                // apply an increase event
                var(newVersion, increase) =
                    factory.IncreaseOption(trade, 50);

                trades.Put(trade);
                trades.Put(newVersion);
                events.Put(increase);

                var allVersions = trades.Where(t => t.ContractId == trade.ContractId).ToList()
                                  .OrderBy(t => t.Version).ToList();

                Assert.AreEqual(2, allVersions.Count);
                Assert.AreEqual(1, allVersions[0].Version);
                Assert.AreEqual(2, allVersions[1].Version);
                Assert.IsTrue(allVersions[1].IsLastVersion);
                Assert.IsFalse(allVersions[0].IsLastVersion);
            }
        }