115 lines
3.3 KiB
Go
115 lines
3.3 KiB
Go
package v1
|
|
|
|
import (
|
|
"encoding/json"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestTemplateItem_MarshalJSON(t *testing.T) {
|
|
text := TemplateItem{
|
|
Type: TemplateItemTypeText,
|
|
Text: "text item",
|
|
}
|
|
|
|
variable := TemplateItem{
|
|
Type: TemplateItemTypeVar,
|
|
VarType: TemplateVarFirstName,
|
|
}
|
|
|
|
emptyVariable := TemplateItem{
|
|
Type: TemplateItemTypeVar,
|
|
VarType: "",
|
|
}
|
|
|
|
data, err := json.Marshal(text)
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, "\""+text.Text+"\"", string(data))
|
|
|
|
data, err = json.Marshal(variable)
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, `{"var":"first_name"}`, string(data))
|
|
|
|
data, err = json.Marshal(emptyVariable)
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, "{}", string(data))
|
|
}
|
|
|
|
func TestTemplateItem_UnmarshalJSON(t *testing.T) {
|
|
var (
|
|
textResult TemplateItem
|
|
variableResult TemplateItem
|
|
emptyVariableResult TemplateItem
|
|
)
|
|
|
|
text := []byte("\"text block\"")
|
|
variable := []byte(`{"var":"first_name"}`)
|
|
emptyVariable := []byte("{}")
|
|
|
|
require.NoError(t, json.Unmarshal(text, &textResult))
|
|
require.NoError(t, json.Unmarshal(variable, &variableResult))
|
|
require.NoError(t, json.Unmarshal(emptyVariable, &emptyVariableResult))
|
|
|
|
assert.Equal(t, TemplateItemTypeText, textResult.Type)
|
|
assert.Equal(t, string(text)[1:11], textResult.Text)
|
|
|
|
assert.Equal(t, TemplateItemTypeVar, variableResult.Type)
|
|
assert.Equal(t, TemplateVarFirstName, variableResult.VarType)
|
|
assert.Empty(t, variableResult.Text)
|
|
|
|
assert.Equal(t, TemplateItemTypeVar, emptyVariableResult.Type)
|
|
assert.Equal(t, TemplateVarCustom, emptyVariableResult.VarType)
|
|
assert.Empty(t, emptyVariableResult.Text)
|
|
}
|
|
|
|
func TestUnmarshalMediaInteractiveTemplate(t *testing.T) {
|
|
var template Template
|
|
input := `{
|
|
"code":"aaa#bbb#ru",
|
|
"phone": "79252223456",
|
|
"channel_id": 1,
|
|
"headerParams": {
|
|
"textVars": [
|
|
"Johny",
|
|
"1234C"
|
|
],
|
|
"imageUrl": "http://example.com/intaro/d2354125",
|
|
"videoUrl": "http://example.com/intaro/d2222",
|
|
"documentUrl": "http://example.com/intaro/d4444"
|
|
},
|
|
"footer": "Scooter",
|
|
"buttonParams": [
|
|
{
|
|
"type": "URL",
|
|
"urlParameter": "222ddd"
|
|
},
|
|
{
|
|
"type": "QUICK_REPLY",
|
|
"text": "Yes"
|
|
}
|
|
],
|
|
"rejected_reason": "NONE",
|
|
"status": "APPROVED"
|
|
}`
|
|
assert.NoError(t, json.Unmarshal([]byte(input), &template))
|
|
|
|
assert.Equal(t, "aaa#bbb#ru", template.Code)
|
|
assert.Equal(t, []string{"Johny", "1234C"}, template.HeaderParams.TextVars)
|
|
assert.Equal(t, "http://example.com/intaro/d2354125", template.HeaderParams.ImageURL)
|
|
assert.Equal(t, "http://example.com/intaro/d2222", template.HeaderParams.VideoURL)
|
|
assert.Equal(t, "http://example.com/intaro/d4444", template.HeaderParams.DocumentURL)
|
|
assert.Equal(t, "Scooter", *template.Footer)
|
|
assert.Equal(t, URLButton, template.ButtonParams[0].ButtonType)
|
|
assert.Equal(t, "222ddd", template.ButtonParams[0].URLParameter)
|
|
assert.Equal(t, QuickReplyButton, template.ButtonParams[1].ButtonType)
|
|
assert.Equal(t, "Yes", template.ButtonParams[1].Text)
|
|
|
|
input = `{"footer": "Scooter"}`
|
|
template = Template{}
|
|
assert.NoError(t, json.Unmarshal([]byte(input), &template))
|
|
assert.Nil(t, template.HeaderParams)
|
|
assert.Empty(t, template.ButtonParams)
|
|
}
|