public void GivenOrderItem_WhenDeriving_ThenRequiredRelationsMustExist() { this.InstantiateObjects(this.DatabaseSession); var buyer = new OrganisationBuilder(this.DatabaseSession).WithName("buyer").Build(); var mechelen = new CityBuilder(this.DatabaseSession).WithName("Mechelen").Build(); var shipToContactMechanism = new PostalAddressBuilder(this.DatabaseSession).WithGeographicBoundary(mechelen).WithAddress1("Haverwerf 15").Build(); var partyContactMechanism = new PartyContactMechanismBuilder(this.DatabaseSession).WithContactMechanism(shipToContactMechanism).Build(); var part = new RawMaterialBuilder(this.DatabaseSession).WithName("raw stuff").Build(); buyer.AddPartyContactMechanism(partyContactMechanism); this.DatabaseSession.Derive(true); this.DatabaseSession.Commit(); var builder = new PurchaseOrderItemBuilder(this.DatabaseSession); order.AddPurchaseOrderItem(builder.Build()); Assert.IsTrue(this.DatabaseSession.Derive().HasErrors); this.DatabaseSession.Rollback(); builder.WithPart(part); order.AddPurchaseOrderItem(builder.Build()); Assert.IsFalse(this.DatabaseSession.Derive().HasErrors); builder.WithProduct(new GoodBuilder(this.DatabaseSession).Build()); var orderItem = builder.Build(); order.AddPurchaseOrderItem(orderItem); Assert.IsTrue(this.DatabaseSession.Derive().HasErrors); orderItem.RemovePart(); Assert.IsFalse(this.DatabaseSession.Derive().HasErrors); }