github.com/buildpacks/pack@v0.33.3-0.20240516162812-884dd1837311/pkg/logging/logging_test.go (about)

     1  package logging_test
     2  
     3  import (
     4  	"bytes"
     5  	"testing"
     6  
     7  	"github.com/heroku/color"
     8  	"github.com/sclevine/spec"
     9  	"github.com/sclevine/spec/report"
    10  
    11  	"github.com/buildpacks/pack/pkg/logging"
    12  	h "github.com/buildpacks/pack/testhelpers"
    13  )
    14  
    15  func TestLogging(t *testing.T) {
    16  	color.Disable(true)
    17  	defer color.Disable(false)
    18  	spec.Run(t, "Logging", testLogging, spec.Parallel(), spec.Report(report.Terminal{}))
    19  }
    20  
    21  func testLogging(t *testing.T, when spec.G, it spec.S) {
    22  	when("#GetWriterForLevel", func() {
    23  		when("isSelectableWriter", func() {
    24  			it("returns Logger for appropriate level", func() {
    25  				outCons, output := h.MockWriterAndOutput()
    26  				errCons, errOutput := h.MockWriterAndOutput()
    27  				logger := logging.NewLogWithWriters(outCons, errCons)
    28  
    29  				infoLogger := logging.GetWriterForLevel(logger, logging.InfoLevel)
    30  				_, _ = infoLogger.Write([]byte("info test"))
    31  				h.AssertEq(t, output(), "info test")
    32  
    33  				errorLogger := logging.GetWriterForLevel(logger, logging.ErrorLevel)
    34  				_, _ = errorLogger.Write([]byte("error test"))
    35  				h.AssertEq(t, errOutput(), "error test")
    36  			})
    37  		})
    38  
    39  		when("doesn't implement isSelectableWriter", func() {
    40  			it("returns one Writer for all levels", func() {
    41  				var w bytes.Buffer
    42  				logger := logging.NewSimpleLogger(&w)
    43  				writer := logging.GetWriterForLevel(logger, logging.InfoLevel)
    44  				_, _ = writer.Write([]byte("info test\n"))
    45  				h.AssertEq(t, w.String(), "info test\n")
    46  
    47  				writer = logging.GetWriterForLevel(logger, logging.ErrorLevel)
    48  				_, _ = writer.Write([]byte("error test\n"))
    49  				h.AssertEq(t, w.String(), "info test\nerror test\n")
    50  			})
    51  		})
    52  	})
    53  
    54  	when("IsQuiet", func() {
    55  		when("implements isSelectableWriter", func() {
    56  			it("return true for quiet mode", func() {
    57  				var w bytes.Buffer
    58  				logger := logging.NewLogWithWriters(&w, &w)
    59  				h.AssertEq(t, logging.IsQuiet(logger), false)
    60  
    61  				logger.WantQuiet(true)
    62  				h.AssertEq(t, logging.IsQuiet(logger), true)
    63  			})
    64  		})
    65  
    66  		when("doesn't implement isSelectableWriter", func() {
    67  			it("always returns false", func() {
    68  				var w bytes.Buffer
    69  				logger := logging.NewSimpleLogger(&w)
    70  				h.AssertEq(t, logging.IsQuiet(logger), false)
    71  			})
    72  		})
    73  	})
    74  
    75  	when("#Tip", func() {
    76  		it("prepends `Tip:` to string", func() {
    77  			var w bytes.Buffer
    78  			logger := logging.NewSimpleLogger(&w)
    79  			logging.Tip(logger, "test")
    80  			h.AssertContains(t, w.String(), "Tip: "+"test")
    81  		})
    82  	})
    83  }