package no.dusken.barweb.admin;
import no.dusken.barweb.model.BalanceTransaksjon;
import no.dusken.barweb.model.BarPerson;
import no.dusken.barweb.model.TransaksjonVare;
import no.dusken.barweb.model.Vare;
import no.dusken.barweb.service.BalanceTransaksjonService;
import no.dusken.barweb.service.impl.BalanceTransaksjonExtendedService;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.invocation.InvocationOnMock;
import org.mockito.runners.MockitoJUnitRunner;
import org.mockito.stubbing.Answer;
import org.springframework.ui.ExtendedModelMap;
import org.springframework.ui.Model;
import static junit.framework.Assert.*;
import static org.mockito.Matchers.any;
import static org.mockito.Mockito.when;
/**
* @author Marvin B. Lillehaug <lillehau@underdusken.no>
* @author Magnus Kirø <magnuskiro@underdusken.no>
*/
@RunWith(MockitoJUnitRunner.class)
public class EditBalanceTransaksjonControllerTest {
private EditBalanceTransaksjonController controller;
@Mock
private BalanceTransaksjonService balanceTransaksjonService;
@Mock
private BalanceTransaksjonExtendedService balanceTransaksjonExtendedService;
private Model model;
@Before
public void setUp() throws Exception {
controller = new EditBalanceTransaksjonController();
controller.setBalanceTransaksjonService(balanceTransaksjonService);
controller.setBalanceTransaksjonExtendedService(balanceTransaksjonExtendedService);
model = new ExtendedModelMap();
createBalanceTransaksjon();
}
@Test
public void testDeleteTransaksjon() throws Exception {
BalanceTransaksjon balanceTransaksjon = balanceTransaksjonService.findOne(123L);
assertEquals("Wrong transaksjon sum", (Object) 100, balanceTransaksjon.getSum());
BarPerson barPerson = balanceTransaksjon.getBarPerson();
assertEquals("Wrong barPerson balance", (Object) 100, barPerson.getMoney());
controller.deleteBalanceTransaction(123L, model);
assertTrue("editMessage not present", model.containsAttribute("editMessage"));
assertEquals("Wrong barPerson balance", (Object) 0, barPerson.getMoney());
}
@Test
public void testConfirmTransaksjon () throws Exception {
BalanceTransaksjon balanceTransaksjon = balanceTransaksjonService.findOne(123L);
assertFalse("Confirmed not false", balanceTransaksjon.isConfirmed());
controller.confirmBalanceTransaction(123L, model);
assertTrue("editMessage not present", model.containsAttribute("editMessage"));
assertTrue("Confirmed not true", balanceTransaksjon.isConfirmed());
}
private void createBalanceTransaksjon() {
BalanceTransaksjon balanceTransaksjon = new BalanceTransaksjon(){
@Override
public Long getId() {
return 1L;
}
};
BarPerson p = new BarPerson();
p.setMoney(100);
balanceTransaksjon.setBarPerson(p);
Vare v = new Vare(Vare.VareName.NOK, 1, 1, 1, true);
TransaksjonVare transaksjonVare = new TransaksjonVare();
transaksjonVare.setVare(v);
transaksjonVare.setAmount(100);
balanceTransaksjon.getTransaksjoner().add(transaksjonVare);
when(balanceTransaksjonService.findOne(123L)).thenReturn(balanceTransaksjon);
when(balanceTransaksjonService.save(any(BalanceTransaksjon.class))).thenAnswer(new Answer<BalanceTransaksjon>() {
@Override
public BalanceTransaksjon answer(InvocationOnMock invocation) throws Throwable {
return (BalanceTransaksjon) invocation.getArguments()[0];
}
});
}
}