Skip to content

Commit b32a5ef

Browse files
authored
add restAPI for downloading latest version of an extension (#657)
* add restAPI for downloading latest version of an extension * modified code * remove query on line 177 that doesn't get assigned anywhere
1 parent 6b0d522 commit b32a5ef

File tree

2 files changed

+34
-1
lines changed

2 files changed

+34
-1
lines changed

server/src/main/java/org/eclipse/openvsx/LocalRegistryService.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,7 @@ private ExtensionVersion findExtensionVersion(String namespace, String extension
173173
@Transactional
174174
public ResponseEntity<byte[]> getFile(String namespace, String extensionName, String targetPlatform, String version, String fileName) {
175175
var extVersion = findExtensionVersion(namespace, extensionName, targetPlatform, version);
176-
var resource = repositories.findFileByName(extVersion, fileName);
176+
var resource = isType(fileName) ? repositories.findFileByType(extVersion, fileName.toLowerCase()) : repositories.findFileByName(extVersion, fileName);
177177
if (resource == null)
178178
throw new NotFoundException();
179179
if (resource.getType().equals(DOWNLOAD))
@@ -182,6 +182,11 @@ public ResponseEntity<byte[]> getFile(String namespace, String extensionName, St
182182
return storageUtil.getFileResponse(resource);
183183
}
184184

185+
public boolean isType (String fileName){
186+
var expectedTypes = Arrays.asList(FileResource.MANIFEST, FileResource.README, FileResource.LICENSE, FileResource.ICON, FileResource.DOWNLOAD, FileResource.CHANGELOG);
187+
return expectedTypes.stream().anyMatch(fileName::equalsIgnoreCase);
188+
}
189+
185190
@Override
186191
public ReviewListJson getReviews(String namespace, String extensionName) {
187192
var extension = repositories.findExtension(extensionName, namespace);

server/src/test/java/org/eclipse/openvsx/RegistryAPITest.java

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -464,6 +464,14 @@ public void testUnknownFile() throws Exception {
464464
.andExpect(status().isNotFound());
465465
}
466466

467+
@Test
468+
public void testLatestFile() throws Exception {
469+
mockLatest();
470+
mockMvc.perform(get("/api/{namespace}/{extension}/{version}/file/{fileName}", "foo", "bar", "latest", "DOWNLOAD"))
471+
.andExpect(status().isOk())
472+
.andExpect(content().string("latest download"));
473+
}
474+
467475
@Test
468476
public void testReviews() throws Exception {
469477
mockReviews();
@@ -1886,6 +1894,8 @@ private FileResource mockReadme(String targetPlatform) {
18861894
Mockito.when(entityManager.merge(resource)).thenReturn(resource);
18871895
Mockito.when(repositories.findFileByName(extVersion, "README"))
18881896
.thenReturn(resource);
1897+
Mockito.when(repositories.findFileByType(extVersion, FileResource.README))
1898+
.thenReturn(resource);
18891899
return resource;
18901900
}
18911901

@@ -1900,6 +1910,8 @@ private FileResource mockChangelog() {
19001910
Mockito.when(entityManager.merge(resource)).thenReturn(resource);
19011911
Mockito.when(repositories.findFileByName(extVersion, "CHANGELOG"))
19021912
.thenReturn(resource);
1913+
Mockito.when(repositories.findFileByType(extVersion, FileResource.CHANGELOG))
1914+
.thenReturn(resource);
19031915
return resource;
19041916
}
19051917

@@ -1914,6 +1926,22 @@ private FileResource mockLicense() {
19141926
Mockito.when(entityManager.merge(resource)).thenReturn(resource);
19151927
Mockito.when(repositories.findFileByName(extVersion, "LICENSE"))
19161928
.thenReturn(resource);
1929+
Mockito.when(repositories.findFileByType(extVersion, FileResource.LICENSE))
1930+
.thenReturn(resource);
1931+
return resource;
1932+
}
1933+
1934+
private FileResource mockLatest() {
1935+
var extVersion = mockExtension();
1936+
var resource = new FileResource();
1937+
resource.setExtension(extVersion);
1938+
resource.setName("DOWNLOAD");
1939+
resource.setType(FileResource.DOWNLOAD);
1940+
resource.setContent("latest download".getBytes());
1941+
resource.setStorageType(FileResource.STORAGE_DB);
1942+
Mockito.when(entityManager.merge(resource)).thenReturn(resource);
1943+
Mockito.when(repositories.findFileByType(extVersion, FileResource.DOWNLOAD))
1944+
.thenReturn(resource);
19171945
return resource;
19181946
}
19191947

0 commit comments

Comments
 (0)