profile.js 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. import assert from 'assert';
  2. import moment from 'moment';
  3. import { StoreWrapper } from 'misago/services/store';
  4. import { updateAvatar, updateUsername } from 'misago/reducers/users';
  5. import reducer, { hydrate, patch } from 'misago/reducers/profile';
  6. let profileMock = null;
  7. let store = null;
  8. describe("Profile Reducer", function() {
  9. beforeEach(function() {
  10. profileMock = {
  11. id: 42,
  12. username: "BobBoberson",
  13. email: 'sadsa@sda.com',
  14. avatar_hash: 'aabbccdd',
  15. joined_on: moment().format(),
  16. title: '',
  17. rank: {
  18. id: 321,
  19. name: "Test Rank",
  20. slug: "test-rank",
  21. css_class: '',
  22. is_tab: false,
  23. title: ''
  24. },
  25. status: {
  26. last_click: moment().format(),
  27. banned_until: null
  28. },
  29. is_followed: false,
  30. acl: {
  31. can_follow: false,
  32. can_moderate: false
  33. }
  34. };
  35. store = new StoreWrapper();
  36. store.addReducer('profile', reducer, {});
  37. store.init();
  38. });
  39. it("hydrate action hydrates user profile", function() {
  40. let joinedOn = moment().format();
  41. profileMock.joined_on = joinedOn;
  42. let lastClick = moment().format();
  43. profileMock.joined_on = lastClick;
  44. store.dispatch(hydrate(profileMock));
  45. let profile = store.getState().profile;
  46. assert.equal(profile.joined_on.format(), joinedOn,
  47. "joined_on date becomes moment() object");
  48. assert.equal(profile.status.last_click.format(), lastClick,
  49. "user status is hydrated too");
  50. assert.equal(profile.id, profileMock.id, "other keys are preserved");
  51. });
  52. it("patch action updates user profile", function() {
  53. store.dispatch(hydrate(profileMock));
  54. store.dispatch(patch({
  55. 'email': 'yolo@test.com',
  56. 'lorem': 'ipsum'
  57. }));
  58. let profile = store.getState().profile;
  59. assert.equal(profile.email, 'yolo@test.com',
  60. "existing property was patched");
  61. assert.equal(profile.lorem, 'ipsum',
  62. "new property was patched in");
  63. });
  64. it("updateAvatar updates profile avatar", function() {
  65. store.dispatch(hydrate(profileMock));
  66. store.dispatch(updateAvatar(profileMock, 'new-hash'));
  67. let profile = store.getState().profile;
  68. assert.equal(profile.avatar_hash, 'new-hash',
  69. "avatar hash was updated for profile user");
  70. store.dispatch(updateAvatar({id: 1}, 'other-hash'));
  71. profile = store.getState().profile;
  72. assert.equal(profile.avatar_hash, 'new-hash',
  73. "profile reducer tests id for avatar change");
  74. });
  75. it("updateUsername updates profile username", function() {
  76. store.dispatch(hydrate(profileMock));
  77. store.dispatch(updateUsername(profileMock, 'RenamedUser', 'renameduser'));
  78. let profile = store.getState().profile;
  79. assert.equal(profile.username, 'RenamedUser',
  80. "profile username was updated");
  81. assert.equal(profile.slug, 'renameduser',
  82. "profile slug was updated");
  83. store.dispatch(updateUsername({id: 1}, 'OtherRename', 'otherrename'));
  84. profile = store.getState().profile;
  85. assert.equal(profile.username, 'RenamedUser',
  86. "profile reducer tests id for username change");
  87. });
  88. });