@Test
void remove_vehicle() {

    PlanningVehicle removedVehicle = PlanningVehicleFactory.testVehicle(1);
    PlanningVehicle otherVehicle = PlanningVehicleFactory.testVehicle(2);
    PlanningDepot depot = new PlanningDepot(PlanningLocationFactory.testLocation(1));
    PlanningVisit firstVisit = testVisit(1);
    PlanningVisit lastVisit = testVisit(2);
    VehicleRoutingSolution solution = SolutionFactory.solutionFromVisits(
            Arrays.asList(removedVehicle, otherVehicle),
            depot,
            Arrays.asList(firstVisit, lastVisit));
    when(scoreDirector.getWorkingSolution()).thenReturn(solution);
    when(scoreDirector.lookUpWorkingObject(removedVehicle)).thenReturn(removedVehicle);
    // V -> first -> last
    removedVehicle.setNextVisit(firstVisit);
    firstVisit.setPreviousStandstill(removedVehicle);
    firstVisit.setVehicle(removedVehicle);
    firstVisit.setNextVisit(lastVisit);
    lastVisit.setPreviousStandstill(firstVisit);
    lastVisit.setVehicle(removedVehicle);
    // do change
    RemoveVehicle removeVehicle = new RemoveVehicle(removedVehicle);
    removeVehicle.doChange(scoreDirector);
    assertThat(firstVisit.getPreviousStandstill()).isNull();
    assertThat(lastVisit.getPreviousStandstill()).isNull();
    assertThat(solution.getVehicleList()).containsExactly(otherVehicle);
    verify(scoreDirector).beforeVariableChanged(firstVisit, "previousStandstill");
    verify(scoreDirector).afterVariableChanged(firstVisit, "previousStandstill");
    verify(scoreDirector).beforeVariableChanged(lastVisit, "previousStandstill");
    verify(scoreDirector).afterVariableChanged(lastVisit, "previousStandstill");
    verify(scoreDirector).beforeProblemFactRemoved(removedVehicle);
    verify(scoreDirector).afterProblemFactRemoved(removedVehicle);
    verify(scoreDirector).triggerVariableListeners();
}