upload.js 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. import assert from 'assert';
  2. import React from 'react'; // jshint ignore:line
  3. import UploadAvatar from 'misago/components/change-avatar/upload'; // jshint ignore:line
  4. import misago from 'misago/index';
  5. import * as testUtils from 'misago/utils/test-utils';
  6. let component = null;
  7. /* jshint ignore:start */
  8. let apiResponse = {
  9. "crop_tmp": false,
  10. "galleries": [
  11. {
  12. "images": [
  13. "avatars/Nature/arctic_fox.jpg",
  14. "avatars/Nature/baby_fox.jpg",
  15. "avatars/Nature/blackbird.jpg",
  16. "avatars/Nature/rabbit.jpg",
  17. "avatars/Nature/serval.jpg"
  18. ],
  19. "name": "Nature"
  20. },
  21. {
  22. "images": [
  23. "avatars/Space/andromeda.jpg",
  24. "avatars/Space/antennae_galaxies.jpg",
  25. "avatars/Space/barred_spiral_galaxy.jpg",
  26. "avatars/Space/messier_74.jpg",
  27. "avatars/Space/ngc_1672.jpg",
  28. "avatars/Space/ngc_4414.jpg"
  29. ],
  30. "name": "Space"
  31. }
  32. ],
  33. "crop_org": false,
  34. "upload": {
  35. "allowed_extensions": [
  36. ".gif",
  37. ".png",
  38. ".jpg",
  39. ".jpeg"
  40. ],
  41. "limit": 750000,
  42. "allowed_mime_types": [
  43. "image/gif",
  44. "image/jpeg",
  45. "image/png"
  46. ]
  47. },
  48. "generated": true,
  49. "gravatar": true
  50. };
  51. /* jshint ignore:end */
  52. describe("Upload Avatar", function() {
  53. beforeEach(function() {
  54. misago._context = {
  55. 'user': {
  56. 'id': 123,
  57. 'avatar_hash': 'aabbccdd',
  58. 'api_url': {
  59. 'avatar': '/test-api/users/123/avatar/'
  60. }
  61. }
  62. };
  63. });
  64. afterEach(function() {
  65. testUtils.unmountComponents();
  66. });
  67. it("renders", function(done) {
  68. /* jshint ignore:start */
  69. testUtils.render(
  70. <UploadAvatar options={apiResponse} />
  71. );
  72. /* jshint ignore:end */
  73. testUtils.onElement('#test-mount .modal-avatar-upload', function() {
  74. let element = $('#test-mount .modal-avatar-upload');
  75. assert.ok(true, "component renders");
  76. assert.equal(element.find('p').text().trim(),
  77. "gif, png, jpg, jpeg files smaller than 750 KB",
  78. "valid help text is displayed");
  79. done();
  80. });
  81. });
  82. it("validates image", function(done) {
  83. /* jshint ignore:start */
  84. component = testUtils.render(
  85. <UploadAvatar options={apiResponse} />
  86. );
  87. /* jshint ignore:end */
  88. testUtils.onElement('#test-mount .modal-avatar-upload', function() {
  89. assert.equal(component.validateFile({'size': 83 * 100 * 1000}),
  90. "Selected file is too big. (8.3 MB)",
  91. "too large file is rejected");
  92. assert.equal(component.validateFile(
  93. {'size': 83 * 1000, 'type': "image/bmp"}),
  94. "Selected file type is not supported.",
  95. "invalid file mime type is rejected");
  96. assert.equal(component.validateFile(
  97. {'size': 83 * 1000, 'type': "image/png", 'name': 'test.bmp'}),
  98. "Selected file type is not supported.",
  99. "invalid file extension is rejected");
  100. assert.equal(component.validateFile(
  101. {'size': 83 * 1000, 'type': "image/png", 'name': 'test.png'}), false,
  102. "file raises no errors");
  103. done();
  104. });
  105. });
  106. });