View Javadoc
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  }