UNPKG

fugitsit

Version:

Small library that wraps ICAL.js and provide more convenient means for editing

260 lines (194 loc) 11.3 kB
/** * @copyright Copyright (c) 2019 Georg Ehrke * * @author Georg Ehrke <georg-nextcloud@ehrke.email> * * @license GNU AGPL version 3 or any later version * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. * */ import { getTimezoneManager, isOlsonTimezone, TimezoneManager } from '../../../src/timezones/timezoneManager.js'; import Timezone from '../../../src/timezones/timezone.js'; it('TimezoneManager should be defined', () => { expect(TimezoneManager).toBeDefined() }) it('TimezoneManager should provide a method to get a timezone by id - existing timezone', () => { const timezoneManager = new TimezoneManager() const tzBerlin = new Timezone('Europe/Berlin', getAsset('timezone-europe-berlin')) const tzNYC = new Timezone('America/New_York', getAsset('timezone-america-nyc')) const tzLA = new Timezone('America/Los_Angeles', getAsset('timezone-america-la')) timezoneManager.registerTimezone(tzBerlin) timezoneManager.registerTimezone(tzNYC) timezoneManager.registerTimezone(tzLA) timezoneManager.registerAlias('foobar/Berlin', 'Europe/Berlin') timezoneManager.registerAlias('foobar/Stuttgart', 'unknown') expect(timezoneManager.getTimezoneForId('Europe/Berlin')).toEqual(tzBerlin) }) it('TimezoneManager should be able to self-register a default set of timezones', () => { const timezoneManager = new TimezoneManager() timezoneManager.registerDefaultTimezones() expect(timezoneManager.listAllTimezones().length).toBeGreaterThan(400) }) it('TimezoneManager should provide a method to get a timezone by id - by alias', () => { const timezoneManager = new TimezoneManager() const tzBerlin = new Timezone('Europe/Berlin', getAsset('timezone-europe-berlin')) const tzNYC = new Timezone('America/New_York', getAsset('timezone-america-nyc')) const tzLA = new Timezone('America/Los_Angeles', getAsset('timezone-america-la')) timezoneManager.registerTimezone(tzBerlin) timezoneManager.registerTimezone(tzNYC) timezoneManager.registerTimezone(tzLA) timezoneManager.registerAlias('foobar/Berlin', 'Europe/Berlin') timezoneManager.registerAlias('foobar/Stuttgart', 'unknown') expect(timezoneManager.getTimezoneForId('foobar/Berlin')).toEqual(tzBerlin) }) it('TimezoneManager should provide a method to get a timezone by id - by alias non-existant', () => { const timezoneManager = new TimezoneManager() const tzBerlin = new Timezone('Europe/Berlin', getAsset('timezone-europe-berlin')) const tzNYC = new Timezone('America/New_York', getAsset('timezone-america-nyc')) const tzLA = new Timezone('America/Los_Angeles', getAsset('timezone-america-la')) timezoneManager.registerTimezone(tzBerlin) timezoneManager.registerTimezone(tzNYC) timezoneManager.registerTimezone(tzLA) timezoneManager.registerAlias('foobar/Berlin', 'Europe/Berlin') timezoneManager.registerAlias('foobar/Stuttgart', 'unknown') expect(timezoneManager.getTimezoneForId('foobar/Stuttgart')).toEqual(null) }) it('TimezoneManager should provide a method to get a timezone by id - unknown', () => { const timezoneManager = new TimezoneManager() const tzBerlin = new Timezone('Europe/Berlin', getAsset('timezone-europe-berlin')) const tzNYC = new Timezone('America/New_York', getAsset('timezone-america-nyc')) const tzLA = new Timezone('America/Los_Angeles', getAsset('timezone-america-la')) timezoneManager.registerTimezone(tzBerlin) timezoneManager.registerTimezone(tzNYC) timezoneManager.registerTimezone(tzLA) timezoneManager.registerAlias('foobar/Berlin', 'Europe/Berlin') timezoneManager.registerAlias('foobar/Stuttgart', 'unknown') expect(timezoneManager.getTimezoneForId('unknown')).toEqual(null) }) it('TimezoneManager should provide a method to check if a certain timezone is known', () => { const timezoneManager = new TimezoneManager() const tzBerlin = new Timezone('Europe/Berlin', getAsset('timezone-europe-berlin')) const tzNYC = new Timezone('America/New_York', getAsset('timezone-america-nyc')) const tzLA = new Timezone('America/Los_Angeles', getAsset('timezone-america-la')) timezoneManager.registerTimezone(tzBerlin) timezoneManager.registerTimezone(tzNYC) timezoneManager.registerTimezone(tzLA) timezoneManager.registerAlias('foobar/Berlin', 'Europe/Berlin') expect(timezoneManager.hasTimezoneForId('Europe/Berlin')).toEqual(true) expect(timezoneManager.hasTimezoneForId('Europe/Berlin')).toEqual(true) expect(timezoneManager.hasTimezoneForId('America/Los_Angeles')).toEqual(true) expect(timezoneManager.hasTimezoneForId('foobar/Berlin')).toEqual(true) }) it('TimezoneManager should provide a list of all timezones', () => { const timezoneManager = new TimezoneManager() const tzBerlin = new Timezone('Europe/Berlin', getAsset('timezone-europe-berlin')) const tzNYC = new Timezone('America/New_York', getAsset('timezone-america-nyc')) const tzLA = new Timezone('America/Los_Angeles', getAsset('timezone-america-la')) timezoneManager.registerTimezone(tzBerlin) timezoneManager.registerTimezone(tzNYC) timezoneManager.registerTimezone(tzLA) timezoneManager.registerAlias('foobar/Berlin', 'Europe/Berlin') expect(timezoneManager.listAllTimezones()).toEqual(["Europe/Berlin", "America/New_York", "America/Los_Angeles"]) }) it('TimezoneManager should provide a list of all timezones to include all aliases', () => { const timezoneManager = new TimezoneManager() const tzBerlin = new Timezone('Europe/Berlin', getAsset('timezone-europe-berlin')) const tzNYC = new Timezone('America/New_York', getAsset('timezone-america-nyc')) const tzLA = new Timezone('America/Los_Angeles', getAsset('timezone-america-la')) timezoneManager.registerTimezone(tzBerlin) timezoneManager.registerTimezone(tzNYC) timezoneManager.registerTimezone(tzLA) timezoneManager.registerAlias('foobar/Berlin', 'Europe/Berlin') expect(timezoneManager.listAllTimezones(true)).toEqual(["Europe/Berlin", "America/New_York", "America/Los_Angeles", 'foobar/Berlin']) }) it('TimezoneManager should provide a method to unregister timezones', () => { const timezoneManager = new TimezoneManager() const tzBerlin = new Timezone('Europe/Berlin', getAsset('timezone-europe-berlin')) const tzNYC = new Timezone('America/New_York', getAsset('timezone-america-nyc')) const tzLA = new Timezone('America/Los_Angeles', getAsset('timezone-america-la')) timezoneManager.registerTimezone(tzBerlin) timezoneManager.registerTimezone(tzNYC) timezoneManager.registerTimezone(tzLA) timezoneManager.registerAlias('foobar/Berlin', 'Europe/Berlin') expect(timezoneManager.hasTimezoneForId('Europe/Berlin')).toEqual(true) timezoneManager.unregisterTimezones('Europe/Berlin') expect(timezoneManager.hasTimezoneForId('Europe/Berlin')).toEqual(false) }) it('TimezoneManager should provide a method to unregister an alias', () => { const timezoneManager = new TimezoneManager() const tzBerlin = new Timezone('Europe/Berlin', getAsset('timezone-europe-berlin')) const tzNYC = new Timezone('America/New_York', getAsset('timezone-america-nyc')) const tzLA = new Timezone('America/Los_Angeles', getAsset('timezone-america-la')) timezoneManager.registerTimezone(tzBerlin) timezoneManager.registerTimezone(tzNYC) timezoneManager.registerTimezone(tzLA) timezoneManager.registerAlias('foobar/Berlin', 'Europe/Berlin') expect(timezoneManager.hasTimezoneForId('foobar/Berlin')).toEqual(true) timezoneManager.unregisterAlias('foobar/Berlin') expect(timezoneManager.hasTimezoneForId('foobar/Berlin')).toEqual(false) }) it('TimezoneManager should provide a method to register timezone from is', () => { const timezoneManager = new TimezoneManager() timezoneManager.registerTimezoneFromICS('Europe/Berlin', getAsset('timezone-europe-berlin')) timezoneManager.registerTimezoneFromICS('America/New_York', getAsset('timezone-america-nyc')) timezoneManager.registerTimezoneFromICS('America/Los_Angeles', getAsset('timezone-america-la')) expect(timezoneManager.hasTimezoneForId('Europe/Berlin')).toEqual(true) }) it('TimezoneManager should provide a method to clear all timezones', () => { const timezoneManager = new TimezoneManager() const tzBerlin = new Timezone('Europe/Berlin', getAsset('timezone-europe-berlin')) const tzNYC = new Timezone('America/New_York', getAsset('timezone-america-nyc')) const tzLA = new Timezone('America/Los_Angeles', getAsset('timezone-america-la')) timezoneManager.registerTimezone(tzBerlin) timezoneManager.registerTimezone(tzNYC) timezoneManager.registerTimezone(tzLA) timezoneManager.registerAlias('foobar/Berlin', 'Europe/Berlin') expect(timezoneManager.hasTimezoneForId('Europe/Berlin')).toEqual(true) expect(timezoneManager.hasTimezoneForId('foobar/Berlin')).toEqual(true) timezoneManager.clearAllTimezones() expect(timezoneManager.hasTimezoneForId('Europe/Berlin')).toEqual(false) expect(timezoneManager.hasTimezoneForId('foobar/Berlin')).toEqual(false) }) it('TimezoneManager should provide a default instance', () => { const tzManager1 = getTimezoneManager() const tzManager2 = getTimezoneManager() expect(tzManager1.getTimezoneForId('UTC')).toEqual(Timezone.utc) expect(tzManager1.getTimezoneForId('GMT')).toEqual(Timezone.utc) expect(tzManager1.getTimezoneForId('Z')).toEqual(Timezone.utc) expect(tzManager1.getTimezoneForId('floating')).toEqual(Timezone.floating) expect(tzManager1).toEqual(tzManager2) expect(tzManager1.hasTimezoneForId('Europe/Berlin')).toEqual(false) expect(tzManager2.hasTimezoneForId('Europe/Berlin')).toEqual(false) tzManager1.registerTimezone(new Timezone('Europe/Berlin', getAsset('timezone-europe-berlin'))) expect(tzManager1.hasTimezoneForId('Europe/Berlin')).toEqual(true) expect(tzManager2.hasTimezoneForId('Europe/Berlin')).toEqual(true) }) it('TimezoneManager should provide a method to check if a name is an alias', () => { const timezoneManager = new TimezoneManager() const tzBerlin = new Timezone('Europe/Berlin', getAsset('timezone-europe-berlin')) const tzNYC = new Timezone('America/New_York', getAsset('timezone-america-nyc')) const tzLA = new Timezone('America/Los_Angeles', getAsset('timezone-america-la')) timezoneManager.registerTimezone(tzBerlin) timezoneManager.registerTimezone(tzNYC) timezoneManager.registerTimezone(tzLA) timezoneManager.registerAlias('foobar/Berlin', 'Europe/Berlin') timezoneManager.registerAlias('foobar/Stuttgart', 'unknown') expect(timezoneManager.isAlias('Europe/Berlin')).toEqual(false) expect(timezoneManager.isAlias('foobar/Berlin')).toEqual(true) }) it('TimezoneManager should provide method to check if a given timezone is an Olson timezone', () => { expect(isOlsonTimezone('Europe/Berlin')).toEqual(true) expect(isOlsonTimezone('US/Western')).toEqual(false) })