124 lines
3.4 KiB
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');
|
|
});
|
|
});
|
|
}
|