| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293 |
- import moment from 'moment-timezone';
- import Vue from 'vue/dist/vue';
- import VueMoment from '../vue-moment';
- Vue.use(VueMoment, {
- moment,
- });
- const now = moment();
- const tomorrow = moment().add(1, 'day');
- const period = 'P1D';
- const vm = new Vue({
- template: '<div>{{ now | moment(...args) }}</div>',
- data() {
- return {
- now,
- args: [
- 'YYYY-MM-DD',
- ],
- };
- },
- }).$mount();
- const vmd = new Vue({
- template: '<div>{{ period | duration(...args) | duration(...formatter) }}</div>',
- data() {
- return {
- period,
- args: [],
- formatter: ['humanize', true],
- };
- },
- }).$mount();
- describe('VueMoment', () => {
- describe('installing plugin', () => {
- it('loads prototype', () => {
- expect(typeof vm.$moment).toEqual('function');
- });
- it('prototype works', () => {
- expect(vm.$moment(now).format('YYYY-MM-DD')).toEqual(now.format('YYYY-MM-DD'));
- });
- it('sets locale', () => {
- vm.$moment.locale('fr');
- expect(vm.$moment.locale()).toEqual('fr');
- vm.$moment.locale('en');
- });
- });
- describe('using filter', () => {
- it('formats date', () => {
- expect(vm.$el.textContent).toContain(now.format('YYYY-MM-DD'));
- });
- describe('relative dates', () => {
- describe('from', () => {
- it('simple', (done) => {
- vm.args = ['from'];
- vm.$nextTick(() => {
- expect(vm.$el.textContent).toContain('a few seconds ago');
- done();
- });
- });
- it('change reference', (done) => {
- vm.args = ['from', tomorrow];
- vm.$nextTick(() => {
- expect(vm.$el.textContent).toContain('a day ago');
- done();
- });
- });
- it('remove prefix', (done) => {
- vm.args = ['from', tomorrow, true];
- vm.$nextTick(() => {
- expect(vm.$el.textContent).toContain('a day');
- done();
- });
- });
- });
- describe('calendar', () => {
- it('simple', (done) => {
- vm.args = ['calendar'];
- vm.$nextTick(() => {
- expect(vm.$el.textContent).toContain(now.calendar());
- done();
- });
- });
- it('with options', (done) => {
- vm.args = ['calendar', tomorrow, { lastDay: '[Yesterday]' }];
- vm.$nextTick(() => {
- expect(vm.$el.textContent).toContain('Yesterday');
- done();
- });
- });
- });
- describe('diff', () => {
- it('simple', (done) => {
- vm.args = ['diff', tomorrow, 'hours'];
- vm.$nextTick(() => {
- expect(vm.$el.textContent).toContain('24');
- done();
- });
- });
- });
- });
- describe('mutations', () => {
- it('add', (done) => {
- vm.args = ['add', '1 day'];
- vm.$nextTick(() => {
- expect(vm.$el.textContent).toContain(now.clone().add(1, 'days').toISOString());
- done();
- });
- });
- it('subtract', (done) => {
- vm.args = ['subtract', '1 day'];
- vm.$nextTick(() => {
- expect(vm.$el.textContent).toContain(now.clone().subtract(1, 'days').toISOString());
- done();
- });
- });
- it('utc', (done) => {
- vm.args = ['utc'];
- vm.$nextTick(() => {
- expect(vm.$el.textContent).toContain(now.clone().utc().toISOString());
- done();
- });
- });
- it('timezone', (done) => {
- vm.args = ['timezone', 'America/Los_Angeles'];
- vm.$nextTick(() => {
- expect(vm.$el.textContent).toContain(now.clone().tz('America/Los_Angeles').toISOString());
- done();
- });
- });
- });
- describe('chaining', () => {
- it('simple', (done) => {
- vm.args = ['add', '2 days', 'subtract', '1 day', 'YYYY-MM-DD'];
- vm.$nextTick(() => {
- expect(vm.$el.textContent).toContain(now.clone().add(1, 'days').format('YYYY-MM-DD'));
- done();
- });
- });
- });
- describe('durations', () => {
- afterEach(() => {
- vmd.period = period;
- vmd.args = [];
- vmd.formatter = ['humanize', true];
- });
- it('simple humanize', (done) => {
- vmd.$nextTick(() => {
- expect(vmd.$el.textContent).toContain('in a day');
- done();
- });
- });
- it('add', (done) => {
- vmd.args = ['add', 'P1D'];
- vmd.$nextTick(() => {
- expect(vmd.$el.textContent).toContain('in 2 days');
- done();
- });
- });
- it('subtract', (done) => {
- vmd.args = ['subtract', 'P2D'];
- vmd.$nextTick(() => {
- expect(vmd.$el.textContent).toContain('a day ago');
- done();
- });
- });
- it('to string', (done) => {
- vmd.period = [5, 'days'];
- vmd.formatter = ['toISOString'];
- vmd.$nextTick(() => {
- expect(vmd.$el.textContent).toContain('P5D');
- done();
- });
- });
- it('getter', (done) => {
- vmd.formatter = ['asHours'];
- vmd.$nextTick(() => {
- expect(vmd.$el.textContent).toContain('24');
- done();
- });
- });
- });
- });
- describe('handle inputs', () => {
- beforeEach(() => {
- global.console.warn = jest.fn();
- });
- afterAll(() => {
- vm.now = moment();
- });
- it('handles string', (done) => {
- vm.now = '2017-01-01';
- vm.args = ['YYYY-MM-DD'];
- vm.$nextTick(() => {
- expect(console.warn).not.toBeCalled();
- expect(vm.$el.textContent).toContain('2017-01-01');
- done();
- });
- });
- it('handles numeric: seconds', (done) => {
- vm.now = 1484438400;
- vm.args = ['YYYY-MM'];
- vm.$nextTick(() => {
- expect(console.warn).not.toBeCalled();
- expect(vm.$el.textContent).toContain('2017-01');
- done();
- });
- });
- it('handles numeric: milliseconds', (done) => {
- vm.now = 1484438400000;
- vm.args = ['YYYY-MM'];
- vm.$nextTick(() => {
- expect(console.warn).not.toBeCalled();
- expect(vm.$el.textContent).toContain('2017-01');
- done();
- });
- });
- it('handles object', (done) => {
- vm.now = { y: 2017, m: 1, d: 1 };
- vm.args = ['YYYY-MM-DD'];
- vm.$nextTick(() => {
- expect(console.warn).not.toBeCalled();
- expect(vm.$el.textContent).toContain('2017-01-01');
- done();
- });
- });
- it('handles Date object', (done) => {
- vm.now = new Date(2017, 0, 1);
- vm.args = ['YYYY-MM-DD'];
- vm.$nextTick(() => {
- expect(console.warn).not.toBeCalled();
- expect(vm.$el.textContent).toContain('2017-01-01');
- done();
- });
- });
- it('handles Moment object', (done) => {
- vm.now = moment('2017-01-01');
- vm.args = ['YYYY-MM-DD'];
- vm.$nextTick(() => {
- expect(console.warn).not.toBeCalled();
- expect(vm.$el.textContent).toContain('2017-01-01');
- done();
- });
- });
- it('handles undefined', (done) => {
- vm.now = undefined;
- vm.$nextTick(() => {
- expect(console.warn).toBeCalled();
- done();
- });
- });
- it('handles invalid string', (done) => {
- vm.now = 'foo';
- vm.$nextTick(() => {
- expect(console.warn).toBeCalled();
- expect(vm.$el.textContent).toContain('foo');
- done();
- });
- });
- });
- });
|