snackbar.js 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. import assert from 'assert';
  2. import { StoreWrapper } from 'misago/services/store';
  3. import reducer, { initialState, showSnackbar, hideSnackbar } from 'misago/reducers/snackbar';
  4. import { Snackbar } from 'misago/services/snackbar';
  5. var store, snackbar = null;
  6. describe("Snackbar", function() {
  7. beforeEach(function() {
  8. store = new StoreWrapper();
  9. store.addReducer('snackbar', reducer, initialState);
  10. store.init();
  11. snackbar = new Snackbar();
  12. snackbar.init(store);
  13. });
  14. it("showSnackbar action sets new message", function() {
  15. store.dispatch(showSnackbar("Lorem ipsum dolor met.", 'success'));
  16. let state = store.getState().snackbar;
  17. assert.deepEqual(state, {
  18. type: 'success',
  19. message: "Lorem ipsum dolor met.",
  20. isVisible: true
  21. }, "message was set on state");
  22. });
  23. it("hideSnackbar action hides message", function() {
  24. store.dispatch(showSnackbar("Lorem ipsum dolor met.", 'success'));
  25. store.dispatch(hideSnackbar());
  26. let state = store.getState().snackbar;
  27. assert.ok(!state.isVisible, "visible flag was removed");
  28. });
  29. it("sets message in store", function() {
  30. snackbar.alert("Lorem ipsum dolor met sit amet.", 'warning');
  31. let state = store.getState().snackbar;
  32. assert.deepEqual(state, {
  33. type: 'warning',
  34. message: "Lorem ipsum dolor met sit amet.",
  35. isVisible: true
  36. }, "service set message in store");
  37. });
  38. it("provides shortcut for setting info message", function() {
  39. snackbar.info("Lorem ipsum dolor met sit amet.");
  40. let state = store.getState().snackbar;
  41. assert.deepEqual(state, {
  42. type: 'info',
  43. message: "Lorem ipsum dolor met sit amet.",
  44. isVisible: true
  45. }, "service set info message in store");
  46. });
  47. it("provides shortcut for setting warning message", function() {
  48. snackbar.warning("Lorem ipsum dolor met sit amet.");
  49. let state = store.getState().snackbar;
  50. assert.deepEqual(state, {
  51. type: 'warning',
  52. message: "Lorem ipsum dolor met sit amet.",
  53. isVisible: true
  54. }, "service set warning message in store");
  55. });
  56. it("provides shortcut for setting error message", function() {
  57. snackbar.error("Lorem ipsum dolor met sit amet.");
  58. let state = store.getState().snackbar;
  59. assert.deepEqual(state, {
  60. type: 'error',
  61. message: "Lorem ipsum dolor met sit amet.",
  62. isVisible: true
  63. }, "service set error message in store");
  64. });
  65. it("provides shortcut for setting success message", function() {
  66. snackbar.success("Lorem ipsum dolor met sit amet.");
  67. let state = store.getState().snackbar;
  68. assert.deepEqual(state, {
  69. type: 'success',
  70. message: "Lorem ipsum dolor met sit amet.",
  71. isVisible: true
  72. }, "service set success message in store");
  73. });
  74. it("provides shortcut for backend disconnection", function() {
  75. snackbar.apiError({
  76. status: 0
  77. });
  78. assert.deepEqual(store.getState().snackbar, {
  79. type: 'error',
  80. message: "Lost connection with application.",
  81. isVisible: true
  82. }, "service set disconnected message in store");
  83. });
  84. it("provides shortcut for backend permission denied", function() {
  85. snackbar.apiError({
  86. status: 403,
  87. detail: "Permission denied"
  88. });
  89. assert.deepEqual(store.getState().snackbar, {
  90. type: 'error',
  91. message: "You don't have permission to perform this action.",
  92. isVisible: true
  93. }, "service set default 403 message in store");
  94. });
  95. it("provides shortcut for custom backend permission denied", function() {
  96. snackbar.apiError({
  97. status: 403,
  98. detail: "REJECTION!"
  99. });
  100. assert.deepEqual(store.getState().snackbar, {
  101. type: 'error',
  102. message: "REJECTION!",
  103. isVisible: true
  104. }, "service set custom 403 message in store");
  105. });
  106. it("provides shortcut for backend rejection", function() {
  107. snackbar.apiError({
  108. status: 400,
  109. detail: "NOPE!"
  110. });
  111. assert.deepEqual(store.getState().snackbar, {
  112. type: 'error',
  113. message: "NOPE!",
  114. isVisible: true
  115. }, "service set custom 400 message in store");
  116. });
  117. it("provides shortcut for backend 404 error", function() {
  118. snackbar.apiError({
  119. status: 404,
  120. detail: "NOT FOUND"
  121. });
  122. assert.deepEqual(store.getState().snackbar, {
  123. type: 'error',
  124. message: "Action link is invalid.",
  125. isVisible: true
  126. }, "service set not found message in store");
  127. });
  128. });