From b4f9563d3a7a27241e0b8e046e9b7040ef4cba3b Mon Sep 17 00:00:00 2001 From: Ankit Pokhrel Date: Tue, 20 Dec 2022 12:18:36 +0100 Subject: [PATCH] feat: Add warning for invalid custom field Related #525 --- internal/cmd/epic/create/create.go | 5 +++++ internal/cmd/issue/create/create.go | 1 + internal/cmd/issue/edit/edit.go | 1 + internal/cmdcommon/create.go | 33 +++++++++++++++++++++++++++++ 4 files changed, 40 insertions(+) diff --git a/internal/cmd/epic/create/create.go b/internal/cmd/epic/create/create.go index d1d2757c..7b2a9e4a 100644 --- a/internal/cmd/epic/create/create.go +++ b/internal/cmd/epic/create/create.go @@ -149,6 +149,11 @@ func create(cmd *cobra.Command, _ []string) { if projectType != jira.ProjectTypeNextGen { cr.Name = params.name } + cr.ForProjectType(projectType) + if configuredCustomFields, err := cmdcommon.GetConfiguredCustomFields(); err == nil { + cmdcommon.ValidateCustomFields(cr.CustomFields, configuredCustomFields) + cr.WithCustomFields(configuredCustomFields) + } resp, err := client.CreateV2(&cr) if err != nil { diff --git a/internal/cmd/issue/create/create.go b/internal/cmd/issue/create/create.go index 174ea15c..607bf90f 100644 --- a/internal/cmd/issue/create/create.go +++ b/internal/cmd/issue/create/create.go @@ -146,6 +146,7 @@ func create(cmd *cobra.Command, _ []string) { } cr.ForProjectType(projectType) if configuredCustomFields, err := cmdcommon.GetConfiguredCustomFields(); err == nil { + cmdcommon.ValidateCustomFields(cr.CustomFields, configuredCustomFields) cr.WithCustomFields(configuredCustomFields) } diff --git a/internal/cmd/issue/edit/edit.go b/internal/cmd/issue/edit/edit.go index a6f490a8..2e2a3649 100644 --- a/internal/cmd/issue/edit/edit.go +++ b/internal/cmd/issue/edit/edit.go @@ -141,6 +141,7 @@ func edit(cmd *cobra.Command, args []string) { CustomFields: params.customFields, } if configuredCustomFields, err := cmdcommon.GetConfiguredCustomFields(); err == nil { + cmdcommon.ValidateCustomFields(edr.CustomFields, configuredCustomFields) edr.WithCustomFields(configuredCustomFields) } diff --git a/internal/cmdcommon/create.go b/internal/cmdcommon/create.go index 3972df01..e05ce288 100644 --- a/internal/cmdcommon/create.go +++ b/internal/cmdcommon/create.go @@ -1,10 +1,13 @@ package cmdcommon import ( + "strings" + "github.com/AlecAivazis/survey/v2" "github.com/spf13/cobra" "github.com/spf13/viper" + "github.com/ankitpokhrel/jira-cli/internal/cmdutil" "github.com/ankitpokhrel/jira-cli/pkg/jira" ) @@ -124,3 +127,33 @@ func GetConfiguredCustomFields() ([]jira.IssueTypeField, error) { return configuredFields, nil } + +// ValidateCustomFields validates custom fields. +// TODO: Fail with error instead of warning in future release. +func ValidateCustomFields(fields map[string]string, configuredFields []jira.IssueTypeField) { + if len(fields) == 0 { + return + } + + fieldsMap := make(map[string]string) + for _, configured := range configuredFields { + identifier := strings.ReplaceAll(strings.ToLower(strings.TrimSpace(configured.Name)), " ", "-") + fieldsMap[identifier] = configured.Name + } + + invalidCustomFields := make([]string, 0, len(fields)) + for key := range fields { + if _, ok := fieldsMap[key]; !ok { + invalidCustomFields = append(invalidCustomFields, key) + } + } + + if len(invalidCustomFields) > 0 { + cmdutil.Warn(` +Some custom fields are not configured and will be ignored. This will fail with error in the future release. +Please make sure that the passed custom fields are valid and configured accordingly in the config file. +Invalid custom fields used in the command: %s`, + strings.Join(invalidCustomFields, ", "), + ) + } +}