upload.js 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  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. 'avatar_api_url': '/test-api/users/123/avatar/'
  59. }
  60. };
  61. });
  62. afterEach(function() {
  63. testUtils.unmountComponents();
  64. });
  65. it("renders", function(done) {
  66. /* jshint ignore:start */
  67. testUtils.render(
  68. <UploadAvatar options={apiResponse} />
  69. );
  70. /* jshint ignore:end */
  71. testUtils.onElement('#test-mount .modal-avatar-upload', function() {
  72. let element = $('#test-mount .modal-avatar-upload');
  73. assert.ok(true, "component renders");
  74. assert.equal(element.find('p').text().trim(),
  75. "gif, png, jpg, jpeg files smaller than 750 KB",
  76. "valid help text is displayed");
  77. done();
  78. });
  79. });
  80. it("validates image", function(done) {
  81. /* jshint ignore:start */
  82. component = testUtils.render(
  83. <UploadAvatar options={apiResponse} />
  84. );
  85. /* jshint ignore:end */
  86. testUtils.onElement('#test-mount .modal-avatar-upload', function() {
  87. assert.equal(component.validateFile({'size': 83 * 100 * 1000}),
  88. "Selected file is too big. (8.3 MB)",
  89. "too large file is rejected");
  90. assert.equal(component.validateFile(
  91. {'size': 83 * 1000, 'type': "image/bmp"}),
  92. "Selected file type is not supported.",
  93. "invalid file mime type is rejected");
  94. assert.equal(component.validateFile(
  95. {'size': 83 * 1000, 'type': "image/png", 'name': 'test.bmp'}),
  96. "Selected file type is not supported.",
  97. "invalid file extension is rejected");
  98. assert.equal(component.validateFile(
  99. {'size': 83 * 1000, 'type': "image/png", 'name': 'test.png'}), false,
  100. "file raises no errors");
  101. done();
  102. });
  103. });
  104. });