package org.jbehave.core.io.google; import java.io.IOException; import java.io.InputStream; import java.net.MalformedURLException; import org.hamcrest.MatcherAssert; import org.hamcrest.Matchers; import org.jbehave.core.io.InvalidStoryResource; import org.jbehave.core.io.google.LoadOdtFromGoogle; import org.jbehave.core.io.google.LoadOdtFromGoogle.GoogleAccessFailed; import org.junit.Test; import com.google.gdata.client.DocumentQuery; import com.google.gdata.client.docs.DocsService; import com.google.gdata.data.MediaContent; import com.google.gdata.data.docs.DocumentListEntry; import com.google.gdata.data.docs.DocumentListFeed; import com.google.gdata.data.media.MediaSource; import com.google.gdata.util.ServiceException; import static java.util.Arrays.asList; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; public class GoogleOdtLoaderBehaviour { @Test public void shouldGetResourceFromDocsService() throws IOException, ServiceException { DocsService service = mock(DocsService.class); DocumentListFeed feed = mock(DocumentListFeed.class); DocumentListEntry entry = mock(DocumentListEntry.class); MediaSource mediaSource = mock(MediaSource.class); InputStream inputStream = mock(InputStream.class); final MediaContent content = mock(MediaContent.class); final DocumentQuery query = mock(DocumentQuery.class); when(service.getFeed(query, DocumentListFeed.class)).thenReturn(feed); when(service.getMedia(content)).thenReturn(mediaSource); when(feed.getEntries()).thenReturn(asList(entry)); when(entry.getContent()).thenReturn(content); when(content.getUri()).thenReturn("http://docs.google.com"); when(mediaSource.getInputStream()).thenReturn(inputStream); LoadOdtFromGoogle storyLoader = new LoadOdtFromGoogle("user", "password", "https://docs.google.com/feeds/default/private/full/", service){ @Override DocumentQuery documentQuery(String title) throws MalformedURLException { return query; } @Override protected MediaContent mediaContent(String url) { return content; } }; InputStream resourceStream = storyLoader.resourceAsStream("a_story"); MatcherAssert.assertThat(resourceStream, Matchers.equalTo(inputStream)); } @Test(expected = InvalidStoryResource.class) public void shouldNotLoadInexistingResourceFromGoogleDocs() { new LoadOdtFromGoogle("user", "password", "https://docs.google.com/feeds/default/private/full/", mock(DocsService.class)).loadStoryAsText("an_inexisting_story"); } @Test(expected = GoogleAccessFailed.class) public void shouldNotAllowInvalidAccess() { new LoadOdtFromGoogle("DUMMY", "DUMMY"); } }