Biblioteca — Casos de Borda
Gerado pelo Writer (Reversa) em 2026-05-11
doc_level: detalhado
EC-01 — Download interrompido por falha de rede
Descrição: O arquivo .db da obra está sendo baixado e a rede cai no meio do processo.
Comportamento esperado: baixarArquivo rejeita a Promise → ObraService.baixarObra relança o erro → finally garante downloadEmAndamento = false → thunk chama rejectWithValue('Falhou').
Risco: 🟡 O arquivo parcialmente baixado pode permanecer no cachePath. Não há limpeza do arquivo corrompido após falha.
Rastreabilidade: src/service/ObraService.ts — bloco try/catch/finally
EC-02 — App reiniciado durante download
Descrição: O usuário fecha o app enquanto downloadEmAndamento = true. Na próxima abertura, a variável estática é resetada para false (valor inicial do módulo JS).
Comportamento esperado: Download é perdido; novo download pode ser iniciado normalmente. Arquivo parcial pode existir em cache.
Risco: 🟡 Arquivo corrompido em cache pode ser usado em importação subsequente se não for verificado.
Rastreabilidade: src/service/ObraService.ts — private static downloadEmAndamento: boolean = false
EC-03 — Obra com crc32 = undefined no catálogo remoto
Descrição: A interface Obra declara crc32?: number (opcional). Se a API retornar uma obra sem crc32, a comparação exemplares[it.id_obra]?.crc32 !== it.crc32 compara com undefined.
Comportamento esperado: undefined !== undefined é false → obra seria tratada como ATUALIZADA mesmo sem CRC32 confirmado. 🟡
Risco: 🟡 Obra pode não ser atualizada quando deveria.
Rastreabilidade: src/store/Biblioteca/Biblioteca.api.ts — getItensObras + src/model/obra/Obra.tsx — crc32?
EC-04 — ATTACH falha (banco corrompido ou caminho inválido)
Descrição: Banco.attachFromCache pode falhar se o arquivo .db baixado estiver corrompido ou o path for inválido.
Comportamento esperado: Exceção lançada → bloco finally executa Banco.detach mesmo assim → thunk captura e chama rejectWithValue. 🟢
Risco: 🟢 Tratado pelo finally do importarObra.
Rastreabilidade: src/repository/BibliotecaRepository.ts — importarObra bloco try/finally
EC-05 — Exemplar anterior não desativado corretamente
Descrição: disableExemplarObra usa UPDATE ... WHERE id_obra=? AND ativo sem parâmetro de id_obra passado explicitamente na PreparedStatement estática.
Comportamento esperado: 🔴 A query usa [ sem parâmetros passados na chamada Banco.execute(this.disableExemplarObra.query, []) — bug potencial onde nenhum exemplar é desativado (WHERE id_obra=? sem valor).
Risco: 🔴 Múltiplos exemplares ativos para a mesma obra podem ser criados.
Rastreabilidade: src/repository/BibliotecaRepository.ts — registrarObra + disableExemplarObra