add device unlink and receiptMessage class and tests

pull/1151/head
Audric Ackermann 5 years ago
parent 81cb1122f8
commit f1244f3031
No known key found for this signature in database
GPG Key ID: 999F434D76324AD4

@ -1,19 +0,0 @@
import { ContentMessage } from './ContentMessage';
import { SignalService } from '../../../../protobuf';
export class ReceiptMessage extends ContentMessage {
public ttl(): number {
return this.getDefaultTTL();
}
protected contentProto(): SignalService.Content {
return new SignalService.Content({
receiptMessage: this.receiptProto(),
});
}
protected receiptProto(): SignalService.ReceiptMessage {
throw new Error('Not implemented');
}
}

@ -0,0 +1,8 @@
import { SignalService } from '../../../../../protobuf';
import { ReceiptMessage } from './ReceiptMessage';
export class DeliveryReceiptMessage extends ReceiptMessage {
public getReceiptType(): SignalService.ReceiptMessage.Type {
return SignalService.ReceiptMessage.Type.DELIVERY;
}
}

@ -0,0 +1,9 @@
import { SignalService } from '../../../../../protobuf';
import { ReceiptMessage } from './ReceiptMessage';
export class ReadReceiptMessage extends ReceiptMessage {
public getReceiptType(): SignalService.ReceiptMessage.Type {
return SignalService.ReceiptMessage.Type.READ;
}
}

@ -0,0 +1,31 @@
import { ContentMessage } from '../ContentMessage';
import { SignalService } from '../../../../../protobuf';
export abstract class ReceiptMessage extends ContentMessage {
private readonly timestamps: Array<number>;
constructor(timestamp: number, identifier: string, timestamps: Array<number>) {
super(timestamp, identifier);
this.timestamps = timestamps;
}
public ttl(): number {
return this.getDefaultTTL();
}
public abstract getReceiptType(): SignalService.ReceiptMessage.Type;
protected contentProto(): SignalService.Content {
return new SignalService.Content({
receiptMessage: this.receiptProto(),
});
}
protected receiptProto(): SignalService.ReceiptMessage {
return new SignalService.ReceiptMessage({
type: this.getReceiptType(),
timestamp: this.timestamps,
});
}
}

@ -4,7 +4,7 @@ import { DataMessage } from './content/data/DataMessage';
import { OpenGroupMessage } from './OpenGroupMessage';
import { SyncMessage } from './content/sync/SyncMessage';
import { TypingMessage } from './content/TypingMessage';
import { ReceiptMessage } from './content/ReceiptMessage';
import { ReceiptMessage } from './content/receipt/ReceiptMessage';
import { ClosedGroupMessage } from './content/data/ClosedGroupMessage';
import { DeviceUnlinkMessage } from './content/data/DeviceUnlinkMessage';
import { GroupInvitationMessage } from './content/data/GroupInvitationMessage';
@ -13,6 +13,8 @@ import { SessionResetMessage } from './content/SessionResetMessage';
import { SessionEstablishedMessage } from './content/SessionEstablishedMessage';
import { EndSessionMessage } from './content/EndSessionMessage';
import { DeviceLinkMessage } from './content/DeviceLinkMessage';
import { ReadReceiptMessage } from './content/receipt/ReadReceiptMessage';
import { DeliveryReceiptMessage } from './content/receipt/DeliveryReceiptMessage';
export {
Message,
@ -24,6 +26,8 @@ export {
DeviceLinkMessage,
EndSessionMessage,
ReceiptMessage,
ReadReceiptMessage,
DeliveryReceiptMessage,
SessionEstablishedMessage,
SessionResetMessage,
SyncMessage,

@ -1,5 +1,4 @@
// tslint:disable: no-implicit-dependencies
import { assert} from 'chai';
import { expect } from 'chai';
import { beforeEach} from 'mocha';
import { DeviceUnlinkMessage } from '../../../session/messages/outgoing';
@ -13,18 +12,12 @@ describe('DeviceUnlinkMessage', () => {
it('content of just the UNPAIRING_REQUEST flag set', () => {
const plainText = message.plainTextBuffer();
const decoded = SignalService.Content.decode(plainText).toJSON();
const decoded = SignalService.Content.toObject(SignalService.Content.decode(plainText));
const expected = {
dataMessage: {
flags: SignalService.DataMessage.Flags.UNPAIRING_REQUEST,
},
};
assert.deepEqual(decoded, expected);
expect(decoded.dataMessage).to.have.property('flags', SignalService.DataMessage.Flags.UNPAIRING_REQUEST);
});
it('ttl of 4 days', () => {
assert.equal(message.ttl(), 4 * 24 * 60 * 60 * 1000);
expect(message.ttl()).to.equal(4 * 24 * 60 * 60 * 1000);
});
});

@ -0,0 +1,42 @@
import { expect } from 'chai';
import { beforeEach} from 'mocha';
import { DeliveryReceiptMessage, ReadReceiptMessage } from '../../../session/messages/outgoing';
import { SignalService } from '../../../protobuf';
describe('ReceiptMessage', () => {
let readMessage: ReadReceiptMessage;
let deliveryMessage: ReadReceiptMessage;
let timestamps: Array<number>;
beforeEach(() => {
timestamps = [987654321, 123456789];
readMessage = new ReadReceiptMessage(Date.now(), '123456', timestamps);
deliveryMessage = new DeliveryReceiptMessage(Date.now(), '123456', timestamps);
});
it('content of a read receipt is correct', () => {
const plainText = readMessage.plainTextBuffer();
const decoded = SignalService.Content.toObject(SignalService.Content.decode(plainText));
expect(decoded.receiptMessage).to.have.property('type', 1);
expect(decoded.receiptMessage.timestamp).to.have.lengthOf(2);
expect(decoded.receiptMessage.timestamp[0]).to.have.property('low', timestamps[0]);
expect(decoded.receiptMessage.timestamp[1]).to.have.property('low', timestamps[1]);
});
it('content of a delivery receipt is correct', () => {
const plainText = deliveryMessage.plainTextBuffer();
const decoded = SignalService.Content.toObject(SignalService.Content.decode(plainText));
expect(decoded.receiptMessage).to.have.property('type', 0);
expect(decoded.receiptMessage.timestamp).to.have.lengthOf(2);
expect(decoded.receiptMessage.timestamp[0]).to.have.property('low', timestamps[0]);
expect(decoded.receiptMessage.timestamp[1]).to.have.property('low', timestamps[1]);
});
it('ttl of 1 day', () => {
expect(readMessage.ttl()).to.equal(24 * 60 * 60 * 1000);
expect(deliveryMessage.ttl()).to.equal(24 * 60 * 60 * 1000);
});
});
Loading…
Cancel
Save