/** * Expects an already deleted file to thrown an ItemNotFoundException. More specifically if a file * was deleted after the call to file.exists() was called. * * @throws Exception */ @Test(expected = ItemNotFoundException.class) public void testRetrieveItemFromFileThrowsItemNotFoundExceptionForDeletedFile() throws Exception { // Mocks Wastebasket wastebasket = mock(Wastebasket.class); Repository repository = mock(Repository.class); FSPeer fsPeer = mock(FSPeer.class); MimeSupport mimeSupport = mock(MimeSupport.class); // mock file File mockFile = mock(File.class); when(mockFile.isDirectory()).thenReturn(false); when(mockFile.isFile()).thenReturn(true); when(mockFile.exists()).thenReturn(true); // needs to throw a FileNotFound when _opening_ the file LinkPersister linkPersister = mock(LinkPersister.class); when(linkPersister.isLinkContent(Mockito.any(ContentLocator.class))) .thenThrow(new FileNotFoundException("Expected to be thrown from mock.")); // object to test DefaultFSLocalRepositoryStorage localRepositoryStorageUnderTest = new DefaultFSLocalRepositoryStorage(wastebasket, linkPersister, mimeSupport, fsPeer) { // expose protected method @Override public AbstractStorageItem retrieveItemFromFile( Repository repository, ResourceStoreRequest request, File target) throws ItemNotFoundException, LocalStorageException { return super.retrieveItemFromFile(repository, request, target); } }; // expected to throw a ItemNotFoundException localRepositoryStorageUnderTest.retrieveItemFromFile( repository, new ResourceStoreRequest("not-used"), mockFile); }
/** * Tests listing a directory, when a contained file does NOT exists. * * @throws Exception */ @SuppressWarnings({"unchecked"}) @Test public void testListFilesThrowsItemNotFoundException() throws Exception { File repoLocation = new File(getBasedir(), "target/" + getClass().getSimpleName() + "/repo/"); // the contents of the "valid" directory, only contains a "valid.txt" file File validDir = new File(repoLocation, "valid/"); validDir.mkdirs(); FileUtils.fileWrite(new File(validDir, "valid.txt"), "UTF-8", "something valid"); Collection<File> validFileCollection = Arrays.asList(validDir.listFiles()); // the contents of the "invalid" directory, this dir contains a missing file File invalidDir = new File(repoLocation, "invalid/"); invalidDir.mkdirs(); FileUtils.fileWrite(new File(invalidDir, "invalid.txt"), "UTF-8", "something valid"); List<File> invalidFileCollection = new ArrayList<File>(Arrays.asList(invalidDir.listFiles())); invalidFileCollection.add(new File(invalidDir, "missing.txt")); // Mocks Wastebasket wastebasket = mock(Wastebasket.class); LinkPersister linkPersister = mock(LinkPersister.class); MimeSupport mimeUtil = mock(MimeSupport.class); // Mock FSPeer to return the results created above FSPeer fsPeer = mock(FSPeer.class); when(fsPeer.listItems( Mockito.any(Repository.class), Mockito.any(ResourceStoreRequest.class), eq(validDir))) .thenReturn(validFileCollection); when(fsPeer.listItems( Mockito.any(Repository.class), Mockito.any(ResourceStoreRequest.class), eq(new File(repoLocation, "invalid/")))) .thenReturn(invalidFileCollection); // create Repository Mock Repository repository = mock(Repository.class); when(repository.getId()).thenReturn("mock"); when(repository.getRepositoryKind()) .thenReturn(new DefaultRepositoryKind(HostedRepository.class, null)); when(repository.getLocalUrl()).thenReturn(repoLocation.toURI().toURL().toString()); AttributesHandler attributesHandler = mock(AttributesHandler.class); when(repository.getAttributesHandler()).thenReturn(attributesHandler); DefaultFSLocalRepositoryStorage localRepositoryStorageUnderTest = new DefaultFSLocalRepositoryStorage(wastebasket, linkPersister, mimeUtil, fsPeer); ResourceStoreRequest validRequest = new ResourceStoreRequest("valid"); // positive test, valid.txt should be found Collection<StorageItem> items = localRepositoryStorageUnderTest.listItems(repository, validRequest); assertThat(items.iterator().next().getName(), equalTo("valid.txt")); assertThat(items, hasSize(1)); // missing.txt was listed in this directory, but it does NOT exist, only invalid.txt should be // found ResourceStoreRequest invalidRequest = new ResourceStoreRequest("invalid"); items = localRepositoryStorageUnderTest.listItems(repository, invalidRequest); assertThat(items.iterator().next().getName(), equalTo("invalid.txt")); assertThat(items, hasSize(1)); }