mirror of
https://github.com/MHSanaei/3x-ui.git
synced 2026-06-06 05:04:22 +00:00
60 lines
1.8 KiB
Go
60 lines
1.8 KiB
Go
|
|
package service
|
||
|
|
|
||
|
|
import (
|
||
|
|
"encoding/json"
|
||
|
|
"testing"
|
||
|
|
|
||
|
|
"github.com/mhsanaei/3x-ui/v3/database/model"
|
||
|
|
"github.com/mhsanaei/3x-ui/v3/xray"
|
||
|
|
)
|
||
|
|
|
||
|
|
func TestClientWithAttachmentsMarshalJSONIncludesExtras(t *testing.T) {
|
||
|
|
c := ClientWithAttachments{
|
||
|
|
ClientRecord: model.ClientRecord{Id: 1, Email: "alice@example.com"},
|
||
|
|
InboundIds: []int{3, 5},
|
||
|
|
Traffic: &xray.ClientTraffic{Email: "alice@example.com", Up: 1024, Down: 4096, Enable: true},
|
||
|
|
}
|
||
|
|
out, err := json.Marshal(c)
|
||
|
|
if err != nil {
|
||
|
|
t.Fatalf("Marshal failed: %v", err)
|
||
|
|
}
|
||
|
|
var parsed map[string]any
|
||
|
|
if err := json.Unmarshal(out, &parsed); err != nil {
|
||
|
|
t.Fatalf("output is not valid JSON: %v", err)
|
||
|
|
}
|
||
|
|
if parsed["email"] != "alice@example.com" {
|
||
|
|
t.Errorf("expected ClientRecord fields to survive, got %v", parsed)
|
||
|
|
}
|
||
|
|
ids, ok := parsed["inboundIds"].([]any)
|
||
|
|
if !ok {
|
||
|
|
t.Fatalf("expected inboundIds to be present as an array, got %T (%s)", parsed["inboundIds"], out)
|
||
|
|
}
|
||
|
|
if len(ids) != 2 {
|
||
|
|
t.Errorf("expected 2 inbound ids, got %d", len(ids))
|
||
|
|
}
|
||
|
|
if _, ok := parsed["traffic"].(map[string]any); !ok {
|
||
|
|
t.Errorf("expected traffic to be present as an object, got %T", parsed["traffic"])
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestClientWithAttachmentsMarshalJSONOmitsAbsentTraffic(t *testing.T) {
|
||
|
|
c := ClientWithAttachments{
|
||
|
|
ClientRecord: model.ClientRecord{Id: 1, Email: "bob@example.com"},
|
||
|
|
InboundIds: nil,
|
||
|
|
}
|
||
|
|
out, err := json.Marshal(c)
|
||
|
|
if err != nil {
|
||
|
|
t.Fatalf("Marshal failed: %v", err)
|
||
|
|
}
|
||
|
|
var parsed map[string]any
|
||
|
|
if err := json.Unmarshal(out, &parsed); err != nil {
|
||
|
|
t.Fatalf("output is not valid JSON: %v", err)
|
||
|
|
}
|
||
|
|
if _, present := parsed["traffic"]; present {
|
||
|
|
t.Errorf("expected traffic to be omitted when nil, got %v", parsed["traffic"])
|
||
|
|
}
|
||
|
|
if _, present := parsed["inboundIds"]; !present {
|
||
|
|
t.Errorf("expected inboundIds key to always be present, got %s", out)
|
||
|
|
}
|
||
|
|
}
|