package lt.inventi.wicket.component.numeric;
import static org.hamcrest.CoreMatchers.containsString;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;
import java.math.BigDecimal;
import org.apache.wicket.markup.IMarkupFragment;
import org.apache.wicket.markup.Markup;
import org.apache.wicket.markup.html.WebPage;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;
import org.apache.wicket.protocol.http.mock.MockHttpServletResponse;
import org.apache.wicket.util.tester.WicketTester;
import org.junit.Test;
public class MonetaryTextFieldTest {
private WicketTester tester = new WicketTester();
@Test
public void formatsNumberAccordingToTheSettings() {
final IModel<BigDecimal> valueModel = Model.of(BigDecimal.TEN);
TestPage page = new TestPage() {
@Override
protected MonetaryTextField<? extends Number> createMonetaryField(String id) {
return new MonetaryTextField<BigDecimal>(id, valueModel, BigDecimal.class);
}
};
tester.startPage(page);
tester.assertRenderedPage(TestPage.class);
MockHttpServletResponse response = tester.getLastResponse();
assertThat(response.getDocument(), containsString("$('#" + page.getAmountMarkupId() + "').autoNumeric('init');"));
tester.newFormTester("form").setValue("amount", "11").submit();
tester.assertNoErrorMessage();
assertThat(valueModel.getObject().compareTo(BigDecimal.valueOf(11)), is(0));
}
private static abstract class TestPage extends WebPage {
@Override
protected void onInitialize() {
super.onInitialize();
Form<Void> form = new Form<Void>("form");
form.add(createMonetaryField("amount"));
add(form);
}
public String getAmountMarkupId() {
return get("form:amount").getMarkupId();
}
protected abstract MonetaryTextField<? extends Number> createMonetaryField(String id);
@Override
public IMarkupFragment getMarkup() {
return Markup
.of("<html><wicket:head></wicket:head><body><form wicket:id=\"form\"><input type=\"text\" wicket:id=\"amount\" /></form></body></html>");
}
}
}