mattermost/model/command_response_test.go

123 lines
3.5 KiB
Go

// Copyright (c) 2016-present Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
package model
import (
"strings"
"testing"
)
func TestCommandResponseJson(t *testing.T) {
o := CommandResponse{Text: "test"}
json := o.ToJson()
ro := CommandResponseFromJson(strings.NewReader(json))
if o.Text != ro.Text {
t.Fatal("Ids do not match")
}
}
func TestCommandResponseFromHTTPBody(t *testing.T) {
for _, test := range []struct {
ContentType string
Body string
ExpectedText string
}{
{"", "foo", "foo"},
{"text/plain", "foo", "foo"},
{"application/json", `{"text": "foo"}`, "foo"},
{"application/json; charset=utf-8", `{"text": "foo"}`, "foo"},
} {
response := CommandResponseFromHTTPBody(test.ContentType, strings.NewReader(test.Body))
if response.Text != test.ExpectedText {
t.Fatal()
}
}
}
func TestCommandResponseFromPlainText(t *testing.T) {
response := CommandResponseFromPlainText("foo")
if response.Text != "foo" {
t.Fatal("text should be foo")
}
}
func TestCommandResponseFromJson(t *testing.T) {
json := `{
"response_type": "ephemeral",
"text": "response text",
"username": "response username",
"icon_url": "response icon url",
"goto_location": "response goto location",
"attachments": [{
"text": "attachment 1 text",
"pretext": "attachment 1 pretext"
},{
"text": "attachment 2 text",
"fields": [{
"title": "field 1",
"value": "value 1",
"short": true
},{
"title": "field 2",
"value": [],
"short": false
}]
}]
}`
response := CommandResponseFromJson(strings.NewReader(json))
if response == nil {
t.Fatal("should've received non-nil CommandResponse")
}
if response.ResponseType != "ephemeral" {
t.Fatal("should've received correct response type")
} else if response.Text != "response text" {
t.Fatal("should've received correct response text")
} else if response.Username != "response username" {
t.Fatal("should've received correct response username")
} else if response.IconURL != "response icon url" {
t.Fatal("should've received correct response icon url")
} else if response.GotoLocation != "response goto location" {
t.Fatal("should've received correct response goto location")
}
attachments := response.Attachments
if len(attachments) != 2 {
t.Fatal("should've received 2 attachments")
} else if attachments[0].Text != "attachment 1 text" {
t.Fatal("should've received correct first attachment text")
} else if attachments[0].Pretext != "attachment 1 pretext" {
t.Fatal("should've received correct first attachment pretext")
} else if attachments[1].Text != "attachment 2 text" {
t.Fatal("should've received correct second attachment text")
}
fields := attachments[1].Fields
if len(fields) != 2 {
t.Fatal("should've received 2 fields")
} else if fields[0].Value.(string) != "value 1" {
t.Fatal("should've received correct first attachment value")
} else if _, ok := fields[1].Value.(string); !ok {
t.Fatal("should've received second attachment value parsed as a string")
} else if fields[1].Value.(string) != "[]" {
t.Fatal("should've received correct second attachment value")
}
}
func TestCommandResponseNullArrayItems(t *testing.T) {
payload := `{"attachments":[{"fields":[{"title":"foo","value":"bar","short":true}, null]}, null]}`
cr := CommandResponseFromJson(strings.NewReader(payload))
if cr == nil {
t.Fatal("CommandResponse should not be nil")
}
if len(cr.Attachments) != 1 {
t.Fatalf("expected one attachment")
}
if len(cr.Attachments[0].Fields) != 1 {
t.Fatalf("expected one field")
}
}