import 'package:bolao_mobile/features/boloes/data/token_de_convite.dart';
import 'package:flutter_test/flutter_test.dart';

void main() {
  const tk = 'abc123-_XYZ';

  group('tokenDeConvite (CC-4-12, CC-4-13)', () {
    test('código solto passa intacto', () {
      expect(tokenDeConvite(tk), tk);
    });

    test('espaço em volta é ignorado', () {
      // Colar de app de mensagem costuma trazer espaço ou quebra de linha.
      expect(tokenDeConvite('  $tk\n'), tk);
    });

    test('CC-4-12 link inteiro resolve para o token', () {
      // O que circula no grupo é o link — colar o link é a pessoa usando o que
      // recebeu, não errando.
      expect(tokenDeConvite('bolao://bolao.app/convite/$tk'), tk);
    });

    test('CC-4-13 link no meio de uma frase resolve para o token', () {
      expect(
        tokenDeConvite('entra aqui: bolao://bolao.app/convite/$tk valeu'),
        tk,
      );
    });

    test('token percent-encoded volta decodificado', () {
      // Simétrico ao `Uri.encodeComponent` do compartilhamento.
      expect(tokenDeConvite('bolao://bolao.app/convite/a%2Bb'), 'a+b');
    });

    test('percentual solto não vira exceção', () {
      // Texto colado torto tem que chegar ao servidor e receber a recusa dele,
      // não derrubar a tela.
      expect(tokenDeConvite('100%desconto'), '100%desconto');
    });

    test('query anexada no encaminhamento é descartada', () {
      expect(tokenDeConvite('bolao://bolao.app/convite/$tk?utm=wa'), tk);
    });

    test('texto vazio devolve vazio, para quem chama não chamar a API', () {
      expect(tokenDeConvite('   '), '');
    });
  });
}
