add branch v1

This commit is contained in:
“xHuPo” 2025-06-09 11:20:07 +08:00
parent 5d370e1077
commit 01b8951dd5
53 changed files with 1079 additions and 6481 deletions

111
otp_api_test.go Normal file
View file

@ -0,0 +1,111 @@
package main
import (
"bytes"
"encoding/json"
"fmt"
"net/http"
"net/http/httptest"
"testing"
)
func TestSaveHandler(t *testing.T) {
// 创建测试服务器
srv := httptest.NewServer(http.HandlerFunc(SaveHandler))
defer srv.Close()
// 准备测试数据
testData := SaveRequest{
UserID: "test_user_123",
Tokens: []TokenData{
{
Issuer: "TestOrg",
Account: "user@test.com",
Secret: "JBSWY3DPEHPK3PXP",
Type: "totp",
Period: 30,
Digits: 6,
Algo: "SHA1",
},
},
}
// 序列化请求体
body, _ := json.Marshal(testData)
// 发送请求
resp, err := http.Post(srv.URL, "application/json", bytes.NewBuffer(body))
if err != nil {
t.Fatalf("Error making request to server: %v\n", err)
}
defer resp.Body.Close()
// 检查响应状态码
if resp.StatusCode != http.StatusOK {
t.Errorf("Expected status: %d, got: %d\n", http.StatusOK, resp.StatusCode)
}
// 解析响应
var saveResp SaveResponse
err = json.NewDecoder(resp.Body).Decode(&saveResp)
if err != nil {
t.Errorf("Error decoding response: %v\n", err)
}
// 验证响应数据
if !saveResp.Success {
t.Errorf("Expected success to be true, got false\n")
}
if saveResp.Message != "Tokens saved successfully" {
t.Errorf("Expected message to be 'Tokens saved successfully', got '%s'\n", saveResp.Message)
}
}
func TestRecoverHandler(t *testing.T) {
// 创建测试服务器
srv := httptest.NewServer(http.HandlerFunc(RecoverHandler))
defer srv.Close()
// 发送请求没有user_id参数
resp, err := http.Get(srv.URL)
if err != nil {
t.Fatalf("Error making request to server: %v\n", err)
}
defer resp.Body.Close()
// 检查响应状态码(应该返回错误)
if resp.StatusCode != http.StatusBadRequest {
t.Errorf("Expected status: %d, got: %d\n", http.StatusBadRequest, resp.StatusCode)
}
// 发送带user_id的请求
urlWithID := fmt.Sprintf("%s?user_id=test_user_123", srv.URL)
respWithID, err := http.Get(urlWithID)
if err != nil {
t.Fatalf("Error making request to server: %v\n", err)
}
defer respWithID.Body.Close()
// 检查响应状态码
if respWithID.StatusCode != http.StatusOK {
t.Errorf("Expected status: %d, got: %d\n", http.StatusOK, respWithID.StatusCode)
}
// 解析响应
var recoverResp RecoverResponse
err = json.NewDecoder(respWithID.Body).Decode(&recoverResp)
if err != nil {
t.Errorf("Error decoding response: %v\n", err)
}
// 验证响应数据
if !recoverResp.Success {
t.Errorf("Expected success to be true, got false\n")
}
if recoverResp.Message != "Tokens recovered successfully" {
t.Errorf("Expected message to be 'Tokens recovered successfully', got '%s'\n", recoverResp.Message)
}
if len(recoverResp.Tokens) != 1 {
t.Errorf("Expected 1 token, got %d\n", len(recoverResp.Tokens))
}
}