Fix templates not being displayed

Use template.id (which shouldn't change) to detect for equality rather than template.metadata.name (which can and has changed)
This commit is contained in:
Eric Jizba 2017-12-06 10:28:05 -08:00
Родитель 4e81f14557
Коммит 30c351906b
7 изменённых файлов: 73 добавлений и 27 удалений

Просмотреть файл

@ -1,6 +1,11 @@
# Change Log
All notable changes to the "azurefunctions" extension will be documented in this file.
## 0.3.1 - 2017-12-06
### Fixed
- JavaScript 'Verified' templates not displayed
- Java templates not displayed
## 0.3.0 - 2017-12-01
### Added
- Java support

Просмотреть файл

@ -2,7 +2,7 @@
"name": "vscode-azurefunctions",
"displayName": "Azure Functions",
"description": "%extension.description%",
"version": "0.3.0",
"version": "0.3.1",
"publisher": "ms-azuretools",
"icon": "resources/azure-functions.png",
"aiKey": "AIF-d9b70cd4-b9f9-4d70-929b-a071c400b217",

Просмотреть файл

@ -15,7 +15,7 @@ import { localize } from '../localize';
import { ConfigSetting, ValueType } from '../templates/ConfigSetting';
import { EnumValue } from '../templates/EnumValue';
import { Template, TemplateLanguage } from '../templates/Template';
import { TemplateData } from '../templates/TemplateData';
import { convertTemplateIdToJava, TemplateData } from '../templates/TemplateData';
import { cpUtils } from '../utils/cpUtils';
import * as fsUtil from '../utils/fs';
import { getJavaClassName, validateJavaFunctionName, validatePackageName } from '../utils/javaNameUtils';
@ -66,7 +66,7 @@ async function validateIsFunctionApp(telemetryProperties: { [key: string]: strin
async function promptForFunctionName(ui: IUserInterface, functionAppPath: string, template: Template, language: string, packageName: string): Promise<string> {
let defaultFunctionName: string | undefined;
if (language === TemplateLanguage.Java) {
defaultFunctionName = await fsUtil.getUniqueJavaFsPath(functionAppPath, packageName, `${template.name}Java`);
defaultFunctionName = await fsUtil.getUniqueJavaFsPath(functionAppPath, packageName, `${convertTemplateIdToJava(template.id)}Java`);
} else {
defaultFunctionName = await fsUtil.getUniqueFsPath(functionAppPath, template.defaultFunctionName);
}
@ -176,7 +176,7 @@ export async function createFunction(
'-B',
`"-Dfunctions.package=${packageName}"`,
`"-Dfunctions.name=${name}"`,
`"-Dfunctions.template=${template.name}"`,
`"-Dfunctions.template=${convertTemplateIdToJava(template.id)}"`,
...javaFuntionProperties
);
newFilePath = getNewJavaFunctionFilePath(functionAppPath, packageName, name);

Просмотреть файл

@ -46,6 +46,10 @@ export class Template {
this._resources = resources;
}
public get id(): string {
return this._template.id;
}
public get name(): string {
return this._resources.getValue(this._template.metadata.name);
}

Просмотреть файл

@ -27,14 +27,14 @@ export class TemplateData {
private _config: Config | undefined;
private readonly _verifiedTemplates: string[] = [
'BlobTrigger',
'Generic Webhook',
'Github Webhook',
'HttpTrigger',
'HttpTriggerWithParameters',
'ManualTrigger',
'QueueTrigger',
'TimerTrigger'
'BlobTrigger-JavaScript',
'GenericWebHook-JavaScript',
'GitHubWebHook-JavaScript',
'HttpTrigger-JavaScript',
'HttpTriggerWithParameters-JavaScript',
'ManualTrigger-JavaScript',
'QueueTrigger-JavaScript',
'TimerTrigger-JavaScript'
];
private readonly _javaTemplates: string[] = [
@ -73,7 +73,7 @@ export class TemplateData {
// Will refactor the code here when templates HTTP API is ready.
// See issue here: https://github.com/Microsoft/vscode-azurefunctions/issues/84
const javaTemplates: Template[] = this._templates.filter((t: Template) => t.language === TemplateLanguage.JavaScript);
return javaTemplates.filter((t: Template) => this._javaTemplates.find((vt: string) => vt === t.name));
return javaTemplates.filter((t: Template) => this._javaTemplates.find((vt: string) => vt === convertTemplateIdToJava(t.id)));
} else {
const jsTemplates: Template[] = this._templates.filter((t: Template) => t.language === TemplateLanguage.JavaScript);
// tslint:disable-next-line:no-backbone-get-set-outside-model
@ -84,7 +84,7 @@ export class TemplateData {
return jsTemplates.filter((t: Template) => t.isCategory(TemplateCategory.Core));
case 'Verified':
default:
return jsTemplates.filter((t: Template) => this._verifiedTemplates.find((vt: string) => vt === t.name));
return jsTemplates.filter((t: Template) => this._verifiedTemplates.find((vt: string) => vt === t.id));
}
}
@ -138,3 +138,7 @@ export class TemplateData {
return <T>(JSON.parse(await <Thenable<string>>request(options).promise()));
}
}
export function convertTemplateIdToJava(id: string): string {
return id.replace('-JavaScript', '');
}

Просмотреть файл

@ -42,8 +42,8 @@ suiteTeardown(async () => {
});
// tslint:disable-next-line:max-func-body-length
suite('Create Function Tests', () => {
const blobTrigger: string = 'BlobTrigger';
suite('Create Core Function Tests', () => {
const blobTrigger: string = 'Blob trigger';
test(blobTrigger, async () => {
await testCreateFunction(
blobTrigger,
@ -54,7 +54,7 @@ suite('Create Function Tests', () => {
);
});
const cosmosDBTrigger: string = 'CosmosDBTrigger';
const cosmosDBTrigger: string = 'Cosmos DB trigger';
test(cosmosDBTrigger, async () => {
await testCreateFunction(
cosmosDBTrigger,
@ -68,7 +68,7 @@ suite('Create Function Tests', () => {
);
});
const eventHubTrigger: string = 'EventHubTrigger';
const eventHubTrigger: string = 'Event Hub trigger';
test(eventHubTrigger, async () => {
await testCreateFunction(
eventHubTrigger,
@ -80,17 +80,17 @@ suite('Create Function Tests', () => {
);
});
const genericWebhook: string = 'Generic Webhook';
const genericWebhook: string = 'Generic webhook';
test(genericWebhook, async () => {
await testCreateFunction(genericWebhook);
});
const gitHubWebhook: string = 'GitHub Webhook';
const gitHubWebhook: string = 'GitHub webhook';
test(gitHubWebhook, async () => {
await testCreateFunction(gitHubWebhook);
});
const httpTrigger: string = 'HttpTrigger';
const httpTrigger: string = 'HTTP trigger';
test(httpTrigger, async () => {
await testCreateFunction(
httpTrigger,
@ -98,7 +98,7 @@ suite('Create Function Tests', () => {
);
});
const httpTriggerWithParameters: string = 'HttpTriggerWithParameters';
const httpTriggerWithParameters: string = 'HTTP trigger with parameters';
test(httpTriggerWithParameters, async () => {
await testCreateFunction(
httpTriggerWithParameters,
@ -106,12 +106,12 @@ suite('Create Function Tests', () => {
);
});
const manualTrigger: string = 'ManualTrigger';
const manualTrigger: string = 'Manual trigger';
test(manualTrigger, async () => {
await testCreateFunction(manualTrigger);
});
const queueTrigger: string = 'QueueTrigger';
const queueTrigger: string = 'Queue trigger';
test(queueTrigger, async () => {
await testCreateFunction(
queueTrigger,
@ -122,7 +122,7 @@ suite('Create Function Tests', () => {
);
});
const serviceBusQueueTrigger: string = 'ServiceBusQueueTrigger';
const serviceBusQueueTrigger: string = 'Service Bus Queue trigger';
test(serviceBusQueueTrigger, async () => {
await testCreateFunction(
serviceBusQueueTrigger,
@ -134,7 +134,7 @@ suite('Create Function Tests', () => {
);
});
const serviceBusTopicTrigger: string = 'ServiceBusTopicTrigger';
const serviceBusTopicTrigger: string = 'Service Bus Topic trigger';
test(serviceBusTopicTrigger, async () => {
await testCreateFunction(
serviceBusTopicTrigger,
@ -147,7 +147,7 @@ suite('Create Function Tests', () => {
);
});
const timerTrigger: string = 'TimerTrigger';
const timerTrigger: string = 'Timer trigger';
test(timerTrigger, async () => {
await testCreateFunction(
timerTrigger,

33
test/templateData.test.ts Normal file
Просмотреть файл

@ -0,0 +1,33 @@
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import * as assert from 'assert';
import * as vscode from 'vscode';
import { Template, TemplateLanguage } from '../src/templates/Template';
import { TemplateData } from '../src/templates/TemplateData';
const templateFilterSetting: string = 'azureFunctions.templateFilter';
const config: vscode.WorkspaceConfiguration = vscode.workspace.getConfiguration();
// tslint:disable-next-line:no-backbone-get-set-outside-model
const oldTemplateFilter: string | undefined = config.get(templateFilterSetting);
suiteTeardown(async () => {
await config.update(templateFilterSetting, oldTemplateFilter, vscode.ConfigurationTarget.Global);
});
suite('Template Data Tests', () => {
const templateData: TemplateData = new TemplateData();
test('JavaScript Verified Templates Count', async () => {
await config.update(templateFilterSetting, 'Verified', vscode.ConfigurationTarget.Global);
const templates: Template[] = await templateData.getTemplates(TemplateLanguage.JavaScript);
assert.equal(templates.length, 8);
});
test('Java Templates Count', async () => {
const templates: Template[] = await templateData.getTemplates(TemplateLanguage.Java);
assert.equal(templates.length, 4);
});
});