package wire import ( "testing" "github.com/stretchr/testify/assert" ) func TestUnmangleXtrazXML(t *testing.T) { tests := []struct { name string mangled string want string }{ { name: "unmangle basic entities", mangled: "<N><QUERY></QUERY></N>", want: "", }, { name: "unmangle all entities", mangled: "<tag attr="value">text & more</tag>", want: `text & more`, }, { name: "plain text unchanged", mangled: "plain text", want: "plain text", }, { name: "empty string", mangled: "", want: "", }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { got := UnmangleXtrazXML(tt.mangled) assert.Equal(t, tt.want, got) }) } } func TestMangleXtrazXML(t *testing.T) { tests := []struct { name string plain string want string }{ { name: "mangle basic XML", plain: "", want: "<N><QUERY></QUERY></N>", }, { name: "mangle special chars", plain: `text & more`, want: "<tag attr="value">text & more</tag>", }, { name: "plain text unchanged", plain: "plain text", want: "plain text", }, { name: "empty string", plain: "", want: "", }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { got := MangleXtrazXML(tt.plain) assert.Equal(t, tt.want, got) }) } } func TestParseXtrazNotifyRequest(t *testing.T) { tests := []struct { name string xml string want *XtrazNotifyRequest wantErr bool }{ { name: "parse valid XStatus request", xml: `srvMng` + `cAwaySrv` + `AwayStat1123456` + ``, want: &XtrazNotifyRequest{ PluginID: "srvMng", ServiceID: "cAwaySrv", RequestID: "AwayStat", TransID: "1", SenderID: "123456", }, wantErr: false, }, { name: "parse invalid XML", xml: "", want: nil, wantErr: true, }, { name: "parse empty XML", xml: "", want: nil, wantErr: true, }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { got, err := ParseXtrazNotifyRequest([]byte(tt.xml)) if tt.wantErr { assert.Error(t, err) return } assert.NoError(t, err) assert.Equal(t, tt.want, got) }) } } func TestParseXtrazNotifyResponse(t *testing.T) { tests := []struct { name string xml string want *XtrazNotifyResponse wantErr bool }{ { name: "parse valid XStatus response", xml: `` + `` + `1234565Having a beer` + `Cheers!`, want: &XtrazNotifyResponse{ UIN: "123456", Index: 5, Title: "Having a beer", Message: "Cheers!", }, wantErr: false, }, { name: "parse XML without Root element", xml: "", want: nil, wantErr: true, }, { name: "parse empty XML", xml: "", want: nil, wantErr: true, }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { got, err := ParseXtrazNotifyResponse([]byte(tt.xml)) if tt.wantErr { assert.Error(t, err) return } assert.NoError(t, err) assert.Equal(t, tt.want, got) }) } } func TestBuildXtrazNotifyRequest(t *testing.T) { senderUIN := "123456" result := BuildXtrazNotifyRequest(senderUIN) // Unmangle and verify the structure unmangled := UnmangleXtrazXML(result) assert.Contains(t, unmangled, "") assert.Contains(t, unmangled, "srvMng") assert.Contains(t, unmangled, "123456") assert.Contains(t, unmangled, "AwayStat") assert.Contains(t, unmangled, "cAwaySrv") // Verify it can be parsed back parsed, err := ParseXtrazNotifyRequest([]byte(unmangled)) assert.NoError(t, err) assert.Equal(t, "srvMng", parsed.PluginID) assert.Equal(t, "cAwaySrv", parsed.ServiceID) assert.Equal(t, "AwayStat", parsed.RequestID) assert.Equal(t, senderUIN, parsed.SenderID) } func TestBuildXtrazNotifyResponse(t *testing.T) { uin := "123456" index := uint8(5) title := "Having a beer" message := "Cheers!" result := BuildXtrazNotifyResponse(uin, index, title, message) // Unmangle and verify the structure unmangled := UnmangleXtrazXML(result) assert.Contains(t, unmangled, "") assert.Contains(t, unmangled, "123456") assert.Contains(t, unmangled, "5") // Verify it can be parsed back parsed, err := ParseXtrazNotifyResponse([]byte(unmangled)) assert.NoError(t, err) assert.Equal(t, uin, parsed.UIN) assert.Equal(t, index, parsed.Index) } func TestXtrazCapabilityGUID(t *testing.T) { // Verify the GUID matches the expected GUID expected := "3b60b3ef-d82a-6c45-a4e0-9c5a5e67e865" assert.Equal(t, expected, CapXtrazScript.String()) } func TestXStatusConstants(t *testing.T) { assert.Equal(t, uint8(1), XStatusAngry) assert.Equal(t, uint8(32), XStatusCoffee2) }