1package xmlrpc
2
3import (
4	"testing"
5)
6
7const faultRespXml = `
8<?xml version="1.0" encoding="UTF-8"?>
9<methodResponse>
10  <fault>
11    <value>
12      <struct>
13        <member>
14          <name>faultString</name>
15          <value>
16            <string>You must log in before using this part of Bugzilla.</string>
17          </value>
18        </member>
19        <member>
20          <name>faultCode</name>
21          <value>
22            <int>410</int>
23          </value>
24        </member>
25      </struct>
26    </value>
27  </fault>
28</methodResponse>`
29
30func Test_failedResponse(t *testing.T) {
31	resp := NewResponse([]byte(faultRespXml))
32
33	if !resp.Failed() {
34		t.Fatal("Failed() error: expected true, got false")
35	}
36
37	if resp.Err() == nil {
38		t.Fatal("Err() error: expected error, got nil")
39	}
40
41	err := resp.Err().(*xmlrpcError)
42	if err.code != 410 && err.err != "You must log in before using this part of Bugzilla." {
43		t.Fatal("Err() error: got wrong error")
44	}
45}
46
47const emptyValResp = `
48<?xml version="1.0" encoding="UTF-8"?>
49<methodResponse>
50	<params>
51		<param>
52			<value>
53				<struct>
54					<member>
55						<name>user</name>
56						<value><string>Joe Smith</string></value>
57					</member>
58					<member>
59						<name>token</name>
60						<value/>
61					</member>
62				</struct>
63			</value>
64		</param>
65	</params>
66</methodResponse>`
67
68
69func Test_responseWithEmptyValue(t *testing.T) {
70	resp := NewResponse([]byte(emptyValResp))
71
72	result := struct{
73		User string `xmlrpc:"user"`
74		Token string `xmlrpc:"token"`
75	}{}
76
77	if err := resp.Unmarshal(&result); err != nil {
78		t.Fatalf("unmarshal error: %v", err)
79	}
80
81	if result.User != "Joe Smith" || result.Token != "" {
82		t.Fatalf("unexpected result: %v", result)
83	}
84}
85