Skip to content

Commit ea838b0

Browse files
JoelAdbumaybeechohwille
authored
#2186: create obsidian url updater (#2203)
Co-authored-by: Malte Brunnlieb <maybeec@users.noreply.github.com> Co-authored-by: Jörg Hohwiller <hohwille@users.noreply.github.com>
1 parent 7356114 commit ea838b0

4 files changed

Lines changed: 968 additions & 4 deletions

File tree

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
package com.devonfw.tools.ide.url.tool.obsidian;
2+
3+
import com.devonfw.tools.ide.url.model.folder.UrlVersion;
4+
import com.devonfw.tools.ide.url.updater.GithubUrlReleaseUpdater;
5+
6+
/**
7+
* {@link GithubUrlReleaseUpdater} for Obsidian.
8+
*/
9+
public class ObsidianUrlUpdater extends GithubUrlReleaseUpdater {
10+
11+
/**
12+
* The Constructor.
13+
*/
14+
public ObsidianUrlUpdater() {
15+
super();
16+
}
17+
18+
/**
19+
* Package-private constructor used for testing {@link ObsidianUrlUpdater}.
20+
*
21+
* @param downloadBaseUrl mock url used for download base.
22+
* @param versionBaseUrl mock url used for version base.
23+
*/
24+
ObsidianUrlUpdater(String downloadBaseUrl, String versionBaseUrl) {
25+
super(downloadBaseUrl, versionBaseUrl);
26+
}
27+
28+
@Override
29+
public String getTool() {
30+
return "obsidian";
31+
}
32+
33+
@Override
34+
protected String getGithubOrganization() {
35+
return "obsidianmd";
36+
}
37+
38+
@Override
39+
protected String getGithubRepository() {
40+
return "obsidian-releases";
41+
}
42+
43+
@Override
44+
protected String getVersionPrefixToRemove() {
45+
return "v";
46+
}
47+
48+
@Override
49+
protected void addVersion(UrlVersion urlVersion) {
50+
String baseUrl = createGithubReleaseDownloadUrl("v${version}", "");
51+
52+
doAddVersion(urlVersion, baseUrl + "Obsidian-${version}.exe", WINDOWS, X64);
53+
doAddVersion(urlVersion, baseUrl + "Obsidian-${version}.dmg", MAC, X64);
54+
doAddVersion(urlVersion, baseUrl + "obsidian_${version}_amd64.deb", LINUX, X64);
55+
doAddVersion(urlVersion, baseUrl + "obsidian-${version}.tar.gz", LINUX, X64);
56+
doAddVersion(urlVersion, baseUrl + "obsidian-${version}-arm64.tar.gz", LINUX, ARM64);
57+
}
58+
59+
@Override
60+
public String getCpeVendor() {
61+
return "obsidian";
62+
}
63+
64+
@Override
65+
public String getCpeProduct() {
66+
return "obsidian";
67+
}
68+
}

url-updater/src/main/java/com/devonfw/tools/ide/url/updater/UpdateManager.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@
4949
import com.devonfw.tools.ide.url.tool.ng.NgUrlUpdater;
5050
import com.devonfw.tools.ide.url.tool.node.NodeUrlUpdater;
5151
import com.devonfw.tools.ide.url.tool.npm.NpmUrlUpdater;
52+
import com.devonfw.tools.ide.url.tool.obsidian.ObsidianUrlUpdater;
5253
import com.devonfw.tools.ide.url.tool.oc.OcUrlUpdater;
5354
import com.devonfw.tools.ide.url.tool.pgadmin.PgAdminUrlUpdater;
5455
import com.devonfw.tools.ide.url.tool.pip.PipUrlUpdater;
@@ -89,10 +90,11 @@ public class UpdateManager extends AbstractProcessorWithTimeout {
8990
new GcLogAnalyzerUrlUpdater(), new GCloudUrlUpdater(), new GcViewerUrlUpdater(), new GhUrlUpdater(), new GoUrlUpdater(), new GraalVmCommunityUpdater(),
9091
new GraalVmOracleUrlUpdater(), new GradleUrlUpdater(), new HelmUrlUpdater(), new InsoUrlUpdater(), new IntellijUrlUpdater(), new JasyptUrlUpdater(),
9192
new JavaAzulUrlUpdater(), new JavaUrlUpdater(), new JenkinsUrlUpdater(), new JmcUrlUpdater(), new KotlincUrlUpdater(), new KotlincNativeUrlUpdater(),
92-
new LazyDockerUrlUpdater(), new MvnUrlUpdater(), new MvndUrlUpdater(), new NgUrlUpdater(), new NodeUrlUpdater(), new NpmUrlUpdater(), new OcUrlUpdater(),
93-
new PgAdminUrlUpdater(), new PipUrlUpdater(), new PycharmUrlUpdater(), new QuarkusUrlUpdater(), new RubyUrlUpdater(), new RubyJdxUrlUpdater(),
94-
new RustUrlUpdater(), new DockerRancherDesktopUrlUpdater(), new SonarUrlUpdater(), new SquirrelSqlUrlUpdater(), new SoapUiUrlUpdater(),
95-
new TerraformUrlUpdater(), new TomcatUrlUpdater(), new UvUrlUpdater(), new VsCodeUrlUpdater(), new VsCodiumUrlUpdater());
93+
new LazyDockerUrlUpdater(), new MvnUrlUpdater(), new MvndUrlUpdater(), new NgUrlUpdater(), new NodeUrlUpdater(), new NpmUrlUpdater(),
94+
new ObsidianUrlUpdater(), new OcUrlUpdater(), new PgAdminUrlUpdater(), new PipUrlUpdater(), new PycharmUrlUpdater(), new QuarkusUrlUpdater(),
95+
new RubyUrlUpdater(), new RubyJdxUrlUpdater(), new RustUrlUpdater(), new DockerRancherDesktopUrlUpdater(), new SonarUrlUpdater(),
96+
new SquirrelSqlUrlUpdater(), new SoapUiUrlUpdater(), new TerraformUrlUpdater(), new TomcatUrlUpdater(), new UvUrlUpdater(), new VsCodeUrlUpdater(),
97+
new VsCodiumUrlUpdater());
9698

