From 14bc618a917dae3ac182cc7222e86bd9a93feebf Mon Sep 17 00:00:00 2001 From: Simone Gotti Date: Mon, 8 Apr 2019 16:05:53 +0200 Subject: [PATCH] types: add MatchWhen tests --- internal/services/types/types.go | 7 +- internal/services/types/types_test.go | 276 ++++++++++++++++++++++++++ 2 files changed, 281 insertions(+), 2 deletions(-) create mode 100644 internal/services/types/types_test.go diff --git a/internal/services/types/types.go b/internal/services/types/types.go index f9a3307..b702345 100644 --- a/internal/services/types/types.go +++ b/internal/services/types/types.go @@ -230,7 +230,8 @@ func MatchWhen(when *When, branch, tag, ref string) bool { include := true if when != nil { include = false - if when.Branch != nil { + // test only if branch is not empty, if empty mean that we are not in a branch + if when.Branch != nil && branch != "" { // first check includes and override with excludes if matchCondition(when.Branch.Include, branch) { include = true @@ -239,7 +240,8 @@ func MatchWhen(when *When, branch, tag, ref string) bool { include = false } } - if when.Tag != nil { + // test only if tag is not empty, if empty mean that we are not in a tag + if when.Tag != nil && tag != "" { // first check includes and override with excludes if matchCondition(when.Tag.Include, tag) { include = true @@ -248,6 +250,7 @@ func MatchWhen(when *When, branch, tag, ref string) bool { include = false } } + // we assume that ref always have a value if when.Ref != nil { // first check includes and override with excludes if matchCondition(when.Ref.Include, ref) { diff --git a/internal/services/types/types_test.go b/internal/services/types/types_test.go new file mode 100644 index 0000000..4bee482 --- /dev/null +++ b/internal/services/types/types_test.go @@ -0,0 +1,276 @@ +// Copyright 2019 Sorint.lab +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied +// See the License for the specific language governing permissions and +// limitations under the License. + +package types + +import ( + "testing" +) + +func TestMatchWhen(t *testing.T) { + tests := []struct { + name string + when *When + branch string + tag string + ref string + out bool + }{ + { + name: "test no when, should always match", + when: nil, + out: true, + }, + { + name: "test branch when include with empty match value, should not match", + when: &When{ + Branch: &WhenConditions{ + Include: []WhenCondition{ + {Type: WhenConditionTypeSimple}, + }, + }, + }, + branch: "master", + out: false, + }, + { + name: "test branch when include regexp with empty match value, should match", + when: &When{ + Branch: &WhenConditions{ + Include: []WhenCondition{ + {Type: WhenConditionTypeRegExp}, + }, + }, + }, + branch: "master", + out: true, + }, + { + name: "test branch when include with empty match value and empty provided branch, should not match", + when: &When{ + Branch: &WhenConditions{ + Include: []WhenCondition{ + {Type: WhenConditionTypeSimple}, + }, + }, + }, + branch: "", + out: false, + }, + { + name: "test branch when include regexp with empty match value and empty provided branch, should not match", + when: &When{ + Branch: &WhenConditions{ + Include: []WhenCondition{ + {Type: WhenConditionTypeRegExp}, + }, + }, + }, + branch: "", + out: false, + }, + { + name: "test branch when include, should match", + when: &When{ + Branch: &WhenConditions{ + Include: []WhenCondition{ + {Type: WhenConditionTypeSimple, Match: "master"}, + }, + }, + }, + branch: "master", + out: true, + }, + { + name: "test branch when include, should not match", + when: &When{ + Branch: &WhenConditions{ + Include: []WhenCondition{ + {Type: WhenConditionTypeSimple, Match: "master"}, + }, + }, + }, + branch: "branch01", + out: false, + }, + { + name: "test tag, ref when include, should not match since when is not nil and we have provided a branch and not a tag", + when: &When{ + Tag: &WhenConditions{ + Include: []WhenCondition{ + {Type: WhenConditionTypeSimple, Match: "master"}, + }, + }, + Ref: &WhenConditions{ + Include: []WhenCondition{ + {Type: WhenConditionTypeSimple, Match: "master"}, + }, + }, + }, + branch: "branch01", + out: false, + }, + { + name: "test branch when include regexp, should match", + when: &When{ + Branch: &WhenConditions{ + Include: []WhenCondition{ + {Type: WhenConditionTypeRegExp, Match: "master"}, + }, + }, + }, + branch: "master", + out: true, + }, + { + name: "test branch when include, should not match", + when: &When{ + Branch: &WhenConditions{ + Include: []WhenCondition{ + {Type: WhenConditionTypeRegExp, Match: "master"}, + }, + }, + }, + branch: "branch01", + out: false, + }, + { + name: "test branch when include regexp, should match", + when: &When{ + Branch: &WhenConditions{ + Include: []WhenCondition{ + {Type: WhenConditionTypeRegExp, Match: "m.*"}, + }, + }, + }, + branch: "master", + out: true, + }, + { + name: "test branch when include, should not match", + when: &When{ + Branch: &WhenConditions{ + Include: []WhenCondition{ + {Type: WhenConditionTypeRegExp, Match: "m.*"}, + }, + }, + }, + branch: "branch01", + out: false, + }, + { + name: "test branch when include regexp, exclude simple, should match", + when: &When{ + Branch: &WhenConditions{ + Include: []WhenCondition{ + {Type: WhenConditionTypeRegExp, Match: "m.*"}, + }, + Exclude: []WhenCondition{ + {Type: WhenConditionTypeSimple, Match: "maste"}, + }, + }, + }, + branch: "master", + out: true, + }, + { + name: "test branch when include regexp, exclude simple, should not match", + when: &When{ + Branch: &WhenConditions{ + Include: []WhenCondition{ + {Type: WhenConditionTypeRegExp, Match: "m.*"}, + }, + Exclude: []WhenCondition{ + {Type: WhenConditionTypeSimple, Match: "master"}, + }, + }, + }, + branch: "master", + out: false, + }, + { + name: "test branch when include regexp, exclude regexp, should match", + when: &When{ + Branch: &WhenConditions{ + Include: []WhenCondition{ + {Type: WhenConditionTypeRegExp, Match: "m.*"}, + }, + Exclude: []WhenCondition{ + {Type: WhenConditionTypeRegExp, Match: "mb.*"}, + }, + }, + }, + branch: "master", + out: true, + }, + { + name: "test branch when include regexp, exclude regexp, should not match", + when: &When{ + Branch: &WhenConditions{ + Include: []WhenCondition{ + {Type: WhenConditionTypeRegExp, Match: "m.*"}, + }, + Exclude: []WhenCondition{ + {Type: WhenConditionTypeRegExp, Match: "ma.*"}, + }, + }, + }, + branch: "master", + out: false, + }, + { + name: "test branch when multiple include regexp, multiple exclude regexp, should match", + when: &When{ + Branch: &WhenConditions{ + Include: []WhenCondition{ + {Type: WhenConditionTypeRegExp, Match: "m.*"}, + {Type: WhenConditionTypeRegExp, Match: "b.*"}, + }, + Exclude: []WhenCondition{ + {Type: WhenConditionTypeRegExp, Match: "b.*"}, + {Type: WhenConditionTypeRegExp, Match: "c.*"}, + }, + }, + }, + branch: "master", + out: true, + }, + { + name: "test branch when multiple include regexp, multiple exclude regexp, should not match", + when: &When{ + Branch: &WhenConditions{ + Include: []WhenCondition{ + {Type: WhenConditionTypeRegExp, Match: "m.*"}, + {Type: WhenConditionTypeRegExp, Match: "b.*"}, + }, + Exclude: []WhenCondition{ + {Type: WhenConditionTypeRegExp, Match: "b.*"}, + {Type: WhenConditionTypeRegExp, Match: "ma.*"}, + }, + }, + }, + branch: "master", + out: false, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + out := MatchWhen(tt.when, tt.branch, tt.tag, tt.ref) + if tt.out != out { + t.Fatalf("expected match: %t, got: %t", tt.out, out) + } + }) + } +}