O código de validação estava proibindo apenas zero e números negativos (<=0), mas não estava proibindo os decimais.
Por exemplo, se o preço unitário do produto é R$100, inserir 0,5 na quantidade resultará no cálculo total de R$ 50 no carrinho. Em tese, o usuário conseguiria burlar o preço total da compra usando decimais para pagar por "meio produto". Pesquisei um pouco e consegui inserir outra validação para verificar também decimais e evitar essa burlada no sistema.
Usei o método isNaN novamente, porém verificando se não é número com !isNan. Depois, fiz um teste:
Usando parseInt e parseFloat, fiz uma comparação de desigualdade. Convertendo a string de quantidade para inteiro e depois para decimal (ponto flutuante). Se os valores forem diferentes, então temos um número decimal. Daí, basta inserir o alert e reiniciar o código.
Trecho do código abaixo:
function adicionar () {
//recuperar valores, nome do produto, quantidade e valor
let produto = document.getElementById('produto').value;
let nomeProduto = produto.split('-')[0];
let valorUnitario = produto.split('R$')[1];
let quantidade = document.getElementById('quantidade').value;
if (isNaN(quantidade) || quantidade <= 0){
alert("Insira uma quantidade válida.");
return;
}
if (!isNaN(quantidade)) {
if(parseInt(quantidade) != parseFloat(quantidade)) {
alert("Insira uma quantidade válida.");
return;
}
}