type2docfx
Version:
A tool to convert json format output from TypeDoc to universal reference model for DocFx to consume.
226 lines (180 loc) • 7.9 kB
JavaScript
const assert = require('assert');
const { TurnContext, TestAdapter } = require('botbuilder');
const { LocaleConverter } = require('../');
class TestContext extends TurnContext {
constructor(request) {
super(new TestAdapter(), request);
this.sent = undefined;
this.onSendActivities((context, activities, next) => {
this.sent = activities;
});
}
}
describe('LocaleConverter', function () {
this.timeout(10000);
it('should convert locale to fr', function (done) {
let toFrenchSettings = {
toLocale: 'fr-fr',
fromLocale: 'en-us'
};
const testAdapter = new TestAdapter(c => c.sendActivity(c.activity.text))
.use(new LocaleConverter(toFrenchSettings))
.test('10/21/2018', '21/10/2018', 'should have received date in usa french locale')
.then(() => done());
});
it('should convert locale to chinese using delegate', function (done) {
let toChineseSettings = {
toLocale: 'zh-cn',
getUserLocale: c => 'en-us',
setUserLocale: c => Promise.resolve(false)
}
const testAdapter = new TestAdapter(c => c.sendActivity(c.activity.text))
.use(new LocaleConverter(toChineseSettings))
.test('10/21/2018', '2018-10-21', 'should have received date in chinese locale')
.then(() => done());
});
it('should support changing locale', function (done) {
let userLocale = 'en-us';
let changeLocaleSettings = {
toLocale: 'zh-cn',
getUserLocale: c => userLocale,
setUserLocale: c => {
if (c.activity.text == 'Change my locale to fr-fr') {
userLocale = 'fr-fr';
return Promise.resolve(true);
}
return Promise.resolve(false);
}
}
const testAdapter = new TestAdapter(c => assert.equal(userLocale, 'fr-fr', 'should have changed locale letiable to fr-fr'))
.use(new LocaleConverter(changeLocaleSettings))
.send('Change my locale to fr-fr')
.then(() => done());
});
it('should use en-us as default from locale', function (done) {
let noFromLocaleSettings = {
toLocale: 'zh-cn',
}
const testAdapter = new TestAdapter(c => c.sendActivity(c.activity.text))
.use(new LocaleConverter(noFromLocaleSettings))
.test('10/21/2018', '2018-10-21', 'should have received date in chinese locale')
.then(() => done());
});
it('should convert from different locales', function(done) {
let noFromLocaleSettings = {
toLocale: 'en-us',
}
fromLocales = ['fr', 'pt', 'zh', 'es', 'en'];
fromDates = ['21/10/2018', '21/10/2018', '2018-10-21', '21/10/2018', '10/21/2018'];
let testAdapter;
for (let index = 0; index < fromLocales.length; index++) {
noFromLocaleSettings.fromLocale = fromLocales[index]
testAdapter = new TestAdapter(c => c.sendActivity(c.activity.text))
.use(new LocaleConverter(noFromLocaleSettings))
.test(fromDates[index], '10/21/2018', `should have received date in ${fromLocales[index]} locale`)
}
testAdapter
.then(() => done());
});
it('should get all supported locales', function(done) {
let localeConverter = new LocaleConverter({ toLocale: 'en-us' });
localeConverter.getAvailableLocales()
.then(result => {
assert.equal(result.length, 22, 'should support 22 locales');
return done();
})
});
it('should throw unsupported from locale error when an invalid locale is provided', function (done) {
let invalidFromLocaleSettings = {
fromLocale: '',
toLocale: 'zh-cn',
}
const testAdapter = new TestAdapter(c => c.sendActivity(c.activity.text))
.use(new LocaleConverter(invalidFromLocaleSettings))
.send('10/21/2018')
.catch(error => {
assert.equal(error, 'Error: Unsupported from locale', 'should throw an error');
return done();
})
});
it('should support converting time and dates', function (done) {
let timeSettings = {
fromLocale: 'en-us',
toLocale: 'fr-fr',
}
const testAdapter = new TestAdapter(c => c.sendActivity(c.activity.text))
.use(new LocaleConverter(timeSettings))
.test('half past 9 am 02/03/2010', '03/02/2010 09:30', 'should have converted the time and the date')
.then(() => done());
});
it('should support converting time only', function (done) {
let timeSettings = {
fromLocale: 'en-us',
toLocale: 'fr-fr',
}
const testAdapter = new TestAdapter(c => c.sendActivity(c.activity.text))
.use(new LocaleConverter(timeSettings))
.test('half past 9 am', '09:30', 'should have converted the time')
.then(() => done());
});
it('should support converting date ranges', function (done) {
let rangeSettings = {
fromLocale: 'en-us',
toLocale: 'fr-fr',
}
const testAdapter = new TestAdapter(c => c.sendActivity(c.activity.text))
.use(new LocaleConverter(rangeSettings))
.test('from 10/21/2018 to 10/23/2018', '21/10/2018 - 23/10/2018', 'should have converted the range')
.then(() => done());
});
it('should support converting date and time ranges', function (done) {
let rangeSettings = {
fromLocale: 'en-us',
toLocale: 'fr-fr',
}
const testAdapter = new TestAdapter(c => c.sendActivity(c.activity.text))
.use(new LocaleConverter(rangeSettings))
.test('from 10/21/2018 9 am to 10/23/2018 1 pm', '21/10/2018 09:00 - 23/10/2018 13:00', 'should have converted the range')
.then(() => done());
});
it('should support converting time ranges', function (done) {
let rangeSettings = {
fromLocale: 'en-us',
toLocale: 'fr-fr',
}
const testAdapter = new TestAdapter(c => c.sendActivity(c.activity.text))
.use(new LocaleConverter(rangeSettings))
.test('from 9 am to 1 pm', '09:00 - 13:00', 'should have converted the range')
.then(() => done());
});
it('should throw an error if an unsupported to locale is used', function (done) {
let rangeSettings = {
fromLocale: 'en-us',
toLocale: 'N/A',
}
const testAdapter = new TestAdapter(c => c.sendActivity(c.activity.text))
.use(new LocaleConverter(rangeSettings))
.send('10/21/2018')
.catch(error => {
assert.equal(error, 'Unsupported to locale N/A', 'should throw an error');
return done();
})
});
it('should bypass calling service in middleware for non-message activities.', function (done) {
let intercepted = true;
let toFrenchSettings = {
toLocale: 'fr-fr',
fromLocale: 'en-us'
}
const context = new TestContext({ text: 'bonjour', type: 'foo' })
const localeConverter = new LocaleConverter(toFrenchSettings)
.onTurn(context, () => {
intercepted = false;
Promise.resolve();
})
.then(() => {
assert(!intercepted, 'intercepted');
done();
});
});
})