예제 #1
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));
            }

            MsScriptsPart part = new MsScriptsPart();

            SetPartMetadata(part, roleId, item);

            int count = Randomizer.Seed.Next(1, 5 + 1);

            for (int n = 1; n <= count; n++)
            {
                bool even = n % 2 == 0;
                part.Scripts.Add(new Faker <MsScript>()
                                 .RuleFor(s => s.Role, f => f.PickRandom("superior", "inferior"))
                                 .RuleFor(s => s.Languages,
                                          f => new List <string>(new[] { f.PickRandom("lat", "grc") }))
                                 .RuleFor(s => s.Type, f => f.PickRandom("cap", "unc"))
                                 .RuleFor(s => s.Hands, f => GetHands(f.Random.Number(0, 2)))
                                 .Generate());
            }

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

            part.Scripts.Clear();

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

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

            Assert.Equal("tot-count", pin.Name);
            TestHelper.AssertPinIds(part, pin);
            Assert.Equal("0", pin.Value);
        }
예제 #3
0
        public void Seed_Ok()
        {
            MsScriptsPartSeeder seeder = new MsScriptsPartSeeder();

            seeder.SetSeedOptions(_seedOptions);

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

            Assert.NotNull(part);

            MsScriptsPart p = part as MsScriptsPart;

            Assert.NotNull(p);

            TestHelper.AssertPartMetadata(p);

            Assert.NotEmpty(p.Scripts);
        }
예제 #4
0
        public void Part_Is_Serializable()
        {
            MsScriptsPart part = GetPart();

            string        json  = TestHelper.SerializePart(part);
            MsScriptsPart part2 =
                TestHelper.DeserializePart <MsScriptsPart>(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(part.Scripts.Count, part2.Scripts.Count);
            // TODO: details
        }
예제 #5
0
        public void GetDataPins_Entries_Ok()
        {
            MsScriptsPart part = new MsScriptsPart
            {
                ItemId    = Guid.NewGuid().ToString(),
                RoleId    = "some-role",
                CreatorId = "zeus",
                UserId    = "another"
            };

            for (int n = 1; n <= 3; n++)
            {
                bool even = n % 2 == 0;
                part.Scripts.Add(new MsScript
                {
                    Role      = even ? "inferior" : "superior",
                    Languages = new List <string>(new[] { even ? "grc" : "lat" }),
                    Type      = even ? "unc" : "cap",
                    Hands     = new List <MsHand>(new[]
                    {
                        new MsHand
                        {
                            Id = $"h{n}"
                        }
                    })
                });
            }

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

            Assert.Equal(10, pins.Count);

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

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

            // role
            pin = pins.Find(p => p.Name == "role" && p.Value == "superior");
            Assert.NotNull(pin);
            TestHelper.AssertPinIds(part, pin);

            pin = pins.Find(p => p.Name == "role" && p.Value == "inferior");
            Assert.NotNull(pin);
            TestHelper.AssertPinIds(part, pin);

            // language
            pin = pins.Find(p => p.Name == "language" && p.Value == "grc");
            Assert.NotNull(pin);
            TestHelper.AssertPinIds(part, pin);

            pin = pins.Find(p => p.Name == "language" && p.Value == "lat");
            Assert.NotNull(pin);
            TestHelper.AssertPinIds(part, pin);

            // type
            pin = pins.Find(p => p.Name == "type" && p.Value == "cap");
            Assert.NotNull(pin);
            TestHelper.AssertPinIds(part, pin);

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

            // hand-id
            for (int n = 1; n <= 3; n++)
            {
                pin = pins.Find(p => p.Name == "hand-id" && p.Value == $"h{n}");
                Assert.NotNull(pin);
                TestHelper.AssertPinIds(part, pin);
            }
        }