package services

import (
	"crypto/hmac"
	"crypto/sha256"
	"encoding/hex"
	"testing"
)

func TestValidarFirmaWhatsApp(t *testing.T) {
	secret := "mi-app-secret"
	body := []byte(`{"object":"whatsapp_business_account"}`)

	mac := hmac.New(sha256.New, []byte(secret))
	mac.Write(body)
	firmaValida := "sha256=" + hex.EncodeToString(mac.Sum(nil))

	if !ValidarFirmaWhatsApp(secret, body, firmaValida) {
		t.Error("una firma válida fue rechazada")
	}
	if ValidarFirmaWhatsApp(secret, body, "sha256=deadbeef") {
		t.Error("una firma inválida fue aceptada")
	}
	if ValidarFirmaWhatsApp(secret, body, "") {
		t.Error("una firma vacía fue aceptada")
	}
	if ValidarFirmaWhatsApp("otro-secret", body, firmaValida) {
		t.Error("la firma fue válida con un secret distinto al usado para firmarla")
	}
	if ValidarFirmaWhatsApp(secret, []byte("body distinto"), firmaValida) {
		t.Error("la firma fue válida para un body distinto al firmado")
	}
}
