Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

add restAPI for downloading latest version of an extension #657

Merged
merged 4 commits into from
Jan 23, 2023
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -172,7 +172,8 @@ private ExtensionVersion findExtensionVersion(String namespace, String extension
@Override
public ResponseEntity<byte[]> getFile(String namespace, String extensionName, String targetPlatform, String version, String fileName) {
var extVersion = findExtensionVersion(namespace, extensionName, targetPlatform, version);
var resource = repositories.findFileByName(extVersion, fileName);
var resource = isType(fileName) ? repositories.findFileByType(extVersion, fileName.toLowerCase()) : repositories.findFileByName(extVersion, fileName);
repositories.findFileByName(extVersion, fileName);;
amvanbaren marked this conversation as resolved.
Show resolved Hide resolved
if (resource == null)
throw new NotFoundException();
if (resource.getType().equals(DOWNLOAD))
Expand All @@ -181,6 +182,11 @@ public ResponseEntity<byte[]> getFile(String namespace, String extensionName, St
return storageUtil.getFileResponse(resource);
}

public boolean isType (String fileName){
var expectedTypes = Arrays.asList(FileResource.MANIFEST, FileResource.README, FileResource.LICENSE, FileResource.ICON, FileResource.DOWNLOAD, FileResource.CHANGELOG);
return expectedTypes.stream().anyMatch(fileName::equalsIgnoreCase);
}

@Override
public ReviewListJson getReviews(String namespace, String extensionName) {
var extension = repositories.findExtension(extensionName, namespace);
Expand Down
28 changes: 28 additions & 0 deletions server/src/test/java/org/eclipse/openvsx/RegistryAPITest.java
Original file line number Diff line number Diff line change
Expand Up @@ -464,6 +464,14 @@ public void testUnknownFile() throws Exception {
.andExpect(status().isNotFound());
}

@Test
public void testLatestFile() throws Exception {
mockLatest();
mockMvc.perform(get("/api/{namespace}/{extension}/{version}/file/{fileName}", "foo", "bar", "latest", "DOWNLOAD"))
.andExpect(status().isOk())
.andExpect(content().string("latest download"));
}

@Test
public void testReviews() throws Exception {
mockReviews();
Expand Down Expand Up @@ -1886,6 +1894,8 @@ private FileResource mockReadme(String targetPlatform) {
Mockito.when(entityManager.merge(resource)).thenReturn(resource);
Mockito.when(repositories.findFileByName(extVersion, "README"))
.thenReturn(resource);
Mockito.when(repositories.findFileByType(extVersion, FileResource.README))
.thenReturn(resource);
return resource;
}

Expand All @@ -1900,6 +1910,8 @@ private FileResource mockChangelog() {
Mockito.when(entityManager.merge(resource)).thenReturn(resource);
Mockito.when(repositories.findFileByName(extVersion, "CHANGELOG"))
.thenReturn(resource);
Mockito.when(repositories.findFileByType(extVersion, FileResource.CHANGELOG))
.thenReturn(resource);
return resource;
}

Expand All @@ -1914,6 +1926,22 @@ private FileResource mockLicense() {
Mockito.when(entityManager.merge(resource)).thenReturn(resource);
Mockito.when(repositories.findFileByName(extVersion, "LICENSE"))
.thenReturn(resource);
Mockito.when(repositories.findFileByType(extVersion, FileResource.LICENSE))
.thenReturn(resource);
return resource;
}

private FileResource mockLatest() {
var extVersion = mockExtension();
var resource = new FileResource();
resource.setExtension(extVersion);
resource.setName("DOWNLOAD");
resource.setType(FileResource.DOWNLOAD);
resource.setContent("latest download".getBytes());
resource.setStorageType(FileResource.STORAGE_DB);
Mockito.when(entityManager.merge(resource)).thenReturn(resource);
Mockito.when(repositories.findFileByType(extVersion, FileResource.DOWNLOAD))
.thenReturn(resource);
return resource;
}

Expand Down