266 lines
5.4 KiB
Go
266 lines
5.4 KiB
Go
// Copyright 2019 Drone.IO Inc. All rights reserved.
|
|
// Use of this source code is governed by the Drone Non-Commercial License
|
|
// that can be found in the LICENSE file.
|
|
|
|
// +build !oss
|
|
|
|
package trigger
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/drone/drone-yaml/yaml"
|
|
"github.com/drone/drone/core"
|
|
)
|
|
|
|
func Test_skipBranch(t *testing.T) {
|
|
tests := []struct {
|
|
config string
|
|
branch string
|
|
want bool
|
|
}{
|
|
{
|
|
config: "kind: pipeline\ntrigger: { }",
|
|
branch: "master",
|
|
want: false,
|
|
},
|
|
{
|
|
config: "kind: pipeline\ntrigger: { branch: [ master ] }",
|
|
branch: "master",
|
|
want: false,
|
|
},
|
|
{
|
|
config: "kind: pipeline\ntrigger: { branch: [ master ] }",
|
|
branch: "develop",
|
|
want: true,
|
|
},
|
|
}
|
|
for i, test := range tests {
|
|
manifest, err := yaml.ParseString(test.config)
|
|
if err != nil {
|
|
t.Error(err)
|
|
}
|
|
pipeline := manifest.Resources[0].(*yaml.Pipeline)
|
|
got, want := skipBranch(pipeline, test.branch), test.want
|
|
if got != want {
|
|
t.Errorf("Want test %d to return %v", i, want)
|
|
}
|
|
}
|
|
}
|
|
|
|
func Test_skipEvent(t *testing.T) {
|
|
tests := []struct {
|
|
config string
|
|
event string
|
|
want bool
|
|
}{
|
|
{
|
|
config: "kind: pipeline\ntrigger: { }",
|
|
event: "push",
|
|
want: false,
|
|
},
|
|
{
|
|
config: "kind: pipeline\ntrigger: { event: [ push ] }",
|
|
event: "push",
|
|
want: false,
|
|
},
|
|
{
|
|
config: "kind: pipeline\ntrigger: { event: [ push ] }",
|
|
event: "pull_request",
|
|
want: true,
|
|
},
|
|
}
|
|
for i, test := range tests {
|
|
manifest, err := yaml.ParseString(test.config)
|
|
if err != nil {
|
|
t.Error(err)
|
|
}
|
|
pipeline := manifest.Resources[0].(*yaml.Pipeline)
|
|
got, want := skipEvent(pipeline, test.event), test.want
|
|
if got != want {
|
|
t.Errorf("Want test %d to return %v", i, want)
|
|
}
|
|
}
|
|
}
|
|
|
|
// func Test_skipPath(t *testing.T) {
|
|
// tests := []struct {
|
|
// config string
|
|
// paths []string
|
|
// want bool
|
|
// }{
|
|
// {
|
|
// config: "trigger: { }",
|
|
// paths: []string{},
|
|
// want: false,
|
|
// },
|
|
// {
|
|
// config: "trigger: { }",
|
|
// paths: []string{"README.md"},
|
|
// want: false,
|
|
// },
|
|
// {
|
|
// config: "trigger: { paths: foo/* }",
|
|
// paths: []string{"foo/README"},
|
|
// want: false,
|
|
// },
|
|
// {
|
|
// config: "trigger: { paths: foo/* }",
|
|
// paths: []string{"bar/README"},
|
|
// want: true,
|
|
// },
|
|
// // if empty changeset, never skip the pipeline
|
|
// {
|
|
// config: "trigger: { paths: foo/* }",
|
|
// paths: []string{},
|
|
// want: false,
|
|
// },
|
|
// // if max changeset, never skip the pipeline
|
|
// {
|
|
// config: "trigger: { paths: foo/* }",
|
|
// paths: make([]string, 400),
|
|
// want: false,
|
|
// },
|
|
// }
|
|
// for i, test := range tests {
|
|
// document, err := config.ParseString(test.config)
|
|
// if err != nil {
|
|
// t.Error(err)
|
|
// }
|
|
// got, want := skipPaths(document, test.paths), test.want
|
|
// if got != want {
|
|
// t.Errorf("Want test %d to return %v", i, want)
|
|
// }
|
|
// }
|
|
// }
|
|
|
|
func Test_skipMessage(t *testing.T) {
|
|
tests := []struct {
|
|
event string
|
|
message string
|
|
title string
|
|
want bool
|
|
}{
|
|
{
|
|
event: "push",
|
|
message: "update readme",
|
|
want: false,
|
|
},
|
|
// skip when message contains [CI SKIP]
|
|
{
|
|
event: "push",
|
|
message: "update readme [CI SKIP]",
|
|
want: true,
|
|
},
|
|
{
|
|
event: "pull_request",
|
|
message: "update readme [CI SKIP]",
|
|
want: true,
|
|
},
|
|
// skip when title contains [CI SKIP]
|
|
|
|
{
|
|
event: "push",
|
|
title: "update readme [CI SKIP]",
|
|
want: true,
|
|
},
|
|
{
|
|
event: "pull_request",
|
|
title: "update readme [CI SKIP]",
|
|
want: true,
|
|
},
|
|
// ignore [CI SKIP] when event is tag
|
|
{
|
|
event: "tag",
|
|
message: "update readme [CI SKIP]",
|
|
want: false,
|
|
},
|
|
{
|
|
event: "tag",
|
|
title: "update readme [CI SKIP]",
|
|
want: false,
|
|
},
|
|
{
|
|
event: "cron",
|
|
title: "update readme [CI SKIP]",
|
|
want: false,
|
|
},
|
|
{
|
|
event: "cron",
|
|
title: "update readme [CI SKIP]",
|
|
want: false,
|
|
},
|
|
{
|
|
event: "custom",
|
|
title: "update readme [CI SKIP]",
|
|
want: false,
|
|
},
|
|
{
|
|
event: "custom",
|
|
title: "update readme [CI SKIP]",
|
|
want: false,
|
|
},
|
|
{
|
|
event: "promote",
|
|
title: "update readme [CI SKIP]",
|
|
want: false,
|
|
},
|
|
{
|
|
event: "promote",
|
|
title: "update readme [CI SKIP]",
|
|
want: false,
|
|
},
|
|
{
|
|
event: "rollback",
|
|
title: "update readme [CI SKIP]",
|
|
want: false,
|
|
},
|
|
{
|
|
event: "rollback",
|
|
title: "update readme [CI SKIP]",
|
|
want: false,
|
|
},
|
|
}
|
|
for _, test := range tests {
|
|
hook := &core.Hook{
|
|
Message: test.message,
|
|
Title: test.title,
|
|
Event: test.event,
|
|
}
|
|
got, want := skipMessage(hook), test.want
|
|
if got != want {
|
|
t.Errorf("Want { event: %q, message: %q, title: %q } to return %v",
|
|
test.event, test.message, test.title, want)
|
|
}
|
|
}
|
|
}
|
|
|
|
func Test_skipMessageEval(t *testing.T) {
|
|
tests := []struct {
|
|
eval string
|
|
want bool
|
|
}{
|
|
{"update readme", false},
|
|
// test [CI SKIP]
|
|
{"foo [ci skip] bar", true},
|
|
{"foo [CI SKIP] bar", true},
|
|
{"foo [CI Skip] bar", true},
|
|
{"foo [CI SKIP]", true},
|
|
// test [SKIP CI]
|
|
{"foo [skip ci] bar", true},
|
|
{"foo [SKIP CI] bar", true},
|
|
{"foo [Skip CI] bar", true},
|
|
{"foo [SKIP CI]", true},
|
|
// test ***NO_CI***
|
|
{"foo ***NO_CI*** bar", true},
|
|
{"foo ***NO_CI*** bar", true},
|
|
{"foo ***NO_CI*** bar", true},
|
|
{"foo ***NO_CI***", true},
|
|
}
|
|
for _, test := range tests {
|
|
got, want := skipMessageEval(test.eval), test.want
|
|
if got != want {
|
|
t.Errorf("Want %q to return %v, got %v", test.eval, want, got)
|
|
}
|
|
}
|
|
}
|