public ItemIconPickUpImplementor CreateIIPUImplementor(int transferableQuantity, int itemQuantity, int pickUpStepQuantity, out IItemIcon ii, out IItemIconTransactionManager iiTAM, out IPickUpSystemUIElementFactory uieFactory)
    {
        IItemIcon thisII = Substitute.For <IItemIcon>();

        thisII.GetUIImage().Returns(Substitute.For <IUIImage>());
        IItemTemplate itemTemp = Substitute.For <IItemTemplate>();

        itemTemp.GetPickUpStepQuantity().Returns(pickUpStepQuantity);
        // thisII.GetItemTemplate().Returns(itemTemp);
        IUIItem item = Substitute.For <IUIItem>();

        item.GetItemTemplate().Returns(itemTemp);
        thisII.GetUIItem().Returns(item);
        thisII.GetTransferableQuantity().Returns(transferableQuantity);
        thisII.GetItemQuantity().Returns(itemQuantity);
        thisII.GetIconGroup().Returns(Substitute.For <IIconGroup>());
        IItemIconTransactionManager   thisIITAM      = Substitute.For <IItemIconTransactionManager>();
        IPickUpSystemUIElementFactory thisUIEFactory = Substitute.For <IPickUpSystemUIElementFactory>();
        ItemIconPickUpImplementor     implementor    = new ItemIconPickUpImplementor(thisIITAM, thisUIEFactory);

        implementor.SetItemIcon(thisII);
        ii         = thisII;
        iiTAM      = thisIITAM;
        uieFactory = thisUIEFactory;
        return(implementor);
    }
    public void SetUpAsPickedII_ThisQuantityGreaterThanPickedQuantity_CallsIITAMCreateItemIcon(int transferableQuantity, int itemQuantity, int pickUpStepQuantity)
    {
        IItemIcon thisII;
        IItemIconTransactionManager   thisIITAM;
        IPickUpSystemUIElementFactory uieFactory;
        ItemIconPickUpImplementor     implementor = CreateIIPUImplementor(transferableQuantity, itemQuantity, pickUpStepQuantity, out thisII, out thisIITAM, out uieFactory);

        implementor.SetUpAsPickedII();

        AssertPickUpSystemUIEFactoryCreateItemIconIsCalled(thisII, uieFactory, true);
    }
    public void SetUpAsPickedII_ThisQuantityNotGreaterThanPickedQuantity_ThisIIDoesNotLeaveGhost_DoesNotCallIITAMCreateItemIcon(int transferableQuantity, int itemQuantity, int pickUpStepQuantity)
    {
        IItemIcon thisII;
        IItemIconTransactionManager   thisIITAM;
        IPickUpSystemUIElementFactory thisUIEFactory;
        ItemIconPickUpImplementor     implementor = CreateIIPUImplementor(transferableQuantity, itemQuantity, pickUpStepQuantity, out thisII, out thisIITAM, out thisUIEFactory);

        thisII.LeavesGhost().Returns(false);

        implementor.SetUpAsPickedII();

        AssertPickUpSystemUIEFactoryCreateItemIconIsCalled(thisII, thisUIEFactory, false);
    }
    public void CheckAndIncrementPickUpQuantity_ThisIITAMIsInPickedUpState_IncrementQGreaterThanZero_CallsPickedIIIncreaseBy(int transferableQuantity, int itemQuantity, int pickUpStepQuantity)
    {
        IItemIcon thisII;
        IItemIconTransactionManager   thisIITAM;
        IPickUpSystemUIElementFactory thisUIEFactory;
        ItemIconPickUpImplementor     implementor = CreateIIPUImplementor(transferableQuantity, itemQuantity, pickUpStepQuantity, out thisII, out thisIITAM, out thisUIEFactory);

        thisIITAM.IsInPickedUpState().Returns(true);
        IItemIcon pickedII = Substitute.For <IItemIcon>();

        thisIITAM.GetPickedII().Returns(pickedII);

        implementor.CheckAndIncrementPickUpQuantity();

        pickedII.Received(1).IncreaseBy(Mathf.Min(transferableQuantity, pickUpStepQuantity), true);
    }
    public void CheckAndIncrementPickUpQuantity_ThisIITAMIsNotInPickedUpState_DoesNotCallPickedIIIncreaseBy(int transferableQuantity, int itemQuantity, int pickUpStepQuantity)
    {
        IItemIcon thisII;
        IItemIconTransactionManager   thisIITAM;
        IPickUpSystemUIElementFactory thisUIEFactory;
        ItemIconPickUpImplementor     implementor = CreateIIPUImplementor(transferableQuantity, itemQuantity, pickUpStepQuantity, out thisII, out thisIITAM, out thisUIEFactory);

        thisIITAM.IsInPickedUpState().Returns(false);
        IItemIcon pickedII = Substitute.For <IItemIcon>();

        thisIITAM.GetPickedII().Returns(pickedII);

        implementor.CheckAndIncrementPickUpQuantity();

        pickedII.DidNotReceive().IncreaseBy(Arg.Any <int>(), Arg.Any <bool>());
    }