1package xmpp
2
3import (
4	"errors"
5
6	. "gopkg.in/check.v1"
7)
8
9type PresenceXMPPSuite struct{}
10
11var _ = Suite(&PresenceXMPPSuite{})
12
13func (s *PresenceXMPPSuite) Test_SignalPresence_sendsPresenceInformation(c *C) {
14	mockOut := &mockConnIOReaderWriter{}
15	conn := conn{
16		out: mockOut,
17	}
18
19	err := conn.SignalPresence("fo'o")
20	c.Assert(err, IsNil)
21	c.Assert(string(mockOut.write), Equals, "<presence><show>fo&apos;o</show></presence>")
22}
23
24func (s *PresenceXMPPSuite) Test_SignalPresence_returnsWriterError(c *C) {
25	mockOut := &mockConnIOReaderWriter{err: errors.New("foo bar")}
26	conn := conn{
27		out: mockOut,
28	}
29
30	err := conn.SignalPresence("fo'o")
31	c.Assert(err.Error(), Equals, "foo bar")
32}
33
34func (s *PresenceXMPPSuite) Test_SendPresence_sendsPresenceWithTheIdGiven(c *C) {
35	mockOut := &mockConnIOReaderWriter{}
36	conn := conn{
37		out: mockOut,
38	}
39
40	expectedPresence := `<presence xmlns="jabber:client" id="123456&amp;" to="someone&lt;strange&gt;@foo.com" type="subsc&#39;ribe"></presence>`
41
42	err := conn.SendPresence("someone<strange>@foo.com", "subsc'ribe", "123456&", "")
43	c.Assert(err, IsNil)
44	c.Assert(string(mockOut.write), Equals, expectedPresence)
45}
46
47func (s *PresenceXMPPSuite) Test_SendPresence_sendsPresenceWithRandomID(c *C) {
48	mockOut := &mockConnIOReaderWriter{}
49	conn := conn{
50		out:  mockOut,
51		rand: &mockConnIOReaderWriter{read: []byte("123555111654")},
52	}
53
54	expectedPresence := `<presence xmlns="jabber:client" id="3544672884359377457" to="someone&lt;strange&gt;@foo.com" type="subsc&#39;ribe"></presence>`
55	err := conn.SendPresence("someone<strange>@foo.com", "subsc'ribe", "", "")
56	c.Assert(err, IsNil)
57	c.Assert(string(mockOut.write), Equals, expectedPresence)
58}
59
60func (s *PresenceXMPPSuite) Test_SendPresence_returnsWriterError(c *C) {
61	mockOut := &mockConnIOReaderWriter{err: errors.New("bar foo")}
62	conn := conn{
63		out: mockOut,
64	}
65
66	err := conn.SendPresence("someone<strange>@foo.com", "subsc'ribe", "abc", "")
67	c.Assert(err.Error(), Equals, "bar foo")
68}
69
70func (s *PresenceXMPPSuite) Test_SendPresence_addsStatusToSubscribeMessage(c *C) {
71	mockOut := &mockConnIOReaderWriter{}
72	conn := conn{
73		out: mockOut,
74	}
75
76	expectedPresence := `<presence xmlns="jabber:client" id="123" to="someone&lt;strange&gt;@foo.com" type="subscribe"><status>do you want &lt;to&gt;?</status></presence>`
77	err := conn.SendPresence("someone<strange>@foo.com", "subscribe", "123", "do you want <to>?")
78	c.Assert(err, IsNil)
79	c.Assert(string(mockOut.write), Equals, expectedPresence)
80}
81