alerts-reducer.test.js 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209
  1. // TODO: add tests of extension alerts
  2. /* eslint-env jest */
  3. import {AlertTypes, AlertLevels} from '../../../src/lib/alerts/index.jsx';
  4. import alertsReducer from '../../../src/reducers/alerts';
  5. import {
  6. closeAlert,
  7. closeAlertWithId,
  8. filterInlineAlerts,
  9. filterPopupAlerts,
  10. showStandardAlert
  11. } from '../../../src/reducers/alerts';
  12. test('initialState', () => {
  13. let defaultState;
  14. /* alertsReducer(state, action) */
  15. expect(alertsReducer(defaultState, {type: 'anything'})).toBeDefined();
  16. expect(alertsReducer(defaultState, {type: 'anything'}).visible).toBe(true);
  17. expect(alertsReducer(defaultState, {type: 'anything'}).alertsList).toEqual([]);
  18. });
  19. test('create one standard alert', () => {
  20. let defaultState;
  21. const action = showStandardAlert('creating');
  22. const resultState = alertsReducer(defaultState, action);
  23. expect(resultState.alertsList.length).toBe(1);
  24. expect(resultState.alertsList[0].alertId).toBe('creating');
  25. expect(resultState.alertsList[0].alertType).toBe(AlertTypes.STANDARD);
  26. expect(resultState.alertsList[0].level).toBe(AlertLevels.SUCCESS);
  27. });
  28. test('add several standard alerts', () => {
  29. const initialState = {
  30. visible: true,
  31. alertsList: [
  32. {
  33. alertId: 'saving',
  34. alertType: AlertTypes.INLINE,
  35. level: AlertLevels.SUCCESS,
  36. content: null,
  37. iconURL: '/no_image_here.jpg'
  38. }
  39. ]
  40. };
  41. const action = showStandardAlert('creating');
  42. let resultState = alertsReducer(initialState, action);
  43. resultState = alertsReducer(resultState, action);
  44. resultState = alertsReducer(resultState, action);
  45. expect(resultState.alertsList.length).toBe(1);
  46. expect(resultState.alertsList[0].alertType).toBe(AlertTypes.STANDARD);
  47. expect(resultState.alertsList[0].iconURL).not.toBe('/no_image_here.jpg');
  48. expect(resultState.alertsList[0].alertId).toBe('creating');
  49. });
  50. test('create one inline alert message', () => {
  51. let defaultState;
  52. const action = showStandardAlert('saving');
  53. const resultState = alertsReducer(defaultState, action);
  54. expect(resultState.alertsList.length).toBe(1);
  55. expect(resultState.alertsList[0].alertId).toBe('saving');
  56. expect(resultState.alertsList[0].alertType).toBe(AlertTypes.INLINE);
  57. expect(resultState.alertsList[0].level).toBe(AlertLevels.INFO);
  58. });
  59. test('can close alerts by index', () => {
  60. const initialState = {
  61. visible: true,
  62. alertsList: [
  63. {
  64. alertId: 'saving',
  65. alertType: AlertTypes.INLINE,
  66. level: AlertLevels.SUCCESS,
  67. content: null,
  68. iconURL: '/no_image_here.jpg'
  69. }
  70. ]
  71. };
  72. const closeAction = closeAlert(0);
  73. let resultState = alertsReducer(initialState, closeAction);
  74. expect(resultState.alertsList.length).toBe(0);
  75. const createAction = showStandardAlert('creating');
  76. resultState = alertsReducer(resultState, createAction);
  77. expect(resultState.alertsList.length).toBe(1);
  78. resultState = alertsReducer(initialState, closeAction);
  79. expect(resultState.alertsList.length).toBe(0);
  80. resultState = alertsReducer(resultState, createAction);
  81. });
  82. test('can close a single alert by id', () => {
  83. const initialState = {
  84. visible: true,
  85. alertsList: [
  86. {alertId: 'saving'},
  87. {alertId: 'creating'},
  88. {alertId: 'saving'},
  89. {alertId: 'saving'}
  90. ]
  91. };
  92. const closeAction = closeAlertWithId('saving');
  93. let resultState = alertsReducer(initialState, closeAction);
  94. expect(resultState.alertsList.map(a => a.alertId)).toEqual([
  95. 'creating', 'saving', 'saving'
  96. ]);
  97. resultState = alertsReducer(resultState, closeAction);
  98. expect(resultState.alertsList.map(a => a.alertId)).toEqual([
  99. 'creating', 'saving'
  100. ]);
  101. resultState = alertsReducer(resultState, closeAction);
  102. expect(resultState.alertsList.map(a => a.alertId)).toEqual([
  103. 'creating'
  104. ]);
  105. resultState = alertsReducer(resultState, closeAction);
  106. expect(resultState.alertsList.map(a => a.alertId)).toEqual([
  107. 'creating'
  108. ]);
  109. });
  110. test('related alerts can clear each other', () => {
  111. const initialState = {
  112. visible: true,
  113. alertsList: [
  114. {
  115. alertId: 'saving',
  116. alertType: AlertTypes.INLINE,
  117. level: AlertLevels.SUCCESS,
  118. content: null,
  119. iconURL: '/no_image_here.jpg'
  120. },
  121. {
  122. alertId: 'creating',
  123. alertType: AlertTypes.STANDARD,
  124. level: AlertLevels.SUCCESS,
  125. content: null,
  126. iconURL: '/no_image_here.jpg'
  127. }
  128. ]
  129. };
  130. const action = showStandardAlert('saveSuccess');
  131. const resultState = alertsReducer(initialState, action);
  132. expect(resultState.alertsList.length).toBe(2);
  133. expect(resultState.alertsList[0].alertId).toBe('creating');
  134. expect(resultState.alertsList[1].alertId).toBe('saveSuccess');
  135. });
  136. test('several related alerts can be cleared at once', () => {
  137. const initialState = {
  138. visible: true,
  139. alertsList: []
  140. };
  141. const createAction = showStandardAlert('creating');
  142. let resultState = alertsReducer(initialState, createAction);
  143. resultState = alertsReducer(resultState, createAction);
  144. resultState = alertsReducer(resultState, createAction);
  145. const createSuccessAction = showStandardAlert('createSuccess');
  146. resultState = alertsReducer(resultState, createSuccessAction);
  147. expect(resultState.alertsList.length).toBe(1);
  148. expect(resultState.alertsList[0].alertId).toBe('createSuccess');
  149. });
  150. test('filterInlineAlerts only returns inline type alerts', () => {
  151. const alerts = [
  152. {
  153. alertId: 'extension',
  154. alertType: AlertTypes.EXTENSION
  155. },
  156. {
  157. alertId: 'inline',
  158. alertType: AlertTypes.INLINE
  159. },
  160. {
  161. alertId: 'standard',
  162. alertType: AlertTypes.STANDARD
  163. },
  164. {
  165. alertId: 'non-existent type',
  166. alertType: 'wirly-burly'
  167. }
  168. ];
  169. const filtered = filterInlineAlerts(alerts);
  170. expect(filtered.length).toEqual(1);
  171. expect(filtered[0].alertId).toEqual('inline');
  172. });
  173. test('filterPopupAlerts returns standard and extension type alerts', () => {
  174. const alerts = [
  175. {
  176. alertId: 'extension',
  177. alertType: AlertTypes.EXTENSION
  178. },
  179. {
  180. alertId: 'inline',
  181. alertType: AlertTypes.INLINE
  182. },
  183. {
  184. alertId: 'standard',
  185. alertType: AlertTypes.STANDARD
  186. },
  187. {
  188. alertId: 'non-existent type',
  189. alertType: 'wirly-burly'
  190. }
  191. ];
  192. const filtered = filterPopupAlerts(alerts);
  193. expect(filtered.length).toEqual(2);
  194. expect(filtered[0].alertId).toEqual('extension');
  195. expect(filtered[1].alertId).toEqual('standard');
  196. });