mirror of
				https://github.com/FluuxIO/go-xmpp.git
				synced 2025-11-03 08:43:44 -08:00 
			
		
		
		
	
		
			
				
	
	
		
			98 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			98 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
package stanza_test
 | 
						|
 | 
						|
import (
 | 
						|
	"encoding/xml"
 | 
						|
	"testing"
 | 
						|
 | 
						|
	"gosrc.io/xmpp/stanza"
 | 
						|
)
 | 
						|
 | 
						|
// https://xmpp.org/extensions/xep-0045.html#example-27
 | 
						|
func TestMucPassword(t *testing.T) {
 | 
						|
	str := `<presence
 | 
						|
    from='hag66@shakespeare.lit/pda'
 | 
						|
    id='djn4714'
 | 
						|
    to='coven@chat.shakespeare.lit/thirdwitch'>
 | 
						|
  <x xmlns='http://jabber.org/protocol/muc'>
 | 
						|
    <password>cauldronburn</password>
 | 
						|
  </x>
 | 
						|
</presence>`
 | 
						|
 | 
						|
	var parsedPresence stanza.Presence
 | 
						|
	if err := xml.Unmarshal([]byte(str), &parsedPresence); err != nil {
 | 
						|
		t.Errorf("Unmarshal(%s) returned error", str)
 | 
						|
	}
 | 
						|
 | 
						|
	var muc stanza.MucPresence
 | 
						|
	if ok := parsedPresence.Get(&muc); !ok {
 | 
						|
		t.Error("muc presence extension was not found")
 | 
						|
	}
 | 
						|
 | 
						|
	if muc.Password != "cauldronburn" {
 | 
						|
		t.Errorf("incorrect password: '%s'", muc.Password)
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
// https://xmpp.org/extensions/xep-0045.html#example-37
 | 
						|
func TestMucHistory(t *testing.T) {
 | 
						|
	str := `<presence
 | 
						|
    from='hag66@shakespeare.lit/pda'
 | 
						|
    id='n13mt3l'
 | 
						|
    to='coven@chat.shakespeare.lit/thirdwitch'>
 | 
						|
  <x xmlns='http://jabber.org/protocol/muc'>
 | 
						|
    <history maxstanzas='20'/>
 | 
						|
  </x>
 | 
						|
</presence>`
 | 
						|
 | 
						|
	var parsedPresence stanza.Presence
 | 
						|
	if err := xml.Unmarshal([]byte(str), &parsedPresence); err != nil {
 | 
						|
		t.Errorf("Unmarshal(%s) returned error: %s", str, err)
 | 
						|
		return
 | 
						|
	}
 | 
						|
 | 
						|
	var muc stanza.MucPresence
 | 
						|
	if ok := parsedPresence.Get(&muc); !ok {
 | 
						|
		t.Error("muc presence extension was not found")
 | 
						|
		return
 | 
						|
	}
 | 
						|
 | 
						|
	if v, ok := muc.History.MaxStanzas.Get(); !ok || v != 20 {
 | 
						|
		t.Errorf("incorrect MaxStanzas: '%#v'", muc.History.MaxStanzas)
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
// https://xmpp.org/extensions/xep-0045.html#example-37
 | 
						|
func TestMucNoHistory(t *testing.T) {
 | 
						|
	str := "<presence" +
 | 
						|
		" id=\"n13mt3l\"" +
 | 
						|
		" from=\"hag66@shakespeare.lit/pda\"" +
 | 
						|
		" to=\"coven@chat.shakespeare.lit/thirdwitch\">" +
 | 
						|
		"<x xmlns=\"http://jabber.org/protocol/muc\">" +
 | 
						|
		"<history maxstanzas=\"0\"></history>" +
 | 
						|
		"</x>" +
 | 
						|
		"</presence>"
 | 
						|
 | 
						|
	maxstanzas := 0
 | 
						|
 | 
						|
	pres := stanza.Presence{Attrs: stanza.Attrs{
 | 
						|
		From: "hag66@shakespeare.lit/pda",
 | 
						|
		Id:   "n13mt3l",
 | 
						|
		To:   "coven@chat.shakespeare.lit/thirdwitch",
 | 
						|
	},
 | 
						|
		Extensions: []stanza.PresExtension{
 | 
						|
			stanza.MucPresence{
 | 
						|
				History: stanza.History{MaxStanzas: stanza.NewNullableInt(maxstanzas)},
 | 
						|
			},
 | 
						|
		},
 | 
						|
	}
 | 
						|
	data, err := xml.Marshal(&pres)
 | 
						|
	if err != nil {
 | 
						|
		t.Error("error on encode:", err)
 | 
						|
		return
 | 
						|
	}
 | 
						|
 | 
						|
	if string(data) != str {
 | 
						|
		t.Errorf("incorrect stanza: \n%s\n%s", str, data)
 | 
						|
	}
 | 
						|
}
 |