package org.jooby.hbv; import static org.easymock.EasyMock.expect; import static org.junit.Assert.assertEquals; import javax.validation.Validator; import javax.validation.ValidatorFactory; import org.hibernate.validator.HibernateValidatorConfiguration; import org.jooby.test.MockUnit; import org.jooby.test.MockUnit.Block; import org.junit.Test; import org.junit.runner.RunWith; import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.junit4.PowerMockRunner; import com.google.inject.Injector; @RunWith(PowerMockRunner.class) @PrepareForTest({HbvFactory.class, HbvConstraintValidatorFactory.class }) public class HbvFactoryTest { private Block constructor = unit -> { HbvConstraintValidatorFactory hcvf = unit .mockConstructor(HbvConstraintValidatorFactory.class, new Class[]{Injector.class }, unit.get(Injector.class)); HibernateValidatorConfiguration hvc = unit.get(HibernateValidatorConfiguration.class); expect(hvc.constraintValidatorFactory(hcvf)).andReturn(null); }; private Block start = unit -> { Validator validator = unit.get(Validator.class); ValidatorFactory vf = unit.get(ValidatorFactory.class); expect(vf.getValidator()).andReturn(validator); HibernateValidatorConfiguration hvc = unit.get(HibernateValidatorConfiguration.class); expect(hvc.buildValidatorFactory()).andReturn(vf); }; @Test public void defaults() throws Exception { new MockUnit(HibernateValidatorConfiguration.class, Injector.class) .expect(constructor) .run(unit -> { new HbvFactory( unit.get(HibernateValidatorConfiguration.class), unit.get(Injector.class) ); }); } @Test public void start() throws Exception { new MockUnit(HibernateValidatorConfiguration.class, Injector.class, ValidatorFactory.class, Validator.class) .expect(constructor) .expect(start) .run(unit -> { HbvFactory hbvFactory = new HbvFactory( unit.get(HibernateValidatorConfiguration.class), unit.get(Injector.class) ); hbvFactory.start(); assertEquals(unit.get(Validator.class), hbvFactory.get()); }); } @Test public void stop() throws Exception { new MockUnit(HibernateValidatorConfiguration.class, Injector.class, ValidatorFactory.class, Validator.class) .expect(constructor) .expect(start) .expect(unit -> { ValidatorFactory validatorFactory = unit.get(ValidatorFactory.class); validatorFactory.close(); }) .run(unit -> { HbvFactory hbvFactory = new HbvFactory( unit.get(HibernateValidatorConfiguration.class), unit.get(Injector.class) ); hbvFactory.start(); hbvFactory.stop(); // ignored hbvFactory.stop(); }); } }