Skip to content
This repository has been archived by the owner on May 15, 2023. It is now read-only.

Commit

Permalink
ensure that filters are set from the config
Browse files Browse the repository at this point in the history
  • Loading branch information
Stig Lindqvist committed Dec 6, 2017
1 parent a99e9c5 commit 23d4741
Show file tree
Hide file tree
Showing 3 changed files with 108 additions and 11 deletions.
29 changes: 18 additions & 11 deletions config.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,13 +30,20 @@ func newConfig(filePath string) (*Config, error) {
}

// the config Filters is an slice of interfaces, so we need to manually set defaults and add them to the Config
filters := struct {
Users UserFilter
type filters struct {
Users UserFilter `json:"users"`
WIP WIPFilter `json:"wip"`
Review ReviewFilter `json:"review"`
}

filterConfig := struct {
Filters filters
}{
WIP: true,
Review: true,
// default filters
Filters: filters{
WIP: true,
Review: true,
},
}

if filePath != "" {
Expand All @@ -50,7 +57,7 @@ func newConfig(filePath string) (*Config, error) {
return config, fmt.Errorf("Error during config read: %s", err)
}

if err := json.Unmarshal(file, &filters); err != nil {
if err := json.Unmarshal(file, &filterConfig); err != nil {
return config, fmt.Errorf("Error during config read: %s", err)
}
}
Expand Down Expand Up @@ -83,18 +90,18 @@ func newConfig(filePath string) (*Config, error) {
config.SlackChannel = os.Getenv("SLACK_CHANNEL")
}
if os.Getenv("FILTER_USERS") != "" {
filters.Users = strings.Split(os.Getenv("FILTER_USERS"), ",")
filterConfig.Filters.Users = strings.Split(os.Getenv("FILTER_USERS"), ",")
}
if os.Getenv("FILTER_WIP") != "" {
filters.WIP = os.Getenv("FILTER_WIP") == "true"
filterConfig.Filters.WIP = os.Getenv("FILTER_WIP") == "true"
}
if os.Getenv("FILTER_REVIEW") != "" {
filters.Review = os.Getenv("FILTER_REVIEW") == "true"
filterConfig.Filters.Review = os.Getenv("FILTER_REVIEW") == "true"
}

config.Filters.Add(filters.Users)
config.Filters.Add(filters.Review)
config.Filters.Add(filters.WIP)
config.Filters.Add(filterConfig.Filters.Users)
config.Filters.Add(filterConfig.Filters.Review)
config.Filters.Add(filterConfig.Filters.WIP)

config.GitHubRepos = deduplicate(config.GitHubRepos)
config.GitLabRepos = deduplicate(config.GitLabRepos)
Expand Down
59 changes: 59 additions & 0 deletions config_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,25 @@ func TestNewConfig(t *testing.T) {
t.Errorf("expected 3 filters, got %d", len(config.Filters.filters))
return
}

for _, filter := range config.Filters.filters {
switch v := filter.(type) {
case UserFilter:
if len(v) != 2 {
t.Errorf("expected 2 users in UserFilter, got %d", len(v))
}
case WIPFilter:
if !v {
t.Errorf("expected WIPFilter to be enabled")
}
case ReviewFilter:
if !v {
t.Errorf("expected ReviewFilter to be enabled")
}
default:
t.Errorf("unknown filter, %+v", v)
}
}
}

func TestNewConfig_NoFilters(t *testing.T) {
Expand All @@ -112,6 +131,46 @@ func TestNewConfig_NoFilters(t *testing.T) {
}
}

func TestNewConfig_DisabledFilters(t *testing.T) {
config, err := newConfig("testdata/test_config_disabled_filters.json")
if err != nil {
t.Error(err)
return
}

validationErrors := config.validate()
if len(validationErrors) != 0 {
for _, err := range validationErrors {
t.Errorf("Did not expect validation error: %+v", err)
}
return
}

if len(config.Filters.filters) != 3 {
t.Errorf("expected 3 filters, got %d", len(config.Filters.filters))
return
}

for _, filter := range config.Filters.filters {
switch v := filter.(type) {
case UserFilter:
if len(v) != 0 {
t.Errorf("expected 0 users in UserFilter, got %d", len(v))
}
case WIPFilter:
if v {
t.Errorf("expected WIPFilter to be disabled")
}
case ReviewFilter:
if v {
t.Errorf("expected ReviewFilter to be disabled")
}
default:
t.Errorf("unknown filter, %+v", v)
}
}
}

func TestNewConfig_Deduplication(t *testing.T) {
config, err := newConfig("testdata/test_config_duplicate_repos.json")
if err != nil {
Expand Down
31 changes: 31 additions & 0 deletions testdata/test_config_disabled_filters.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
{
"github_token": "secret_github_token",
"github_organisations": [
"facebook"
],
"github_users": [
"stojg"
],
"github_repos": [
"user1/repo1",
"user2/repo1"
],
"gitlab_token": "secret_gitlab_token",
"gitlab_repos": [
"project1/repo1",
"project2/repo1"
],
"gitlab_url": "https://www.example.com",
"slack_token": "secret_slack_token",
"slack_channel": "myteamchat",
"user_whitelist": [
"user1",
"user2"
],

"filters": {
"Users": [ ],
"wip": false,
"review": false
}
}

0 comments on commit 23d4741

Please sign in to comment.