user-status.js 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361
  1. import assert from 'assert';
  2. import moment from 'moment'; // jshint ignore:line
  3. import React from 'react'; // jshint ignore:line
  4. import UserStatus, { StatusIcon, StatusLabel } from 'misago/components/user-status'; // jshint ignore:line
  5. import * as testUtils from 'misago/utils/test-utils';
  6. let status = {
  7. is_hidden: false,
  8. is_online_hidden: false,
  9. is_offline_hidden: false,
  10. is_online: false,
  11. is_offline: false,
  12. last_click: moment().subtract(7, 'days'),
  13. is_banned: false,
  14. banned_until: moment().add(7, 'days')
  15. };
  16. /* jshint ignore:start */
  17. let user = {
  18. username: 'Boberson'
  19. };
  20. /* jshint ignore:end */
  21. describe("User Status", function() {
  22. afterEach(function() {
  23. testUtils.unmountComponents();
  24. });
  25. it('renders for offline user', function() {
  26. /* jshint ignore:start */
  27. let testStatus = Object.assign({}, status, {
  28. is_offline: true
  29. });
  30. testUtils.render(
  31. <UserStatus status={testStatus}>
  32. Some stuff
  33. </UserStatus>
  34. );
  35. /* jshint ignore:end */
  36. let element = $('#test-mount .user-status');
  37. assert.ok(element.hasClass('user-offline'),
  38. "component renders with valid class");
  39. assert.equal(element.text().trim(), "Some stuff",
  40. "component renders its children");
  41. });
  42. it('renders for offline (hidden) user', function() {
  43. /* jshint ignore:start */
  44. let testStatus = Object.assign({}, status, {
  45. is_offline_hidden: true
  46. });
  47. testUtils.render(
  48. <UserStatus status={testStatus}>
  49. Some stuff
  50. </UserStatus>
  51. );
  52. /* jshint ignore:end */
  53. let element = $('#test-mount .user-status');
  54. assert.ok(element.hasClass('user-offline'),
  55. "component renders with valid class");
  56. assert.equal(element.text().trim(), "Some stuff",
  57. "component renders its children");
  58. });
  59. it('renders for online user', function() {
  60. /* jshint ignore:start */
  61. let testStatus = Object.assign({}, status, {
  62. is_online: true
  63. });
  64. testUtils.render(
  65. <UserStatus status={testStatus}>
  66. Some stuff
  67. </UserStatus>
  68. );
  69. /* jshint ignore:end */
  70. let element = $('#test-mount .user-status');
  71. assert.ok(element.hasClass('user-online'),
  72. "component renders with valid class");
  73. assert.equal(element.text().trim(), "Some stuff",
  74. "component renders its children");
  75. });
  76. it('renders for online (hidden) user', function() {
  77. /* jshint ignore:start */
  78. let testStatus = Object.assign({}, status, {
  79. is_online_hidden: true
  80. });
  81. testUtils.render(
  82. <UserStatus status={testStatus}>
  83. Some stuff
  84. </UserStatus>
  85. );
  86. /* jshint ignore:end */
  87. let element = $('#test-mount .user-status');
  88. assert.ok(element.hasClass('user-online'),
  89. "component renders with valid class");
  90. assert.equal(element.text().trim(), "Some stuff",
  91. "component renders its children");
  92. });
  93. it('renders for hidden user', function() {
  94. /* jshint ignore:start */
  95. let testStatus = Object.assign({}, status, {
  96. is_hidden: true
  97. });
  98. testUtils.render(
  99. <UserStatus status={testStatus}>
  100. Some stuff
  101. </UserStatus>
  102. );
  103. /* jshint ignore:end */
  104. let element = $('#test-mount .user-status');
  105. assert.ok(element.hasClass('user-offline'),
  106. "component renders with valid class");
  107. assert.equal(element.text().trim(), "Some stuff",
  108. "component renders its children");
  109. });
  110. it('renders for banned user', function() {
  111. /* jshint ignore:start */
  112. let testStatus = Object.assign({}, status, {
  113. is_banned: true
  114. });
  115. testUtils.render(
  116. <UserStatus status={testStatus}>
  117. Some stuff
  118. </UserStatus>
  119. );
  120. /* jshint ignore:end */
  121. let element = $('#test-mount .user-status');
  122. assert.ok(element.hasClass('user-banned'),
  123. "component renders with valid class");
  124. assert.equal(element.text().trim(), "Some stuff",
  125. "component renders its children");
  126. });
  127. });
  128. describe("User Status Icon", function() {
  129. afterEach(function() {
  130. testUtils.unmountComponents();
  131. });
  132. it('renders for offline user', function() {
  133. /* jshint ignore:start */
  134. let testStatus = Object.assign({}, status, {
  135. is_offline: true
  136. });
  137. testUtils.render(<StatusIcon status={testStatus} />);
  138. /* jshint ignore:end */
  139. let element = $('#test-mount .status-icon');
  140. assert.equal(element.text().trim(), 'panorama_fish_eye',
  141. "component renders with valid icon");
  142. });
  143. it('renders for offline (hidden) user', function() {
  144. /* jshint ignore:start */
  145. let testStatus = Object.assign({}, status, {
  146. is_offline_hidden: true
  147. });
  148. testUtils.render(<StatusIcon status={testStatus} />);
  149. /* jshint ignore:end */
  150. let element = $('#test-mount .status-icon');
  151. assert.equal(element.text().trim(), 'label_outline',
  152. "component renders with valid icon");
  153. });
  154. it('renders for online user', function() {
  155. /* jshint ignore:start */
  156. let testStatus = Object.assign({}, status, {
  157. is_online: true
  158. });
  159. testUtils.render(<StatusIcon status={testStatus} />);
  160. /* jshint ignore:end */
  161. let element = $('#test-mount .status-icon');
  162. assert.equal(element.text().trim(), 'lens',
  163. "component renders with valid icon");
  164. });
  165. it('renders for online (hidden) user', function() {
  166. /* jshint ignore:start */
  167. let testStatus = Object.assign({}, status, {
  168. is_online_hidden: true
  169. });
  170. testUtils.render(<StatusIcon status={testStatus} />);
  171. /* jshint ignore:end */
  172. let element = $('#test-mount .status-icon');
  173. assert.equal(element.text().trim(), 'label',
  174. "component renders with valid icon");
  175. });
  176. it('renders for hidden user', function() {
  177. /* jshint ignore:start */
  178. let testStatus = Object.assign({}, status, {
  179. is_hidden: true
  180. });
  181. testUtils.render(<StatusIcon status={testStatus} />);
  182. /* jshint ignore:end */
  183. let element = $('#test-mount .status-icon');
  184. assert.equal(element.text().trim(), 'help_outline',
  185. "component renders with valid icon");
  186. });
  187. it('renders for banned user', function() {
  188. /* jshint ignore:start */
  189. let testStatus = Object.assign({}, status, {
  190. is_banned: true
  191. });
  192. testUtils.render(<StatusIcon status={testStatus} />);
  193. /* jshint ignore:end */
  194. let element = $('#test-mount .status-icon');
  195. assert.equal(element.text().trim(), 'remove_circle_outline',
  196. "component renders with valid icon");
  197. });
  198. });
  199. describe("User Status Label", function() {
  200. afterEach(function() {
  201. testUtils.unmountComponents();
  202. });
  203. it('renders for offline user', function() {
  204. /* jshint ignore:start */
  205. let testStatus = Object.assign({}, status, {
  206. is_offline: true
  207. });
  208. testUtils.render(<StatusLabel user={user} status={testStatus} />);
  209. /* jshint ignore:end */
  210. let element = $('#test-mount .status-label');
  211. assert.equal(element.text().trim(), gettext("Offline"),
  212. "component renders with valid label");
  213. assert.equal(element.attr('title'),
  214. "Boberson was last seen " + status.last_click.fromNow(),
  215. "component renders with valid help");
  216. });
  217. it('renders for offline (hidden) user', function() {
  218. /* jshint ignore:start */
  219. let testStatus = Object.assign({}, status, {
  220. is_offline_hidden: true
  221. });
  222. testUtils.render(<StatusLabel user={user} status={testStatus} />);
  223. /* jshint ignore:end */
  224. let element = $('#test-mount .status-label');
  225. assert.equal(element.text().trim(), gettext("Offline (hidden)"),
  226. "component renders with valid label");
  227. assert.equal(element.attr('title'),
  228. "Boberson was last seen " + status.last_click.fromNow() + " (hidden)",
  229. "component renders with valid status.help");
  230. });
  231. it('renders for online user', function() {
  232. /* jshint ignore:start */
  233. let testStatus = Object.assign({}, status, {
  234. is_online: true
  235. });
  236. testUtils.render(<StatusLabel user={user} status={testStatus} />);
  237. /* jshint ignore:end */
  238. let element = $('#test-mount .status-label');
  239. assert.equal(element.text().trim(), gettext("Online"),
  240. "component renders with valid label");
  241. assert.equal(element.attr('title'), "Boberson is online",
  242. "component renders with valid help");
  243. });
  244. it('renders for online (hidden) user', function() {
  245. /* jshint ignore:start */
  246. let testStatus = Object.assign({}, status, {
  247. is_online_hidden: true
  248. });
  249. testUtils.render(<StatusLabel user={user} status={testStatus} />);
  250. /* jshint ignore:end */
  251. let element = $('#test-mount .status-label');
  252. assert.equal(element.text().trim(), gettext("Online (hidden)"),
  253. "component renders with valid label");
  254. assert.equal(element.attr('title'), "Boberson is online (hidden)",
  255. "component renders with valid help");
  256. });
  257. it('renders for hidden user', function() {
  258. /* jshint ignore:start */
  259. let testStatus = Object.assign({}, status, {
  260. is_hidden: true
  261. });
  262. testUtils.render(<StatusLabel user={user} status={testStatus} />);
  263. /* jshint ignore:end */
  264. let element = $('#test-mount .status-label');
  265. assert.equal(element.text().trim(), gettext("Hidden"),
  266. "component renders with valid label");
  267. assert.equal(element.attr('title'), "Boberson is hiding presence",
  268. "component renders with valid help");
  269. });
  270. it('renders for banned user', function() {
  271. /* jshint ignore:start */
  272. let testStatus = Object.assign({}, status, {
  273. is_banned: true
  274. });
  275. testUtils.render(<StatusLabel user={user} status={testStatus} />);
  276. /* jshint ignore:end */
  277. let element = $('#test-mount .status-label');
  278. assert.equal(element.text().trim(), gettext("Banned"),
  279. "component renders with valid label");
  280. assert.equal(element.attr('title'),
  281. "Boberson is banned until " + status.banned_until.format('LL, LT'),
  282. "component renders with valid help");
  283. });
  284. it('renders for permabanned user', function() {
  285. /* jshint ignore:start */
  286. let testStatus = Object.assign({}, status, {
  287. is_banned: true,
  288. banned_until: null
  289. });
  290. testUtils.render(<StatusLabel user={user} status={testStatus} />);
  291. /* jshint ignore:end */
  292. let element = $('#test-mount .status-label');
  293. assert.equal(element.text().trim(), gettext("Banned"),
  294. "component renders with valid label");
  295. assert.equal(element.attr('title'), "Boberson is banned",
  296. "component renders with valid help");
  297. });
  298. });