Added examples for github:environment:create action and improve its test cases

Signed-off-by: parmar-abhinav <abhinav.parmar@infosys.com>
This commit is contained in:
parmar-abhinav
2024-07-26 13:38:08 +05:30
parent bef0282748
commit d21d3079fc
3 changed files with 729 additions and 0 deletions
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-scaffolder-backend-module-github': patch
---
Added examples for github:environment:create action and improve its test cases
@@ -96,4 +96,210 @@ export const examples: TemplateExample[] = [
],
}),
},
{
description: 'Create a GitHub Environment with Custom Tag Policies',
example: yaml.stringify({
steps: [
{
action: 'github:environment:create',
name: 'Create Environment',
input: {
repoUrl: 'github.com?repo=repository&owner=owner',
name: 'envname',
customTagPolicyNames: ['release/*/*', 'v*.*.*'],
},
},
],
}),
},
{
description:
'Create a GitHub Environment with Both Branch and Tag Policies',
example: yaml.stringify({
steps: [
{
action: 'github:environment:create',
name: 'Create Environment',
input: {
repoUrl: 'github.com?repo=repository&owner=owner',
name: 'envname',
deploymentBranchPolicy: {
protected_branches: false,
custom_branch_policies: true,
},
customBranchPolicyNames: ['feature/*', 'hotfix/*'],
customTagPolicyNames: ['release/*', 'v*'],
},
},
],
}),
},
{
description: 'Create a GitHub Environment with Full Configuration',
example: yaml.stringify({
steps: [
{
action: 'github:environment:create',
name: 'Create Environment',
input: {
repoUrl: 'github.com?repo=repository&owner=owner',
name: 'envname',
deploymentBranchPolicy: {
protected_branches: false,
custom_branch_policies: true,
},
customBranchPolicyNames: ['dev/*', 'test/*'],
customTagPolicyNames: ['v1.*', 'v2.*'],
environmentVariables: {
API_KEY: '123456789',
NODE_ENV: 'production',
},
secrets: {
DATABASE_URL: 'supersecretdatabaseurl',
API_SECRET: 'supersecretapisecret',
},
token: 'ghp_abcdef1234567890',
},
},
],
}),
},
{
description: 'Create a GitHub Environment with Only Token Authentication',
example: yaml.stringify({
steps: [
{
action: 'github:environment:create',
name: 'Create Environment',
input: {
repoUrl: 'github.com?repo=repository&owner=owner',
name: 'envname',
token: 'ghp_abcdef1234567890',
},
},
],
}),
},
{
description: 'Create a GitHub Environment with No Deployment Policies',
example: yaml.stringify({
steps: [
{
action: 'github:environment:create',
name: 'Create Environment',
input: {
repoUrl: 'github.com?repo=repository&owner=owner',
name: 'envname',
deploymentBranchPolicy: null,
},
},
],
}),
},
{
description:
'Create a GitHub Environment with Custom Branch and Tag Policies',
example: yaml.stringify({
steps: [
{
action: 'github:environment:create',
name: 'Create Environment',
input: {
repoUrl: 'github.com?repo=repository&owner=owner',
name: 'envname',
deploymentBranchPolicy: {
protected_branches: false,
custom_branch_policies: true,
},
customBranchPolicyNames: ['release/*', 'hotfix/*'],
customTagPolicyNames: ['v*', 'release-*'],
},
},
],
}),
},
{
description: 'Create a GitHub Environment with Environment Variables Only',
example: yaml.stringify({
steps: [
{
action: 'github:environment:create',
name: 'Create Environment',
input: {
repoUrl: 'github.com?repo=repository&owner=owner',
name: 'envname',
environmentVariables: {
VAR1: 'value1',
VAR2: 'value2',
},
},
},
],
}),
},
{
description: 'Create a GitHub Environment with Deployment Secrets Only',
example: yaml.stringify({
steps: [
{
action: 'github:environment:create',
name: 'Create Environment',
input: {
repoUrl: 'github.com?repo=repository&owner=owner',
name: 'envname',
secrets: {
SECRET1: 'secretvalue1',
SECRET2: 'secretvalue2',
},
},
},
],
}),
},
{
description:
'Create a GitHub Environment with Deployment Branch Policy and Token',
example: yaml.stringify({
steps: [
{
action: 'github:environment:create',
name: 'Create Environment',
input: {
repoUrl: 'github.com?repo=repository&owner=owner',
name: 'envname',
deploymentBranchPolicy: {
protected_branches: true,
custom_branch_policies: false,
},
token: 'ghp_abcdef1234567890',
},
},
],
}),
},
{
description:
'Create a GitHub Environment with Environment Variables, Secrets, and Token',
example: yaml.stringify({
steps: [
{
action: 'github:environment:create',
name: 'Create Environment',
input: {
repoUrl: 'github.com?repo=repository&owner=owner',
name: 'envname',
environmentVariables: {
VAR1: 'value1',
VAR2: 'value2',
},
secrets: {
SECRET1: 'secretvalue1',
SECRET2: 'secretvalue2',
},
token: 'ghp_abcdef1234567890',
},
},
],
}),
},
];
@@ -264,4 +264,522 @@ describe('github:environment:create examples', () => {
encrypted_value: expect.any(String),
});
});
it(`should ${examples[4].description}`, async () => {
const input = yaml.parse(examples[4].example).steps[0].input;
await action.handler({
...mockContext,
input,
});
expect(
mockOctokit.rest.repos.createOrUpdateEnvironment,
).toHaveBeenCalledWith({
owner: 'owner',
repo: 'repository',
environment_name: 'envname',
deployment_branch_policy: null,
});
expect(
mockOctokit.rest.repos.createDeploymentBranchPolicy,
).toHaveBeenCalledTimes(2);
expect(
mockOctokit.rest.repos.createDeploymentBranchPolicy,
).toHaveBeenCalledWith({
environment_name: 'envname',
name: 'release/*/*',
owner: 'owner',
repo: 'repository',
type: 'tag',
});
expect(
mockOctokit.rest.repos.createDeploymentBranchPolicy,
).toHaveBeenCalledWith({
environment_name: 'envname',
name: 'v*.*.*',
owner: 'owner',
repo: 'repository',
type: 'tag',
});
expect(
mockOctokit.rest.actions.createEnvironmentVariable,
).not.toHaveBeenCalled();
expect(
mockOctokit.rest.actions.createOrUpdateEnvironmentSecret,
).not.toHaveBeenCalled();
});
it(`should ${examples[5].description}`, async () => {
const input = yaml.parse(examples[5].example).steps[0].input;
await action.handler({
...mockContext,
input,
});
expect(
mockOctokit.rest.repos.createOrUpdateEnvironment,
).toHaveBeenCalledWith({
owner: 'owner',
repo: 'repository',
environment_name: 'envname',
deployment_branch_policy: {
custom_branch_policies: true,
protected_branches: false,
},
});
expect(
mockOctokit.rest.repos.createDeploymentBranchPolicy,
).toHaveBeenCalledTimes(4);
expect(
mockOctokit.rest.repos.createDeploymentBranchPolicy,
).toHaveBeenCalledWith({
environment_name: 'envname',
name: 'release/*',
owner: 'owner',
repo: 'repository',
type: 'tag',
});
expect(
mockOctokit.rest.repos.createDeploymentBranchPolicy,
).toHaveBeenCalledWith({
environment_name: 'envname',
name: 'feature/*',
owner: 'owner',
repo: 'repository',
type: 'branch',
});
expect(
mockOctokit.rest.actions.createEnvironmentVariable,
).not.toHaveBeenCalled();
expect(
mockOctokit.rest.actions.createOrUpdateEnvironmentSecret,
).not.toHaveBeenCalled();
});
it(`should ${examples[6].description}`, async () => {
const input = yaml.parse(examples[6].example).steps[0].input;
await action.handler({
...mockContext,
input,
});
expect(
mockOctokit.rest.repos.createOrUpdateEnvironment,
).toHaveBeenCalledWith({
owner: 'owner',
repo: 'repository',
environment_name: 'envname',
deployment_branch_policy: {
custom_branch_policies: true,
protected_branches: false,
},
});
expect(
mockOctokit.rest.repos.createDeploymentBranchPolicy,
).toHaveBeenCalledTimes(4);
expect(
mockOctokit.rest.repos.createDeploymentBranchPolicy,
).toHaveBeenCalledWith({
environment_name: 'envname',
name: 'dev/*',
owner: 'owner',
repo: 'repository',
type: 'branch',
});
expect(
mockOctokit.rest.repos.createDeploymentBranchPolicy,
).toHaveBeenCalledWith({
environment_name: 'envname',
name: 'test/*',
owner: 'owner',
repo: 'repository',
type: 'branch',
});
expect(
mockOctokit.rest.actions.createEnvironmentVariable,
).toHaveBeenCalledTimes(2);
expect(
mockOctokit.rest.actions.createEnvironmentVariable,
).toHaveBeenCalledWith({
environment_name: 'envname',
name: 'API_KEY',
owner: 'owner',
repo: 'repository',
repository_id: 'repoid',
value: '123456789',
});
expect(
mockOctokit.rest.actions.createEnvironmentVariable,
).toHaveBeenCalledWith({
environment_name: 'envname',
name: 'NODE_ENV',
owner: 'owner',
repo: 'repository',
repository_id: 'repoid',
value: 'production',
});
expect(
mockOctokit.rest.actions.createOrUpdateEnvironmentSecret,
).toHaveBeenCalledTimes(2);
expect(
mockOctokit.rest.actions.createOrUpdateEnvironmentSecret,
).toHaveBeenCalledWith({
encrypted_value: expect.any(String),
environment_name: 'envname',
key_id: 'keyid',
owner: 'owner',
repo: 'repository',
repository_id: 'repoid',
secret_name: 'API_SECRET',
});
expect(
mockOctokit.rest.actions.createOrUpdateEnvironmentSecret,
).toHaveBeenCalledWith({
encrypted_value: expect.any(String),
environment_name: 'envname',
key_id: 'keyid',
owner: 'owner',
repo: 'repository',
repository_id: 'repoid',
secret_name: 'DATABASE_URL',
});
});
it(`should ${examples[7].description}`, async () => {
const input = yaml.parse(examples[7].example).steps[0].input;
await action.handler({
...mockContext,
input,
});
expect(
mockOctokit.rest.repos.createOrUpdateEnvironment,
).toHaveBeenCalledWith({
owner: 'owner',
repo: 'repository',
environment_name: 'envname',
deployment_branch_policy: null,
});
expect(
mockOctokit.rest.repos.createDeploymentBranchPolicy,
).not.toHaveBeenCalled();
expect(
mockOctokit.rest.actions.createEnvironmentVariable,
).not.toHaveBeenCalled();
expect(
mockOctokit.rest.actions.createOrUpdateEnvironmentSecret,
).not.toHaveBeenCalled();
});
it(`should ${examples[8].description}`, async () => {
const input = yaml.parse(examples[8].example).steps[0].input;
await action.handler({
...mockContext,
input,
});
expect(
mockOctokit.rest.repos.createOrUpdateEnvironment,
).toHaveBeenCalledWith({
owner: 'owner',
repo: 'repository',
environment_name: 'envname',
deployment_branch_policy: null,
});
expect(
mockOctokit.rest.repos.createDeploymentBranchPolicy,
).not.toHaveBeenCalled();
expect(
mockOctokit.rest.actions.createEnvironmentVariable,
).not.toHaveBeenCalled();
expect(
mockOctokit.rest.actions.createOrUpdateEnvironmentSecret,
).not.toHaveBeenCalled();
});
it(`should ${examples[9].description}`, async () => {
const input = yaml.parse(examples[9].example).steps[0].input;
await action.handler({
...mockContext,
input,
});
expect(
mockOctokit.rest.repos.createOrUpdateEnvironment,
).toHaveBeenCalledWith({
owner: 'owner',
repo: 'repository',
environment_name: 'envname',
deployment_branch_policy: {
custom_branch_policies: true,
protected_branches: false,
},
});
expect(
mockOctokit.rest.repos.createDeploymentBranchPolicy,
).toHaveBeenCalledTimes(4);
expect(
mockOctokit.rest.repos.createDeploymentBranchPolicy,
).toHaveBeenCalledWith({
environment_name: 'envname',
name: 'release/*',
owner: 'owner',
repo: 'repository',
type: 'branch',
});
expect(
mockOctokit.rest.repos.createDeploymentBranchPolicy,
).toHaveBeenCalledWith({
environment_name: 'envname',
name: 'hotfix/*',
owner: 'owner',
repo: 'repository',
type: 'branch',
});
expect(
mockOctokit.rest.repos.createDeploymentBranchPolicy,
).toHaveBeenCalledWith({
environment_name: 'envname',
name: 'v*',
owner: 'owner',
repo: 'repository',
type: 'tag',
});
expect(
mockOctokit.rest.actions.createEnvironmentVariable,
).not.toHaveBeenCalled();
expect(
mockOctokit.rest.actions.createOrUpdateEnvironmentSecret,
).not.toHaveBeenCalled();
});
it(`should ${examples[10].description}`, async () => {
const input = yaml.parse(examples[10].example).steps[0].input;
await action.handler({
...mockContext,
input,
});
expect(
mockOctokit.rest.repos.createOrUpdateEnvironment,
).toHaveBeenCalledWith({
owner: 'owner',
repo: 'repository',
environment_name: 'envname',
deployment_branch_policy: null,
});
expect(
mockOctokit.rest.repos.createDeploymentBranchPolicy,
).not.toHaveBeenCalled();
expect(
mockOctokit.rest.actions.createEnvironmentVariable,
).toHaveBeenCalledTimes(2);
expect(
mockOctokit.rest.actions.createEnvironmentVariable,
).toHaveBeenCalledWith({
environment_name: 'envname',
name: 'VAR1',
owner: 'owner',
repo: 'repository',
repository_id: 'repoid',
value: 'value1',
});
expect(
mockOctokit.rest.actions.createEnvironmentVariable,
).toHaveBeenCalledWith({
environment_name: 'envname',
name: 'VAR2',
owner: 'owner',
repo: 'repository',
repository_id: 'repoid',
value: 'value2',
});
expect(
mockOctokit.rest.actions.createOrUpdateEnvironmentSecret,
).not.toHaveBeenCalled();
});
it(`should ${examples[11].description}`, async () => {
const input = yaml.parse(examples[11].example).steps[0].input;
await action.handler({
...mockContext,
input,
});
expect(
mockOctokit.rest.repos.createOrUpdateEnvironment,
).toHaveBeenCalledWith({
owner: 'owner',
repo: 'repository',
environment_name: 'envname',
deployment_branch_policy: null,
});
expect(
mockOctokit.rest.repos.createDeploymentBranchPolicy,
).not.toHaveBeenCalled();
expect(
mockOctokit.rest.actions.createEnvironmentVariable,
).not.toHaveBeenCalled();
expect(
mockOctokit.rest.actions.createOrUpdateEnvironmentSecret,
).toHaveBeenCalledTimes(2);
expect(
mockOctokit.rest.actions.createOrUpdateEnvironmentSecret,
).toHaveBeenCalledWith({
encrypted_value: expect.any(String),
environment_name: 'envname',
key_id: 'keyid',
owner: 'owner',
repo: 'repository',
repository_id: 'repoid',
secret_name: 'SECRET1',
});
expect(
mockOctokit.rest.actions.createOrUpdateEnvironmentSecret,
).toHaveBeenCalledWith({
encrypted_value: expect.any(String),
environment_name: 'envname',
key_id: 'keyid',
owner: 'owner',
repo: 'repository',
repository_id: 'repoid',
secret_name: 'SECRET2',
});
});
it(`should ${examples[12].description}`, async () => {
const input = yaml.parse(examples[12].example).steps[0].input;
await action.handler({
...mockContext,
input,
});
expect(
mockOctokit.rest.repos.createOrUpdateEnvironment,
).toHaveBeenCalledWith({
owner: 'owner',
repo: 'repository',
environment_name: 'envname',
deployment_branch_policy: {
custom_branch_policies: false,
protected_branches: true,
},
});
expect(
mockOctokit.rest.repos.createDeploymentBranchPolicy,
).not.toHaveBeenCalled();
expect(
mockOctokit.rest.actions.createEnvironmentVariable,
).not.toHaveBeenCalled();
expect(
mockOctokit.rest.actions.createOrUpdateEnvironmentSecret,
).not.toHaveBeenCalled();
});
it(`should ${examples[13].description}`, async () => {
const input = yaml.parse(examples[13].example).steps[0].input;
await action.handler({
...mockContext,
input,
});
expect(
mockOctokit.rest.repos.createOrUpdateEnvironment,
).toHaveBeenCalledWith({
owner: 'owner',
repo: 'repository',
environment_name: 'envname',
deployment_branch_policy: null,
});
expect(
mockOctokit.rest.repos.createDeploymentBranchPolicy,
).not.toHaveBeenCalled();
expect(
mockOctokit.rest.actions.createEnvironmentVariable,
).toHaveBeenCalledTimes(2);
expect(
mockOctokit.rest.actions.createEnvironmentVariable,
).toHaveBeenCalledWith({
environment_name: 'envname',
name: 'VAR1',
owner: 'owner',
repo: 'repository',
repository_id: 'repoid',
value: 'value1',
});
expect(
mockOctokit.rest.actions.createEnvironmentVariable,
).toHaveBeenCalledWith({
environment_name: 'envname',
name: 'VAR2',
owner: 'owner',
repo: 'repository',
repository_id: 'repoid',
value: 'value2',
});
expect(
mockOctokit.rest.actions.createOrUpdateEnvironmentSecret,
).toHaveBeenCalledTimes(2);
expect(
mockOctokit.rest.actions.createOrUpdateEnvironmentSecret,
).toHaveBeenCalledWith({
encrypted_value: expect.any(String),
environment_name: 'envname',
key_id: 'keyid',
owner: 'owner',
repo: 'repository',
repository_id: 'repoid',
secret_name: 'SECRET1',
});
expect(
mockOctokit.rest.actions.createOrUpdateEnvironmentSecret,
).toHaveBeenCalledWith({
encrypted_value: expect.any(String),
environment_name: 'envname',
key_id: 'keyid',
owner: 'owner',
repo: 'repository',
repository_id: 'repoid',
secret_name: 'SECRET2',
});
});
});