github.com/thanos-io/thanos@v0.32.5/pkg/ui/react-app/src/thanos/pages/blocks/BlockDetails.test.tsx (about)

     1  import React from 'react';
     2  import { mount } from 'enzyme';
     3  import moment from 'moment';
     4  import { BlockDetails, BlockDetailsProps } from './BlockDetails';
     5  import { sampleAPIResponse } from './__testdata__/testdata';
     6  
     7  const sampleBlock = sampleAPIResponse.data.blocks[0];
     8  const formatTime = (time: number): string => {
     9    return moment.unix(time / 1000).format('LLL');
    10  };
    11  
    12  describe('BlockDetails', () => {
    13    const defaultProps: BlockDetailsProps = {
    14      block: sampleBlock,
    15      selectBlock: (): void => {
    16        // do nothing
    17      },
    18    };
    19    window.URL.createObjectURL = jest.fn();
    20    const blockDetails = mount(<BlockDetails {...defaultProps} />);
    21  
    22    it('renders a heading with block ulid', () => {
    23      const title = blockDetails.find({ 'data-testid': 'ulid' });
    24      expect(title).toHaveLength(1);
    25      expect(title.text()).toEqual(sampleBlock.ulid);
    26    });
    27  
    28    it('renders start time of the block', () => {
    29      const div = blockDetails.find({ 'data-testid': 'start-time' });
    30      expect(div).toHaveLength(1);
    31      expect(div.find('span').text()).toBe(formatTime(sampleBlock.minTime));
    32    });
    33  
    34    it('renders end time of the block', () => {
    35      const div = blockDetails.find({ 'data-testid': 'end-time' });
    36      expect(div).toHaveLength(1);
    37      expect(div.find('span').text()).toBe(formatTime(sampleBlock.maxTime));
    38    });
    39  
    40    it('renders duration of the block', () => {
    41      const div = blockDetails.find({ 'data-testid': 'duration' });
    42      expect(div).toHaveLength(1);
    43      expect(div.find('span').text()).toBe(moment.duration(sampleBlock.maxTime - sampleBlock.minTime, 'ms').humanize());
    44    });
    45  
    46    it('renders total number of series in the block', () => {
    47      const div = blockDetails.find({ 'data-testid': 'series' });
    48      expect(div).toHaveLength(1);
    49      expect(div.find('span').text()).toBe(sampleBlock.stats.numSeries.toString());
    50    });
    51  
    52    it('renders total number of samples in the block', () => {
    53      const div = blockDetails.find({ 'data-testid': 'samples' });
    54      expect(div).toHaveLength(1);
    55      expect(div.find('span').text()).toBe(sampleBlock.stats.numSamples.toString());
    56    });
    57  
    58    it('renders total number of chunks in the block', () => {
    59      const div = blockDetails.find({ 'data-testid': 'chunks' });
    60      expect(div).toHaveLength(1);
    61      expect(div.find('span').text()).toBe(sampleBlock.stats.numChunks.toString());
    62    });
    63  
    64    it('renders downsampling resolution of the block', () => {
    65      const div = blockDetails.find({ 'data-testid': 'resolution' });
    66      expect(div).toHaveLength(1);
    67      expect(div.find('span').text()).toBe(sampleBlock.thanos.downsample.resolution.toString());
    68    });
    69  
    70    it('renders compaction level of the block', () => {
    71      const div = blockDetails.find({ 'data-testid': 'level' });
    72      expect(div).toHaveLength(1);
    73      expect(div.find('span').text()).toBe(sampleBlock.compaction.level.toString());
    74    });
    75  
    76    it('renders source of the block', () => {
    77      const div = blockDetails.find({ 'data-testid': 'source' });
    78      expect(div).toHaveLength(1);
    79      expect(div.find('span').text()).toBe(sampleBlock.thanos.source);
    80    });
    81  
    82    it('renders the download button', () => {
    83      const div = blockDetails.find({ 'data-testid': 'download' });
    84      window.URL.createObjectURL = jest.fn(() => 'details');
    85      expect(div).toHaveLength(1);
    86      expect(div.find('a').text()).toBe('Download meta.json');
    87    });
    88  
    89    it('renders a list of the labels', () => {
    90      const div = blockDetails.find({ 'data-testid': 'labels' });
    91      const list = div.find('ul');
    92      expect(div).toHaveLength(1);
    93      expect(list).toHaveLength(1);
    94  
    95      const labels = list.find('li');
    96      expect(labels).toHaveLength(Object.keys(sampleBlock.thanos.labels).length);
    97    });
    98  });