public void ProcessItemsAgainstItemFilterScript_IntegrationTest()
        {
            //Arrange
            var testInputScriptFile = Resources.MuldiniFilterScript;
            var blockGroupHierarchyBuilder = new BlockGroupHierarchyBuilder();
            var scriptTranslator = new ItemFilterScriptTranslator(new ItemFilterBlockTranslator(blockGroupHierarchyBuilder), blockGroupHierarchyBuilder);
            var script = scriptTranslator.TranslateStringToItemFilterScript(testInputScriptFile);

            var testInputItem = new Item
            {
                BaseType = "BlahdeBlah",
                ItemClass = "Wands",
                ItemRarity = ItemRarity.Magic,
                ItemLevel = 9,
                DropLevel = 9,
                Height = 3,
                Width = 1,
                SocketGroups = new List<SocketGroup> {new SocketGroup(new List<Socket> {new Socket(SocketColor.Red)}, false)}
            };

            var itemFilterProcessor = new ItemFilterProcessor(new BlockItemMatcher());

            //Act
            var result = itemFilterProcessor.ProcessItemsAgainstItemFilterScript(script, new List<IItem> { testInputItem });

            //Assert
            Assert.AreEqual("Wands", result.First().ItemFilterBlock.BlockItems.OfType<ClassBlockItem>().First().Items.First());
        }
        public void IntegrateStringListIntoBlockGroupHierarchy_AdvancedBlockGroup_ChildrenAreCreatedAsAdvanced()
        {
            // Arrange
            var inputStrings = new List<string> { "~Advanced Block Group", "This should be advanced too" };

            var rootBlock = new ItemFilterBlockGroup("Root", null);
            var builder = new BlockGroupHierarchyBuilder();

            // Act
            var result = builder.IntegrateStringListIntoBlockGroupHierarchy(inputStrings, rootBlock);

            // Assert
            Assert.AreEqual(1, rootBlock.ChildGroups.Count);
            Assert.AreEqual(true, result.Advanced);
        }
        public void IntegrateStringListIntoBlockGroupHierarchy_AdvancedBlockGroup_MarksBlockGroupAsAdvanced()
        {
            // Arrange
            var inputStrings = new List<string> { "~Block Group" };

            var rootBlock = new ItemFilterBlockGroup("Root", null);
            var builder = new BlockGroupHierarchyBuilder();

            // Act
            var result = builder.IntegrateStringListIntoBlockGroupHierarchy(inputStrings, rootBlock);

            // Assert
            Assert.AreEqual(1, rootBlock.ChildGroups.Count);
            Assert.AreEqual("Block Group", result.GroupName);
            Assert.AreEqual(true, result.Advanced);
        }
        public void IntegrateStringListIntoBlockGroupHierarchy_MultipleBlockGroups()
        {
            // Arrange
            var rootBlock = new ItemFilterBlockGroup("Root", null);
            var builder = new BlockGroupHierarchyBuilder();

            // Act
            var inputStrings = new List<string> { "Block Group" };
            builder.IntegrateStringListIntoBlockGroupHierarchy(inputStrings, rootBlock);
            inputStrings = new List<string> { "Block Group 2" };
            builder.IntegrateStringListIntoBlockGroupHierarchy(inputStrings, rootBlock);
            inputStrings = new List<string> { "Block Group", "Sub Block Group" };
            var result = builder.IntegrateStringListIntoBlockGroupHierarchy(inputStrings, rootBlock);

            // Assert
            Assert.AreEqual(2, rootBlock.ChildGroups.Count);
            Assert.AreEqual("Sub Block Group", result.GroupName);
        }