Pular para o conteúdo
Development

Álbuns em destaque, dados reais do MusicKit, e um teste que mentiu sobre estar passando

Por Victor Da Luz
iosswiftmusickitdev-logdeep-cut-atlas

O Deep Cut Atlas mostra “deep cuts”, álbuns do catálogo de artistas na sua biblioteca que você ainda não tem. A próxima pergunta era óbvia: quando um artista tem dez álbuns que você nunca ouviu, qual primeiro?

O Apple Music tem uma seção “Essentials” nas páginas de artista, então assumi que haveria uma flag correspondente na API, algum isEssential em Album que eu pudesse usar para ordenar. Não existe. O tipo Artist do MusicKit expõe doze relationship views e nenhuma delas é “álbuns essenciais”. O “Essentials” que você vê no app Music é uma playlist de músicas curada (artist.featuredPlaylists), não é um sinal no nível de álbum de jeito nenhum.

O que existe é artist.featuredAlbums, as escolhas editoriais de álbuns da Apple, presente para artistas que a Apple realmente curou e nil para todos os outros. Renomeei o recurso para “Featured” em vez de “Essential” para bater com a API em vez do rótulo da UI, adicionei uma flag isFeatured em LibraryAlbum, e reordenei a lista “More from artist” para colocar os lançamentos em destaque no topo.

Os testes no simulador com dados mockados pareciam corretos: o badge aparecia, a ordenação funcionava. Mas o dado mockado é falso, o MusicKit simplesmente não roda no simulador, então nada naquela passada tocou a API real do featuredAlbums. A única forma de saber se a Apple realmente retorna dado útil aqui era um aparelho físico.

E retorna. Consultar o catálogo do Bad Bunny direto no aparelho retornou 3 de 25 álbuns marcados como featured: Un Verano Sin Ti, YHLQMDLG, OASIS, todos reais, todas escolhas editoriais que fazem sentido. Bom sinal de que o recurso funciona contra dado real, não só as minhas fixtures mockadas.

Depois, a suíte de testes completa, rodada como parte da mesma passada de verificação no aparelho, pegou algo que a rodada no simulador não tinha pegado: um teste de ordenação pré-existente que verificava ordem estrita do mais novo para o mais antigo numa discografia do Khruangbin, onde um álbum, Con Todo El Mundo, tinha sido marcado como isFeatured: true na fixture mockada como parte dessa mesma mudança. O teste nunca foi atualizado para esperar que ele viesse primeiro. Ele estava “passando” só porque ninguém tinha rodado a suíte de novo desde que a fixture mudou.

Não tem nada de exótico nisso, é só o que acontece quando uma fixture e o teste dela se distanciam na mesma mudança e ninguém roda os testes antes de dar merge. O fix foi uma linha, mas é um lembrete de que “o código compila e o simulador parece certo” e “os testes realmente passam” são duas afirmações diferentes, e só rodar a segunda pega esse tipo de desalinhamento.

Leitura relacionada

Development

A playlist que já tinha o nome certo

Um artefato de renomeação, uma API sem campo de autor pra atualizar, e um teste em dispositivo real provando que o bug já tinha se corrigido sozinho, fechado como aceitar como está.

Ler

Você também pode achar útil

AdGuard

AdGuard para iOS

Bloqueio de anúncios e rastreadores em todo o sistema no iOS, sem necessidade de um servidor DNS separado.

Como afiliado da AdGuard, ganho com compras qualificadas.

Saiba mais
Airalo

eSIM Airalo

eSIM de dados local para viagens - sem necessidade de trocar um SIM físico.

Este é meu link de indicação da Airalo. Você recebe um desconto no seu primeiro eSIM e eu ganho crédito da Airalo para o meu.

Saiba mais
Proton

Proton Mail

E-mail criptografado de ponta a ponta, com arquitetura de acesso zero.

Como parceiro da Proton, ganho com compras qualificadas dos serviços de privacidade e segurança da Proton (Pass, Mail, VPN, Drive).

Saiba mais