frosty/test/emote_test.dart
2023-01-19 23:30:05 -05:00

349 lines
9.7 KiB
Dart

import 'dart:convert';
import 'package:flutter_test/flutter_test.dart';
import 'package:frosty/models/emotes.dart';
void main() {
group('Twitch', () {
test('emote should parse correctly', () {
const sampleJson = '''
{
"id": "304456832",
"name": "twitchdevPitchfork",
"images": {
"url_1x": "https://static-cdn.jtvnw.net/emoticons/v2/304456832/static/light/1.0",
"url_2x": "https://static-cdn.jtvnw.net/emoticons/v2/304456832/static/light/2.0",
"url_4x": "https://static-cdn.jtvnw.net/emoticons/v2/304456832/static/light/3.0"
},
"tier": "1000",
"emote_type": "subscriptions",
"emote_set_id": "301590448",
"format": [
"static"
],
"scale": [
"1.0",
"2.0",
"3.0"
],
"theme_mode": [
"light",
"dark"
]
}
''';
final decoded = jsonDecode(sampleJson);
final emote = EmoteTwitch.fromJson(decoded);
expect(emote.id, '304456832');
expect(emote.name, 'twitchdevPitchfork');
expect(emote.emoteType, 'subscriptions');
});
});
group('BTTV', () {
test('emote should parse correctly', () {
const emoteTrollFace = '''
{
"id":"54fa8f1401e468494b85b537",
"code":":tf:",
"imageType":"png",
"userId":"5561169bd6b9d206222a8c19"
}
''';
final json = jsonDecode(emoteTrollFace);
final emote = EmoteBTTV.fromJson(json);
expect(emote.id, '54fa8f1401e468494b85b537');
expect(emote.code, ':tf:');
});
test('shared emote should parse correctly', () {
const emoteEZ = '''
{
"id": "5590b223b344e2c42a9e28e3",
"code": "EZ",
"imageType": "png",
"user": {
"id": "558f7862b344e2c42a9e2822",
"name": "helloboat",
"displayName": "helloboat",
"providerId": "39819556"
}
}
''';
final decoded = jsonDecode(emoteEZ);
final emote = EmoteBTTV.fromJson(decoded);
expect(emote.id, '5590b223b344e2c42a9e28e3');
expect(emote.code, 'EZ');
});
test('global emotes should parse correctly', () {
const sampleJson = '''
[
{"id":"54fa903b01e468494b85b53f","code":"DatSauce","imageType":"png","userId":"5561169bd6b9d206222a8c19"},
{"id":"54fa909b01e468494b85b542","code":"ForeverAlone","imageType":"png","userId":"5561169bd6b9d206222a8c19"},
{"id":"54fa90ba01e468494b85b543","code":"GabeN","imageType":"png","userId":"5561169bd6b9d206222a8c19"},
{"id":"54fa90f201e468494b85b545","code":"HailHelix","imageType":"png","userId":"5561169bd6b9d206222a8c19"}
]
''';
final decoded = jsonDecode(sampleJson) as List;
final List<EmoteBTTV> emotes = decoded.map((emote) => EmoteBTTV.fromJson(emote)).toList();
expect(emotes.length, 4);
final emoteIds = [
'54fa903b01e468494b85b53f',
'54fa909b01e468494b85b542',
'54fa90ba01e468494b85b543',
'54fa90f201e468494b85b545'
];
final emoteCodes = ['DatSauce', 'ForeverAlone', 'GabeN', 'HailHelix'];
emotes.asMap().forEach((index, emote) {
expect(emote.id, emoteIds[index]);
expect(emote.code, emoteCodes[index]);
});
});
test('channel emotes should parse correctly', () {
const sampleJson = '''
{"id":"5509bd19a607044d1a3dd1bb",
"bots":[
"emotestats",
"hnlbot"
],
"channelEmotes":[
{
"id":"5509bd3ba607044d1a3dd1bc",
"code":"sodaTP",
"imageType":"png",
"userId":"5509bd19a607044d1a3dd1bb"
}
],
"sharedEmotes":[
{
"id": "5ed3bde8f54be95e2a838279",
"code": "pugPls",
"imageType": "gif",
"user": {
"id": "5c5510a1c0a5642a696190d9",
"name": "wolfabelle",
"displayName": "Wolfabelle",
"providerId": "190146087"
}
}
]
}
''';
final decoded = jsonDecode(sampleJson);
final channelEmote = EmoteBTTV.fromJson(decoded['channelEmotes'].first);
expect(channelEmote.id, '5509bd3ba607044d1a3dd1bc');
expect(channelEmote.code, 'sodaTP');
final sharedEmote = EmoteBTTV.fromJson(decoded['sharedEmotes'].first);
expect(sharedEmote.id, '5ed3bde8f54be95e2a838279');
expect(sharedEmote.code, 'pugPls');
});
});
group('FFZ', () {
test('emote should parse correctly', () {
const sampleJson = '''
{
"id": 27081,
"name": "ZreknarF",
"height": 30,
"width": 40,
"public": false,
"hidden": false,
"modifier": false,
"offset": null,
"margins": null,
"css": null,
"owner": {
"_id": 1,
"name": "sirstendec",
"display_name": "SirStendec"
},
"urls": {
"1": "//cdn.frankerfacez.com/emote/27081/1",
"2": "//cdn.frankerfacez.com/emote/27081/2",
"4": "//cdn.frankerfacez.com/emote/27081/4"
},
"status": 1,
"usage_count": 1,
"created_at": "2015-06-01T05:52:57.770Z",
"last_updated": "2015-06-01T05:53:03.744Z"
}
''';
final json = jsonDecode(sampleJson);
final emote = EmoteFFZ.fromJson(json);
expect(emote.height, 30);
expect(emote.width, 40);
expect(emote.name, 'ZreknarF');
expect(emote.urls.url1x, '//cdn.frankerfacez.com/emote/27081/1');
expect(emote.urls.url2x, '//cdn.frankerfacez.com/emote/27081/2');
expect(emote.urls.url4x, '//cdn.frankerfacez.com/emote/27081/4');
});
});
group('7TV', () {
test('global emote should parse correctly', () {
const sampleGlobal7TVEmote = '''
{
"id": "603ca884faf3a00014dff0ab",
"name": "gachiBASS",
"owner": null,
"visibility": 2,
"visibility_simple": [
"GLOBAL"
],
"mime": "image/gif",
"status": 3,
"tags": [
],
"width": [
32,
48,
76,
128
],
"height": [
32,
48,
76,
128
],
"urls": [
[
"1",
"https://cdn.7tv.app/emote/603ca884faf3a00014dff0ab/1x"
],
[
"2",
"https://cdn.7tv.app/emote/603ca884faf3a00014dff0ab/2x"
],
[
"3",
"https://cdn.7tv.app/emote/603ca884faf3a00014dff0ab/3x"
],
[
"4",
"https://cdn.7tv.app/emote/603ca884faf3a00014dff0ab/4x"
]
]
}
''';
final json = jsonDecode(sampleGlobal7TVEmote);
final emote = Emote7TV.fromJson(json);
expect(emote.name, 'gachiBASS');
expect(emote.visibilitySimple, ['GLOBAL']);
expect(emote.width, [32, 48, 76, 128]);
expect(emote.height, [32, 48, 76, 128]);
final urls = [
['1', 'https://cdn.7tv.app/emote/603ca884faf3a00014dff0ab/1x'],
['2', 'https://cdn.7tv.app/emote/603ca884faf3a00014dff0ab/2x'],
['3', 'https://cdn.7tv.app/emote/603ca884faf3a00014dff0ab/3x'],
['4', 'https://cdn.7tv.app/emote/603ca884faf3a00014dff0ab/4x'],
];
expect(emote.urls, urls);
});
test('channel emote should parse correctly', () {
const sampleEmote = '''
{
"id": "603caea243b9e100141caf4f",
"name": "TrollDespair",
"owner": {
"id": "603cae2496832ffa78c758cd",
"twitch_id": "",
"login": "swyfty_",
"display_name": "swyfty_",
"role": {
"id": "000000000000000000000000",
"name": "",
"position": 0,
"color": 0,
"allowed": 523,
"denied": 0,
"default": true
}
},
"visibility": 0,
"visibility_simple": [
],
"mime": "image/png",
"status": 3,
"tags": [
],
"width": [
32,
48,
76,
128
],
"height": [
32,
48,
76,
128
],
"urls": [
[
"1",
"https://cdn.7tv.app/emote/603caea243b9e100141caf4f/1x"
],
[
"2",
"https://cdn.7tv.app/emote/603caea243b9e100141caf4f/2x"
],
[
"3",
"https://cdn.7tv.app/emote/603caea243b9e100141caf4f/3x"
],
[
"4",
"https://cdn.7tv.app/emote/603caea243b9e100141caf4f/4x"
]
]
}
''';
final json = jsonDecode(sampleEmote);
final emote = Emote7TV.fromJson(json);
expect(emote.name, 'TrollDespair');
expect(emote.visibilitySimple, []);
expect(emote.width, [32, 48, 76, 128]);
expect(emote.height, [32, 48, 76, 128]);
final urls = [
['1', 'https://cdn.7tv.app/emote/603caea243b9e100141caf4f/1x'],
['2', 'https://cdn.7tv.app/emote/603caea243b9e100141caf4f/2x'],
['3', 'https://cdn.7tv.app/emote/603caea243b9e100141caf4f/3x'],
['4', 'https://cdn.7tv.app/emote/603caea243b9e100141caf4f/4x'],
];
expect(emote.urls, urls);
});
});
}