Subversion Repositories SmartDukaan

Rev

Blame | Last modification | View Log | RSS feed

package com.spice.profitmandi.service.transaction;

import com.spice.profitmandi.model.WarehouseItemQtyModel;
import org.junit.Test;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;

/**
 * A row reserved beyond its stock - a Dummy holding an open order - must give nothing. It used to take a negative
 * quantity and so raise what was still to be fulfilled, parking one extra unit on the Dummy per unit it was short.
 */
public class GetItemQtyTest {

    private static final int ITEM = 40827;
    private static final int JAIPUR = 8947;
    private static final int NSSPL_RJ = 10822;
    private static final int JAIPUR_DUMMY = 11699;

    /** The movement of 24 Sep 14:39: 8 asked, 6 free on NSSPL-RJ, Dummy at -1 from an order left open on 16 Sep. */
    @Test
    public void negativeRowLeavesTheShortfallAsIs() {
        WarehouseItemQtyModel rj = new WarehouseItemQtyModel(ITEM, JAIPUR, NSSPL_RJ, 8, 2, 6);
        WarehouseItemQtyModel dummy = new WarehouseItemQtyModel(ITEM, JAIPUR, JAIPUR_DUMMY, 0, 1, -1);
        Set<WarehouseItemQtyModel> taken = new HashSet<>();

        int shortfall = TransactionServiceImpl.getItemQty(8, taken, rows(dummy, rj), 6);

        assertEquals(2, shortfall);
        assertEquals(6, rj.getFulfillQty());
        assertEquals(0, dummy.getFulfillQty());
        assertFalse(taken.contains(dummy));
    }

    @Test
    public void enoughFreeStockNeverReachesTheNegativeRow() {
        WarehouseItemQtyModel rj = new WarehouseItemQtyModel(ITEM, JAIPUR, NSSPL_RJ, 8, 0, 8);
        WarehouseItemQtyModel dummy = new WarehouseItemQtyModel(ITEM, JAIPUR, JAIPUR_DUMMY, 0, 1, -1);
        Set<WarehouseItemQtyModel> taken = new HashSet<>();

        assertEquals(0, TransactionServiceImpl.getItemQty(8, taken, rows(rj, dummy), 8));
        assertEquals(8, rj.getFulfillQty());
        assertEquals(0, dummy.getFulfillQty());
    }

    @Test
    public void freeStockSpreadOverTwoRows() {
        WarehouseItemQtyModel a = new WarehouseItemQtyModel(ITEM, JAIPUR, NSSPL_RJ, 3, 0, 3);
        WarehouseItemQtyModel b = new WarehouseItemQtyModel(ITEM, JAIPUR, 10823, 2, 0, 2);
        WarehouseItemQtyModel dummy = new WarehouseItemQtyModel(ITEM, JAIPUR, JAIPUR_DUMMY, 0, 2, -2);
        Set<WarehouseItemQtyModel> taken = new HashSet<>();

        assertEquals(1, TransactionServiceImpl.getItemQty(6, taken, rows(dummy, b, a), 5));
        assertEquals(3, a.getFulfillQty());
        assertEquals(2, b.getFulfillQty());
        assertEquals(0, dummy.getFulfillQty());
    }

    private static List<WarehouseItemQtyModel> rows(WarehouseItemQtyModel... models) {
        return new ArrayList<>(Arrays.asList(models));
    }
}