1 package io.apicurio.registry.maven;
2
3 import org.junit.jupiter.api.Test;
4 import org.junit.jupiter.api.io.TempDir;
5
6 import java.lang.reflect.Method;
7 import java.nio.file.Files;
8 import java.nio.file.Path;
9
10 import static org.junit.jupiter.api.Assertions.assertEquals;
11
12 public class RegisterRegistryMojoApiInfoVersionTest {
13
14 @TempDir
15 Path tempDir;
16
17 @Test
18 void testResolveVersionExtractsYamlInfoVersionAndMarksSnapshotAsDraft() throws Exception {
19 Path artifactFile = tempDir.resolve("asyncapi.yml");
20 Files.writeString(artifactFile, """
21 asyncapi: 3.0.0
22 info:
23 title: Inventory API
24 version: 1.2.3-SNAPSHOT
25 channels: {}
26 """);
27
28 RegisterArtifact artifact = new RegisterArtifact();
29 artifact.setArtifactType("ASYNCAPI");
30 artifact.setFile(artifactFile.toFile());
31 artifact.setVersionStrategy(RegisterArtifact.VersionStrategy.API_INFO_VERSION);
32
33 RegisterRegistryMojo mojo = new RegisterRegistryMojo();
34 Object resolved = invokeResolveVersion(mojo, artifact, Files.readString(artifactFile));
35
36 assertEquals("1.2.3", invokeResolvedAccessor(resolved, "version"));
37 assertEquals(Boolean.TRUE, invokeResolvedAccessor(resolved, "isDraft"));
38 assertEquals(Boolean.TRUE, invokeResolvedAccessor(resolved, "derivedFromApiInfoVersion"));
39 assertEquals(Boolean.TRUE, invokeResolvedAccessor(resolved, "derivedFromSnapshot"));
40 assertEquals(Boolean.TRUE, invokeResolvedAccessor(resolved, "shouldUpdateDraftContentOnConflict"));
41 assertEquals(Boolean.FALSE, invokeResolvedAccessor(resolved, "shouldPromoteDraftOnConflict"));
42 }
43
44 @Test
45 void testResolveVersionExtractsYamlInfoVersionWithoutChangingDraft() throws Exception {
46 Path artifactFile = tempDir.resolve("asyncapi.yml");
47 Files.writeString(artifactFile, """
48 asyncapi: 3.0.0
49 info:
50 title: Inventory API
51 version: 1.2.3
52 channels: {}
53 """);
54
55 RegisterArtifact artifact = new RegisterArtifact();
56 artifact.setArtifactType("ASYNCAPI");
57 artifact.setFile(artifactFile.toFile());
58 artifact.setVersionStrategy(RegisterArtifact.VersionStrategy.API_INFO_VERSION);
59 artifact.setIsDraft(Boolean.FALSE);
60
61 RegisterRegistryMojo mojo = new RegisterRegistryMojo();
62 Object resolved = invokeResolveVersion(mojo, artifact, Files.readString(artifactFile));
63
64 assertEquals("1.2.3", invokeResolvedAccessor(resolved, "version"));
65 assertEquals(Boolean.FALSE, invokeResolvedAccessor(resolved, "isDraft"));
66 assertEquals(Boolean.TRUE, invokeResolvedAccessor(resolved, "derivedFromApiInfoVersion"));
67 assertEquals(Boolean.FALSE, invokeResolvedAccessor(resolved, "derivedFromSnapshot"));
68 assertEquals(Boolean.FALSE, invokeResolvedAccessor(resolved, "shouldUpdateDraftContentOnConflict"));
69 assertEquals(Boolean.TRUE, invokeResolvedAccessor(resolved, "shouldPromoteDraftOnConflict"));
70 }
71
72 private static Object invokeResolveVersion(RegisterRegistryMojo mojo, RegisterArtifact artifact, String data)
73 throws Exception {
74 Method method = RegisterRegistryMojo.class.getDeclaredMethod("resolveVersion",
75 RegisterArtifact.class, String.class);
76 method.setAccessible(true);
77 return method.invoke(mojo, artifact, data);
78 }
79
80 private static Object invokeResolvedAccessor(Object target, String methodName) throws Exception {
81 Method method = target.getClass().getDeclaredMethod(methodName);
82 method.setAccessible(true);
83 return method.invoke(target);
84 }
85 }