mirror of
https://github.com/ether/etherpad-lite.git
synced 2025-04-23 00:46:16 -04:00

Also add symlinks from the old `bin/` and `tests/` locations to avoid breaking scripts and other tools. Motivations: * Scripts and tests no longer have to do dubious things like: require('ep_etherpad-lite/node_modules/foo') to access packages installed as dependencies in `src/package.json`. * Plugins can access the backend test helper library in a non-hacky way: require('ep_etherpad-lite/tests/backend/common') * We can delete the top-level `package.json` without breaking our ability to lint the files in `bin/` and `tests/`. Deleting the top-level `package.json` has downsides: It will cause `npm` to print warnings whenever plugins are installed, npm will no longer be able to enforce a plugin's peer dependency on ep_etherpad-lite, and npm will keep deleting the `node_modules/ep_etherpad-lite` symlink that points to `../src`. But there are significant upsides to deleting the top-level `package.json`: It will drastically speed up plugin installation because `npm` doesn't have to recursively walk the dependencies in `src/package.json`. Also, deleting the top-level `package.json` avoids npm's horrible dependency hoisting behavior (where it moves stuff from `src/node_modules/` to the top-level `node_modules/` directory). Dependency hoisting causes numerous mysterious problems such as silent failures in `npm outdated` and `npm update`. Dependency hoisting also breaks plugins that do: require('ep_etherpad-lite/node_modules/foo')
116 lines
3.8 KiB
JavaScript
116 lines
3.8 KiB
JavaScript
'use strict';
|
|
|
|
describe('Chat messages and UI', function () {
|
|
// create a new pad before each test run
|
|
beforeEach(function (cb) {
|
|
helper.newPad(cb);
|
|
});
|
|
|
|
it('opens chat, sends a message, makes sure it exists ' +
|
|
'on the page and hides chat', async function () {
|
|
const chatValue = 'JohnMcLear';
|
|
|
|
await helper.showChat();
|
|
await helper.sendChatMessage(`${chatValue}{enter}`);
|
|
|
|
expect(helper.chatTextParagraphs().length).to.be(1);
|
|
|
|
// <p data-authorid="a.qjkwNs4z0pPROphS"
|
|
// class="author-a-qjkwz78zs4z122z0pz80zz82zz79zphz83z">
|
|
// <b>unnamed:</b>
|
|
// <span class="time author-a-qjkwz78zs4z122z0pz80zz82zz79zphz83z">12:38
|
|
// </span> JohnMcLear
|
|
// </p>
|
|
const username = helper.chatTextParagraphs().children('b').text();
|
|
const time = helper.chatTextParagraphs().children('.time').text();
|
|
|
|
expect(helper.chatTextParagraphs().text()).to.be(`${username}${time} ${chatValue}`);
|
|
|
|
await helper.hideChat();
|
|
});
|
|
|
|
it("makes sure that an empty message can't be sent", async function () {
|
|
const chatValue = 'mluto';
|
|
|
|
await helper.showChat();
|
|
|
|
// simulate a keypress of typing enter, mluto and enter (to send 'mluto')
|
|
await helper.sendChatMessage(`{enter}${chatValue}{enter}`);
|
|
|
|
const chat = helper.chatTextParagraphs();
|
|
|
|
expect(chat.length).to.be(1);
|
|
|
|
// check that the received message is not the empty one
|
|
const username = chat.children('b').text();
|
|
const time = chat.children('.time').text();
|
|
|
|
expect(chat.text()).to.be(`${username}${time} ${chatValue}`);
|
|
});
|
|
|
|
it('makes chat stick to right side of the screen via settings, ' +
|
|
'remove sticky via settings, close it', async function () {
|
|
await helper.showSettings();
|
|
|
|
await helper.enableStickyChatviaSettings();
|
|
expect(helper.isChatboxShown()).to.be(true);
|
|
expect(helper.isChatboxSticky()).to.be(true);
|
|
|
|
await helper.disableStickyChatviaSettings();
|
|
expect(helper.isChatboxSticky()).to.be(false);
|
|
expect(helper.isChatboxShown()).to.be(true);
|
|
|
|
await helper.hideChat();
|
|
expect(helper.isChatboxSticky()).to.be(false);
|
|
expect(helper.isChatboxShown()).to.be(false);
|
|
});
|
|
|
|
it('makes chat stick to right side of the screen via icon on the top' +
|
|
' right, remove sticky via icon, close it', async function () {
|
|
await helper.showChat();
|
|
|
|
await helper.enableStickyChatviaIcon();
|
|
expect(helper.isChatboxShown()).to.be(true);
|
|
expect(helper.isChatboxSticky()).to.be(true);
|
|
|
|
await helper.disableStickyChatviaIcon();
|
|
expect(helper.isChatboxShown()).to.be(true);
|
|
expect(helper.isChatboxSticky()).to.be(false);
|
|
|
|
await helper.hideChat();
|
|
expect(helper.isChatboxSticky()).to.be(false);
|
|
expect(helper.isChatboxShown()).to.be(false);
|
|
});
|
|
|
|
xit('Checks showChat=false URL Parameter hides chat then' +
|
|
' when removed it shows chat', function (done) {
|
|
this.timeout(60000);
|
|
|
|
setTimeout(() => { // give it a second to save the username on the server side
|
|
helper.newPad({ // get a new pad, but don't clear the cookies
|
|
clearCookies: false,
|
|
params: {
|
|
showChat: 'false',
|
|
}, cb() {
|
|
const chrome$ = helper.padChrome$;
|
|
const chaticon = chrome$('#chaticon');
|
|
// chat should be hidden.
|
|
expect(chaticon.is(':visible')).to.be(false);
|
|
|
|
setTimeout(() => { // give it a second to save the username on the server side
|
|
helper.newPad({ // get a new pad, but don't clear the cookies
|
|
clearCookies: false,
|
|
cb() {
|
|
const chrome$ = helper.padChrome$;
|
|
const chaticon = chrome$('#chaticon');
|
|
// chat should be visible.
|
|
expect(chaticon.is(':visible')).to.be(true);
|
|
done();
|
|
},
|
|
});
|
|
}, 1000);
|
|
},
|
|
});
|
|
}, 1000);
|
|
});
|
|
});
|