public async Task GetCraftablesTest()
        {
            // Arrange
            var repo       = new FakeCraftableRepository(TestData.Items());
            var controller = new CraftablesController(repo);

            // Act
            var result = await controller.GetCraftables();

            // Assert
            Assert.IsNotNull(result);
            var list = result.Value;

            Assert.IsNotNull(list);
            Assert.AreEqual(TestData.Items().Count, list.Count());
            foreach (var item in list)
            {
                var testItem = TestData.Items().Find(i => i.Id == item.Id);
                Assert.AreEqual(testItem.Id, item.Id);
                Assert.AreEqual(testItem.Name, item.Name);
                Assert.AreEqual(testItem.Requirement, item.Requirement);
                Assert.AreEqual(testItem.Materials, item.Materials);
                Assert.AreEqual(testItem.Form, item.Form);
                Assert.AreEqual(testItem.Effect, item.Effect);
            }
        }
        public async Task GetCraftableTest()
        {
            // Arrange
            var repo       = new FakeCraftableRepository(TestData.Items());
            var controller = new CraftablesController(repo);
            var itemId     = 3;

            // Act
            var result = await controller.GetCraftable(itemId);

            // Assert
            Assert.IsNotNull(result);
            var testItem  = TestData.Items().Find(i => i.Id == itemId);
            var objResult = result.Result as OkObjectResult;

            Assert.IsNotNull(objResult);
            var valResult = objResult.Value as CraftableDTO;

            Assert.IsNotNull(valResult);

            Assert.AreEqual(testItem.Id, valResult.Id);
            Assert.AreEqual(testItem.Name, valResult.Name);
            Assert.AreEqual(testItem.Requirement, valResult.Requirement);
            Assert.AreEqual(testItem.Materials, valResult.Materials);
            Assert.AreEqual(testItem.Form, valResult.Form);
            Assert.AreEqual(testItem.Effect, valResult.Effect);
        }
        public async Task PostCraftableTest()
        {
            // Arrange
            var repo       = new FakeCraftableRepository(TestData.Items());
            var controller = new CraftablesController(repo);
            var item       = new Craftable
            {
                Id          = 10,
                Effect      = "NEWEFFECT",
                Form        = "NEWFORM",
                Materials   = "NEWMATERIALS",
                Name        = "NEWNAME",
                Requirement = "NEWREQUIREMENT"
            };

            // Act
            var result = await controller.PostCraftable(item);

            // Assert
            Assert.IsNotNull(result);
            var objResult = result.Result as CreatedAtActionResult;

            Assert.IsNotNull(objResult);
            var valResult = objResult.Value as Craftable;

            Assert.IsNotNull(valResult);
            Assert.AreEqual(item, valResult);
        }
        public async Task DeleteCraftableTest()
        {
            // Arrange
            var repo       = new FakeCraftableRepository(TestData.Items());
            var controller = new CraftablesController(repo);
            var charId     = 3;

            // Act
            var result = await controller.DeleteCraftable(charId);

            // Assert
            Assert.IsNotNull(result);
            var objResult = result.Result as OkObjectResult;

            Assert.IsNotNull(objResult);
            var valResult = objResult.Value as Craftable;

            Assert.IsNotNull(valResult);
            Assert.AreEqual(charId, valResult.Id);
        }
        public async Task PutCraftableTest()
        {
            // Arrange
            var repo       = new FakeCraftableRepository(TestData.Items());
            var controller = new CraftablesController(repo);
            var itemId     = 1;
            var item       = new Craftable
            {
                Id          = itemId,
                Effect      = "UPDATEDEFFECT",
                Form        = "UPDATEDFORM",
                Materials   = "UPDATEDMATERIALS",
                Name        = "UPDATEDNAME",
                Requirement = "UPDATEDREQUIREMENT"
            };

            // Act
            var result = await controller.PutCraftable(itemId, item);

            // Assert
            Assert.IsNotNull(result);
            Assert.IsInstanceOfType(result, typeof(NoContentResult));
        }