mirror of https://github.com/halo-dev/halo
Add additional method to fetch Extension by GVK and name (#2190)
parent
c0758f32d1
commit
61d2169a51
|
@ -62,8 +62,15 @@ public class DefaultExtensionClient implements ExtensionClient {
|
|||
|
||||
@Override
|
||||
public <E extends Extension> Optional<E> fetch(Class<E> type, String name) {
|
||||
var scheme = schemeManager.get(type);
|
||||
return fetch(schemeManager.get(type), name, type);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Optional<Unstructured> fetch(GroupVersionKind gvk, String name) {
|
||||
return fetch(schemeManager.get(gvk), name, Unstructured.class);
|
||||
}
|
||||
|
||||
private <E extends Extension> Optional<E> fetch(Scheme scheme, String name, Class<E> type) {
|
||||
var storeName = ExtensionUtil.buildStoreName(scheme, name);
|
||||
return storeClient.fetchByName(storeName)
|
||||
.map(extensionStore -> converter.convertFrom(type, extensionStore));
|
||||
|
|
|
@ -50,6 +50,8 @@ public interface ExtensionClient {
|
|||
*/
|
||||
<E extends Extension> Optional<E> fetch(Class<E> type, String name);
|
||||
|
||||
Optional<Unstructured> fetch(GroupVersionKind gvk, String name);
|
||||
|
||||
|
||||
/**
|
||||
* Creates an Extension.
|
||||
|
|
|
@ -14,6 +14,7 @@ import java.time.Instant;
|
|||
import java.util.Arrays;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.Optional;
|
||||
|
||||
/**
|
||||
|
@ -219,4 +220,20 @@ public class Unstructured implements Extension {
|
|||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
if (this == o) {
|
||||
return true;
|
||||
}
|
||||
if (o == null || getClass() != o.getClass()) {
|
||||
return false;
|
||||
}
|
||||
Unstructured that = (Unstructured) o;
|
||||
return Objects.equals(data, that.data);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return Objects.hash(data);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -9,10 +9,13 @@ import static org.junit.jupiter.api.Assertions.assertThrows;
|
|||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.ArgumentMatchers.anyString;
|
||||
import static org.mockito.ArgumentMatchers.eq;
|
||||
import static org.mockito.ArgumentMatchers.isA;
|
||||
import static org.mockito.Mockito.lenient;
|
||||
import static org.mockito.Mockito.times;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.when;
|
||||
import static run.halo.app.extension.GroupVersionKind.fromAPIVersionAndKind;
|
||||
import static run.halo.app.extension.Scheme.buildFromType;
|
||||
|
||||
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||
import java.util.List;
|
||||
|
@ -32,6 +35,8 @@ import run.halo.app.extension.store.ExtensionStoreClient;
|
|||
@ExtendWith(MockitoExtension.class)
|
||||
class DefaultExtensionClientTest {
|
||||
|
||||
static final Scheme fakeScheme = Scheme.buildFromType(FakeExtension.class);
|
||||
|
||||
@Mock
|
||||
ExtensionStoreClient storeClient;
|
||||
|
||||
|
@ -47,7 +52,7 @@ class DefaultExtensionClientTest {
|
|||
@BeforeEach
|
||||
void setUp() {
|
||||
lenient().when(schemeManager.get(eq(FakeExtension.class)))
|
||||
.thenReturn(Scheme.buildFromType(FakeExtension.class));
|
||||
.thenReturn(buildFromType(FakeExtension.class));
|
||||
}
|
||||
|
||||
FakeExtension createFakeExtension(String name, Long version) {
|
||||
|
@ -93,6 +98,11 @@ class DefaultExtensionClientTest {
|
|||
return Unstructured.OBJECT_MAPPER.readValue(extensionJson, Unstructured.class);
|
||||
}
|
||||
|
||||
@Test
|
||||
void shouldFetchUnstructuredSuccessfully() {
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
void shouldThrowSchemeNotFoundExceptionWhenSchemeNotRegistered() {
|
||||
class UnRegisteredExtension extends AbstractExtension {
|
||||
|
@ -100,6 +110,8 @@ class DefaultExtensionClientTest {
|
|||
|
||||
when(schemeManager.get(eq(UnRegisteredExtension.class)))
|
||||
.thenThrow(SchemeNotFoundException.class);
|
||||
when(schemeManager.get(isA(GroupVersionKind.class)))
|
||||
.thenThrow(SchemeNotFoundException.class);
|
||||
|
||||
assertThrows(SchemeNotFoundException.class,
|
||||
() -> client.list(UnRegisteredExtension.class, null, null));
|
||||
|
@ -107,6 +119,8 @@ class DefaultExtensionClientTest {
|
|||
() -> client.page(UnRegisteredExtension.class, null, null, 0, 10));
|
||||
assertThrows(SchemeNotFoundException.class,
|
||||
() -> client.fetch(UnRegisteredExtension.class, "fake"));
|
||||
assertThrows(SchemeNotFoundException.class, () ->
|
||||
client.fetch(fromAPIVersionAndKind("fake.halo.run/v1alpha1", "UnRegistered"), "fake"));
|
||||
assertThrows(SchemeNotFoundException.class, () -> {
|
||||
when(converter.convertTo(any())).thenThrow(SchemeNotFoundException.class);
|
||||
client.create(createFakeExtension("fake", null));
|
||||
|
@ -210,6 +224,19 @@ class DefaultExtensionClientTest {
|
|||
verify(storeClient, times(1)).fetchByName(any());
|
||||
}
|
||||
|
||||
@Test
|
||||
void shouldNotFetchUnstructured() {
|
||||
when(schemeManager.get(isA(GroupVersionKind.class)))
|
||||
.thenReturn(fakeScheme);
|
||||
when(storeClient.fetchByName(any())).thenReturn(Optional.empty());
|
||||
var unstructuredFake = client.fetch(fakeScheme.groupVersionKind(), "fake");
|
||||
|
||||
assertEquals(Optional.empty(), unstructuredFake);
|
||||
verify(converter, times(0)).convertFrom(any(), any());
|
||||
verify(schemeManager, times(1)).get(isA(GroupVersionKind.class));
|
||||
verify(storeClient, times(1)).fetchByName(any());
|
||||
}
|
||||
|
||||
@Test
|
||||
void shouldFetchAnExtension() {
|
||||
var storeName = "/registry/fake.halo.run/fakes/fake";
|
||||
|
@ -228,6 +255,25 @@ class DefaultExtensionClientTest {
|
|||
eq(createExtensionStore(storeName)));
|
||||
}
|
||||
|
||||
@Test
|
||||
void shouldFetchUnstructuredExtension() throws JsonProcessingException {
|
||||
var storeName = "/registry/fake.halo.run/fakes/fake";
|
||||
when(storeClient.fetchByName(storeName)).thenReturn(
|
||||
Optional.of(createExtensionStore(storeName)));
|
||||
when(schemeManager.get(isA(GroupVersionKind.class)))
|
||||
.thenReturn(fakeScheme);
|
||||
when(converter.convertFrom(Unstructured.class, createExtensionStore(storeName)))
|
||||
.thenReturn(createUnstructured());
|
||||
|
||||
var fake = client.fetch(fakeScheme.groupVersionKind(), "fake");
|
||||
|
||||
assertEquals(Optional.of(createUnstructured()), fake);
|
||||
verify(storeClient, times(1)).fetchByName(eq(storeName));
|
||||
verify(schemeManager, times(1)).get(isA(GroupVersionKind.class));
|
||||
verify(converter, times(1)).convertFrom(eq(Unstructured.class),
|
||||
eq(createExtensionStore(storeName)));
|
||||
}
|
||||
|
||||
@Test
|
||||
void shouldCreateSuccessfully() {
|
||||
var fake = createFakeExtension("fake", null);
|
||||
|
|
|
@ -6,6 +6,7 @@ import static org.mockito.ArgumentMatchers.any;
|
|||
import static org.mockito.ArgumentMatchers.anyString;
|
||||
import static org.mockito.ArgumentMatchers.argThat;
|
||||
import static org.mockito.ArgumentMatchers.eq;
|
||||
import static org.mockito.ArgumentMatchers.same;
|
||||
import static org.mockito.Mockito.doThrow;
|
||||
import static org.mockito.Mockito.times;
|
||||
import static org.mockito.Mockito.verify;
|
||||
|
@ -107,6 +108,6 @@ class ExtensionCreateHandlerTest {
|
|||
.verifyError(ExtensionNotFoundException.class);
|
||||
verify(client, times(1)).create(
|
||||
argThat(extension -> Objects.equals("my-fake", extension.getMetadata().getName())));
|
||||
verify(client, times(0)).fetch(any(), anyString());
|
||||
verify(client, times(0)).fetch(same(FakeExtension.class), anyString());
|
||||
}
|
||||
}
|
||||
|
|
|
@ -7,6 +7,7 @@ import static org.mockito.ArgumentMatchers.any;
|
|||
import static org.mockito.ArgumentMatchers.anyString;
|
||||
import static org.mockito.ArgumentMatchers.argThat;
|
||||
import static org.mockito.ArgumentMatchers.eq;
|
||||
import static org.mockito.ArgumentMatchers.same;
|
||||
import static org.mockito.Mockito.doNothing;
|
||||
import static org.mockito.Mockito.times;
|
||||
import static org.mockito.Mockito.verify;
|
||||
|
@ -99,7 +100,7 @@ class ExtensionDeleteHandlerTest {
|
|||
StepVerifier.create(responseMono)
|
||||
.verifyError(ExtensionNotFoundException.class);
|
||||
|
||||
verify(client, times(1)).fetch(any(), anyString());
|
||||
verify(client, times(1)).fetch(same(FakeExtension.class), anyString());
|
||||
verify(client, times(0)).update(any());
|
||||
verify(client, times(0)).delete(any());
|
||||
}
|
||||
|
|
|
@ -7,6 +7,7 @@ import static org.mockito.ArgumentMatchers.any;
|
|||
import static org.mockito.ArgumentMatchers.anyString;
|
||||
import static org.mockito.ArgumentMatchers.argThat;
|
||||
import static org.mockito.ArgumentMatchers.eq;
|
||||
import static org.mockito.ArgumentMatchers.same;
|
||||
import static org.mockito.Mockito.doThrow;
|
||||
import static org.mockito.Mockito.times;
|
||||
import static org.mockito.Mockito.verify;
|
||||
|
@ -119,6 +120,6 @@ class ExtensionUpdateHandlerTest {
|
|||
|
||||
verify(client, times(1)).update(
|
||||
argThat(extension -> Objects.equals("my-fake", extension.getMetadata().getName())));
|
||||
verify(client, times(0)).fetch(any(), anyString());
|
||||
verify(client, times(0)).fetch(same(FakeExtension.class), anyString());
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
package run.halo.app.extension;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertNotEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||
import static run.halo.app.extension.MetadataOperator.metadataDeepEquals;
|
||||
|
||||
|
@ -46,7 +47,6 @@ class UnstructuredTest {
|
|||
Map extensionMap = objectMapper.readValue(extensionJson, Map.class);
|
||||
var extension = new Unstructured(extensionMap);
|
||||
|
||||
System.out.println(objectMapper.writeValueAsString(extension));
|
||||
var beforeChange = objectMapper.writeValueAsString(extension);
|
||||
|
||||
var metadata = extension.getMetadata();
|
||||
|
@ -75,16 +75,34 @@ class UnstructuredTest {
|
|||
|
||||
@Test
|
||||
void shouldSetExtensionCorrectly() {
|
||||
var extension = new Unstructured();
|
||||
extension.setApiVersion("fake.halo.run/v1alpha1");
|
||||
extension.setKind("Fake");
|
||||
extension.setMetadata(createMetadata());
|
||||
var extension = createUnstructured();
|
||||
|
||||
assertEquals("fake.halo.run/v1alpha1", extension.getApiVersion());
|
||||
assertEquals("Fake", extension.getKind());
|
||||
assertTrue(metadataDeepEquals(createMetadata(), extension.getMetadata()));
|
||||
}
|
||||
|
||||
@Test
|
||||
void shouldBeEqual() {
|
||||
assertEquals(new Unstructured(), new Unstructured());
|
||||
assertEquals(createUnstructured(), createUnstructured());
|
||||
}
|
||||
|
||||
@Test
|
||||
void shouldNotBeEqual() {
|
||||
var another = createUnstructured();
|
||||
another.getMetadata().setName("fake-extension-2");
|
||||
assertNotEquals(createUnstructured(), another);
|
||||
}
|
||||
|
||||
Unstructured createUnstructured() {
|
||||
var unstructured = new Unstructured();
|
||||
unstructured.setApiVersion("fake.halo.run/v1alpha1");
|
||||
unstructured.setKind("Fake");
|
||||
unstructured.setMetadata(createMetadata());
|
||||
return unstructured;
|
||||
}
|
||||
|
||||
private Metadata createMetadata() {
|
||||
var metadata = new Metadata();
|
||||
metadata.setName("fake-extension");
|
||||
|
|
Loading…
Reference in New Issue