import assert from 'assert';
import React from 'react'; // jshint ignore:line
import ChangeAvatarIndex from 'misago/components/change-avatar/index'; // jshint ignore:line
import misago from 'misago/index';
import snackbar from 'misago/services/snackbar';
import * as testUtils from 'misago/utils/test-utils';
let snackbarStore = null;
let apiResponse = {
"crop_tmp": false,
"galleries": [
{
"images": [
"avatars/Nature/arctic_fox.jpg",
"avatars/Nature/baby_fox.jpg",
"avatars/Nature/blackbird.jpg",
"avatars/Nature/rabbit.jpg",
"avatars/Nature/serval.jpg"
],
"name": "Nature"
},
{
"images": [
"avatars/Space/andromeda.jpg",
"avatars/Space/antennae_galaxies.jpg",
"avatars/Space/barred_spiral_galaxy.jpg",
"avatars/Space/messier_74.jpg",
"avatars/Space/ngc_1672.jpg",
"avatars/Space/ngc_4414.jpg"
],
"name": "Space"
}
],
"crop_org": false,
"upload": {
"allowed_extensions": [
".gif",
".png",
".jpg",
".jpeg"
],
"limit": 750000,
"allowed_mime_types": [
"image/gif",
"image/jpeg",
"image/png"
]
},
"generated": true,
"gravatar": true
};
describe("Change Avatar Index", function() {
beforeEach(function() {
snackbarStore = testUtils.snackbarStoreMock();
snackbar.init(snackbarStore);
misago._context = {
'user': {
'id': 123,
'avatar_hash': 'aabbccdd',
'api_url': {
'avatar': '/test-api/users/123/avatar/'
}
}
};
});
afterEach(function() {
testUtils.unmountComponents();
testUtils.snackbarClear(snackbar);
$.mockjax.clear();
});
it("renders", function(done) {
/* jshint ignore:start */
testUtils.render(
);
/* jshint ignore:end */
testUtils.onElement('#test-mount .modal-avatar-index', function() {
assert.ok(true, "component renders");
done();
});
});
it("renders without gravatar button", function(done) {
/* jshint ignore:start */
let amendedOptions = Object.assign({}, apiResponse, {gravatar: false});
testUtils.render(
);
/* jshint ignore:end */
testUtils.onElement('#test-mount .modal-avatar-index', function() {
assert.ok(!$('#test-mount .btn-avatar-gravatar').length,
"gravatar option is hidden");
done();
});
});
it("renders without gallery button", function(done) {
/* jshint ignore:start */
let amendedOptions = Object.assign({}, apiResponse, {galleries: false});
testUtils.render(
);
/* jshint ignore:end */
testUtils.onElement('#test-mount .modal-avatar-index', function() {
assert.ok(!$('#test-mount .btn-avatar-gallery').length,
"gallery option is hidden");
done();
});
});
it("shows alert with error on rejection", function(done) {
$.mockjax({
url: '/test-api/users/123/avatar/',
status: 400,
responseText: {
detail: "You can't change avatar at the moment!"
}
});
snackbarStore.callback(function(message) {
assert.deepEqual(message, {
message: "You can't change avatar at the moment!",
type: 'error'
}, "valid message was shown");
done();
});
/* jshint ignore:start */
testUtils.render(
);
/* jshint ignore:end */
testUtils.simulateClick('#test-mount .btn-avatar-gravatar');
});
it("calls error callback on backend error", function(done) { // jshint ignore:line
$.mockjax({
url: '/test-api/users/123/avatar/',
status: 403,
responseText: {
detail: "You need to sign in to change avatar."
}
});
/* jshint ignore:start */
let showError = function(error) {
assert.equal(error.detail, "You need to sign in to change avatar.",
"callback was called with backend error message");
done();
};
testUtils.render(
);
/* jshint ignore:end */
testUtils.simulateClick('#test-mount .btn-avatar-gravatar');
});
it("changes avatar to generated one successfully", function(done) { // jshint ignore:line
$.mockjax({
url: '/test-api/users/123/avatar/',
status: 200,
responseText: {
detail: "Generated avataru set!",
avatar_hash: 'n33wh44sh',
options: apiResponse
}
});
snackbarStore.callback(function(message) {
assert.deepEqual(message, {
message: "Generated avataru set!",
type: 'success'
}, "valid message was shown");
});
/* jshint ignore:start */
let onComplete = function(avatarHash, options) {
assert.equal(avatarHash, 'n33wh44sh', "new hash was passed to callback");
assert.deepEqual(options, apiResponse, "new ops ware passed to callback");
done();
};
testUtils.render(
);
/* jshint ignore:end */
testUtils.simulateClick('#test-mount .btn-avatar-generate');
});
it("changes avatar to gravatar successfully", function(done) { // jshint ignore:line
$.mockjax({
url: '/test-api/users/123/avatar/',
status: 200,
responseText: {
detail: "Gravatar avataru set!",
avatar_hash: 'n33wh44sh',
options: apiResponse
}
});
snackbarStore.callback(function(message) {
assert.deepEqual(message, {
message: "Gravatar avataru set!",
type: 'success'
}, "valid message was shown");
});
/* jshint ignore:start */
let onComplete = function(avatarHash, options) {
assert.equal(avatarHash, 'n33wh44sh', "new hash was passed to callback");
assert.deepEqual(options, apiResponse, "new ops ware passed to callback");
done();
};
testUtils.render(
);
/* jshint ignore:end */
testUtils.simulateClick('#test-mount .btn-avatar-gravatar');
});
});