blob: 285412f721ca40db019a16fd5e9fabf3ac901765 [file] [log] [blame]
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
var timezoneUtils = require('utils/date/timezone');
describe('timezoneUtils', function () {
describe('#_groupTimezones', function () {
var formattedTimezones = [
{utcOffset: 1, groupByKey: '1', formattedOffset: '+01:00', value: 'a/Aa', region: 'a', city: 'Aa'},
{utcOffset: 1, groupByKey: '1', formattedOffset: '+01:00', value: 'a/Bb', region: 'a', city: 'Bb'},
{utcOffset: 2, groupByKey: '2', formattedOffset: '+02:00', value: 'a/Cc', region: 'a', city: 'Cc'},
{utcOffset: 2, groupByKey: '2', formattedOffset: '+02:00', value: 'a/Dd', region: 'a', city: 'Dd'},
{utcOffset: 1, groupByKey: '1', formattedOffset: '+01:00', value: 'b/Ee', region: 'b', city: 'Ee'},
{utcOffset: 1, groupByKey: '1', formattedOffset: '+01:00', value: 'b/Ff', region: 'b', city: 'Ff'},
{utcOffset: 2, groupByKey: '2', formattedOffset: '+02:00', value: 'b/Gg', region: 'b', city: 'Gg'},
{utcOffset: 2, groupByKey: '2', formattedOffset: '+02:00', value: 'b/Hh', region: 'b', city: 'Hh'},
{utcOffset: 2, groupByKey: '2', formattedOffset: '+02:00', value: 'b/II', region: 'b', city: 'II'},
{utcOffset: 2, groupByKey: '2', formattedOffset: '+02:00', value: 'b', region: 'b', city: ''}
];
before(function () {
this.result = timezoneUtils._groupTimezones(formattedTimezones);
});
it('should group to 4 groups', function () {
expect(this.result.length).to.equal(4);
});
it('UTCOffset should be [1,1,2,2]', function () {
expect(this.result.mapProperty('utcOffset')).to.eql([1, 1, 2, 2]);
});
it('should map regions and cities correctly', function () {
var expected = [
'(UTC+01:00 UTC) a / Aa, Bb',
'(UTC+01:00 UTC) b / Ee, Ff',
'(UTC+02:00 UTC) a / Cc, Dd',
'(UTC+02:00 UTC) b / Gg, Hh'
];
var values = this.result.mapProperty('label');
expect(values).to.eql(expected);
expect(values.join('')).to.not.contain('II');
expect(values.join('')).to.not.contain(', ,');
});
});
describe('#_parseTimezones', function () {
beforeEach(function () {
sinon.stub(timezoneUtils, 'getAllTimezoneNames').returns([
'Europe/Helsinki',
'Asia/Magadan',
'America/Lima'
]);
sinon.stub(timezoneUtils, '_groupTimezones', function (list) {
return list;
});
this.result = timezoneUtils._parseTimezones();
});
afterEach(function () {
timezoneUtils.getAllTimezoneNames.restore();
timezoneUtils._groupTimezones.restore();
});
it('should sort by offset and name', function () {
expect(this.result.mapProperty('value')).to.eql(['America/Lima', 'Europe/Helsinki', 'Asia/Magadan']);
});
it('should split regions and cities', function () {
expect(this.result.mapProperty('region')).to.eql(['America', 'Europe', 'Asia']);
expect(this.result.mapProperty('city')).to.eql(['Lima', 'Helsinki', 'Magadan']);
});
});
describe('#getAllTimezoneNames', function () {
var result = timezoneUtils.getAllTimezoneNames();
it('timezone names are parsed', function () {
expect(result).to.have.length.above(0);
});
describe('Etc/* are excluded', function () {
result.forEach(function (tz) {
it(tz, function () {
expect(tz.indexOf('Etc/')).to.equal(-1);
});
});
});
describe('Abbreviations are excluded', function () {
result.forEach(function (tz) {
it(tz, function () {
expect(tz).to.not.equal(tz.toUpperCase());
});
});
});
});
});