import 'package:flutter_test/flutter_test.dart'; import 'package:melo/services/geteilte_adresse.dart'; /// Wer ein Video an Melo teilt, schickt selten nur die Adresse: die /// YouTube-App hängt Titel und Werbetext drumherum. void main() { group('adresseAus', () { test('nimmt eine nackte Adresse', () { expect(adresseAus('https://youtu.be/dQw4w9WgXcQ'), 'https://youtu.be/dQw4w9WgXcQ'); }); test('holt die Adresse aus dem Text der YouTube-App', () { const geteilt = 'Schau dir das an: https://youtu.be/dQw4w9WgXcQ\n\nüber @YouTube'; expect(adresseAus(geteilt), 'https://youtu.be/dQw4w9WgXcQ'); }); test('versteht die lange Form mit Parametern', () { const geteilt = 'https://www.youtube.com/watch?v=dQw4w9WgXcQ&feature=shared'; expect(adresseAus(geteilt), 'https://www.youtube.com/watch?v=dQw4w9WgXcQ&feature=shared'); }); test('nimmt die erste Adresse, wenn mehrere drinstehen', () { const geteilt = 'https://youtu.be/eins und https://youtu.be/zwei'; expect(adresseAus(geteilt), 'https://youtu.be/eins'); }); test('Satzzeichen am Ende gehören nicht zur Adresse', () { expect(adresseAus('Guck mal: https://youtu.be/abc.'), 'https://youtu.be/abc'); expect(adresseAus('(https://youtu.be/abc)'), 'https://youtu.be/abc'); }); test('Text ohne Adresse ergibt nichts', () { expect(adresseAus('nur Text'), isNull); expect(adresseAus(''), isNull); expect(adresseAus(null), isNull); }); test('auch andere Adressen kommen durch — der Server entscheidet', () { // Der Downloader läuft über yt-dlp am Server und kann mehr als // YouTube. Hier auf youtube.com zu prüfen würde nur einschränken. expect(adresseAus('https://soundcloud.com/kuenstler/lied'), 'https://soundcloud.com/kuenstler/lied'); }); test('unverschlüsselte Adressen werden ebenfalls erkannt', () { expect(adresseAus('http://youtu.be/abc'), 'http://youtu.be/abc'); }); }); }