Added examples for action github:pages and improved test cases

Signed-off-by: parmar-abhinav <abhinav.parmar@infosys.com>
This commit is contained in:
parmar-abhinav
2024-07-27 15:27:20 +05:30
parent 2bae52597d
commit cd203f1250
3 changed files with 570 additions and 4 deletions
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-scaffolder-backend-module-github': patch
---
Added examples for action github:pages and improved its test cases
@@ -52,9 +52,14 @@ describe('github:pages', () => {
let githubCredentialsProvider: GithubCredentialsProvider;
let action: TemplateAction<any>;
const input = yaml.parse(examples[0].example).steps[0].input;
const mockContext = createMockActionContext({
input,
input: {
repoUrl: 'github.com?repo=repo&owner=owner',
buildType: 'workflow',
sourceBranch: 'main',
sourcePath: '/',
token: 'gph_YourGitHubToken',
},
});
beforeEach(() => {
@@ -68,8 +73,20 @@ describe('github:pages', () => {
afterEach(jest.resetAllMocks);
it('should work with example input', async () => {
await action.handler(mockContext);
it(`Should ${examples[0].description}`, async () => {
let input;
try {
input = yaml.parse(examples[0].example).steps[0].input;
} catch (error) {
console.error('Failed to parse YAML:', error);
}
await action.handler({
...mockContext,
input: {
...mockContext.input,
...input,
},
});
expect(mockOctokit.request).toHaveBeenCalledWith(
'POST /repos/{owner}/{repo}/pages',
@@ -87,4 +104,343 @@ describe('github:pages', () => {
},
);
});
it(`Should ${examples[1].description}`, async () => {
let input;
try {
input = yaml.parse(examples[1].example).steps[0].input;
} catch (error) {
console.error('Failed to parse YAML:', error);
}
await action.handler({
...mockContext,
input: {
...mockContext.input,
...input,
},
});
expect(mockOctokit.request).toHaveBeenCalledWith(
'POST /repos/{owner}/{repo}/pages',
{
owner: 'customOwner',
repo: 'customPathRepo',
build_type: 'workflow',
source: {
branch: 'main',
path: '/docs',
},
headers: {
'X-GitHub-Api-Version': '2022-11-28',
},
},
);
});
it(`Should ${examples[2].description}`, async () => {
let input;
try {
input = yaml.parse(examples[2].example).steps[0].input;
} catch (error) {
console.error('Failed to parse YAML:', error);
}
await action.handler({
...mockContext,
input: {
...mockContext.input,
...input,
},
});
expect(mockOctokit.request).toHaveBeenCalledWith(
'POST /repos/{owner}/{repo}/pages',
{
owner: 'legacyOwner',
repo: 'legacyRepo',
build_type: 'legacy',
source: {
branch: 'main',
path: '/',
},
headers: {
'X-GitHub-Api-Version': '2022-11-28',
},
},
);
});
it(`Should ${examples[3].description}`, async () => {
let input;
try {
input = yaml.parse(examples[3].example).steps[0].input;
} catch (error) {
console.error('Failed to parse YAML:', error);
}
await action.handler({
...mockContext,
input: {
...mockContext.input,
...input,
},
});
expect(mockOctokit.request).toHaveBeenCalledWith(
'POST /repos/{owner}/{repo}/pages',
{
owner: 'branchOwner',
repo: 'customBranchRepo',
build_type: 'workflow',
source: {
branch: 'develop',
path: '/',
},
headers: {
'X-GitHub-Api-Version': '2022-11-28',
},
},
);
});
it(`Should ${examples[4].description}`, async () => {
let input;
try {
input = yaml.parse(examples[4].example).steps[0].input;
} catch (error) {
console.error('Failed to parse YAML:', error);
}
await action.handler({
...mockContext,
input: {
...mockContext.input,
...input,
},
});
expect(mockOctokit.request).toHaveBeenCalledWith(
'POST /repos/{owner}/{repo}/pages',
{
owner: 'customOwner',
repo: 'fullCustomRepo',
build_type: 'workflow',
source: {
branch: 'main',
path: '/docs',
},
headers: {
'X-GitHub-Api-Version': '2022-11-28',
},
},
);
});
it(`Should ${examples[5].description}`, async () => {
let input;
try {
input = yaml.parse(examples[5].example).steps[0].input;
} catch (error) {
console.error('Failed to parse YAML:', error);
}
await action.handler({
...mockContext,
input: {
...mockContext.input,
...input,
},
});
expect(mockOctokit.request).toHaveBeenCalledWith(
'POST /repos/{owner}/{repo}/pages',
{
owner: 'minimalOwner',
repo: 'minimalRepo',
build_type: 'workflow',
source: {
branch: 'main',
path: '/',
},
headers: {
'X-GitHub-Api-Version': '2022-11-28',
},
},
);
});
it(`Should ${examples[6].description}`, async () => {
let input;
try {
input = yaml.parse(examples[6].example).steps[0].input;
} catch (error) {
console.error('Failed to parse YAML:', error);
}
await action.handler({
...mockContext,
input: {
...mockContext.input,
...input,
},
});
expect(mockOctokit.request).toHaveBeenCalledWith(
'POST /repos/{owner}/{repo}/pages',
{
owner: 'customOwner',
repo: 'customBuildPathRepo',
build_type: 'legacy',
source: {
branch: 'main',
path: '/custom-path',
},
headers: {
'X-GitHub-Api-Version': '2022-11-28',
},
},
);
});
it(`Should ${examples[7].description}`, async () => {
let input;
try {
input = yaml.parse(examples[7].example).steps[0].input;
} catch (error) {
console.error('Failed to parse YAML:', error);
}
await action.handler({
...mockContext,
input: {
...mockContext.input,
...input,
},
});
expect(mockOctokit.request).toHaveBeenCalledWith(
'POST /repos/{owner}/{repo}/pages',
{
owner: 'branchPathOwner',
repo: 'customBranchPathRepo',
build_type: 'workflow',
source: {
branch: 'feature-branch',
path: '/project-docs',
},
headers: {
'X-GitHub-Api-Version': '2022-11-28',
},
},
);
});
it(`Should ${examples[8].description}`, async () => {
let input;
try {
input = yaml.parse(examples[8].example).steps[0].input;
} catch (error) {
console.error('Failed to parse YAML:', error);
}
await action.handler({
...mockContext,
input: {
...mockContext.input,
...input,
},
});
expect(mockOctokit.request).toHaveBeenCalledWith(
'POST /repos/{owner}/{repo}/pages',
{
owner: 'customOwnerName',
repo: 'customRepoName',
build_type: 'workflow',
source: {
branch: 'main',
path: '/',
},
headers: {
'X-GitHub-Api-Version': '2022-11-28',
},
},
);
});
it(`Should ${examples[9].description}`, async () => {
let input;
try {
input = yaml.parse(examples[9].example).steps[0].input;
} catch (error) {
console.error('Failed to parse YAML:', error);
}
await action.handler({
...mockContext,
input: {
...mockContext.input,
...input,
},
});
expect(mockOctokit.request).toHaveBeenCalledWith(
'POST /repos/{owner}/{repo}/pages',
{
owner: 'tokenOwner',
repo: 'customTokenRepo',
build_type: 'workflow',
source: {
branch: 'main',
path: '/site',
},
headers: {
'X-GitHub-Api-Version': '2022-11-28',
},
},
);
});
it(`Should ${examples[10].description}`, async () => {
let input;
try {
input = yaml.parse(examples[10].example).steps[0].input;
} catch (error) {
console.error('Failed to parse YAML:', error);
}
await action.handler({
...mockContext,
input: {
...mockContext.input,
...input,
},
});
expect(mockOctokit.request).toHaveBeenCalledWith(
'POST /repos/{owner}/{repo}/pages',
{
owner: 'tokenOwner',
repo: 'specificTokenRepo',
build_type: 'workflow',
source: {
branch: 'main',
path: '/',
},
headers: {
'X-GitHub-Api-Version': '2022-11-28',
},
},
);
});
it(`Should ${examples[11].description}`, async () => {
let input;
try {
input = yaml.parse(examples[11].example).steps[0].input;
} catch (error) {
console.error('Failed to parse YAML:', error);
}
await action.handler({
...mockContext,
input: {
...mockContext.input,
...input,
},
});
expect(mockOctokit.request).toHaveBeenCalledWith(
'POST /repos/{owner}/{repo}/pages',
{
owner: 'docsOwner',
repo: 'docSiteRepo',
build_type: 'workflow',
source: {
branch: 'docs-branch',
path: '/docs-site',
},
headers: {
'X-GitHub-Api-Version': '2022-11-28',
},
},
);
});
});
@@ -37,4 +37,209 @@ export const examples: TemplateExample[] = [
],
}),
},
{
description:
'Enables GitHub Pages for a repository with a custom source path.',
example: yaml.stringify({
steps: [
{
action: 'github:pages',
id: 'github-pages-custom-path',
name: 'Enable GitHub Pages with Custom Source Path',
input: {
repoUrl: 'github.com?repo=customPathRepo&owner=customOwner',
sourcePath: '/docs',
token: 'gph_YourGitHubToken',
},
},
],
}),
},
{
description:
'Enables GitHub Pages for a repository using legacy build type.',
example: yaml.stringify({
steps: [
{
action: 'github:pages',
id: 'github-pages-legacy',
name: 'Enable GitHub Pages with Legacy Build Type',
input: {
repoUrl: 'github.com?repo=legacyRepo&owner=legacyOwner',
buildType: 'legacy',
token: 'gph_YourGitHubToken',
},
},
],
}),
},
{
description:
'Enables GitHub Pages for a repository with a custom source branch.',
example: yaml.stringify({
steps: [
{
action: 'github:pages',
id: 'github-pages-custom-branch',
name: 'Enable GitHub Pages with Custom Source Branch',
input: {
repoUrl: 'github.com?repo=customBranchRepo&owner=branchOwner',
sourceBranch: 'develop',
token: 'gph_YourGitHubToken',
},
},
],
}),
},
{
description:
'Enables GitHub Pages for a repository with full customization.',
example: yaml.stringify({
steps: [
{
action: 'github:pages',
id: 'github-pages-full-custom',
name: 'Enable GitHub Pages with Full Customization',
input: {
repoUrl: 'github.com?repo=fullCustomRepo&owner=customOwner',
buildType: 'workflow',
sourceBranch: 'main',
sourcePath: '/docs',
token: 'gph_YourGitHubToken',
},
},
],
}),
},
{
description:
'Enables GitHub Pages for a repository with minimal configuration.',
example: yaml.stringify({
steps: [
{
action: 'github:pages',
id: 'github-pages-minimal',
name: 'Enable GitHub Pages with Minimal Configuration',
input: {
repoUrl: 'github.com?repo=minimalRepo&owner=minimalOwner',
token: 'gph_YourGitHubToken',
},
},
],
}),
},
{
description:
'Enables GitHub Pages for a repository with custom build type and source path.',
example: yaml.stringify({
steps: [
{
action: 'github:pages',
id: 'github-pages-custom-build-path',
name: 'Enable GitHub Pages with Custom Build Type and Source Path',
input: {
repoUrl: 'github.com?repo=customBuildPathRepo&owner=customOwner',
buildType: 'legacy',
sourcePath: '/custom-path',
token: 'gph_YourGitHubToken',
},
},
],
}),
},
{
description:
'Enables GitHub Pages for a repository with custom source branch and path.',
example: yaml.stringify({
steps: [
{
action: 'github:pages',
id: 'github-pages-custom-branch-path',
name: 'Enable GitHub Pages with Custom Source Branch and Path',
input: {
repoUrl:
'github.com?repo=customBranchPathRepo&owner=branchPathOwner',
sourceBranch: 'feature-branch',
sourcePath: '/project-docs',
token: 'gph_YourGitHubToken',
},
},
],
}),
},
{
description:
'Enables GitHub Pages for a repository with a custom owner and repository name.',
example: yaml.stringify({
steps: [
{
action: 'github:pages',
id: 'github-pages-custom-owner-repo',
name: 'Enable GitHub Pages with Custom Owner and Repository Name',
input: {
repoUrl: 'github.com?repo=customRepoName&owner=customOwnerName',
token: 'gph_YourGitHubToken',
},
},
],
}),
},
{
description:
'Enables GitHub Pages for a repository with full customization and a different token.',
example: yaml.stringify({
steps: [
{
action: 'github:pages',
id: 'github-pages-full-custom-diff-token',
name: 'Enable GitHub Pages with Full Customization and Different Token',
input: {
repoUrl: 'github.com?repo=customTokenRepo&owner=tokenOwner',
buildType: 'workflow',
sourceBranch: 'main',
sourcePath: '/site',
token: 'gph_DifferentGitHubToken',
},
},
],
}),
},
{
description:
'Enables GitHub Pages for a repository with a specific token for authorization.',
example: yaml.stringify({
steps: [
{
action: 'github:pages',
id: 'github-pages-specific-token',
name: 'Enable GitHub Pages with Specific Token',
input: {
repoUrl: 'github.com?repo=specificTokenRepo&owner=tokenOwner',
token: 'gph_SpecificGitHubToken',
},
},
],
}),
},
{
description:
'Enables GitHub Pages for a documentation site with custom configuration.',
example: yaml.stringify({
steps: [
{
action: 'github:pages',
id: 'github-pages-doc-site',
name: 'Enable GitHub Pages for Documentation Site',
input: {
repoUrl: 'github.com?repo=docSiteRepo&owner=docsOwner',
buildType: 'workflow',
sourceBranch: 'docs-branch',
sourcePath: '/docs-site',
token: 'gph_DocsGitHubToken',
},
},
],
}),
},
];