Skip to content

Commit d96bea2

Browse files
refactor!: return Error from ParseLevel (#83)
* add parse level error * Apply suggestions from code review will fix rest of file in follow-up commit Co-authored-by: Ayman Bagabas <ayman.bagabas@gmail.com> * align code with suggestions * align * use default logger for default level * expected * Apply suggestions from code review Co-authored-by: Ayman Bagabas <ayman.bagabas@gmail.com> * Update level.go * Update level.go --------- Co-authored-by: Ayman Bagabas <ayman.bagabas@gmail.com>
1 parent bd09619 commit d96bea2

File tree

2 files changed

+44
-25
lines changed

2 files changed

+44
-25
lines changed

level.go

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
package log
22

3-
import "strings"
3+
import (
4+
"errors"
5+
"fmt"
6+
"strings"
7+
)
48

59
// Level is a logging level.
610
type Level int32
@@ -38,20 +42,23 @@ func (l Level) String() string {
3842
}
3943
}
4044

45+
// ErrInvalidLevel is an error returned when parsing an invalid level string.
46+
var ErrInvalidLevel = errors.New("invalid level")
47+
4148
// ParseLevel converts level in string to Level type. Default level is InfoLevel.
42-
func ParseLevel(level string) Level {
49+
func ParseLevel(level string) (Level, error) {
4350
switch strings.ToLower(level) {
4451
case DebugLevel.String():
45-
return DebugLevel
52+
return DebugLevel, nil
4653
case InfoLevel.String():
47-
return InfoLevel
54+
return InfoLevel, nil
4855
case WarnLevel.String():
49-
return WarnLevel
56+
return WarnLevel, nil
5057
case ErrorLevel.String():
51-
return ErrorLevel
58+
return ErrorLevel, nil
5259
case FatalLevel.String():
53-
return FatalLevel
60+
return FatalLevel, nil
5461
default:
55-
return InfoLevel
62+
return 0, fmt.Errorf("%w: %q", ErrInvalidLevel, level)
5663
}
5764
}

level_test.go

Lines changed: 29 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package log
22

33
import (
4+
"fmt"
45
"testing"
56

67
"github.com/stretchr/testify/assert"
@@ -10,52 +11,63 @@ func TestDefaultLevel(t *testing.T) {
1011
var level Level
1112
assert.Equal(t, InfoLevel, level)
1213
}
14+
1315
func TestParseLevel(t *testing.T) {
1416
testCases := []struct {
1517
name string
16-
level string
17-
expLevel Level
18+
input string
19+
expected Level
20+
error error
1821
}{
1922
{
2023
name: "Parse debug",
21-
level: "debug",
22-
expLevel: DebugLevel,
24+
input: "debug",
25+
expected: DebugLevel,
26+
error: nil,
2327
},
2428
{
2529
name: "Parse info",
26-
level: "Info",
27-
expLevel: InfoLevel,
30+
input: "Info",
31+
expected: InfoLevel,
32+
error: nil,
2833
},
2934
{
3035
name: "Parse warn",
31-
level: "WARN",
32-
expLevel: WarnLevel,
36+
input: "WARN",
37+
expected: WarnLevel,
38+
error: nil,
3339
},
3440
{
3541
name: "Parse error",
36-
level: "error",
37-
expLevel: ErrorLevel,
42+
input: "error",
43+
expected: ErrorLevel,
44+
error: nil,
3845
},
3946
{
4047
name: "Parse fatal",
41-
level: "FATAL",
42-
expLevel: FatalLevel,
48+
input: "FATAL",
49+
expected: FatalLevel,
50+
error: nil,
4351
},
4452
{
4553
name: "Default",
46-
level: "",
47-
expLevel: InfoLevel,
54+
input: "",
55+
expected: InfoLevel,
56+
error: fmt.Errorf("%w: %q", ErrInvalidLevel, ""),
4857
},
4958
{
5059
name: "Wrong level, set INFO",
51-
level: "WRONG_LEVEL",
52-
expLevel: InfoLevel,
60+
input: "WRONG_LEVEL",
61+
expected: InfoLevel,
62+
error: fmt.Errorf("%w: %q", ErrInvalidLevel, "WRONG_LEVEL"),
5363
},
5464
}
5565

5666
for _, tc := range testCases {
5767
t.Run(tc.name, func(t *testing.T) {
58-
assert.Equal(t, tc.expLevel, ParseLevel(tc.level))
68+
lvl, err := ParseLevel(tc.input)
69+
assert.Equal(t, tc.expected, lvl)
70+
assert.Equal(t, tc.error, err)
5971
})
6072
}
6173
}

0 commit comments

Comments
 (0)