/*
* Copyright (c) 2012-2017 Anatole Tresch.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package org.javamoney.cdi;
import org.javamoney.moneta.Money;
import org.junit.BeforeClass;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
/**
* Test injection and translation of monetary queries.
*/
public class QueryInjectedBeanTest {
private static QueryInjectedBean bean;
@BeforeClass
public static final void startContainer() {
SEContainer.start();
bean = SEContainer.getInstance(QueryInjectedBean.class);
}
/**
* Test conversion from annotation into query (including injection) for
* {@code
* @CurrencySpec(codes={"CHF", "USD"},
* attributes = "validAt=01.01.1995",
* countries = "IT",
* numericCodes = {1,2,3,11},
* providers = {"p1", "p2"})}.
*/
@Test
public void testCurrencyQuery(){
assertNotNull(bean.currencyQuery);
assertEquals(bean.currencyQuery.getCurrencyCodes().size(), 2);
assertTrue(bean.currencyQuery.getCurrencyCodes().contains("CHF"));
assertTrue(bean.currencyQuery.getCurrencyCodes().contains("USD"));
assertEquals(bean.currencyQuery.get("validAt", String.class), "01.01.1995");
assertEquals(bean.currencyQuery.getNumericCodes().size(), 4);
assertTrue(bean.currencyQuery.getNumericCodes().contains(1));
assertTrue(bean.currencyQuery.getNumericCodes().contains(2));
assertTrue(bean.currencyQuery.getNumericCodes().contains(3));
assertTrue(bean.currencyQuery.getNumericCodes().contains(11));
assertEquals(bean.currencyQuery.getProviderNames().size(), 2);
assertTrue(bean.currencyQuery.getProviderNames().contains("p1"));
assertTrue(bean.currencyQuery.getProviderNames().contains("p2"));
assertEquals(bean.currencyQuery.getCountries().size(), 1);
assertEquals(bean.currencyQuery.getCountries().iterator().next().toString(), "_IT");
}
/**
* Test conversion from annotation into query (including injection) for
* {@code
* @Inject @FormatSpec(name="default23",
* attributes = "separator=-",
* locale="DE",
* providers = {"p1", "p2"})}.
*/
@Test
public void testFormatQuery(){
assertNotNull(bean.formatQuery);
assertEquals(bean.formatQuery.getFormatName(), "default23");
assertEquals(bean.formatQuery.get("separator", String.class), "-");
assertEquals(bean.formatQuery.getProviderNames().size(), 2);
assertTrue(bean.formatQuery.getProviderNames().contains("p1"));
assertTrue(bean.formatQuery.getProviderNames().contains("p2"));
assertEquals(bean.formatQuery.getLocale().toString(), "de_DE");
}
/**
* Test conversion from annotation into query (including injection) for
* {@code
* @Inject @AmountSpec(value=Money.class,
* attributes = "foo=bar",
* precision = 10,
* maxScale = 2,
* fixedScale = true,
* providers = {"p1", "p2"})}.
*/
@Test
public void testAmountFactoryQuery(){
assertNotNull(bean.amountFactoryQuery);
assertEquals(bean.amountFactoryQuery.getTargetType(), Money.class);
assertEquals(bean.amountFactoryQuery.get("foo", String.class), "bar");
assertEquals(bean.amountFactoryQuery.getProviderNames().size(), 2);
assertTrue(bean.amountFactoryQuery.getProviderNames().contains("p1"));
assertTrue(bean.amountFactoryQuery.getProviderNames().contains("p2"));
assertEquals(bean.amountFactoryQuery.getPrecision(), Integer.valueOf(10));
assertEquals(bean.amountFactoryQuery.getMaxScale(), Integer.valueOf(2));
assertTrue(bean.amountFactoryQuery.isFixedScale());
}
}