go.chromium.org/luci@v0.0.0-20240309015107-7cdc2e660f33/milo/ui/src/common/tools/time_utils/time_utils.test.ts (about)

     1  // Copyright 2020 The LUCI Authors.
     2  //
     3  // Licensed under the Apache License, Version 2.0 (the "License");
     4  // you may not use this file except in compliance with the License.
     5  // You may obtain a copy of the License at
     6  //
     7  //      http://www.apache.org/licenses/LICENSE-2.0
     8  //
     9  // Unless required by applicable law or agreed to in writing, software
    10  // distributed under the License is distributed on an "AS IS" BASIS,
    11  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    12  // See the License for the specific language governing permissions and
    13  // limitations under the License.
    14  
    15  import { Duration } from 'luxon';
    16  
    17  import { displayCompactDuration, displayDuration } from './time_utils';
    18  
    19  describe('displayDuration', () => {
    20    test('should display correct duration in days and hours', async () => {
    21      const duration = Duration.fromISO('P3DT11H');
    22      expect(displayDuration(duration)).toStrictEqual('3 days 11 hours');
    23    });
    24    test('should display correct duration in hours and minutes', async () => {
    25      const duration = Duration.fromISO('PT1H11M');
    26      expect(displayDuration(duration)).toStrictEqual('1 hour 11 mins');
    27    });
    28    test('should display correct duration in minutes and seconds', async () => {
    29      const duration = Duration.fromISO('PT2M3S');
    30      expect(displayDuration(duration)).toStrictEqual('2 mins 3 secs');
    31    });
    32    test('should display correct duration in seconds', async () => {
    33      const duration = Duration.fromISO('PT15S');
    34      expect(displayDuration(duration)).toStrictEqual('15 secs');
    35    });
    36    test('should display correct duration in milliseconds', async () => {
    37      const duration = Duration.fromMillis(999);
    38      expect(displayDuration(duration)).toStrictEqual('999 ms');
    39    });
    40    test('should ignore milliseconds if duration > 1 second', async () => {
    41      const duration = Duration.fromMillis(1999);
    42      expect(displayDuration(duration)).toStrictEqual('1 sec');
    43    });
    44    test('should display zero duration correctly', async () => {
    45      const duration = Duration.fromMillis(0);
    46      expect(displayDuration(duration)).toStrictEqual('0 ms');
    47    });
    48  });
    49  
    50  describe('displayCompactDuration', () => {
    51    test("should display correct duration when it's null", async () => {
    52      expect(displayCompactDuration(null)).toEqual(['N/A', '']);
    53    });
    54    test('should display correct duration in days', async () => {
    55      const duration = Duration.fromISO('P3DT11H');
    56      expect(displayCompactDuration(duration)).toEqual(['3.5d', 'd']);
    57    });
    58    test('should display correct duration in hours', async () => {
    59      const duration = Duration.fromISO('PT1H11M');
    60      expect(displayCompactDuration(duration)).toEqual(['1.2h', 'h']);
    61    });
    62    test('should display correct duration in minutes', async () => {
    63      const duration = Duration.fromISO('PT2M3S');
    64      expect(displayCompactDuration(duration)).toEqual(['2.0m', 'm']);
    65    });
    66    test('should display correct duration in seconds', async () => {
    67      const duration = Duration.fromISO('PT15S');
    68      expect(displayCompactDuration(duration)).toEqual(['15s', 's']);
    69    });
    70    test('should display correct duration in milliseconds', async () => {
    71      const duration = Duration.fromMillis(999);
    72      expect(displayCompactDuration(duration)).toEqual(['999ms', 'ms']);
    73    });
    74    test("should not display the duration in ms if it's no less than 999.5ms", async () => {
    75      const duration = Duration.fromMillis(999.5);
    76      expect(displayCompactDuration(duration)).toEqual(['1.0s', 's']);
    77    });
    78    test("should display the duration in ms if it's less than 999.5ms", async () => {
    79      const duration = Duration.fromMillis(999.4999);
    80      expect(displayCompactDuration(duration)).toEqual(['999ms', 'ms']);
    81    });
    82  });