users.js 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. import moment from 'moment';
  2. import assert from 'assert';
  3. import reducer, { updateAvatar, append, hydrate, hydrateStatus } from 'misago/reducers/users';
  4. describe("Users Reducer", function() {
  5. it("hydrates result", function() {
  6. let timestamp = moment().format();
  7. let state = reducer([], hydrate([
  8. {
  9. something: 'ok',
  10. status: null
  11. },
  12. {
  13. something: 'okie',
  14. status: {
  15. last_click: timestamp,
  16. banned_until: timestamp
  17. }
  18. },
  19. ]));
  20. assert.equal(state[0].status, null, "reducer left empty status unchanged");
  21. assert.equal(state[0].something, 'ok', "other keys were unconverted");
  22. assert.equal(state[1].status.last_click.format(), timestamp,
  23. "reducer deserialized user's status");
  24. assert.equal(state[1].something, 'okie', "other keys were unconverted");
  25. });
  26. it("appends users to list", function() {
  27. let state = [
  28. {
  29. id: 123,
  30. username: 'Bob',
  31. slug: 'bob',
  32. joined_on: moment().format(),
  33. status: {
  34. is_offline: true
  35. }
  36. }
  37. ];
  38. let finalState = reducer(state, append([
  39. {
  40. id: 12,
  41. username: 'Adam',
  42. slug: 'adam',
  43. joined_on: moment().format(),
  44. status: {
  45. is_offline: true
  46. }
  47. },
  48. {
  49. id: 123,
  50. username: 'Bob',
  51. slug: 'bob',
  52. joined_on: moment().format(),
  53. status: {
  54. is_offline: true
  55. }
  56. }
  57. ]));
  58. assert.equal(finalState.length, 2, "final state has valid length");
  59. assert.equal(finalState[0].username, 'Adam', "new user was prepended");
  60. assert.equal(finalState[1].username, 'Bob', "Old user was preserved");
  61. });
  62. it("updates avatar", function() {
  63. let state = [
  64. {
  65. id: 123,
  66. status: null,
  67. avatar_hash: 'aabbccdd'
  68. }
  69. ];
  70. assert.deepEqual(reducer(state, updateAvatar({
  71. id: 123
  72. }, '11223344')), [
  73. {
  74. id: 123,
  75. status: null,
  76. avatar_hash: '11223344'
  77. }
  78. ], "reducer updates user avatar");
  79. assert.deepEqual(reducer(state, updateAvatar({
  80. id: 321
  81. }, '11223344')), [
  82. {
  83. id: 123,
  84. status: null,
  85. avatar_hash: 'aabbccdd'
  86. }
  87. ], "reducer validates user id");
  88. });
  89. });
  90. describe("Hydrate User Status", function() {
  91. it("hydrates status", function() {
  92. let timestamp = moment().format();
  93. let status = hydrateStatus({
  94. some_key: true,
  95. last_click: timestamp,
  96. banned_until: null
  97. });
  98. assert.equal(status.some_key, true, "non-special key was preserved");
  99. assert.equal(status.last_click.format(), timestamp,
  100. "last click key was hydrated");
  101. assert.equal(status.banned_until, null, "ban date was hydrated");
  102. assert.equal(hydrateStatus(null), null, "null state was handled");
  103. });
  104. });