Looking through the Magento code (specifically the process()
method of the Mage_SalesRule_Model_Validator
class), the handling section for case Mage_SalesRule_Model_Rule::BUY_X_GET_Y_ACTION:
seems to want to take the total ITEM PRICE * QUANTITY of the "discount quantity" off of the quote item. However, that only works when you have > X quantity of the item in the cart: EG
If you have a Buy 3 Get 1 free rule, it only applies if you actually have 4 in the cart. This is a basic rule, no conditions or special action conditions. If you have a Buy 1 Get 1 free rule, you would have to have 2 in your cart, etc. I have a bugfix ticket in the queue for my workplace so it applies to the actual quantity in the cart, but for Buy 1 Get 1 free it would essentially equate to "Buy 1 get it free", which is definitely not the right solution.
Is this supposed to be actually adding additional quantity to the cart? If not, what is the intended behavior? If so, where exactly does it do that? Is there already a patch available to fix this?