Skip to content
This repository was archived by the owner on Jan 15, 2025. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 7 additions & 4 deletions packages/lu/src/parser/lubuild/builder.ts
Original file line number Diff line number Diff line change
Expand Up @@ -293,7 +293,7 @@ export class Builder {
return settingsContent
}

async writeDialogAssets(contents: any[], options: any = {}) {
async writeDialogAssets(contents: any[], options: any = {}, directVersionPublish?: boolean) {
let force = options.force || false
let out = options.out
let luConfig = options.luConfig
Expand All @@ -311,7 +311,8 @@ export class Builder {
} else {
outPath = path.resolve(settingsContents[0].id)
}
writeContents.push(this.mergeSettingsContent(outPath, settingsContents))

writeContents.push(this.mergeSettingsContent(outPath, settingsContents, directVersionPublish))
}

for (const content of writeContents) {
Expand Down Expand Up @@ -478,14 +479,16 @@ export class Builder {
return contents
}

mergeSettingsContent(settingsPath: string, contents: any[]) {
mergeSettingsContent(settingsPath: string, contents: any[], directVersionPublish?: boolean) {
let settings = new Settings(settingsPath, {})
for (const content of contents) {
const luisAppsMap = JSON.parse(content.content).luis
for (const appName of Object.keys(luisAppsMap)) {
settings.luis[appName] = {
settings.luis[appName] = directVersionPublish ? {
"appId": luisAppsMap[appName]["appId"],
"version": luisAppsMap[appName]["version"]
} : {
"appId": luisAppsMap[appName]["appId"]
}
}
}
Expand Down
6 changes: 3 additions & 3 deletions packages/luis/src/commands/luis/build.ts
Original file line number Diff line number Diff line change
Expand Up @@ -154,13 +154,13 @@ export default class LuisBuild extends Command {
fallbackLocale,
schema,
dialog
})
}, directVersionPublish)

let writeDone = await builder.writeDialogAssets(dialogContents, {
force,
out: outputFolder,
luConfig
})
}, directVersionPublish)

if (writeDone) {
this.log(`Successfully wrote .dialog files to ${outputFolder}\n`)
Expand All @@ -173,7 +173,7 @@ export default class LuisBuild extends Command {
force,
out: outputFolder,
luConfig
})
}, directVersionPublish)