9799
/**
98100
* The constructor.
Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
package com.devonfw.tools.ide.url.tool.obsidian;
2+
3+
import static com.github.tomakehurst.wiremock.client.WireMock.aResponse;
4+
import static com.github.tomakehurst.wiremock.client.WireMock.any;
5+
import static com.github.tomakehurst.wiremock.client.WireMock.get;
6+
import static com.github.tomakehurst.wiremock.client.WireMock.stubFor;
7+
import static com.github.tomakehurst.wiremock.client.WireMock.urlMatching;
8+
9+
import java.io.IOException;
10+
import java.nio.file.Path;
11+
import java.util.List;
12+
13+
import org.junit.jupiter.api.Test;
14+
import org.junit.jupiter.api.io.TempDir;
15+
16+
import com.devonfw.tools.ide.url.model.folder.UrlRepository;
17+
import com.devonfw.tools.ide.url.updater.AbstractUrlUpdaterTest;
18+
import com.github.tomakehurst.wiremock.junit5.WireMockRuntimeInfo;
19+
import com.github.tomakehurst.wiremock.junit5.WireMockTest;
20+
21+
/**
22+
* Test of {@link ObsidianUrlUpdater}.
23+
*/
24+
@WireMockTest
25+
public class ObsidianUrlUpdaterTest extends AbstractUrlUpdaterTest {
26+
27+
/**
28+
* Test of {@link ObsidianUrlUpdater} for the creation of download URLs and checksums.
29+
*
30+
* @param tempDir Path to a temporary directory.
31+
* @param wmRuntimeInfo the {@link WireMockRuntimeInfo}.
32+
*/
33+
@Test
34+
void testObsidianUrlUpdater(@TempDir Path tempDir, WireMockRuntimeInfo wmRuntimeInfo) throws IOException {
35+
36+
// arrange
37+
stubFor(get(urlMatching("/repos/obsidianmd/obsidian-releases/releases"))
38+
.willReturn(aResponse()
39+
.withStatus(200)
40+
.withBody(readAndResolve(PATH_INTEGRATION_TEST.resolve("ObsidianUrlUpdater")
41+
.resolve("obsidian-releases.json"), wmRuntimeInfo))));
42+
43+
stubFor(any(urlMatching("/obsidianmd/obsidian-releases/releases/download/v\\d+\\.\\d+\\.\\d+/Obsidian-.*\\.exe"))
44+
.willReturn(aResponse()
45+
.withStatus(200)
46+
.withBody(DOWNLOAD_CONTENT)));
47+
stubFor(any(urlMatching("/obsidianmd/obsidian-releases/releases/download/v\\d+\\.\\d+\\.\\d+/Obsidian-.*\\.dmg"))
48+
.willReturn(aResponse()
49+
.withStatus(200)
50+
.withBody(DOWNLOAD_CONTENT)));
51+
stubFor(any(urlMatching("/obsidianmd/obsidian-releases/releases/download/v\\d+\\.\\d+\\.\\d+/obsidian_.*_amd64\\.deb"))
52+
.willReturn(aResponse()
53+
.withStatus(200)
54+
.withBody(DOWNLOAD_CONTENT)));
55+
stubFor(any(urlMatching("/obsidianmd/obsidian-releases/releases/download/v\\d+\\.\\d+\\.\\d+/obsidian-.*\\.tar\\.gz"))
56+
.willReturn(aResponse()
57+
.withStatus(200)
58+
.withBody(DOWNLOAD_CONTENT)));
59+
stubFor(any(urlMatching("/obsidianmd/obsidian-releases/releases/download/v\\d+\\.\\d+\\.\\d+/obsidian-.*-arm64\\.tar\\.gz"))
60+
.willReturn(aResponse()
61+
.withStatus(200)
62+
.withBody(DOWNLOAD_CONTENT)));
63+
64+
UrlRepository urlRepository = UrlRepository.load(tempDir);
65+
ObsidianUrlUpdater updater = new ObsidianUrlUpdater(wmRuntimeInfo.getHttpBaseUrl(), wmRuntimeInfo.getHttpBaseUrl());
66+
67+
// act
68+
update(updater, urlRepository);
69+
70+
// assert
71+
List<String> expectedPlatforms = List.of("windows_x64", "mac_x64", "linux_x64");
72+
Path obsidianDir = tempDir.resolve("obsidian").resolve("obsidian");
73+
assertUrlVersion(obsidianDir.resolve("1.9.10"), expectedPlatforms);
74+
assertUrlVersion(obsidianDir.resolve("1.10.6"), expectedPlatforms);
75+
assertUrlVersion(obsidianDir.resolve("1.11.7"), expectedPlatforms);
76+
assertUrlVersion(obsidianDir.resolve("1.12.7"), expectedPlatforms);
77+
}
78+
}

0 commit comments

Comments
 (0)