Skip to content

Commit

Permalink
test(codegen): add unit tests for recent changes to integrations (#2534)
Browse files Browse the repository at this point in the history
  • Loading branch information
gosar authored Jul 2, 2021
1 parent 8ee8c95 commit 275876a
Show file tree
Hide file tree
Showing 8 changed files with 565 additions and 24 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,131 @@
package software.amazon.smithy.aws.typescript.codegen;

import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.containsString;
import static org.hamcrest.Matchers.not;

import org.junit.jupiter.api.Test;
import software.amazon.smithy.build.MockManifest;
import software.amazon.smithy.build.PluginContext;
import software.amazon.smithy.model.Model;
import software.amazon.smithy.model.node.Node;
import software.amazon.smithy.typescript.codegen.TypeScriptCodegenPlugin;

public class AddAwsAuthPluginTest {
@Test
public void awsClient() {
Model model = Model.assembler()
.addImport(getClass().getResource("NotSame.smithy"))
.discoverModels()
.assemble()
.unwrap();
MockManifest manifest = new MockManifest();
PluginContext context = PluginContext.builder()
.pluginClassLoader(getClass().getClassLoader())
.model(model)
.fileManifest(manifest)
.settings(Node.objectNodeBuilder()
.withMember("service", Node.from("smithy.example#OriginalName"))
.withMember("package", Node.from("example"))
.withMember("packageVersion", Node.from("1.0.0"))
.build())
.build();
new TypeScriptCodegenPlugin().execute(context);

// Check dependencies
assertThat(manifest.getFileString("package.json").get(),
containsString(AwsDependency.CREDENTIAL_PROVIDER_NODE.packageName));

// Check config interface fields
assertThat(manifest.getFileString("NotSameClient.ts").get(), containsString("credentialDefaultProvider?"));
assertThat(manifest.getFileString("NotSameClient.ts").get(), not(containsString("signingName")));

// Check config files
assertThat(manifest.getFileString("runtimeConfig.ts").get(),
containsString("credentialDefaultProvider: decorateDefaultCredentialProvider"));
assertThat(manifest.getFileString("runtimeConfig.browser.ts").get(), containsString("Credential is missing"));
assertThat(manifest.getFileString("runtimeConfig.shared.ts").get(), not(containsString("signingName:")));

// Check the config resolution and middleware plugin
assertThat(manifest.getFileString("NotSameClient.ts").get(), containsString("resolveAwsAuthConfig"));
assertThat(manifest.getFileString("NotSameClient.ts").get(), containsString("getAwsAuthPlugin"));
}

@Test
public void sigV4GenericClient() {
Model model = Model.assembler()
.addImport(getClass().getResource("SsdkExampleSigV4.smithy"))
.discoverModels()
.assemble()
.unwrap();
MockManifest manifest = new MockManifest();
PluginContext context = PluginContext.builder()
.pluginClassLoader(getClass().getClassLoader())
.model(model)
.fileManifest(manifest)
.settings(Node.objectNodeBuilder()
.withMember("service", Node.from("smithy.example#SsdkExampleSigV4"))
.withMember("package", Node.from("example"))
.withMember("packageVersion", Node.from("1.0.0"))
.build())
.build();
new TypeScriptCodegenPlugin().execute(context);

// Check dependencies
assertThat(manifest.getFileString("package.json").get(),
containsString(AwsDependency.CREDENTIAL_PROVIDER_NODE.packageName));

// Check config interface fields
assertThat(manifest.getFileString("SsdkExampleSigV4Client.ts").get(), containsString("credentialDefaultProvider?"));
assertThat(manifest.getFileString("SsdkExampleSigV4Client.ts").get(), containsString("signingName?"));

// Check config files
assertThat(manifest.getFileString("runtimeConfig.ts").get(),
containsString("credentialDefaultProvider: decorateDefaultCredentialProvider"));
assertThat(manifest.getFileString("runtimeConfig.browser.ts").get(), containsString("Credential is missing"));
assertThat(manifest.getFileString("runtimeConfig.shared.ts").get(), containsString("signingName:"));

// Check the config resolution and middleware plugin
assertThat(manifest.getFileString("SsdkExampleSigV4Client.ts").get(), containsString("resolveSigV4AuthConfig"));
assertThat(manifest.getFileString("SsdkExampleSigV4Client.ts").get(), containsString("getSigV4AuthPlugin"));
}

@Test
public void notSigV4GenericClient() {
Model model = Model.assembler()
.addImport(getClass().getResource("SsdkExample.smithy"))
.discoverModels()
.assemble()
.unwrap();
MockManifest manifest = new MockManifest();
PluginContext context = PluginContext.builder()
.pluginClassLoader(getClass().getClassLoader())
.model(model)
.fileManifest(manifest)
.settings(Node.objectNodeBuilder()
.withMember("service", Node.from("smithy.example#SsdkExample"))
.withMember("package", Node.from("example"))
.withMember("packageVersion", Node.from("1.0.0"))
.build())
.build();
new TypeScriptCodegenPlugin().execute(context);

// Check dependencies
assertThat(manifest.getFileString("package.json").get(),
not(containsString(AwsDependency.CREDENTIAL_PROVIDER_NODE.packageName)));

// Check config interface fields
assertThat(manifest.getFileString("SsdkExampleClient.ts").get(), not(containsString("credentialDefaultProvider?")));
assertThat(manifest.getFileString("SsdkExampleClient.ts").get(), not(containsString("signingName?")));

// Check config files
assertThat(manifest.getFileString("runtimeConfig.ts").get(),
not(containsString("credentialDefaultProvider: decorateDefaultCredentialProvider")));
assertThat(manifest.getFileString("runtimeConfig.browser.ts").get(), not(containsString("Credential is missing")));
assertThat(manifest.getFileString("runtimeConfig.shared.ts").get(), not(containsString("signingName:")));

// Check the config resolution and middleware plugin
assertThat(manifest.getFileString("SsdkExampleClient.ts").get(), not(containsString("resolveSigV4AuthConfig")));
assertThat(manifest.getFileString("SsdkExampleClient.ts").get(), not(containsString("resolveAwsV4AuthConfig")));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,19 @@

import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.containsString;
import static org.hamcrest.Matchers.not;

import org.junit.jupiter.api.Test;
import software.amazon.smithy.build.MockManifest;
import software.amazon.smithy.build.PluginContext;
import software.amazon.smithy.model.Model;
import software.amazon.smithy.model.node.Node;
import software.amazon.smithy.typescript.codegen.TypeScriptCodegenPlugin;
import software.amazon.smithy.typescript.codegen.TypeScriptDependency;

public class AddAwsRuntimeConfigTest {
@Test
public void addsAwsRuntimeConfigSettings() {
public void awsClient() {
Model model = Model.assembler()
.addImport(getClass().getResource("NotSame.smithy"))
.discoverModels()
Expand All @@ -31,15 +33,127 @@ public void addsAwsRuntimeConfigSettings() {
.build();
new TypeScriptCodegenPlugin().execute(context);

// Check that one of the many dependencies was added.
// Check dependencies
assertThat(manifest.getFileString("package.json").get(),
containsString(AwsDependency.CREDENTIAL_PROVIDER_NODE.packageName));
containsString(AwsDependency.NODE_CONFIG_PROVIDER.packageName));
assertThat(manifest.getFileString("package.json").get(),
containsString(TypeScriptDependency.CONFIG_RESOLVER.packageName));
assertThat(manifest.getFileString("package.json").get(),
containsString(TypeScriptDependency.MIDDLEWARE_RETRY.packageName));

// Check config interface fields
assertThat(manifest.getFileString("NotSameClient.ts").get(), containsString("serviceId?:"));
assertThat(manifest.getFileString("NotSameClient.ts").get(), containsString("region?:"));
assertThat(manifest.getFileString("NotSameClient.ts").get(), containsString("maxAttempts?:"));
assertThat(manifest.getFileString("NotSameClient.ts").get(), containsString("retryModeProvider?:"));
assertThat(manifest.getFileString("NotSameClient.ts").get(), containsString("logger?:"));

// Check config files
assertThat(manifest.getFileString("runtimeConfig.shared.ts").get(), containsString("serviceId: \"Not Same\""));
assertThat(manifest.getFileString("runtimeConfig.shared.ts").get(), containsString("logger:"));

assertThat(manifest.getFileString("runtimeConfig.browser.ts").get(), containsString("region: invalidProvider"));
assertThat(manifest.getFileString("runtimeConfig.browser.ts").get(), containsString("maxAttempts:"));
assertThat(manifest.getFileString("runtimeConfig.browser.ts").get(), containsString("retryModeProvider:"));

assertThat(manifest.getFileString("runtimeConfig.ts").get(), containsString("region: loadNodeConfig"));
assertThat(manifest.getFileString("runtimeConfig.ts").get(), containsString("maxAttempts:"));
assertThat(manifest.getFileString("runtimeConfig.ts").get(), containsString("retryModeProvider:"));
}

@Test
public void sigV4GenericClient() {
Model model = Model.assembler()
.addImport(getClass().getResource("SsdkExampleSigV4.smithy"))
.discoverModels()
.assemble()
.unwrap();
MockManifest manifest = new MockManifest();
PluginContext context = PluginContext.builder()
.pluginClassLoader(getClass().getClassLoader())
.model(model)
.fileManifest(manifest)
.settings(Node.objectNodeBuilder()
.withMember("service", Node.from("smithy.example#SsdkExampleSigV4"))
.withMember("package", Node.from("example"))
.withMember("packageVersion", Node.from("1.0.0"))
.build())
.build();
new TypeScriptCodegenPlugin().execute(context);

// Check dependencies
assertThat(manifest.getFileString("package.json").get(),
containsString(AwsDependency.NODE_CONFIG_PROVIDER.packageName));
assertThat(manifest.getFileString("package.json").get(),
containsString(TypeScriptDependency.CONFIG_RESOLVER.packageName));
assertThat(manifest.getFileString("package.json").get(),
containsString(TypeScriptDependency.MIDDLEWARE_RETRY.packageName));

// Check config interface fields
assertThat(manifest.getFileString("SsdkExampleSigV4Client.ts").get(), not(containsString("serviceId?:")));
assertThat(manifest.getFileString("SsdkExampleSigV4Client.ts").get(), containsString("region?:"));
assertThat(manifest.getFileString("SsdkExampleSigV4Client.ts").get(), containsString("maxAttempts?:"));
assertThat(manifest.getFileString("SsdkExampleSigV4Client.ts").get(), containsString("retryModeProvider?:"));
assertThat(manifest.getFileString("SsdkExampleSigV4Client.ts").get(), containsString("logger?:"));

// Check config files
assertThat(manifest.getFileString("runtimeConfig.shared.ts").get(), not(containsString("serviceId:")));
assertThat(manifest.getFileString("runtimeConfig.shared.ts").get(), containsString("logger:"));

assertThat(manifest.getFileString("runtimeConfig.browser.ts").get(), containsString("region: invalidProvider"));
assertThat(manifest.getFileString("runtimeConfig.browser.ts").get(), containsString("maxAttempts:"));
assertThat(manifest.getFileString("runtimeConfig.browser.ts").get(), containsString("retryModeProvider:"));

assertThat(manifest.getFileString("runtimeConfig.ts").get(), containsString("region: loadNodeConfig"));
assertThat(manifest.getFileString("runtimeConfig.ts").get(), containsString("maxAttempts:"));
assertThat(manifest.getFileString("runtimeConfig.ts").get(), containsString("retryModeProvider:"));
}

@Test
public void notSigV4GenericClient() {
Model model = Model.assembler()
.addImport(getClass().getResource("SsdkExample.smithy"))
.discoverModels()
.assemble()
.unwrap();
MockManifest manifest = new MockManifest();
PluginContext context = PluginContext.builder()
.pluginClassLoader(getClass().getClassLoader())
.model(model)
.fileManifest(manifest)
.settings(Node.objectNodeBuilder()
.withMember("service", Node.from("smithy.example#SsdkExample"))
.withMember("package", Node.from("example"))
.withMember("packageVersion", Node.from("1.0.0"))
.build())
.build();
new TypeScriptCodegenPlugin().execute(context);

// Check dependencies
assertThat(manifest.getFileString("package.json").get(),
containsString(AwsDependency.NODE_CONFIG_PROVIDER.packageName));
assertThat(manifest.getFileString("package.json").get(),
containsString(TypeScriptDependency.CONFIG_RESOLVER.packageName));
assertThat(manifest.getFileString("package.json").get(),
containsString(TypeScriptDependency.MIDDLEWARE_RETRY.packageName));

// Check config interface fields
assertThat(manifest.getFileString("SsdkExampleClient.ts").get(), not(containsString("serviceId?:")));
assertThat(manifest.getFileString("SsdkExampleClient.ts").get(), not(containsString("region?:")));
assertThat(manifest.getFileString("SsdkExampleClient.ts").get(), containsString("maxAttempts?:"));
assertThat(manifest.getFileString("SsdkExampleClient.ts").get(), containsString("retryModeProvider?:"));
assertThat(manifest.getFileString("SsdkExampleClient.ts").get(), containsString("logger?:"));

// Check config files
assertThat(manifest.getFileString("runtimeConfig.shared.ts").get(), not(containsString("serviceId:")));
assertThat(manifest.getFileString("runtimeConfig.shared.ts").get(), containsString("logger:"));

// Check that both the config files were updated.
assertThat(manifest.getFileString("runtimeConfig.ts").get(), containsString("credentialDefaultProvider"));
assertThat(manifest.getFileString("runtimeConfig.browser.ts").get(), containsString("invalidProvider"));
assertThat(manifest.getFileString("runtimeConfig.browser.ts").get(), not(containsString("region:")));
assertThat(manifest.getFileString("runtimeConfig.browser.ts").get(), containsString("maxAttempts:"));
assertThat(manifest.getFileString("runtimeConfig.browser.ts").get(), containsString("retryModeProvider:"));

// Check that the dependency interface was updated.
assertThat(manifest.getFileString("NotSameClient.ts").get(), containsString("credentialDefaultProvider?"));
assertThat(manifest.getFileString("runtimeConfig.ts").get(), not(containsString("region:")));
assertThat(manifest.getFileString("runtimeConfig.ts").get(), containsString("maxAttempts:"));
assertThat(manifest.getFileString("runtimeConfig.ts").get(), containsString("retryModeProvider:"));
}
}
Loading

0 comments on commit 275876a

Please sign in to comment.