drone-telegram/plugin_test.go
2019-02-17 16:03:10 +08:00

328 lines
7.5 KiB
Go

package main
import (
"os"
"testing"
"github.com/stretchr/testify/assert"
)
func TestMissingDefaultConfig(t *testing.T) {
var plugin Plugin
err := plugin.Exec()
assert.NotNil(t, err)
}
func TestMissingUserConfig(t *testing.T) {
plugin := Plugin{
Config: Config{
Token: "123456789",
},
}
err := plugin.Exec()
assert.NotNil(t, err)
}
func TestDefaultMessageFormat(t *testing.T) {
plugin := Plugin{
Repo: Repo{
Name: "go-hello",
Namespace: "appleboy",
},
Commit: Commit{
Sha: "e7c4f0a63ceeb42a39ac7806f7b51f3f0d204fd2",
Author: "Bo-Yi Wu",
Branch: "master",
Message: "update travis",
},
Build: Build{
Number: 101,
Status: "success",
Link: "https://github.com/appleboy/go-hello",
},
}
message := plugin.Message()
assert.Equal(t, []string{"[success] <https://github.com/appleboy/go-hello> (master)『update travis』by Bo-Yi Wu"}, message)
}
func TestDefaultMessageFormatFromGitHub(t *testing.T) {
plugin := Plugin{
Config: Config{
GitHub: true,
},
Repo: Repo{
FullName: "appleboy/go-hello",
Name: "go-hello",
Namespace: "appleboy",
},
GitHub: GitHub{
Workflow: "test-workflow",
Action: "send notification",
EventName: "push",
},
}
message := plugin.Message()
assert.Equal(t, []string{"appleboy/go-hello/test-workflow triggered by appleboy (push)"}, message)
}
func TestSendMessage(t *testing.T) {
plugin := Plugin{
Repo: Repo{
Name: "go-hello",
Namespace: "appleboy",
},
Commit: Commit{
Sha: "e7c4f0a63ceeb42a39ac7806f7b51f3f0d204fd2",
Author: "Bo-Yi Wu",
Branch: "master",
Message: "update travis by drone plugin",
Email: "test@gmail.com",
},
Build: Build{
Tag: "1.0.0",
Number: 101,
Status: "success",
Link: "https://github.com/appleboy/go-hello",
},
Config: Config{
Token: os.Getenv("TELEGRAM_TOKEN"),
To: []string{os.Getenv("TELEGRAM_TO"), os.Getenv("TELEGRAM_TO") + ":appleboy@gmail.com", "中文ID", "1234567890"},
Message: []string{"Test Telegram Chat Bot From Travis or Local", "commit message: 『{{ build.message }}』", " "},
Photo: []string{"tests/github.png", "1234", " "},
Document: []string{"tests/gophercolor.png", "1234", " "},
Sticker: []string{"tests/github-logo.png", "tests/github.png", "1234", " "},
Audio: []string{"tests/audio.mp3", "1234", " "},
Voice: []string{"tests/voice.ogg", "1234", " "},
Location: []string{"24.9163213,121.1424972", "1", " "},
Venue: []string{"35.661777,139.704051,竹北體育館,新竹縣竹北市", "24.9163213,121.1424972", "1", " "},
Video: []string{"tests/video.mp4", "1234", " "},
Debug: false,
},
}
err := plugin.Exec()
assert.NotNil(t, err)
plugin.Config.Format = "markdown"
plugin.Config.Message = []string{"Test escape under_score"}
err = plugin.Exec()
assert.NotNil(t, err)
// disable message
plugin.Config.Message = []string{}
err = plugin.Exec()
assert.NotNil(t, err)
}
func TestBotError(t *testing.T) {
plugin := Plugin{
Repo: Repo{
Name: "go-hello",
Namespace: "appleboy",
},
Commit: Commit{
Sha: "e7c4f0a63ceeb42a39ac7806f7b51f3f0d204fd2",
Author: "Bo-Yi Wu",
Branch: "master",
Message: "update travis by drone plugin",
},
Build: Build{
Number: 101,
Status: "success",
Link: "https://github.com/appleboy/go-hello",
},
Config: Config{
Token: "appleboy",
To: []string{os.Getenv("TELEGRAM_TO"), "中文ID", "1234567890"},
Message: []string{"Test Telegram Chat Bot From Travis or Local", " "},
},
}
err := plugin.Exec()
assert.NotNil(t, err)
}
func TestTrimElement(t *testing.T) {
var input, result []string
input = []string{"1", " ", "3"}
result = []string{"1", "3"}
assert.Equal(t, result, trimElement(input))
input = []string{"1", "2"}
result = []string{"1", "2"}
assert.Equal(t, result, trimElement(input))
}
func TestEscapeMarkdown(t *testing.T) {
provider := [][][]string{
{
{"user", "repo"},
{"user", "repo"},
},
{
{"user_name", "repo_name"},
{`user\_name`, `repo\_name`},
},
{
{"user_name_long", "user_name_long"},
{`user\_name\_long`, `user\_name\_long`},
},
{
{`user\_name\_long`, `repo\_name\_long`},
{`user\_name\_long`, `repo\_name\_long`},
},
{
{`user\_name\_long`, `repo\_name\_long`, ""},
{`user\_name\_long`, `repo\_name\_long`},
},
}
for _, testCase := range provider {
assert.Equal(t, testCase[1], escapeMarkdown(testCase[0]))
}
}
func TestEscapeMarkdownOne(t *testing.T) {
provider := [][]string{
{"user", "user"},
{"user_name", `user\_name`},
{"user_name_long", `user\_name\_long`},
{`user\_name\_escaped`, `user\_name\_escaped`},
}
for _, testCase := range provider {
assert.Equal(t, testCase[1], escapeMarkdownOne(testCase[0]))
}
}
func TestParseTo(t *testing.T) {
input := []string{"0", "1:1@gmail.com", "2:2@gmail.com", "3:3@gmail.com", "4", "5"}
ids := parseTo(input, "1@gmail.com", false)
assert.Equal(t, []int64{0, 4, 5, 1}, ids)
ids = parseTo(input, "1@gmail.com", true)
assert.Equal(t, []int64{1}, ids)
ids = parseTo(input, "a@gmail.com", false)
assert.Equal(t, []int64{0, 4, 5}, ids)
ids = parseTo(input, "a@gmail.com", true)
assert.Equal(t, []int64{0, 4, 5}, ids)
// test empty ids
ids = parseTo([]string{"", " ", " "}, "a@gmail.com", true)
assert.Equal(t, 0, len(ids))
}
func TestGlobList(t *testing.T) {
var input []string
var result []string
input = []string{"tests/gophercolor.png", "測試", "3"}
result = []string{"tests/gophercolor.png"}
assert.Equal(t, result, globList(input))
input = []string{"tests/*.mp3"}
result = []string{"tests/audio.mp3"}
assert.Equal(t, result, globList(input))
}
func TestConvertLocation(t *testing.T) {
var input string
var result Location
var empty bool
input = "1"
result, empty = convertLocation(input)
assert.Equal(t, true, empty)
assert.Equal(t, Location{}, result)
// strconv.ParseInt: parsing "測試": invalid syntax
input = "測試,139.704051"
result, empty = convertLocation(input)
assert.Equal(t, true, empty)
assert.Equal(t, Location{}, result)
// strconv.ParseInt: parsing "測試": invalid syntax
input = "35.661777,測試"
result, empty = convertLocation(input)
assert.Equal(t, true, empty)
assert.Equal(t, Location{}, result)
input = "35.661777,139.704051"
result, empty = convertLocation(input)
assert.Equal(t, false, empty)
assert.Equal(t, Location{
Latitude: float64(35.661777),
Longitude: float64(139.704051),
}, result)
input = "35.661777,139.704051,title"
result, empty = convertLocation(input)
assert.Equal(t, false, empty)
assert.Equal(t, Location{
Title: "title",
Address: "",
Latitude: float64(35.661777),
Longitude: float64(139.704051),
}, result)
input = "35.661777,139.704051,title,address"
result, empty = convertLocation(input)
assert.Equal(t, false, empty)
assert.Equal(t, Location{
Title: "title",
Address: "address",
Latitude: float64(35.661777),
Longitude: float64(139.704051),
}, result)
}
func TestHTMLMessage(t *testing.T) {
plugin := Plugin{
Repo: Repo{
Name: "go-hello",
Namespace: "appleboy",
},
Commit: Commit{
Sha: "e7c4f0a63ceeb42a39ac7806f7b51f3f0d204fd2",
Author: "Bo-Yi Wu",
Branch: "master",
Message: "Freakin' macOS isn't fully case-sensitive..",
},
Build: Build{
Number: 101,
Status: "success",
Link: "https://github.com/appleboy/go-hello",
},
Config: Config{
Token: os.Getenv("TELEGRAM_TOKEN"),
To: []string{os.Getenv("TELEGRAM_TO")},
},
}
err := plugin.Exec()
assert.Nil(t, err)
}