package payment import ( "testing" "github.com/stretchr/testify/require" ) const testEncryptionKey = "12345678901234567890123456789012" func setTestEncryptionKey(t *testing.T, key string) { t.Helper() previousKey := encryptionKey InitEncryptionKey(key) t.Cleanup(func() { encryptionKey = previousKey }) } func TestEncryptDecryptRoundTrip(t *testing.T) { setTestEncryptionKey(t, testEncryptionKey) encrypted, err := Encrypt("hello payment") require.NoError(t, err) require.NotEmpty(t, encrypted) decrypted, err := Decrypt(encrypted) require.NoError(t, err) require.Equal(t, "hello payment", decrypted) } func TestEncryptRejectsInvalidKeyLength(t *testing.T) { setTestEncryptionKey(t, "short") _, err := Encrypt("hello payment") require.Error(t, err) require.Contains(t, err.Error(), "invalid encryption key length") } func TestDecryptRejectsInvalidBase64(t *testing.T) { setTestEncryptionKey(t, testEncryptionKey) _, err := Decrypt("not-base64") require.Error(t, err) } func TestDecryptRejectsTooShortCiphertext(t *testing.T) { setTestEncryptionKey(t, testEncryptionKey) _, err := Decrypt("c2hvcnQ=") require.Error(t, err) require.Contains(t, err.Error(), "ciphertext too short") } func TestEncryptUsesRandomNonce(t *testing.T) { setTestEncryptionKey(t, testEncryptionKey) first, err := Encrypt("same plaintext") require.NoError(t, err) second, err := Encrypt("same plaintext") require.NoError(t, err) require.NotEqual(t, first, second) }