Add validation logic for SkillInfo to ensure name and description meet requirements Include test cases covering various validation scenarios Add testify dependency for testing assertions
78 lines
1.7 KiB
Go
78 lines
1.7 KiB
Go
package skills
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func TestSkillsInfoValidate(t *testing.T) {
|
|
testcases := []struct {
|
|
name string
|
|
skillName string
|
|
description string
|
|
wantErr bool
|
|
errContains []string
|
|
}{
|
|
{
|
|
name: "valid-skill",
|
|
skillName: "valid-skill",
|
|
description: "a valid skill description",
|
|
wantErr: false,
|
|
},
|
|
{
|
|
name: "empty-name",
|
|
skillName: "",
|
|
description: "description without name",
|
|
wantErr: true,
|
|
errContains: []string{"name is required"},
|
|
},
|
|
{
|
|
name: "empty-description",
|
|
skillName: "skill-without-description",
|
|
description: "",
|
|
wantErr: true,
|
|
errContains: []string{"description is required"},
|
|
},
|
|
{
|
|
name: "empty-both",
|
|
skillName: "",
|
|
description: "",
|
|
wantErr: true,
|
|
errContains: []string{"name is required", "description is required"},
|
|
},
|
|
{
|
|
name: "name-with-spaces",
|
|
skillName: "skill with spaces",
|
|
description: "invalid name with spaces",
|
|
wantErr: true,
|
|
errContains: []string{"name must be alphanumeric with hyphens"},
|
|
},
|
|
{
|
|
name: "name-with-underscore",
|
|
skillName: "skill_underscore",
|
|
description: "invalid name with underscore",
|
|
wantErr: true,
|
|
errContains: []string{"name must be alphanumeric with hyphens"},
|
|
},
|
|
}
|
|
|
|
for _, tc := range testcases {
|
|
t.Run(tc.name, func(t *testing.T) {
|
|
info := SkillInfo{
|
|
Name: tc.skillName,
|
|
Description: tc.description,
|
|
}
|
|
err := info.validate()
|
|
if tc.wantErr {
|
|
assert.Error(t, err)
|
|
for _, msg := range tc.errContains {
|
|
assert.ErrorContains(t, err, msg)
|
|
}
|
|
} else {
|
|
assert.NoError(t, err)
|
|
}
|
|
})
|
|
}
|
|
}
|