From 6a30897b967d3aed96fcc041e202997a1aa6dc25 Mon Sep 17 00:00:00 2001 From: sundowndev Date: Sun, 17 May 2020 16:15:32 +0200 Subject: [PATCH] test(utils): logger --- pkg/utils/logger.go | 23 ++++++--- pkg/utils/mocks/Color.go | 57 ++++++++++++++++++++++ pkg/utils/utils_test.go | 102 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 174 insertions(+), 8 deletions(-) create mode 100644 pkg/utils/mocks/Color.go diff --git a/pkg/utils/logger.go b/pkg/utils/logger.go index cdd5bbc7f..65a7f7823 100644 --- a/pkg/utils/logger.go +++ b/pkg/utils/logger.go @@ -8,36 +8,43 @@ import ( // Logger allows you to log messages in the terminal type Logger struct { - newColor func(value ...color.Attribute) *color.Color + NewColor func(value ...color.Attribute) Color +} + +type Color interface { + Println(a ...interface{}) (int, error) + Printf(format string, a ...interface{}) (int, error) } // Infoln logs an info message func (l *Logger) Infoln(s ...string) { - l.newColor(color.FgCyan).Println("[i]", strings.Join(s, " ")) + l.NewColor(color.FgCyan).Println("[i]", strings.Join(s, " ")) } // Warnln logs an warning message func (l *Logger) Warnln(s ...string) { - l.newColor(color.FgYellow).Println("[*]", strings.Join(s, " ")) + l.NewColor(color.FgYellow).Println("[*]", strings.Join(s, " ")) } // Errorln logs an error message func (l *Logger) Errorln(s ...string) { - l.newColor(color.FgRed).Println("[!]", strings.Join(s, " ")) + l.NewColor(color.FgRed).Println("[!]", strings.Join(s, " ")) } // Successln logs a success message func (l *Logger) Successln(s ...string) { - l.newColor(color.FgGreen).Println("[+]", strings.Join(s, " ")) + l.NewColor(color.FgGreen).Println("[+]", strings.Join(s, " ")) } // Successf logs a success message func (l *Logger) Successf(format string, messages ...interface{}) { - l.newColor(color.FgGreen).Printf("[+] "+format, messages...) - l.newColor().Printf("\n") + l.NewColor(color.FgGreen).Printf("[+] "+format, messages...) + l.NewColor().Printf("\n") } // LoggerService is the default logger instance var LoggerService = &Logger{ - newColor: color.New, + NewColor: func(value ...color.Attribute) Color { + return color.New(value...) + }, } diff --git a/pkg/utils/mocks/Color.go b/pkg/utils/mocks/Color.go new file mode 100644 index 000000000..23aa55264 --- /dev/null +++ b/pkg/utils/mocks/Color.go @@ -0,0 +1,57 @@ +// Code generated by mockery v1.0.0. DO NOT EDIT. + +package mocks + +import mock "github.com/stretchr/testify/mock" + +// Color is an autogenerated mock type for the Color type +type Color struct { + mock.Mock +} + +// Printf provides a mock function with given fields: format, a +func (_m *Color) Printf(format string, a ...interface{}) (int, error) { + var _ca []interface{} + _ca = append(_ca, format) + _ca = append(_ca, a...) + ret := _m.Called(_ca...) + + var r0 int + if rf, ok := ret.Get(0).(func(string, ...interface{}) int); ok { + r0 = rf(format, a...) + } else { + r0 = ret.Get(0).(int) + } + + var r1 error + if rf, ok := ret.Get(1).(func(string, ...interface{}) error); ok { + r1 = rf(format, a...) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// Println provides a mock function with given fields: a +func (_m *Color) Println(a ...interface{}) (int, error) { + var _ca []interface{} + _ca = append(_ca, a...) + ret := _m.Called(_ca...) + + var r0 int + if rf, ok := ret.Get(0).(func(...interface{}) int); ok { + r0 = rf(a...) + } else { + r0 = ret.Get(0).(int) + } + + var r1 error + if rf, ok := ret.Get(1).(func(...interface{}) error); ok { + r1 = rf(a...) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} diff --git a/pkg/utils/utils_test.go b/pkg/utils/utils_test.go index 2ec44c2ee..816f3ea99 100644 --- a/pkg/utils/utils_test.go +++ b/pkg/utils/utils_test.go @@ -3,7 +3,10 @@ package utils import ( "testing" + "github.com/fatih/color" "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/mock" + "gopkg.in/sundowndev/phoneinfoga.v2/pkg/utils/mocks" ) func TestUtils(t *testing.T) { @@ -56,4 +59,103 @@ func TestUtils(t *testing.T) { assert.Equal(result, false, "they should be equal") }) }) + + t.Run("Logger", func(t *testing.T) { + t.Run("Infoln", func(t *testing.T) { + mLogger := new(mocks.Color) + + mLogger.On("Println", mock.AnythingOfType("string"), mock.AnythingOfType("string")).Return(0, nil) + + log := &Logger{ + NewColor: func(value ...color.Attribute) Color { + assert.Equal([]color.Attribute([]color.Attribute{36}), value, "they should be equal") + + return mLogger + }, + } + + log.Infoln("test") + + mLogger.AssertCalled(t, "Println", "[i]", "test") + }) + + t.Run("Warnln", func(t *testing.T) { + mLogger := new(mocks.Color) + + mLogger.On("Println", mock.AnythingOfType("string"), mock.AnythingOfType("string")).Return(0, nil) + + log := &Logger{ + NewColor: func(value ...color.Attribute) Color { + assert.Equal([]color.Attribute([]color.Attribute{33}), value, "they should be equal") + + return mLogger + }, + } + + log.Warnln("test") + + mLogger.AssertCalled(t, "Println", "[*]", "test") + }) + + t.Run("Errorln", func(t *testing.T) { + mLogger := new(mocks.Color) + + mLogger.On("Println", mock.AnythingOfType("string"), mock.AnythingOfType("string")).Return(0, nil) + + log := &Logger{ + NewColor: func(value ...color.Attribute) Color { + assert.Equal([]color.Attribute([]color.Attribute{31}), value, "they should be equal") + + return mLogger + }, + } + + log.Errorln("test") + + mLogger.AssertCalled(t, "Println", "[!]", "test") + }) + + t.Run("Successln", func(t *testing.T) { + mLogger := new(mocks.Color) + + mLogger.On("Println", mock.AnythingOfType("string"), mock.AnythingOfType("string")).Return(0, nil) + + log := &Logger{ + NewColor: func(value ...color.Attribute) Color { + assert.Equal([]color.Attribute([]color.Attribute{32}), value, "they should be equal") + + return mLogger + }, + } + + log.Successln("test") + + mLogger.AssertCalled(t, "Println", "[+]", "test") + }) + + t.Run("Successf", func(t *testing.T) { + var ColorNumberOfCalls int + + mLogger := new(mocks.Color) + + mLogger.On("Printf", mock.AnythingOfType("string"), mock.AnythingOfType("string")).Return(0, nil) + mLogger.On("Printf", mock.AnythingOfType("string")).Return(0, nil) + + log := &Logger{ + NewColor: func(value ...color.Attribute) Color { + if ColorNumberOfCalls == 0 { + assert.Equal([]color.Attribute([]color.Attribute{32}), value, "they should be equal") + ColorNumberOfCalls++ + } + + return mLogger + }, + } + + log.Successf("%s", "test") + + mLogger.AssertNumberOfCalls(t, "Printf", 2) + mLogger.AssertCalled(t, "Printf", "[+] %s", "test") + }) + }) }