package org.openlmis.core.network.adapter; import com.google.gson.JsonElement; import com.google.gson.JsonParser; import com.google.inject.AbstractModule; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.openlmis.core.LMISTestRunner; import org.openlmis.core.model.Regimen; import org.openlmis.core.model.RegimenItem; import org.openlmis.core.model.repository.RegimenRepository; import org.openlmis.core.utils.JsonFileReader; import org.robolectric.RuntimeEnvironment; import roboguice.RoboGuice; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.is; import static org.junit.Assert.assertNotNull; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @RunWith(LMISTestRunner.class) public class RegimenItemAdapterTest { private RegimenRepository regimenRepository; @Before public void setUp() throws Exception { regimenRepository = mock(RegimenRepository.class); RoboGuice.overrideApplicationInjector(RuntimeEnvironment.application, new MyTestModule()); } @Test public void shouldSerializeRegimenItem() throws Exception { RegimenItem regimenItem = new RegimenItem(); Regimen regimen = new Regimen(); regimen.setCode("regimenCode"); regimen.setName("regimenName"); regimen.setType(Regimen.RegimeType.Adults); regimenItem.setAmount(100L); regimenItem.setRegimen(regimen); RegimenItemAdapter regimenItemAdapter = new RegimenItemAdapter(); JsonElement json = regimenItemAdapter.serialize(regimenItem, null, null); assertNotNull(json); assertThat(json.getAsJsonObject().get("categoryName").getAsString(), is("Adults")); } @Test public void shouldDeSerializeRegimenItem() throws Exception { when(regimenRepository.getByNameAndCategory("d4T 30+3TC+EFV", Regimen.RegimeType.Adults)).thenReturn(null); String json = JsonFileReader.readJson(getClass(), "RegimenItemResponse.json"); RegimenItemAdapter regimenItemAdapter = new RegimenItemAdapter(); RegimenItem deserialize = regimenItemAdapter.deserialize(new JsonParser().parse(json), null, null); Regimen regimen = deserialize.getRegimen(); assertThat(regimen.getType(), is(Regimen.RegimeType.Adults)); assertThat(regimen.getCode(), is("020")); assertThat(regimen.getName(), is("d4T 30+3TC+EFV")); assertThat(regimen.isCustom(), is(true)); verify(regimenRepository).create(regimen); } public class MyTestModule extends AbstractModule { @Override protected void configure() { bind(RegimenRepository.class).toInstance(regimenRepository); } } }