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            <string>410</string>
23          </value>
24        </member>
25      </struct>
26    </value>
27  </fault>
28</methodResponse>`
29
30func Test_failedResponse(t *testing.T) {
31
32	resp := NewResponse([]byte(faultRespXml), 400)
33
34	if !resp.Failed() {
35		t.Fatal("Failed() error: expected true, got false")
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
68func Test_responseWithEmptyValue(t *testing.T) {
69	resp := NewResponse([]byte(emptyValResp), 201)
70
71	result := struct {
72		User  string `xmlrpc:"user"`
73		Token string `xmlrpc:"token"`
74	}{}
75
76	if err := resp.Unmarshal(&result); err != nil {
77		t.Fatalf("unmarshal error: %v", err)
78	}
79
80	if result.User != "Joe Smith" || result.Token != "" {
81		t.Fatalf("unexpected result: %v", result)
82	}
83}
84