matrix-dart-sdk/test/msc_extensions/msc_3881_polls_test.dart

124 lines
3.4 KiB
Dart

import 'package:test/test.dart';
import 'package:matrix/matrix.dart';
import 'package:matrix/src/models/timeline_chunk.dart';
import '../fake_client.dart';
void main() {
group('MSC 3881 Polls', () {
late Client client;
const roomId = '!696r7674:example.com';
setUpAll(() async {
client = await getClient();
});
tearDownAll(() async => client.dispose());
test('Start poll', () async {
final room = client.getRoomById(roomId)!;
final eventId = await room.startPoll(
question: 'What do you like more?',
kind: PollKind.undisclosed,
maxSelections: 2,
answers: [
PollAnswer(
id: 'pepsi',
mText: 'Pepsi',
),
PollAnswer(
id: 'coca',
mText: 'Coca Cola',
),
],
txid: '1234',
);
expect(eventId, '1234');
});
test('Check Poll Event', () async {
final room = client.getRoomById(roomId)!;
final pollEventContent = PollEventContent(
mText: 'TestPoll',
pollStartContent: PollStartContent(
maxSelections: 2,
question: PollQuestion(mText: 'Question'),
answers: [PollAnswer(id: 'id', mText: 'mText')],
),
);
final pollEvent = Event(
content: pollEventContent.toJson(),
type: PollEventContent.startType,
eventId: 'testevent',
senderId: client.userID!,
originServerTs: DateTime.now().subtract(const Duration(seconds: 10)),
room: room,
);
expect(
pollEvent.parsedPollEventContent.toJson(),
pollEventContent.toJson(),
);
final timeline = Timeline(
room: room,
chunk: TimelineChunk(
events: [pollEvent],
),
);
expect(pollEvent.getPollResponses(timeline), {});
expect(pollEvent.getPollHasBeenEnded(timeline), false);
timeline.aggregatedEvents['testevent'] ??= {};
timeline.aggregatedEvents['testevent']?['m.reference'] ??= {};
timeline.aggregatedEvents['testevent']!['m.reference']!.add(
Event(
content: {
'm.relates_to': {
'rel_type': 'm.reference',
'event_id': 'testevent',
},
'org.matrix.msc3381.poll.response': {
'answers': ['pepsi'],
},
},
type: PollEventContent.responseType,
eventId: 'testevent2',
senderId: client.userID!,
originServerTs: DateTime.now().subtract(const Duration(seconds: 9)),
room: room,
),
);
expect(
pollEvent.getPollResponses(timeline),
{
'@test:fakeServer.notExisting': ['pepsi'],
},
);
timeline.aggregatedEvents['testevent']!['m.reference']!.add(
Event(
content: {
'm.relates_to': {
'rel_type': 'm.reference',
'event_id': 'testevent',
},
'org.matrix.msc3381.poll.end': {},
},
type: PollEventContent.responseType,
eventId: 'testevent3',
senderId: client.userID!,
originServerTs: DateTime.now().subtract(const Duration(seconds: 8)),
room: room,
),
);
expect(pollEvent.getPollHasBeenEnded(timeline), true);
final respondeEventId = await pollEvent.answerPoll(
['pepsi'],
txid: '1234',
);
expect(respondeEventId, '1234');
});
});
}