Ignore permalink_prefix when serializing pills (#11726)
* Ignore permalink_prefix when serializing Markdown fixes vector-im/element-web/issues/26002 During serialization of messages, pills were wrongfully serialized to a URL starting with `permalink_prefix`. This is against the Spec (which mandates https://matrix.to/#/ links) and the resulting pills were not recognized as pills in other clients. Spec-Appendix concerning matrix.to links: https://spec.matrix.org/v1.8/appendices/#matrixto-navigation Signed-off-by: Lars Wickel <git@herkulessi.de> * Test for pill serialization with permalink_prefix set Signed-off-by: Lars Wickel <git@herkulessi.de> * Test that permalink_prefix is used for permalink creation Signed-off-by: Lars Wickel <git@herkulessi.de> * Fix lint issues introduced Signed-off-by: Lars Wickel <git@herkulessi.de> * Incorporate requested changes Signed-off-by: Lars Wickel <git@herkulessi.de> --------- Signed-off-by: Lars Wickel <git@herkulessi.de> Co-authored-by: herkulessi <git@herkulessi.de> Co-authored-by: David Baker <dbkr@users.noreply.github.com>
This commit is contained in:
parent
e6a3238621
commit
fa60edf00f
4 changed files with 82 additions and 11 deletions
|
@ -14,10 +14,14 @@ See the License for the specific language governing permissions and
|
|||
limitations under the License.
|
||||
*/
|
||||
|
||||
import { mocked } from "jest-mock";
|
||||
|
||||
import EditorModel from "../../src/editor/model";
|
||||
import { htmlSerializeIfNeeded } from "../../src/editor/serialize";
|
||||
import { createPartCreator } from "./mock";
|
||||
import { IConfigOptions } from "../../src/IConfigOptions";
|
||||
import SettingsStore from "../../src/settings/SettingsStore";
|
||||
import SdkConfig from "../../src/SdkConfig";
|
||||
|
||||
describe("editor/serialize", function () {
|
||||
describe("with markdown", function () {
|
||||
|
@ -104,6 +108,32 @@ describe("editor/serialize", function () {
|
|||
const html = htmlSerializeIfNeeded(model, {});
|
||||
expect(html).toBe('<ol start="2021">\n<li>foo</li>\n</ol>\n');
|
||||
});
|
||||
describe("with permalink_prefix set", function () {
|
||||
const sdkConfigGet = SdkConfig.get;
|
||||
beforeEach(() => {
|
||||
jest.spyOn(SdkConfig, "get").mockImplementation((key: keyof IConfigOptions, altCaseName?: string) => {
|
||||
if (key === "permalink_prefix") {
|
||||
return "https://element.fs.tld";
|
||||
} else return sdkConfigGet(key, altCaseName);
|
||||
});
|
||||
});
|
||||
|
||||
it("user pill uses matrix.to", function () {
|
||||
const pc = createPartCreator();
|
||||
const model = new EditorModel([pc.userPill("Alice", "@alice:hs.tld")], pc);
|
||||
const html = htmlSerializeIfNeeded(model, {});
|
||||
expect(html).toBe('<a href="https://matrix.to/#/@alice:hs.tld">Alice</a>');
|
||||
});
|
||||
it("room pill uses matrix.to", function () {
|
||||
const pc = createPartCreator();
|
||||
const model = new EditorModel([pc.roomPill("#room:hs.tld")], pc);
|
||||
const html = htmlSerializeIfNeeded(model, {});
|
||||
expect(html).toBe('<a href="https://matrix.to/#/#room:hs.tld">#room:hs.tld</a>');
|
||||
});
|
||||
afterEach(() => {
|
||||
mocked(SdkConfig.get).mockRestore();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe("with plaintext", function () {
|
||||
|
|
|
@ -25,6 +25,8 @@ import {
|
|||
parsePermalink,
|
||||
RoomPermalinkCreator,
|
||||
} from "../../../src/utils/permalinks/Permalinks";
|
||||
import { IConfigOptions } from "../../../src/IConfigOptions";
|
||||
import SdkConfig from "../../../src/SdkConfig";
|
||||
import { getMockClientWithEventEmitter } from "../../test-utils";
|
||||
|
||||
describe("Permalinks", function () {
|
||||
|
@ -391,6 +393,17 @@ describe("Permalinks", function () {
|
|||
expect(result).toBe("https://matrix.to/#/@someone:example.org");
|
||||
});
|
||||
|
||||
it("should use permalink_prefix for permalinks", function () {
|
||||
const sdkConfigGet = SdkConfig.get;
|
||||
jest.spyOn(SdkConfig, "get").mockImplementation((key: keyof IConfigOptions, altCaseName?: string) => {
|
||||
if (key === "permalink_prefix") {
|
||||
return "https://element.fs.tld";
|
||||
} else return sdkConfigGet(key, altCaseName);
|
||||
});
|
||||
const result = makeUserPermalink("@someone:example.org");
|
||||
expect(result).toBe("https://element.fs.tld/#/user/@someone:example.org");
|
||||
});
|
||||
|
||||
describe("parsePermalink", () => {
|
||||
it("should correctly parse room permalinks with a via argument", () => {
|
||||
const result = parsePermalink("https://matrix.to/#/!room_id:server?via=some.org");
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue