You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
267 lines
8.2 KiB
Dart
267 lines
8.2 KiB
Dart
1 year ago
|
/*
|
||
|
* Famedly Matrix SDK
|
||
|
* Copyright (C) 2021 Famedly GmbH
|
||
|
*
|
||
|
* This program is free software: you can redistribute it and/or modify
|
||
|
* it under the terms of the GNU Affero General Public License as
|
||
|
* published by the Free Software Foundation, either version 3 of the
|
||
|
* License, or (at your option) any later version.
|
||
|
*
|
||
|
* This program is distributed in the hope that it will be useful,
|
||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
|
* GNU Affero General Public License for more details.
|
||
|
*
|
||
|
* You should have received a copy of the GNU Affero General Public License
|
||
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||
|
*/
|
||
|
|
||
|
import 'package:test/test.dart';
|
||
|
import 'package:matrix/matrix.dart';
|
||
|
import 'fake_client.dart';
|
||
|
|
||
|
void main() {
|
||
|
group('Image Pack', () {
|
||
|
late Client client;
|
||
|
late Room room;
|
||
|
late Room room2;
|
||
|
|
||
|
test('setupClient', () async {
|
||
|
client = await getClient();
|
||
|
room = Room(id: '!1234:fakeServer.notExisting', client: client);
|
||
|
room2 = Room(id: '!abcd:fakeServer.notExisting', client: client);
|
||
|
room.setState(Event(
|
||
|
type: 'm.room.power_levels',
|
||
|
content: {},
|
||
|
room: room,
|
||
|
stateKey: '',
|
||
|
senderId: client.userID!,
|
||
|
eventId: '\$fakeid1:fakeServer.notExisting',
|
||
|
originServerTs: DateTime.now(),
|
||
|
));
|
||
|
room.setState(Event(
|
||
|
type: 'm.room.member',
|
||
|
content: {'membership': 'join'},
|
||
|
room: room,
|
||
|
stateKey: client.userID,
|
||
|
senderId: '\@fakeuser:fakeServer.notExisting',
|
||
|
eventId: '\$fakeid2:fakeServer.notExisting',
|
||
|
originServerTs: DateTime.now(),
|
||
|
));
|
||
|
room2.setState(Event(
|
||
|
type: 'm.room.power_levels',
|
||
|
content: {},
|
||
|
room: room,
|
||
|
stateKey: '',
|
||
|
senderId: client.userID!,
|
||
|
eventId: '\$fakeid3:fakeServer.notExisting',
|
||
|
originServerTs: DateTime.now(),
|
||
|
));
|
||
|
room2.setState(Event(
|
||
|
type: 'm.room.member',
|
||
|
content: {'membership': 'join'},
|
||
|
room: room,
|
||
|
stateKey: client.userID,
|
||
|
senderId: '\@fakeuser:fakeServer.notExisting',
|
||
|
eventId: '\$fakeid4:fakeServer.notExisting',
|
||
|
originServerTs: DateTime.now(),
|
||
|
));
|
||
|
client.rooms.add(room);
|
||
|
client.rooms.add(room2);
|
||
|
});
|
||
|
|
||
|
test('Single room', () async {
|
||
|
room.setState(Event(
|
||
|
type: 'im.ponies.room_emotes',
|
||
|
content: {
|
||
|
'images': {
|
||
|
'room_plain': {'url': 'mxc://room_plain'}
|
||
|
}
|
||
|
},
|
||
|
room: room,
|
||
|
stateKey: '',
|
||
|
senderId: '\@fakeuser:fakeServer.notExisting',
|
||
|
eventId: '\$fakeid5:fakeServer.notExisting',
|
||
|
originServerTs: DateTime.now(),
|
||
|
));
|
||
|
final packs = room.getImagePacks();
|
||
|
expect(packs.length, 1);
|
||
|
expect(packs['room']?.images.length, 1);
|
||
|
expect(packs['room']?.images['room_plain']?.url.toString(),
|
||
|
'mxc://room_plain');
|
||
|
var packsFlat = room.getImagePacksFlat();
|
||
|
expect(packsFlat, {
|
||
|
'room': {'room_plain': 'mxc://room_plain'}
|
||
|
});
|
||
|
room.setState(Event(
|
||
|
type: 'im.ponies.room_emotes',
|
||
|
content: {
|
||
|
'images': {
|
||
|
'emote': {
|
||
|
'url': 'mxc://emote',
|
||
|
'usage': ['emoticon']
|
||
|
},
|
||
|
'sticker': {
|
||
|
'url': 'mxc://sticker',
|
||
|
'usage': ['sticker']
|
||
|
},
|
||
|
}
|
||
|
},
|
||
|
room: room,
|
||
|
stateKey: '',
|
||
|
senderId: '\@fakeuser:fakeServer.notExisting',
|
||
|
eventId: '\$fakeid6:fakeServer.notExisting',
|
||
|
originServerTs: DateTime.now(),
|
||
|
));
|
||
|
packsFlat = room.getImagePacksFlat(ImagePackUsage.emoticon);
|
||
|
expect(packsFlat, {
|
||
|
'room': {'emote': 'mxc://emote'}
|
||
|
});
|
||
|
packsFlat = room.getImagePacksFlat(ImagePackUsage.sticker);
|
||
|
expect(packsFlat, {
|
||
|
'room': {'sticker': 'mxc://sticker'}
|
||
|
});
|
||
|
room.setState(Event(
|
||
|
type: 'im.ponies.room_emotes',
|
||
|
content: {
|
||
|
'images': {
|
||
|
'emote': {'url': 'mxc://emote'},
|
||
|
'sticker': {'url': 'mxc://sticker'},
|
||
|
},
|
||
|
'pack': {
|
||
|
'usage': ['emoticon'],
|
||
|
}
|
||
|
},
|
||
|
room: room,
|
||
|
stateKey: '',
|
||
|
senderId: '\@fakeuser:fakeServer.notExisting',
|
||
|
eventId: '\$fakeid7:fakeServer.notExisting',
|
||
|
originServerTs: DateTime.now(),
|
||
|
));
|
||
|
packsFlat = room.getImagePacksFlat(ImagePackUsage.emoticon);
|
||
|
expect(packsFlat, {
|
||
|
'room': {'emote': 'mxc://emote', 'sticker': 'mxc://sticker'}
|
||
|
});
|
||
|
packsFlat = room.getImagePacksFlat(ImagePackUsage.sticker);
|
||
|
expect(packsFlat, {});
|
||
|
|
||
|
room.setState(Event(
|
||
|
type: 'im.ponies.room_emotes',
|
||
|
content: {
|
||
|
'images': {
|
||
|
'fox': {'url': 'mxc://fox'},
|
||
|
},
|
||
|
'pack': {
|
||
|
'usage': ['emoticon'],
|
||
|
}
|
||
|
},
|
||
|
room: room,
|
||
|
stateKey: 'fox',
|
||
|
senderId: '\@fakeuser:fakeServer.notExisting',
|
||
|
eventId: '\$fakeid8:fakeServer.notExisting',
|
||
|
originServerTs: DateTime.now(),
|
||
|
));
|
||
|
packsFlat = room.getImagePacksFlat(ImagePackUsage.emoticon);
|
||
|
expect(packsFlat, {
|
||
|
'room': {'emote': 'mxc://emote', 'sticker': 'mxc://sticker'},
|
||
|
'fox': {'fox': 'mxc://fox'},
|
||
|
});
|
||
|
});
|
||
|
|
||
|
test('user pack', () async {
|
||
|
client.accountData['im.ponies.user_emotes'] = BasicEvent.fromJson({
|
||
|
'type': 'im.ponies.user_emotes',
|
||
|
'content': {
|
||
|
'images': {
|
||
|
'user': {
|
||
|
'url': 'mxc://user',
|
||
|
}
|
||
|
},
|
||
|
},
|
||
|
});
|
||
|
final packsFlat = room.getImagePacksFlat(ImagePackUsage.emoticon);
|
||
|
expect(packsFlat, {
|
||
|
'room': {'emote': 'mxc://emote', 'sticker': 'mxc://sticker'},
|
||
|
'fox': {'fox': 'mxc://fox'},
|
||
|
'user': {'user': 'mxc://user'},
|
||
|
});
|
||
|
});
|
||
|
|
||
|
test('other rooms', () async {
|
||
|
room2.setState(Event(
|
||
|
type: 'im.ponies.room_emotes',
|
||
|
content: {
|
||
|
'images': {
|
||
|
'other_room_emote': {'url': 'mxc://other_room_emote'},
|
||
|
},
|
||
|
'pack': {
|
||
|
'usage': ['emoticon'],
|
||
|
}
|
||
|
},
|
||
|
room: room2,
|
||
|
stateKey: '',
|
||
|
senderId: '\@fakeuser:fakeServer.notExisting',
|
||
|
eventId: '\$fakeid9:fakeServer.notExisting',
|
||
|
originServerTs: DateTime.now(),
|
||
|
));
|
||
|
client.accountData['im.ponies.emote_rooms'] = BasicEvent.fromJson({
|
||
|
'type': 'im.ponies.emote_rooms',
|
||
|
'content': {
|
||
|
'rooms': {
|
||
|
'!abcd:fakeServer.notExisting': {'': {}},
|
||
|
},
|
||
|
},
|
||
|
});
|
||
|
var packsFlat = room.getImagePacksFlat(ImagePackUsage.emoticon);
|
||
|
expect(packsFlat, {
|
||
|
'room': {'emote': 'mxc://emote', 'sticker': 'mxc://sticker'},
|
||
|
'fox': {'fox': 'mxc://fox'},
|
||
|
'user': {'user': 'mxc://user'},
|
||
|
'empty-chat-abcdfakeservernotexisting': {
|
||
|
'other_room_emote': 'mxc://other_room_emote'
|
||
|
},
|
||
|
});
|
||
|
room2.setState(Event(
|
||
|
type: 'im.ponies.room_emotes',
|
||
|
content: {
|
||
|
'images': {
|
||
|
'other_fox': {'url': 'mxc://other_fox'},
|
||
|
},
|
||
|
'pack': {
|
||
|
'usage': ['emoticon'],
|
||
|
}
|
||
|
},
|
||
|
room: room2,
|
||
|
stateKey: 'fox',
|
||
|
senderId: '\@fakeuser:fakeServer.notExisting',
|
||
|
eventId: '\$fakeid10:fakeServer.notExisting',
|
||
|
originServerTs: DateTime.now(),
|
||
|
));
|
||
|
client.accountData['im.ponies.emote_rooms'] = BasicEvent.fromJson({
|
||
|
'type': 'im.ponies.emote_rooms',
|
||
|
'content': {
|
||
|
'rooms': {
|
||
|
'!abcd:fakeServer.notExisting': {'': {}, 'fox': {}},
|
||
|
},
|
||
|
},
|
||
|
});
|
||
|
packsFlat = room.getImagePacksFlat(ImagePackUsage.emoticon);
|
||
|
expect(packsFlat, {
|
||
|
'room': {'emote': 'mxc://emote', 'sticker': 'mxc://sticker'},
|
||
|
'fox': {'fox': 'mxc://fox'},
|
||
|
'user': {'user': 'mxc://user'},
|
||
|
'empty-chat-abcdfakeservernotexisting': {
|
||
|
'other_room_emote': 'mxc://other_room_emote'
|
||
|
},
|
||
|
'empty-chat-fox-abcdfakeservernotexisting': {
|
||
|
'other_fox': 'mxc://other_fox'
|
||
|
},
|
||
|
});
|
||
|
});
|
||
|
|
||
|
test('dispose client', () async {
|
||
|
await client.dispose(closeDatabase: true);
|
||
|
});
|
||
|
});
|
||
|
}
|