package com.rapidftr.service; import com.google.common.io.CharStreams; import com.rapidftr.CustomTestRunner; import com.rapidftr.RapidFtrApplication; import com.rapidftr.model.Child; import com.rapidftr.model.Enquiry; import com.rapidftr.model.User; import org.json.JSONException; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.robolectric.Robolectric; import java.io.IOException; import java.io.InputStreamReader; import java.security.GeneralSecurityException; import static org.junit.Assert.assertEquals; import static org.mockito.BDDMockito.given; import static org.mockito.Matchers.any; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; import static org.mockito.MockitoAnnotations.initMocks; import static org.robolectric.Robolectric.getFakeHttpLayer; @RunWith(CustomTestRunner.class) public class MediaSyncHelperTest { @Mock private User currentUser; private EntityHttpDao<Child> childHttpDao; private RapidFtrApplication application; @Before public void setUp() throws Exception { initMocks(this); application = (RapidFtrApplication) Robolectric.getShadowApplication().getApplicationContext(); User user = new User("userName", "password", true, "whatever"); application.setCurrentUser(user); childHttpDao = EntityHttpDaoFactory.createChildHttpDao(application, "http://whatever", ChildSyncService.CHILDREN_API_PATH, ChildSyncService.CHILDREN_API_PARAMETER); given(currentUser.isVerified()).willReturn(true); } @Test public void shouldFetchAudioFromServer() throws JSONException, IOException, GeneralSecurityException { Child child = new Child("id1", "user1", "{ '_id' : '1234abcd' ,'recorded_audio' : 'audio_file_name'}"); getFakeHttpLayer().setDefaultHttpResponse(200, "audio stream"); getFakeHttpLayer().addHttpResponseRule("http://whatever/child/1234abcd/audio", "OK"); String response = CharStreams.toString(new InputStreamReader(new MediaSyncHelper(childHttpDao, application).getAudio(child))); assertEquals("OK", response); } @Test public void shouldBuildPhotoUrlFromChildModel() throws IOException { EntityHttpDao<Child> spyDao = spy(new EntityHttpDao<Child>(application)); MediaSyncHelper helper = new MediaSyncHelper(spyDao, application); Child child = new Child(); child.put("_id", "1234"); doReturn(null).when(spyDao).getResourceStream(any(String.class)); helper.getReSizedPhoto(child, "image"); verify(spyDao).getResourceStream("/child/1234/photo/image/resized/475x635"); } @Test public void shouldBuildPhotoUrlFromEnquiryModel() throws IOException, JSONException { EntityHttpDao<Child> spyDao = spy(new EntityHttpDao<Child>(application)); MediaSyncHelper helper = new MediaSyncHelper(spyDao, application); Enquiry enquiry = new Enquiry("{}"); enquiry.put("_id", "1234"); doReturn(null).when(spyDao).getResourceStream(any(String.class)); helper.getReSizedPhoto(enquiry, "image"); verify(spyDao).getResourceStream("/enquiry/1234/photo/image/resized/475x635"); } @Test public void shouldBuildAudioUrlFromChildModel() throws IOException { EntityHttpDao<Child> spyDao = spy(new EntityHttpDao<Child>(application)); MediaSyncHelper helper = new MediaSyncHelper(spyDao, application); Child child = new Child(); child.put("_id", "1234"); doReturn(null).when(spyDao).getResourceStream(any(String.class)); helper.getAudio(child); verify(spyDao).getResourceStream("/child/1234/audio"); } @Test public void shouldBuildAudioUrlFromEnquiryModel() throws IOException, JSONException { EntityHttpDao<Child> spyDao = spy(new EntityHttpDao<Child>(application)); MediaSyncHelper helper = new MediaSyncHelper(spyDao, application); Enquiry enquiry = new Enquiry("{}"); enquiry.put("_id", "1234"); doReturn(null).when(spyDao).getResourceStream(any(String.class)); helper.getAudio(enquiry); verify(spyDao).getResourceStream("/enquiry/1234/audio"); } }