예제 #1
0
        private static PersonEventsPart GetPart(int count)
        {
            PersonEventsPart part = new PersonEventsPart
            {
                ItemId    = Guid.NewGuid().ToString(),
                RoleId    = "some-role",
                CreatorId = "zeus",
                UserId    = "another",
            };

            for (int n = 1; n <= count; n++)
            {
                part.Events.Add(new BioEvent
                {
                    Type         = n % 2 == 0 ? "even" : "odd",
                    Date         = HistoricalDate.Parse($"{1200 + n} AD"),
                    Places       = new List <string>(new[] { "place-1", "place-2" }),
                    Description  = "A description.",
                    Sources      = TestHelper.GetDocReferences(2),
                    Participants = new List <DecoratedId>(new[]
                    {
                        new DecoratedId {
                            Id = "guy-1", Tag = "tag", Rank = 1
                        },
                        new DecoratedId {
                            Id = "guy-2", Tag = "tag", Rank = 1
                        }
                    })
                });
            }

            return(part);
        }
예제 #2
0
        public void GetDataPins_NoEvents_Ok()
        {
            PersonEventsPart part = GetPart(0);

            List <DataPin> pins = part.GetDataPins(null).ToList();

            TestHelper.AssertValidDataPinNames(pins);
            Assert.Single(pins);
            DataPin pin = pins[0];

            TestHelper.AssertPinIds(part, pin);
            Assert.Equal("tot-count", pin.Name);
            Assert.Equal("0", pin.Value);
        }
예제 #3
0
        public void GetDataPins_Events_Ok()
        {
            PersonEventsPart part = GetPart(3);

            List <DataPin> pins = part.GetDataPins(null).ToList();

            Assert.Equal(10, pins.Count);
            TestHelper.AssertValidDataPinNames(pins);

            DataPin pin = pins.Find(p => p.Name == "tot-count");

            Assert.NotNull(pin);
            TestHelper.AssertPinIds(part, pin);
            Assert.Equal("3", pin.Value);

            pin = pins.Find(p => p.Name == "type-odd-count" && p.Value == "2");
            Assert.NotNull(pin);
            TestHelper.AssertPinIds(part, pin);

            pin = pins.Find(p => p.Name == "type-even-count" && p.Value == "1");
            Assert.NotNull(pin);
            TestHelper.AssertPinIds(part, pin);

            for (int n = 1; n <= 3; n++)
            {
                double expected = HistoricalDate.Parse($"{1200 + n} AD")
                                  .GetSortValue();
                pin = pins.Find(p => p.Name == "date-value" &&
                                p.Value == expected.ToString(CultureInfo.InvariantCulture));
                Assert.NotNull(pin);
                TestHelper.AssertPinIds(part, pin);
            }

            for (int n = 1; n <= 2; n++)
            {
                pin = pins.Find(p => p.Name == "place" &&
                                p.Value == $"place{n}");
                Assert.NotNull(pin);
                TestHelper.AssertPinIds(part, pin);

                pin = pins.Find(p => p.Name == "participant" &&
                                p.Value == $"tag:guy{n}");
                Assert.NotNull(pin);
                TestHelper.AssertPinIds(part, pin);
            }
        }
예제 #4
0
        public void Part_Is_Serializable()
        {
            PersonEventsPart part = GetPart(2);

            string           json  = TestHelper.SerializePart(part);
            PersonEventsPart part2 =
                TestHelper.DeserializePart <PersonEventsPart>(json);

            Assert.Equal(part.Id, part2.Id);
            Assert.Equal(part.TypeId, part2.TypeId);
            Assert.Equal(part.ItemId, part2.ItemId);
            Assert.Equal(part.RoleId, part2.RoleId);
            Assert.Equal(part.CreatorId, part2.CreatorId);
            Assert.Equal(part.UserId, part2.UserId);

            Assert.Equal(2, part.Events.Count);
            // TODO: details
        }
예제 #5
0
        public void Seed_Ok()
        {
            PersonEventsPartSeeder seeder = new PersonEventsPartSeeder();

            seeder.SetSeedOptions(_seedOptions);

            IPart part = seeder.GetPart(_item, null, _factory);

            Assert.NotNull(part);

            PersonEventsPart p = part as PersonEventsPart;

            Assert.NotNull(p);

            TestHelper.AssertPartMetadata(p);

            Assert.NotEmpty(p.Events);
        }
예제 #6
0
        /// <summary>
        /// Creates and seeds a new part.
        /// </summary>
        /// <param name="item">The item this part should belong to.</param>
        /// <param name="roleId">The optional part role ID.</param>
        /// <param name="factory">The part seeder factory. This is used
        /// for layer parts, which need to seed a set of fragments.</param>
        /// <returns>A new part.</returns>
        /// <exception cref="ArgumentNullException">item or factory</exception>
        public override IPart GetPart(IItem item, string roleId,
                                      PartSeederFactory factory)
        {
            if (item == null)
            {
                throw new ArgumentNullException(nameof(item));
            }
            if (factory == null)
            {
                throw new ArgumentNullException(nameof(factory));
            }

            PersonEventsPart part = new PersonEventsPart();

            SetPartMetadata(part, roleId, item);

            for (int n = 1; n <= Randomizer.Seed.Next(1, 3 + 1); n++)
            {
                part.Events.Add(new Faker <BioEvent>()
                                .RuleFor(e => e.Type, f => n == 1?
                                         "birth" : f.PickRandom("work", "marriage"))
                                .RuleFor(e => e.Date, HistoricalDate.Parse($"{n} AD"))
                                .RuleFor(e => e.Places,
                                         f => new List <string>(new[] { f.Lorem.Word() }))
                                .RuleFor(e => e.Description, f => f.Lorem.Sentence())
                                .RuleFor(e => e.Sources, SeederHelper.GetDocReferences(1, 3))
                                .RuleFor(e => e.Participants, SeederHelper.GetDecoratedIds(1, 3))
                                .RuleFor(e => e.Work, f => f.Lorem.Sentence(1, 3))
                                .RuleFor(e => e.Rank, f => f.Random.Short(0, 3))
                                .RuleFor(e => e.IsWorkDubious, f => f.Random.Bool(0.2f))
                                .RuleFor(e => e.IsWorkLost, f => f.Random.Bool(0.2f))
                                .RuleFor(e => e.ExternalIds, SeederHelper.GetExternalIds(1, 3))
                                .Generate());
            }

            return(part);
        }