if (writeDone) {
this.log(`Successfully wrote settings file to ${outputFolder}\n`)
Expand Down
51 changes: 44 additions & 7 deletions packages/luis/test/commands/luis/build.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -576,7 +576,7 @@ describe('luis:build write dialog and settings assets successfully if --dialog s

test
.stdout()
.command(['luis:build', '--in', './test/fixtures/testcases/lubuild/sandwich/lufiles/sandwich.en-us.lu', '--authoringKey', uuidv1(), '--botName', 'test', '--out', './results', '--dialog', 'multiLanguage', '--log', '--suffix', 'development'])
.command(['luis:build', '--in', './test/fixtures/testcases/lubuild/sandwich/lufiles/sandwich.en-us.lu', '--authoringKey', uuidv1(), '--botName', 'test', '--out', './results', '--dialog', 'multiLanguage', '--log', '--suffix', 'development', '--directVersionPublish'])
.it('should write dialog and settings assets successfully when --dialog set to multiLanguage', async ctx => {
expect(await compareFiles('./../../../results/luis.settings.development.westus.json', './../../fixtures/testcases/lubuild/sandwich/config/luis.settings.development.westus.json')).to.be.true
expect(await compareFiles('./../../../results/sandwich.en-us.lu.dialog', './../../fixtures/testcases/lubuild/sandwich/dialogs/sandwich.en-us.lu.dialog')).to.be.true
Expand Down Expand Up @@ -615,7 +615,7 @@ describe('luis:build write dialog and settings assets successfully if --dialog s

test
.stdout()
.command(['luis:build', '--in', './test/fixtures/testcases/lubuild/sandwich/lufiles/sandwich.en-us.lu', '--authoringKey', uuidv1(), '--botName', 'test', '--dialog', 'crosstrained', '--out', './results', '--log', '--suffix', 'development'])
.command(['luis:build', '--in', './test/fixtures/testcases/lubuild/sandwich/lufiles/sandwich.en-us.lu', '--authoringKey', uuidv1(), '--botName', 'test', '--dialog', 'crosstrained', '--out', './results', '--log', '--suffix', 'development', '--directVersionPublish'])
.it('should write dialog and settings assets successfully when --dialog set to crosstrained', async ctx => {
expect(await compareFiles('./../../../results/luis.settings.development.westus.json', './../../fixtures/testcases/lubuild/sandwich/config/luis.settings.development.westus.json')).to.be.true
expect(await compareFiles('./../../../results/sandwich.lu.qna.dialog', './../../fixtures/testcases/lubuild/sandwich/dialogs/sandwich.lu.qna.dialog')).to.be.true
Expand Down Expand Up @@ -758,7 +758,7 @@ describe('luis:build create multiple applications successfully when input is a f

test
.stdout()
.command(['luis:build', '--in', './test/fixtures/testcases/lubuild/foo/lufiles', '--authoringKey', uuidv1(), '--botName', 'test', '--dialog', 'multiLanguage', '--out', './results', '--log', '--suffix', 'development'])
.command(['luis:build', '--in', './test/fixtures/testcases/lubuild/foo/lufiles', '--authoringKey', uuidv1(), '--botName', 'test', '--dialog', 'multiLanguage', '--out', './results', '--log', '--suffix', 'development', '--directVersionPublish'])
.it('should create multiple applications and write dialog and settings assets successfully when input is a folder', async ctx => {
expect(ctx.stdout).to.contain('foo.fr-fr.lu loaded')
expect(ctx.stdout).to.contain('foo.lu loaded')
Expand Down Expand Up @@ -903,7 +903,7 @@ describe('luis:build update application succeed with parameters set from luconfi

test
.stdout()
.command(['luis:build', '--authoringKey', uuidv1(), '--luConfig', './test/fixtures/testcases/lubuild/luconfig/lufiles/luconfig.json', '--log', '--suffix', 'development'])
.command(['luis:build', '--authoringKey', uuidv1(), '--luConfig', './test/fixtures/testcases/lubuild/luconfig/lufiles/luconfig.json', '--log', '--suffix', 'development', '--directVersionPublish'])
.it('should update a luis application when utterances changed', async ctx => {
expect(ctx.stdout).to.contain('Handling applications...')
expect(ctx.stdout).to.contain('creating version=0.2')
Expand Down Expand Up @@ -1139,7 +1139,7 @@ describe('luis:build write dialog and settings assets successfully if schema is

test
.stdout()
.command(['luis:build', '--in', './test/fixtures/testcases/lubuild/sandwich/lufiles/sandwich.en-us.lu', '--authoringKey', uuidv1(), '--botName', 'test', '--out', './results', '--log', '--suffix', 'development', '--dialog', 'crosstrained', '--schema', 'https://github.com/microsoft/BotFramework-Composer/stable/Composer/packages/server/schemas/sdk.schema'])
.command(['luis:build', '--in', './test/fixtures/testcases/lubuild/sandwich/lufiles/sandwich.en-us.lu', '--authoringKey', uuidv1(), '--botName', 'test', '--out', './results', '--log', '--suffix', 'development', '--dialog', 'crosstrained', '--schema', 'https://github.com/microsoft/BotFramework-Composer/stable/Composer/packages/server/schemas/sdk.schema', '--directVersionPublish'])
.it('should write dialog and settings assets successfully if schema is specified', async ctx => {
expect(await compareFiles('./../../../results/luis.settings.development.westus.json', './../../fixtures/testcases/lubuild/sandwich/config/luis.settings.development.westus.json')).to.be.true
expect(await compareFiles('./../../../results/sandwich.en-us.lu.dialog', './../../fixtures/testcases/lubuild/sandwich/dialogs-with-schema/sandwich.en-us.lu.dialog')).to.be.true
Expand Down Expand Up @@ -1197,7 +1197,7 @@ describe('luis:build write dialog and settings assets successfully when empty fi

test
.stdout()
.command(['luis:build', '--in', './test/fixtures/testcases/lubuild/empty-file/lufiles', '--authoringKey', uuidv1(), '--botName', 'test', '--dialog', 'crosstrained', '--out', './results', '--log', '--suffix', 'development'])
.command(['luis:build', '--in', './test/fixtures/testcases/lubuild/empty-file/lufiles', '--authoringKey', uuidv1(), '--botName', 'test', '--dialog', 'crosstrained', '--out', './results', '--log', '--suffix', 'development', '--directVersionPublish'])
.it('should write dialog and settings assets successfully when empty files exist', async ctx => {
expect(ctx.stdout).to.contain('empty.lu loaded')
expect(ctx.stdout).to.contain('non-empty.lu loaded')
Expand Down Expand Up @@ -1249,14 +1249,51 @@ describe('luis:build write settings assets only successfully if --dialog is not

test
.stdout()
.command(['luis:build', '--in', './test/fixtures/testcases/lubuild/sandwich/lufiles/sandwich.en-us.lu', '--authoringKey', uuidv1(), '--botName', 'test', '--out', './results', '--log', '--suffix', 'development'])
.command(['luis:build', '--in', './test/fixtures/testcases/lubuild/sandwich/lufiles/sandwich.en-us.lu', '--authoringKey', uuidv1(), '--botName', 'test', '--out', './results', '--log', '--suffix', 'development', '--directVersionPublish'])
.it('should write settings assets only successfully if --dialog is not set', async ctx => {
expect(await compareFiles('./../../../results/luis.settings.development.westus.json', './../../fixtures/testcases/lubuild/sandwich/config/luis.settings.development.westus.json')).to.be.true
expect(await compareFiles('./../../../results/sandwich.lu.qna.dialog', './../../fixtures/testcases/lubuild/sandwich/dialogs/sandwich.lu.qna.dialog')).to.be.false
expect(await compareFiles('./../../../results/sandwich.lu.dialog', './../../fixtures/testcases/lubuild/sandwich/dialogs/sandwich.lu.dialog')).to.be.false
})
})

describe('luis:build write settings assets without version if --directVersionPublish is absent', () => {
const existingLuisApp = require('./../../fixtures/testcases/lubuild/sandwich/luis/test(development)-sandwich.en-us.lu.json')
before(async function () {
await fs.ensureDir(path.join(__dirname, './../../../results/'))

nock('https://westus.api.cognitive.microsoft.com')
.get(uri => uri.includes('apps'))
.reply(200, [{
name: 'test(development)-sandwich.en-us.lu',
id: 'f8c64e2a-8635-3a09-8f78-39d7adc76ec5'
}])

nock('https://westus.api.cognitive.microsoft.com')
.get(uri => uri.includes('apps'))
.reply(200, {
name: 'test(development)-sandwich.en-us.lu',
id: 'f8c64e2a-8635-3a09-8f78-39d7adc76ec5',
activeVersion: '0.1'
})

nock('https://westus.api.cognitive.microsoft.com')
.get(uri => uri.includes('export'))
.reply(200, existingLuisApp)
})

after(async function () {
await fs.remove(path.join(__dirname, './../../../results/'))
})

test
.stdout()
.command(['luis:build', '--in', './test/fixtures/testcases/lubuild/sandwich/lufiles/sandwich.en-us.lu', '--authoringKey', uuidv1(), '--botName', 'test', '--out', './results', '--log', '--suffix', 'development'])
.it('should write settings assets without version info when --directVersionPublish is absent', async ctx => {
expect(await compareFiles('./../../../results/luis.settings.development.westus.json', './../../fixtures/testcases/lubuild/sandwich/config/luis.settings.development_no_version.westus.config')).to.be.true
})
})

describe('luis:build throw luis build failed exception successfully', () => {
before(function () {
nock('https://westus.api.cognitive.microsoft.com')
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"luis": {
"sandwich_en_us_lu": {
"appId": "f8c64e2a-8635-3a09-8f78-39d7adc76ec5"
}
}
}