51 lines
1.3 KiB
Go
51 lines
1.3 KiB
Go
package usecase
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"golang.org/x/crypto/bcrypt"
|
|
)
|
|
|
|
func TestHashPassword(t *testing.T) {
|
|
password := "securepassword123"
|
|
cost := bcrypt.DefaultCost
|
|
|
|
hashedPassword, err := HashPassword(password, cost)
|
|
|
|
assert.NoError(t, err, "生成哈希密碼應該成功")
|
|
assert.NotEmpty(t, hashedPassword, "生成的哈希密碼不應為空")
|
|
|
|
// 確認哈希密碼長度符合預期
|
|
assert.Greater(t, len(hashedPassword), 0, "哈希密碼長度應大於零")
|
|
}
|
|
|
|
func TestCheckPasswordHash(t *testing.T) {
|
|
password := "securepassword123"
|
|
cost := bcrypt.DefaultCost
|
|
|
|
// 生成哈希密碼
|
|
hashedPassword, err := HashPassword(password, cost)
|
|
assert.NoError(t, err)
|
|
|
|
// 驗證密碼與哈希是否匹配
|
|
assert.True(t, CheckPasswordHash(password, hashedPassword), "密碼應與哈希匹配")
|
|
|
|
// 測試不匹配的密碼
|
|
wrongPassword := "wrongpassword"
|
|
assert.False(t, CheckPasswordHash(wrongPassword, hashedPassword), "錯誤密碼不應與哈希匹配")
|
|
}
|
|
|
|
func TestGetHashingCost(t *testing.T) {
|
|
password := "securepassword123"
|
|
cost := bcrypt.DefaultCost
|
|
|
|
// 生成哈希密碼
|
|
hashedPassword, err := HashPassword(password, cost)
|
|
assert.NoError(t, err)
|
|
|
|
// 驗證哈希成本
|
|
actualCost := GetHashingCost([]byte(hashedPassword))
|
|
assert.Equal(t, cost, actualCost, "哈希成本應與生成時的一致")
|
|
}
|