Merge pull request #3694 from matrix-org/t3chguy/fix_SpecPermalinkConstructor
Fix ?via= args in SpecPermalinkConstructor.js
This commit is contained in:
commit
142a71cc67
2 changed files with 27 additions and 8 deletions
|
@ -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 {
|
||||
|
|
|
@ -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"]);
|
||||
});
|
||||
});
|
||||
|
|
Loading…
Reference in a new issue