/**
 * This file is part of the NocoBase (R) project.
 * Copyright (c) 2020-2024 NocoBase Co., Ltd.
 * Authors: NocoBase Team.
 *
 * This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
 * For more information, please refer to: https://www.nocobase.com/agreement.
 */

import { seedDates, addToDate, getWeekNumberISO8601 } from '../helpers/date-helper';
import { ViewMode } from '../types/public-types';

describe('seed date', () => {
  test('daily', () => {
    expect(seedDates(new Date(2020, 5, 28), new Date(2020, 6, 2), ViewMode.Day)).toEqual([
      new Date(2020, 5, 28),
      new Date(2020, 5, 29),
      new Date(2020, 5, 30),
      new Date(2020, 6, 1),
      new Date(2020, 6, 2),
    ]);
  });

  test('weekly', () => {
    expect(seedDates(new Date(2020, 5, 28), new Date(2020, 6, 19), ViewMode.Week)).toEqual([
      new Date(2020, 5, 28),
      new Date(2020, 6, 5),
      new Date(2020, 6, 12),
      new Date(2020, 6, 19),
    ]);
  });

  test('monthly', () => {
    expect(seedDates(new Date(2020, 5, 28), new Date(2020, 6, 19), ViewMode.Month)).toEqual([
      new Date(2020, 5, 28),
      new Date(2020, 6, 28),
    ]);
  });

  test('quarterly', () => {
    expect(seedDates(new Date(2020, 5, 28), new Date(2020, 5, 29), ViewMode.QuarterDay)).toEqual([
      new Date(2020, 5, 28, 0, 0),
      new Date(2020, 5, 28, 6, 0),
      new Date(2020, 5, 28, 12, 0),
      new Date(2020, 5, 28, 18, 0),
      new Date(2020, 5, 29, 0, 0),
    ]);
  });
});

describe('add to date', () => {
  test('add month', () => {
    expect(addToDate(new Date(2020, 0, 1), 40, 'month')).toEqual(new Date(2023, 4, 1));
  });

  test('add day', () => {
    expect(addToDate(new Date(2020, 0, 1), 40, 'day')).toEqual(new Date(2020, 1, 10));
  });
});

test('get week number', () => {
  expect(getWeekNumberISO8601(new Date(2019, 11, 31))).toEqual('01');
  expect(getWeekNumberISO8601(new Date(2021, 0, 1))).toEqual('53');
  expect(getWeekNumberISO8601(new Date(2020, 6, 20))).toEqual('30');
});
