reducers.test.ts 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. import { reducerTester } from 'test/core/redux/reducerTester';
  2. import { dataSourcesReducer, initialState } from './reducers';
  3. import {
  4. dataSourcesLoaded,
  5. dataSourceLoaded,
  6. setDataSourcesSearchQuery,
  7. setDataSourcesLayoutMode,
  8. dataSourceTypesLoad,
  9. dataSourceTypesLoaded,
  10. setDataSourceTypeSearchQuery,
  11. dataSourceMetaLoaded,
  12. setDataSourceName,
  13. setIsDefault,
  14. } from './actions';
  15. import { getMockDataSources, getMockDataSource } from '../__mocks__/dataSourcesMocks';
  16. import { LayoutModes } from 'app/core/components/LayoutSelector/LayoutSelector';
  17. import { DataSourcesState } from 'app/types';
  18. import { PluginMetaInfo } from '@grafana/ui';
  19. const mockPlugin = () => ({
  20. defaultNavUrl: 'defaultNavUrl',
  21. enabled: true,
  22. hasUpdate: true,
  23. id: 'id',
  24. info: {} as PluginMetaInfo,
  25. latestVersion: 'latestVersion',
  26. name: 'name',
  27. pinned: true,
  28. state: 'state',
  29. type: 'type',
  30. module: {},
  31. });
  32. describe('dataSourcesReducer', () => {
  33. describe('when dataSourcesLoaded is dispatched', () => {
  34. it('then state should be correct', () => {
  35. const dataSources = getMockDataSources(0);
  36. reducerTester()
  37. .givenReducer(dataSourcesReducer, initialState)
  38. .whenActionIsDispatched(dataSourcesLoaded(dataSources))
  39. .thenStateShouldEqual({ ...initialState, hasFetched: true, dataSources, dataSourcesCount: 1 });
  40. });
  41. });
  42. describe('when dataSourceLoaded is dispatched', () => {
  43. it('then state should be correct', () => {
  44. const dataSource = getMockDataSource();
  45. reducerTester()
  46. .givenReducer(dataSourcesReducer, initialState)
  47. .whenActionIsDispatched(dataSourceLoaded(dataSource))
  48. .thenStateShouldEqual({ ...initialState, dataSource });
  49. });
  50. });
  51. describe('when setDataSourcesSearchQuery is dispatched', () => {
  52. it('then state should be correct', () => {
  53. reducerTester()
  54. .givenReducer(dataSourcesReducer, initialState)
  55. .whenActionIsDispatched(setDataSourcesSearchQuery('some query'))
  56. .thenStateShouldEqual({ ...initialState, searchQuery: 'some query' });
  57. });
  58. });
  59. describe('when setDataSourcesLayoutMode is dispatched', () => {
  60. it('then state should be correct', () => {
  61. const layoutMode: LayoutModes = LayoutModes.Grid;
  62. reducerTester()
  63. .givenReducer(dataSourcesReducer, initialState)
  64. .whenActionIsDispatched(setDataSourcesLayoutMode(layoutMode))
  65. .thenStateShouldEqual({ ...initialState, layoutMode: LayoutModes.Grid });
  66. });
  67. });
  68. describe('when dataSourceTypesLoad is dispatched', () => {
  69. it('then state should be correct', () => {
  70. const state: DataSourcesState = { ...initialState, dataSourceTypes: [mockPlugin()] };
  71. reducerTester()
  72. .givenReducer(dataSourcesReducer, state)
  73. .whenActionIsDispatched(dataSourceTypesLoad())
  74. .thenStateShouldEqual({ ...initialState, dataSourceTypes: [], isLoadingDataSources: true });
  75. });
  76. });
  77. describe('when dataSourceTypesLoaded is dispatched', () => {
  78. it('then state should be correct', () => {
  79. const dataSourceTypes = [mockPlugin()];
  80. const state: DataSourcesState = { ...initialState, isLoadingDataSources: true };
  81. reducerTester()
  82. .givenReducer(dataSourcesReducer, state)
  83. .whenActionIsDispatched(dataSourceTypesLoaded(dataSourceTypes))
  84. .thenStateShouldEqual({ ...initialState, dataSourceTypes, isLoadingDataSources: false });
  85. });
  86. });
  87. describe('when setDataSourceTypeSearchQuery is dispatched', () => {
  88. it('then state should be correct', () => {
  89. reducerTester()
  90. .givenReducer(dataSourcesReducer, initialState)
  91. .whenActionIsDispatched(setDataSourceTypeSearchQuery('type search query'))
  92. .thenStateShouldEqual({ ...initialState, dataSourceTypeSearchQuery: 'type search query' });
  93. });
  94. });
  95. describe('when dataSourceMetaLoaded is dispatched', () => {
  96. it('then state should be correct', () => {
  97. const dataSourceMeta = mockPlugin();
  98. reducerTester()
  99. .givenReducer(dataSourcesReducer, initialState)
  100. .whenActionIsDispatched(dataSourceMetaLoaded(dataSourceMeta))
  101. .thenStateShouldEqual({ ...initialState, dataSourceMeta });
  102. });
  103. });
  104. describe('when setDataSourceName is dispatched', () => {
  105. it('then state should be correct', () => {
  106. reducerTester()
  107. .givenReducer(dataSourcesReducer, initialState)
  108. .whenActionIsDispatched(setDataSourceName('some name'))
  109. .thenStateShouldEqual({ ...initialState, dataSource: { name: 'some name' } });
  110. });
  111. });
  112. describe('when setIsDefault is dispatched', () => {
  113. it('then state should be correct', () => {
  114. reducerTester()
  115. .givenReducer(dataSourcesReducer, initialState)
  116. .whenActionIsDispatched(setIsDefault(true))
  117. .thenStateShouldEqual({ ...initialState, dataSource: { isDefault: true } });
  118. });
  119. });
  120. });