@Test public void testTotalInputs() { Blueprint b = Blueprint.simpleBlueprint(DifferentiatedGoodType.CAPITAL, 1, BEEF, 1); MacroII localMacroII = mock(MacroII.class); PhaseScheduler scheduler = mock(PhaseScheduler.class); when(localMacroII.getCurrentPhase()).thenReturn(ActionOrder.PRODUCTION); when(localMacroII.getPhaseScheduler()).thenReturn(scheduler); when(localMacroII.getWeekLength()).thenReturn(7f); Firm f = new Firm(localMacroII); Plant localCRS = new Plant(b, new Firm(localMacroII)); localCRS.setPlantMachinery( new LinearConstantMachinery(DifferentiatedGoodType.CAPITAL, f, 0, localCRS)); f.addPlant(localCRS); localCRS.addWorker(new Person(localCRS.getModel())); localCRS.addWorker(new Person(localCRS.getModel())); localCRS .getOwner() .registerSaleDepartment( mock(SalesDepartmentAllAtOnce.class), BEEF); // fake sales department so that you don't sell the stuff you // completeProductionRunNow localCRS.setCostStrategy(new InputCostStrategy(localCRS)); // initially they should be set up to 0 assertEquals(localCRS.getThisWeekInputCosts(), 0); assertEquals(localCRS.getLastWeekInputCosts(), 0); // now when I step you, you should say you are waiting for inputs localCRS.getModel(); localCRS.step(localMacroII); assertEquals(localCRS.getStatus(), PlantStatus.WAITING_FOR_INPUT); assertEquals(localCRS.getThisWeekInputCosts(), 0); // input costs should still be 0 assertEquals(localCRS.getLastWeekInputCosts(), 0); // now I give you one input that costs 10$ localCRS .getOwner() .receive( Good.getInstanceOfDifferentiatedGood( DifferentiatedGoodType.CAPITAL, drs.getOwner(), 10), drs.getOwner()); localCRS.step(localCRS.getModel()); assertEquals(localCRS.getThisWeekInputCosts(), 10); // input costs should still now be 10 assertEquals(localCRS.getLastWeekInputCosts(), 0); // I'll give you another and force you to step again localCRS .getOwner() .receive( Good.getInstanceOfDifferentiatedGood( DifferentiatedGoodType.CAPITAL, drs.getOwner(), 10), drs.getOwner()); localCRS.step(localCRS.getModel()); assertEquals(localCRS.getThisWeekInputCosts(), 20); // input costs should still now be 20 assertEquals(localCRS.getLastWeekInputCosts(), 0); // with weekend it should reset this week and make lastweekinput costs equal 20 localCRS.weekEnd(7); assertEquals(localCRS.getThisWeekInputCosts(), 0); // reset to 0 assertEquals(localCRS.getLastWeekInputCosts(), 20); // now it's 20 // try one more time localCRS .getOwner() .receive( Good.getInstanceOfDifferentiatedGood( DifferentiatedGoodType.CAPITAL, drs.getOwner(), 10), drs.getOwner()); localCRS.step(localCRS.getModel()); assertEquals(localCRS.getThisWeekInputCosts(), 10); // input costs should now be 10 assertEquals(localCRS.getLastWeekInputCosts(), 20); // this should be stuck at 20 // new weekend, forget 20$ and reset this week localCRS.weekEnd(14); assertEquals(localCRS.getThisWeekInputCosts(), 0); // reset to 0 assertEquals(localCRS.getLastWeekInputCosts(), 10); // now it's 10 // another weekend, everything is at 0 localCRS.weekEnd(0); assertEquals(localCRS.getThisWeekInputCosts(), 0); // reset to 0 assertEquals(localCRS.getLastWeekInputCosts(), 0); // now it's 10 }