Skip to content
Snippets Groups Projects
Select Git revision
  • move-gl-dropdown
  • improve-table-pagination-spec
  • move-markdown-preview
  • winh-fix-merge-request-spec
  • master default
  • index-namespaces-lower-name
  • winh-single-karma-test
  • 10-3-stable
  • 36782-replace-team-user-role-with-add_role-user-in-specs
  • winh-modal-internal-state
  • tz-ide-file-icons
  • 38869-milestone-select
  • update-autodevops-template
  • jivl-activate-repo-cookie-preferences
  • qa-add-deploy-key
  • docs-move-article-ldap
  • 40780-choose-file
  • 22643-manual-job-page
  • refactor-cluster-show-page-conservative
  • dm-sidekiq-versioning
  • v10.4.0.pre
  • v10.3.0
  • v10.3.0-rc5
  • v10.3.0-rc4
  • v10.3.0-rc3
  • v10.3.0-rc2
  • v10.2.5
  • v10.3.0-rc1
  • v10.0.7
  • v10.1.5
  • v10.2.4
  • v10.2.3
  • v10.2.2
  • v10.2.1
  • v10.3.0.pre
  • v10.2.0
  • v10.2.0-rc4
  • v10.2.0-rc3
  • v10.1.4
  • v10.2.0-rc2
40 results

pretty_time_spec.js.es6

Forked from GitLab.org / GitLab FOSS
7565 commits behind the upstream repository.
  • Mike Greiling's avatar
    0d2ae3e7
    Merge branch 'master' into go-go-gadget-webpack · 0d2ae3e7
    Mike Greiling authored
    * master: (67 commits)
      Add some API endpoints for time tracking.
      use destructuring syntax instead
      add changelog yml file
      correct User_agent placement in robots.txt
      Fixing typo
      Fix Project#update_repository_size to convert MB to Bytes properly
      Remove repository trait from factories that don't need it in features
      Add the `:repository` trait to `:project` factories in Cucumber steps
      Add a `:repository` trait to the `:empty_project` factory
      Update clipboard_button text: Copy commit SHA to clipboard
      Fix search bar filter dropdown scrollbars
      get rid of log
      fix UI behaviour - only make new calls when button is clicked and dropdown is not displayed
      better UI fix - simple solution
      Disable all cops in .rubocop_todo.yml
      fix spec
      refactored a bunch of stuff based on feedback
      fix serializer
      fix bug retrieving medians
      fix specs
      ...
    0d2ae3e7
    History
    Merge branch 'master' into go-go-gadget-webpack
    Mike Greiling authored
    * master: (67 commits)
      Add some API endpoints for time tracking.
      use destructuring syntax instead
      add changelog yml file
      correct User_agent placement in robots.txt
      Fixing typo
      Fix Project#update_repository_size to convert MB to Bytes properly
      Remove repository trait from factories that don't need it in features
      Add the `:repository` trait to `:project` factories in Cucumber steps
      Add a `:repository` trait to the `:empty_project` factory
      Update clipboard_button text: Copy commit SHA to clipboard
      Fix search bar filter dropdown scrollbars
      get rid of log
      fix UI behaviour - only make new calls when button is clicked and dropdown is not displayed
      better UI fix - simple solution
      Disable all cops in .rubocop_todo.yml
      fix spec
      refactored a bunch of stuff based on feedback
      fix serializer
      fix bug retrieving medians
      fix specs
      ...
pretty_time_spec.js.es6 3.88 KiB
require('~/lib/utils/pretty_time');

(() => {
  const prettyTime = gl.utils.prettyTime;

  describe('prettyTime methods', function () {
    describe('parseSeconds', function () {
      it('should correctly parse a negative value', function () {
        const parser = prettyTime.parseSeconds;

        const zeroSeconds = parser(-1000);

        expect(zeroSeconds.minutes).toBe(16);
        expect(zeroSeconds.hours).toBe(0);
        expect(zeroSeconds.days).toBe(0);
        expect(zeroSeconds.weeks).toBe(0);
      });

      it('should correctly parse a zero value', function () {
        const parser = prettyTime.parseSeconds;

        const zeroSeconds = parser(0);

        expect(zeroSeconds.minutes).toBe(0);
        expect(zeroSeconds.hours).toBe(0);
        expect(zeroSeconds.days).toBe(0);
        expect(zeroSeconds.weeks).toBe(0);
      });

      it('should correctly parse a small non-zero second values', function () {
        const parser = prettyTime.parseSeconds;

        const subOneMinute = parser(10);

        expect(subOneMinute.minutes).toBe(0);
        expect(subOneMinute.hours).toBe(0);
        expect(subOneMinute.days).toBe(0);
        expect(subOneMinute.weeks).toBe(0);

        const aboveOneMinute = parser(100);

        expect(aboveOneMinute.minutes).toBe(1);
        expect(aboveOneMinute.hours).toBe(0);
        expect(aboveOneMinute.days).toBe(0);
        expect(aboveOneMinute.weeks).toBe(0);

        const manyMinutes = parser(1000);

        expect(manyMinutes.minutes).toBe(16);
        expect(manyMinutes.hours).toBe(0);
        expect(manyMinutes.days).toBe(0);
        expect(manyMinutes.weeks).toBe(0);
      });

      it('should correctly parse large second values', function () {
        const parser = prettyTime.parseSeconds;

        const aboveOneHour = parser(4800);

        expect(aboveOneHour.minutes).toBe(20);
        expect(aboveOneHour.hours).toBe(1);
        expect(aboveOneHour.days).toBe(0);
        expect(aboveOneHour.weeks).toBe(0);

        const aboveOneDay = parser(110000);

        expect(aboveOneDay.minutes).toBe(33);
        expect(aboveOneDay.hours).toBe(6);
        expect(aboveOneDay.days).toBe(3);
        expect(aboveOneDay.weeks).toBe(0);

        const aboveOneWeek = parser(25000000);

        expect(aboveOneWeek.minutes).toBe(26);
        expect(aboveOneWeek.hours).toBe(0);
        expect(aboveOneWeek.days).toBe(3);
        expect(aboveOneWeek.weeks).toBe(173);
      });
    });

    describe('stringifyTime', function () {
      it('should stringify values with all non-zero units', function () {
        const timeObject = {
          weeks: 1,
          days: 4,
          hours: 7,
          minutes: 20,
        };

        const timeString = prettyTime.stringifyTime(timeObject);

        expect(timeString).toBe('1w 4d 7h 20m');
      });

      it('should stringify values with some non-zero units', function () {
        const timeObject = {
          weeks: 0,
          days: 4,
          hours: 0,
          minutes: 20,
        };

        const timeString = prettyTime.stringifyTime(timeObject);

        expect(timeString).toBe('4d 20m');
      });

      it('should stringify values with no non-zero units', function () {
        const timeObject = {
          weeks: 0,
          days: 0,
          hours: 0,
          minutes: 0,
        };

        const timeString = prettyTime.stringifyTime(timeObject);

        expect(timeString).toBe('0m');
      });
    });

    describe('abbreviateTime', function () {
      it('should abbreviate stringified times for weeks', function () {
        const fullTimeString = '1w 3d 4h 5m';
        expect(prettyTime.abbreviateTime(fullTimeString)).toBe('1w');
      });

      it('should abbreviate stringified times for non-weeks', function () {
        const fullTimeString = '0w 3d 4h 5m';
        expect(prettyTime.abbreviateTime(fullTimeString)).toBe('3d');
      });
    });
  });
})(window.gl || (window.gl = {}));