Merge pull request #3694 from matrix-org/t3chguy/fix_SpecPermalinkConstructor

Fix ?via= args in SpecPermalinkConstructor.js
This commit is contained in:
Michael Telatynski 2019-12-08 10:04:41 +00:00 committed by GitHub
commit 142a71cc67
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 27 additions and 8 deletions

View file

@ -73,18 +73,16 @@ export default class SpecPermalinkConstructor extends PermalinkConstructor {
// Probably a group, no further parsing needed.
return PermalinkParts.forGroup(entity);
} else if (entity[0] === '#' || entity[0] === '!') {
if (parts.length === 1) {
return PermalinkParts.forRoom(entity, []);
if (parts.length === 1) { // room without event permalink
const [roomId, query=""] = entity.split("?");
const via = query.split(/&?via=/g).filter(p => !!p);
return PermalinkParts.forRoom(roomId, via);
}
// rejoin the rest because v3 events can have slashes (annoyingly)
const eventIdAndQuery = parts.length > 1 ? parts.slice(1).join('/') : "";
const secondaryParts = eventIdAndQuery.split("?");
const eventId = secondaryParts[0];
const query = secondaryParts.length > 1 ? secondaryParts[1] : "";
const via = query.split("via=").filter(p => !!p);
const [eventId, query=""] = eventIdAndQuery.split("?");
const via = query.split(/&?via=/g).filter(p => !!p);
return PermalinkParts.forEvent(entity, eventId, via);
} else {

View file

@ -19,6 +19,7 @@ import {
makeGroupPermalink,
makeRoomPermalink,
makeUserPermalink,
parsePermalink,
RoomPermalinkCreator,
} from "../../../src/utils/permalinks/Permalinks";
import * as testUtils from "../../test-utils";
@ -450,4 +451,24 @@ describe('Permalinks', function() {
const result = makeGroupPermalink("+community:example.org");
expect(result).toBe("https://matrix.to/#/+community:example.org");
});
it('should correctly parse room permalinks with a via argument', () => {
const result = parsePermalink("https://matrix.to/#/!room_id:server?via=some.org");
expect(result.roomIdOrAlias).toBe("!room_id:server");
expect(result.viaServers).toEqual(["some.org"]);
});
it('should correctly parse room permalink via arguments', () => {
const result = parsePermalink("https://matrix.to/#/!room_id:server?via=foo.bar&via=bar.foo");
expect(result.roomIdOrAlias).toBe("!room_id:server");
expect(result.viaServers).toEqual(["foo.bar", "bar.foo"]);
});
it('should correctly parse event permalink via arguments', () => {
const result = parsePermalink("https://matrix.to/#/!room_id:server/$event_id/some_thing_here/foobar" +
"?via=m1.org&via=m2.org");
expect(result.eventId).toBe("$event_id/some_thing_here/foobar");
expect(result.roomIdOrAlias).toBe("!room_id:server");
expect(result.viaServers).toEqual(["m1.org", "m2.org"]);
});
});