public void StorageProvider_SimpleCapacity()
        {
            var provider  = new MSimpleStorageCapacityProvider(5);
            var inventory = new MListInventory(provider);

            Assert.AreEqual(5, inventory.Capacity);
        }
        public void StorageProvider_CompositeCapacity()
        {
            var provider1 = new MCompositeStorageCapacityProvider(new MSimpleStorageCapacityProvider(5), new MSimpleStorageCapacityProvider(5));
            var inventory = new MListInventory(provider1);


            Assert.AreEqual(10, inventory.Capacity);
        }
        public void StorageProvider_SimpleCapacityChange()
        {
            var provider1 = new MSimpleStorageCapacityProvider(5);
            var inventory = new MListInventory(provider1);
            var provider2 = new MSimpleStorageCapacityProvider(15);

            inventory.SetCapacityProvider(provider2);

            Assert.AreEqual(15, inventory.Capacity);
        }
        public void ListInventory_EmptyNoCapacity()
        {
            var provider = Substitute.For <IStorageCapacityProvider>();

            provider.Capacity.Returns(0);
            IInventory inventory = new MListInventory(provider);

            Assert.Zero(inventory.Capacity);
            Assert.Zero(inventory.Count);
        }
        public void ListInventory_AddingItemWithCapacity()
        {
            var provider = Substitute.For <IStorageCapacityProvider>();

            provider.Capacity.Returns(10);
            IInventory inventory = new MListInventory(provider);

            var item = Substitute.For <IInventoryItem>();

            inventory.AddItem(item);

            Assert.AreEqual(1, inventory.Count);
        }
        public void ListInventory_AddingStackNoCapacity()
        {
            var provider = Substitute.For <IStorageCapacityProvider>();

            provider.Capacity.Returns(0);
            IInventory inventory = new MListInventory(provider);

            var item = Substitute.For <IInventoryStack>();

            item.Capacity.Returns(2);

            inventory.AddItem(item);

            Assert.Zero(inventory.Count);
        }
        public void ListInventory_AddingStackWithCapacity()
        {
            var provider = Substitute.For <IStorageCapacityProvider>();

            provider.Capacity.Returns(10);
            IInventory inventory = new MListInventory(provider);

            var item = Substitute.For <IInventoryStack>();

            item.Capacity.Returns(2);

            inventory.AddItem(item);

            Assert.AreEqual(1, inventory.Count);
            Assert.AreEqual(1, (inventory.Contents[0] as IInventoryStack)?.Count);
        }
        public void ListInventory_AddingToExistingStackOverflow()
        {
            var provider = Substitute.For <IStorageCapacityProvider>();

            provider.Capacity.Returns(10);
            IInventory inventory = new MListInventory(provider);

            var item1 = Substitute.For <IInventoryStack>();

            item1.Capacity.Returns(4);

            inventory.AddItem(item1);
            inventory.AddItem(item1, 5);

            Assert.AreEqual(2, inventory.Count);
            Assert.AreEqual(4, (inventory.Contents[0] as IInventoryStack)?.Count);
            Assert.AreEqual(2, (inventory.Contents[1] as IInventoryStack)?.Count);
        }