• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

CBIIT / bento-icdc-frontend / 26530955228

27 May 2026 06:34PM UTC coverage: 17.321% (-8.4%) from 25.73%
26530955228

Pull #1607

github

web-flow
Merge 361b68ce9 into bc935f39c
Pull Request #1607: Feature/ai test studio - ICDC-4165 & ICDC-4171

306 of 2599 branches covered (11.77%)

Branch coverage included in aggregate %.

1 of 4346 new or added lines in 75 files covered. (0.02%)

2 existing lines in 2 files now uncovered.

2197 of 11852 relevant lines covered (18.54%)

0.41 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

0.0
/src/components/Stats/pageSpecificStatsController.generated.test.jsx
1
// src/components/Stats/pageSpecificStatsController.test.jsx
2
import React from 'react';
3
import { render, screen, cleanup } from '@testing-library/react';
4
import Stats from './pageSpecificStatsController';
5

NEW
6
jest.mock('@material-ui/core/CircularProgress', () => {
×
NEW
7
  return function MockCircularProgress() {
×
NEW
8
    return <div data-testid="spinner" />;
×
9
  };
10
});
11

NEW
12
jest.mock('./StatsView', () => {
×
NEW
13
  return function MockStatsView({ data }) {
×
NEW
14
    return (
×
15
      <div data-testid="stats-view">
16
        <span data-testid="stats-view-count">
17
          {Array.isArray(data) ? data.length : 'na'}
×
18
        </span>
19
        <span data-testid="stats-view-data">{JSON.stringify(data)}</span>
20
      </div>
21
    );
22
  };
23
});
24

NEW
25
const mockFilterData = jest.fn();
×
NEW
26
jest.mock('../../bento-core', () => ({
×
NEW
27
  filterData: (...args) => mockFilterData(...args),
×
28
}));
29

NEW
30
const mockUseSelector = jest.fn();
×
NEW
31
jest.mock('react-redux', () => ({
×
NEW
32
  useSelector: selectorFn => mockUseSelector(selectorFn),
×
33
}));
34

NEW
35
describe('Stats (pageSpecificStatsController)', () => {
×
NEW
36
  afterEach(() => {
×
NEW
37
    cleanup();
×
NEW
38
    jest.clearAllMocks();
×
39
  });
40

NEW
41
  test('renders loader when subjectOverView data is missing', () => {
×
NEW
42
    const state = {
×
43
      dashboard: {
44
        isFetched: false,
45
      },
46
    };
47

NEW
48
    mockUseSelector.mockImplementation(selectorFn => selectorFn(state));
×
49

NEW
50
    render(<Stats filter={{ some: 'filter' }} />);
×
51

NEW
52
    expect(screen.getByTestId('spinner')).toBeTruthy();
×
NEW
53
    expect(screen.queryByTestId('stats-view')).toBeNull();
×
54
  });
55

NEW
56
  test('calls filterData for each datum and renders loader because selector returns undefined', () => {
×
NEW
57
    const data = [{ id: 1 }, { id: 2 }, { id: 3 }];
×
NEW
58
    const filter = { type: 'foo' };
×
NEW
59
    const state = {
×
60
      dashboard: {
61
        isFetched: true,
62
        subjectOverView: {
63
          data,
64
        },
65
      },
66
    };
67

NEW
68
    mockFilterData.mockImplementation(() => true);
×
NEW
69
    mockUseSelector.mockImplementation(selectorFn => selectorFn(state));
×
70

NEW
71
    render(<Stats filter={filter} />);
×
72

NEW
73
    expect(mockFilterData).toHaveBeenCalledTimes(data.length);
×
NEW
74
    data.forEach((item, idx) => {
×
NEW
75
      expect(mockFilterData).toHaveBeenNthCalledWith(idx + 1, item, filter);
×
76
    });
77

NEW
78
    expect(screen.getByTestId('spinner')).toBeTruthy();
×
NEW
79
    expect(screen.queryByTestId('stats-view')).toBeNull();
×
80
  });
81

NEW
82
  test('uses undefined filter when no filter prop is provided', () => {
×
NEW
83
    const data = [{ id: 'a' }];
×
NEW
84
    const state = {
×
85
      dashboard: {
86
        isFetched: false,
87
        subjectOverView: {
88
          data,
89
        },
90
      },
91
    };
92

NEW
93
    mockFilterData.mockImplementation(() => true);
×
NEW
94
    mockUseSelector.mockImplementation(selectorFn => selectorFn(state));
×
95

NEW
96
    render(<Stats />);
×
97

NEW
98
    expect(mockFilterData).toHaveBeenCalledTimes(1);
×
NEW
99
    expect(mockFilterData).toHaveBeenCalledWith(data[0], undefined);
×
100

NEW
101
    expect(screen.getByTestId('spinner')).toBeTruthy();
×
NEW
102
    expect(screen.queryByTestId('stats-view')).toBeNull();
×
103
  });
104

NEW
105
  test('renders StatsView when useSelector returns a non-empty array directly', () => {
×
NEW
106
    const returnedData = [{ x: 1 }, { x: 2 }];
×
NEW
107
    mockUseSelector.mockImplementation(() => returnedData);
×
108

NEW
109
    render(<Stats filter={{ any: 'thing' }} />);
×
110

NEW
111
    expect(screen.queryByTestId('spinner')).toBeNull();
×
NEW
112
    expect(screen.getByTestId('stats-view')).toBeTruthy();
×
NEW
113
    expect(screen.getByTestId('stats-view-count').textContent).toBe(
×
114
      String(returnedData.length)
115
    );
NEW
116
    expect(screen.getByTestId('stats-view-data').textContent).toBe(
×
117
      JSON.stringify(returnedData)
118
    );
119
  });
120

NEW
121
  test('renders loader when useSelector returns an empty array', () => {
×
NEW
122
    mockUseSelector.mockImplementation(() => []);
×
123

NEW
124
    render(<Stats filter={{}} />);
×
125

NEW
126
    expect(screen.getByTestId('spinner')).toBeTruthy();
×
NEW
127
    expect(screen.queryByTestId('stats-view')).toBeNull();
×
128
  });
129
});
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc