Ask user to select PR templates when forking a repository (#143733)

* Add getPullRequestTemplates method to discover templates

Signed-off-by: Babak K. Shandiz <babak.k.shandiz@gmail.com>

* Add method to quick pick for PR templates

Signed-off-by: Babak K. Shandiz <babak.k.shandiz@gmail.com>

* Handle possible PR templates

Signed-off-by: Babak K. Shandiz <babak.k.shandiz@gmail.com>

* Remove unnecessary return value assignment

Co-authored-by: João Moreno <mail@joaomoreno.com>

* Change comparison operands' order

Co-authored-by: João Moreno <mail@joaomoreno.com>

* Remove sorting template URIs in pickPullRequestTemplate

Signed-off-by: Babak K. Shandiz <babak.k.shandiz@gmail.com>

* Sort template URIs before showing quick-pick list

Signed-off-by: Babak K. Shandiz <babak.k.shandiz@gmail.com>

* Rename getPullRequestTemplates method to findPullRequestTemplates

Signed-off-by: Babak K. Shandiz <babak.k.shandiz@gmail.com>

* Find Github PR templates in-parallel using readdir/stat

Signed-off-by: Babak K. Shandiz <babak.k.shandiz@gmail.com>

* Export method for visibitliy in tests

Signed-off-by: Babak K. Shandiz <babak.k.shandiz@gmail.com>

* Add tests for Github PR template detection

Signed-off-by: Babak K. Shandiz <babak.k.shandiz@gmail.com>

* Add launcher configration to run Github tests

Signed-off-by: Babak K. Shandiz <babak.k.shandiz@gmail.com>

* 💄

* Replace stat with readDirectory for OS native case sensitivity

Signed-off-by: Babak K. Shandiz <babak.k.shandiz@gmail.com>

* Delete some files to avoid duplicate names on case insensitive envs

Signed-off-by: Babak K. Shandiz <babak.k.shandiz@gmail.com>

* Exclude deleted files from test case expected result

Signed-off-by: Babak K. Shandiz <babak.k.shandiz@gmail.com>

Co-authored-by: João Moreno <mail@joaomoreno.com>
Co-authored-by: João Moreno <joao.moreno@microsoft.com>
This commit is contained in:
Babak K. Shandiz
2022-04-01 14:07:33 +00:00
committed by GitHub
parent 62ace5901d
commit 7fc55261aa
18 changed files with 191 additions and 1 deletions

View File

@@ -0,0 +1,65 @@
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import 'mocha';
import * as assert from 'assert';
import { workspace, extensions, Uri, commands } from 'vscode';
import { findPullRequestTemplates, pickPullRequestTemplate } from '../pushErrorHandler';
suite('github smoke test', function () {
const cwd = workspace.workspaceFolders![0].uri;
suiteSetup(async function () {
const ext = extensions.getExtension('vscode.github');
await ext?.activate();
});
test('should find all templates', async function () {
const expectedValuesSorted = [
'/PULL_REQUEST_TEMPLATE/a.md',
'/PULL_REQUEST_TEMPLATE/b.md',
'/docs/PULL_REQUEST_TEMPLATE.md',
'/docs/PULL_REQUEST_TEMPLATE/a.md',
'/docs/PULL_REQUEST_TEMPLATE/b.md',
'/.github/PULL_REQUEST_TEMPLATE.md',
'/.github/PULL_REQUEST_TEMPLATE/a.md',
'/.github/PULL_REQUEST_TEMPLATE/b.md',
'/PULL_REQUEST_TEMPLATE.md'
];
expectedValuesSorted.sort();
const uris = await findPullRequestTemplates(cwd);
const urisSorted = uris.map(x => x.path.slice(cwd.path.length));
urisSorted.sort();
assert.deepStrictEqual(urisSorted, expectedValuesSorted);
});
test('selecting non-default quick-pick item should correspond to a template', async () => {
const template0 = Uri.file("some-imaginary-template-0");
const template1 = Uri.file("some-imaginary-template-1");
const templates = [template0, template1];
const pick = pickPullRequestTemplate(templates);
await commands.executeCommand('workbench.action.quickOpenSelectNext');
await commands.executeCommand('workbench.action.quickOpenSelectNext');
await commands.executeCommand('workbench.action.acceptSelectedQuickOpenItem');
assert.ok(await pick === template0);
});
test('selecting first quick-pick item should return undefined', async () => {
const templates = [Uri.file("some-imaginary-file")];
const pick = pickPullRequestTemplate(templates);
await commands.executeCommand('workbench.action.quickOpenSelectNext');
await commands.executeCommand('workbench.action.acceptSelectedQuickOpenItem');
assert.ok(await pick === undefined);
});
});

View File

@@ -0,0 +1,30 @@
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
const path = require('path');
const testRunner = require('../../../../test/integration/electron/testrunner');
const suite = 'Github Tests';
const options: any = {
ui: 'tdd',
color: true,
timeout: 60000
};
if (process.env.BUILD_ARTIFACTSTAGINGDIRECTORY) {
options.reporter = 'mocha-multi-reporters';
options.reporterOptions = {
reporterEnabled: 'spec, mocha-junit-reporter',
mochaJunitReporterReporterOptions: {
testsuitesTitle: `${suite} ${process.platform}`,
mochaFile: path.join(process.env.BUILD_ARTIFACTSTAGINGDIRECTORY, `test-results/${process.platform}-${process.arch}-${suite.toLowerCase().replace(/[^\w]/g, '-')}-results.xml`)
}
};
}
testRunner.configure(options);
export = testRunner;