Skip to content
This repository has been archived by the owner on Feb 21, 2024. It is now read-only.

Add tests for room.go #93

Open
wants to merge 2 commits into
base: main
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
95 changes: 95 additions & 0 deletions room_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
package gomatrix

import (
"encoding/json"
"reflect"
"strings"
"testing"
)

// example events from docs
var testEvent = `{
"content": {
"body": "eventbody123",
"msgtype": "m.text",
"membership": "join",
"format": "org.matrix.custom.html",
"formatted_body": "<b>This is an example text message</b>"
},
"type": "m.room.member",
"event_id": "$143273582443PhrSn:example.org",
"room_id": "!726s6s6q:example.com",
"sender": "@example:example.org",
"state_key": "@alice:example.org",
"origin_server_ts": 1432735824653,
"unsigned": {
"age": 1234
}
}`

// IsRoom checks if a given variable is of type *Room
func IsRoom(t interface{}) bool {
switch t.(type) {
case *Room:
return true
default:
return false
}
}

func TestNewRoom(t *testing.T) {
var testID = "test-id-001"
r := NewRoom(testID)
if r.ID != testID {
t.Fatalf("TestNewRoom: Expected ID '%s', but got '%s'", testID, r.ID)
}
if !IsRoom(r) {
t.Fatalf("TestNewRoom: Wrong data type returned, expected 'Room'")
}
}

func TestUpdateState(t *testing.T) {
var e Event
err := json.NewDecoder(strings.NewReader(testEvent)).Decode(&e)
if err != nil {
t.Fatalf("TestUpdateState: Something went wrong while parsing: %s", testEvent)
}
r := NewRoom("test_id_001")
r.UpdateState(&e)
// check mapping here first
if r.State[e.Type][*e.StateKey] != &e {
t.Fatalf("TestUpdateState: Wrong object reference. The reference is not pointing to the expected event object")
}
}

func TestGetStateEvent(t *testing.T) {
var e Event
err := json.NewDecoder(strings.NewReader(testEvent)).Decode(&e)
if err != nil {
t.Fatalf("TestUpdateState: Something went wrong while parsing: %s", testEvent)
}
r := NewRoom("test_id_001")
r.UpdateState(&e)
e2 := *r.GetStateEvent(e.Type, *e.StateKey)
if !reflect.DeepEqual(e, e2) {
t.Fatalf("TestGetStateEvent: Wrong event object returned, expected object at address %p, got %p", &e, &e2)
}
}

func TestGetMembershipState(t *testing.T) {
var e Event
err := json.NewDecoder(strings.NewReader(testEvent)).Decode(&e)
if err != nil {
t.Fatalf("TestUpdateState: Something went wrong while parsing: %s", testEvent)
}
r := NewRoom("test_id_001")
r.UpdateState(&e)
membState := r.GetMembershipState("@alice:example.org")
if membState != e.Content["membership"] {
t.Fatalf("TestGetMembershipState: Wrong membership state, expected '%s', got '%s'", e.Content["membership"], membState)
}
membState = r.GetMembershipState("@unkown:example.org")
if membState != "leave" {
t.Fatalf("TestGetMembershipState: Wrong membership state, expected 'leave', got '%s'", membState)
}
}