* Add new linting rules * Apply new linting rules * Fix dart sdk version * Format code to 80 lines
350 lines
9.7 KiB
Dart
350 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);
|
|
});
|
|
});
|
|
}
|