public void ListWithOneChildSecurity()
        {
            var listingDate = new Date(2000, 01, 01);

            var stock = new StapledSecurity(Guid.NewGuid());

            var childSecurities = new StapledSecurityChild[]
            {
                new StapledSecurityChild("ABC_1", "Child 1", true)
            };

            stock.List("ABC", "ABC Pty Ltd", listingDate, AssetCategory.AustralianProperty, childSecurities);

            using (new AssertionScope())
            {
                stock.Should().BeEquivalentTo(new
                {
                    Trust           = false,
                    EffectivePeriod = new DateRange(listingDate, Date.MaxValue)
                });

                stock.RelativeNTAs[listingDate].Percentages.Should().Equal(new decimal[] { 1.00m });

                stock.ChildSecurities.Should().SatisfyRespectively(
                    first => first.Should().BeEquivalentTo(new
                {
                    AsxCode = "ABC_1",
                    Name    = "Child 1",
                    Trust   = true
                }));
            }
        }
        public void AddChild(string asxCode, string name, bool trust)
        {
            var child = new StapledSecurityChild()
            {
                AsxCode = asxCode,
                Name    = name,
                Trust   = trust
            };

            ChildSecurities.Add(child);
        }
        public void SetRelativeNTAsPercentagesDontAddTo100()
        {
            var listingDate = new Date(2000, 01, 01);
            var changeDate  = new Date(2002, 01, 01);

            var stock = new StapledSecurity(Guid.NewGuid());

            var childSecurities = new StapledSecurityChild[]
            {
                new StapledSecurityChild("ABC_1", "Child 1", true),
                new StapledSecurityChild("ABC_2", "Child 2", false)
            };

            stock.List("ABC", "ABC Pty Ltd", listingDate, AssetCategory.AustralianProperty, childSecurities);

            Action a = () => stock.SetRelativeNTAs(changeDate, new decimal[] { 0.60m, 0.60m });

            a.Should().Throw <ArgumentException>();
        }
        public void SetRelativeNTAsBeforeListing()
        {
            var listingDate = new Date(2000, 01, 01);
            var changeDate  = new Date(1999, 01, 01);

            var stock = new StapledSecurity(Guid.NewGuid());

            var childSecurities = new StapledSecurityChild[]
            {
                new StapledSecurityChild("ABC_1", "Child 1", true),
                new StapledSecurityChild("ABC_2", "Child 2", false)
            };

            stock.List("ABC", "ABC Pty Ltd", listingDate, AssetCategory.AustralianProperty, new StapledSecurityChild[0]);

            Action a = () => stock.SetRelativeNTAs(changeDate, new decimal[] { 0.50m, 0.50m });

            a.Should().Throw <EffectiveDateException>();
        }
        public void SetRelativeNTAsTwiceOnSameDay()
        {
            var listingDate = new Date(2000, 01, 01);
            var changeDate  = new Date(2002, 01, 01);

            var stock = new StapledSecurity(Guid.NewGuid());

            var childSecurities = new StapledSecurityChild[]
            {
                new StapledSecurityChild("ABC_1", "Child 1", true),
                new StapledSecurityChild("ABC_2", "Child 2", false)
            };

            stock.List("ABC", "ABC Pty Ltd", listingDate, AssetCategory.AustralianProperty, childSecurities);

            stock.SetRelativeNTAs(changeDate, new decimal[] { 0.30m, 0.70m });
            stock.SetRelativeNTAs(changeDate, new decimal[] { 0.60m, 0.40m });

            stock.RelativeNTAs[changeDate].Percentages.Should().Equal(new decimal[] { 0.60m, 0.40m });
        }