feat: add location for theme (#2484)

#### What type of PR is this?
/kind improvement
/area core
/milestone 2.0

#### What this PR does / why we need it:
主题支持展示绝对路径位置
#### Which issue(s) this PR fixes:

Fixes #2461

#### Special notes for your reviewer:
/cc @halo-dev/sig-halo 
#### Does this PR introduce a user-facing change?

```release-note
None
```
pull/2493/head
guqing 2022-09-28 23:46:17 +08:00 committed by GitHub
parent fe3860a8b2
commit 27e151a574
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 26 additions and 4 deletions

View File

@ -25,6 +25,8 @@ public class Theme extends AbstractExtension {
@Schema(required = true) @Schema(required = true)
private ThemeSpec spec; private ThemeSpec spec;
private ThemeStatus status;
@Data @Data
@ToString @ToString
public static class ThemeSpec { public static class ThemeSpec {
@ -69,6 +71,11 @@ public class Theme extends AbstractExtension {
} }
} }
@Data
public static class ThemeStatus {
private String location;
}
@Data @Data
@ToString @ToString
public static class Author { public static class Author {

View File

@ -47,10 +47,25 @@ public class ThemeReconciler implements Reconciler<Request> {
reconcileThemeDeletion(theme); reconcileThemeDeletion(theme);
} }
themeSettingDefaultConfig(theme); themeSettingDefaultConfig(theme);
reconcileStatus(request.name());
}); });
return new Result(false, null); return new Result(false, null);
} }
private void reconcileStatus(String name) {
client.fetch(Theme.class, name).ifPresent(theme -> {
Theme oldTheme = JsonUtils.deepCopy(theme);
if (theme.getStatus() == null) {
theme.setStatus(new Theme.ThemeStatus());
}
Path themePath = themePathPolicy.generate(theme);
theme.getStatus().setLocation(themePath.toAbsolutePath().toString());
if (!oldTheme.equals(theme)) {
client.update(theme);
}
});
}
private void themeSettingDefaultConfig(Theme theme) { private void themeSettingDefaultConfig(Theme theme) {
if (StringUtils.isBlank(theme.getSpec().getSettingName())) { if (StringUtils.isBlank(theme.getSpec().getSettingName())) {
return; return;

View File

@ -102,7 +102,7 @@ class ThemeReconcilerTest {
themeReconciler.reconcile(new Reconciler.Request(metadata.getName())); themeReconciler.reconcile(new Reconciler.Request(metadata.getName()));
verify(extensionClient, times(2)).fetch(eq(Theme.class), eq(metadata.getName())); verify(extensionClient, times(3)).fetch(eq(Theme.class), eq(metadata.getName()));
verify(extensionClient, times(2)).fetch(eq(Setting.class), eq(themeSpec.getSettingName())); verify(extensionClient, times(2)).fetch(eq(Setting.class), eq(themeSpec.getSettingName()));
assertThat(Files.exists(testWorkDir)).isTrue(); assertThat(Files.exists(testWorkDir)).isTrue();
@ -133,7 +133,7 @@ class ThemeReconcilerTest {
Reconciler.Result reconcile = Reconciler.Result reconcile =
themeReconciler.reconcile(new Reconciler.Request(metadata.getName())); themeReconciler.reconcile(new Reconciler.Request(metadata.getName()));
assertThat(reconcile.reEnqueue()).isFalse(); assertThat(reconcile.reEnqueue()).isFalse();
verify(extensionClient, times(1)).fetch(eq(Theme.class), eq(metadata.getName())); verify(extensionClient, times(2)).fetch(eq(Theme.class), eq(metadata.getName()));
// setting exists // setting exists
themeSpec.setSettingName("theme-test-setting"); themeSpec.setSettingName("theme-test-setting");
@ -142,9 +142,9 @@ class ThemeReconcilerTest {
assertThat(theme.getSpec().getConfigMapName()).isNull(); assertThat(theme.getSpec().getConfigMapName()).isNull();
ArgumentCaptor<Theme> captor = ArgumentCaptor.forClass(Theme.class); ArgumentCaptor<Theme> captor = ArgumentCaptor.forClass(Theme.class);
themeReconciler.reconcile(new Reconciler.Request(metadata.getName())); themeReconciler.reconcile(new Reconciler.Request(metadata.getName()));
verify(extensionClient, times(3)) verify(extensionClient, times(5))
.fetch(eq(Theme.class), eq(metadata.getName())); .fetch(eq(Theme.class), eq(metadata.getName()));
verify(extensionClient, times(1)) verify(extensionClient, times(2))
.update(captor.capture()); .update(captor.capture());
Theme value = captor.getValue(); Theme value = captor.getValue();
assertThat(value.getSpec().getConfigMapName()).isNotNull(); assertThat(value.getSpec().getConfigMapName()).isNotNull();