Skip to content

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.tsprivate 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.tsgetItensObras + src/model/obra/Obra.tsxcrc32?


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.tsimportarObra 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.tsregistrarObra + disableExemplarObra