You've already forked matrix-js-sdk
mirror of
https://github.com/matrix-org/matrix-js-sdk.git
synced 2025-08-12 08:42:46 +03:00
Now that we're pointing at `src/` for tests, we can stop trying to load source maps from random places. With this dependency used, source maps are off by a few lines.
123 lines
3.8 KiB
JavaScript
123 lines
3.8 KiB
JavaScript
import {EventStatus} from "../../src/matrix";
|
|
import {MatrixScheduler} from "../../src/scheduler";
|
|
import {Room} from "../../src/models/room";
|
|
import {TestClient} from "../TestClient";
|
|
|
|
describe("MatrixClient retrying", function() {
|
|
let client = null;
|
|
let httpBackend = null;
|
|
let scheduler;
|
|
const userId = "@alice:localhost";
|
|
const accessToken = "aseukfgwef";
|
|
const roomId = "!room:here";
|
|
let room;
|
|
|
|
beforeEach(function() {
|
|
scheduler = new MatrixScheduler();
|
|
const testClient = new TestClient(
|
|
userId,
|
|
"DEVICE",
|
|
accessToken,
|
|
undefined,
|
|
{scheduler},
|
|
);
|
|
httpBackend = testClient.httpBackend;
|
|
client = testClient.client;
|
|
room = new Room(roomId);
|
|
client.store.storeRoom(room);
|
|
});
|
|
|
|
afterEach(function() {
|
|
httpBackend.verifyNoOutstandingExpectation();
|
|
return httpBackend.stop();
|
|
});
|
|
|
|
xit("should retry according to MatrixScheduler.retryFn", function() {
|
|
|
|
});
|
|
|
|
xit("should queue according to MatrixScheduler.queueFn", function() {
|
|
|
|
});
|
|
|
|
xit("should mark events as EventStatus.NOT_SENT when giving up", function() {
|
|
|
|
});
|
|
|
|
xit("should mark events as EventStatus.QUEUED when queued", function() {
|
|
|
|
});
|
|
|
|
it("should mark events as EventStatus.CANCELLED when cancelled", function() {
|
|
// send a couple of events; the second will be queued
|
|
const p1 = client.sendMessage(roomId, "m1").then(function(ev) {
|
|
// we expect the first message to fail
|
|
throw new Error('Message 1 unexpectedly sent successfully');
|
|
}, (e) => {
|
|
// this is expected
|
|
});
|
|
|
|
// XXX: it turns out that the promise returned by this message
|
|
// never gets resolved.
|
|
// https://github.com/matrix-org/matrix-js-sdk/issues/496
|
|
client.sendMessage(roomId, "m2");
|
|
|
|
// both events should be in the timeline at this point
|
|
const tl = room.getLiveTimeline().getEvents();
|
|
expect(tl.length).toEqual(2);
|
|
const ev1 = tl[0];
|
|
const ev2 = tl[1];
|
|
|
|
expect(ev1.status).toEqual(EventStatus.SENDING);
|
|
expect(ev2.status).toEqual(EventStatus.SENDING);
|
|
|
|
// the first message should get sent, and the second should get queued
|
|
httpBackend.when("PUT", "/send/m.room.message/").check(function(rq) {
|
|
// ev2 should now have been queued
|
|
expect(ev2.status).toEqual(EventStatus.QUEUED);
|
|
|
|
// now we can cancel the second and check everything looks sane
|
|
client.cancelPendingEvent(ev2);
|
|
expect(ev2.status).toEqual(EventStatus.CANCELLED);
|
|
expect(tl.length).toEqual(1);
|
|
|
|
// shouldn't be able to cancel the first message yet
|
|
expect(function() {
|
|
client.cancelPendingEvent(ev1);
|
|
}).toThrow();
|
|
}).respond(400); // fail the first message
|
|
|
|
// wait for the localecho of ev1 to be updated
|
|
const p3 = new Promise((resolve, reject) => {
|
|
room.on("Room.localEchoUpdated", (ev0) => {
|
|
if(ev0 === ev1) {
|
|
resolve();
|
|
}
|
|
});
|
|
}).then(function() {
|
|
expect(ev1.status).toEqual(EventStatus.NOT_SENT);
|
|
expect(tl.length).toEqual(1);
|
|
|
|
// cancel the first message
|
|
client.cancelPendingEvent(ev1);
|
|
expect(ev1.status).toEqual(EventStatus.CANCELLED);
|
|
expect(tl.length).toEqual(0);
|
|
});
|
|
|
|
return Promise.all([
|
|
p1,
|
|
p3,
|
|
httpBackend.flushAllExpected(),
|
|
]);
|
|
});
|
|
|
|
describe("resending", function() {
|
|
xit("should be able to resend a NOT_SENT event", function() {
|
|
|
|
});
|
|
xit("should be able to resend a sent event", function() {
|
|
|
|
});
|
|
});
|
|
});
|