github.com/YousefHaggyHeroku/pack@v1.5.5/internal/builder/writer/factory_test.go (about)

     1  package writer_test
     2  
     3  import (
     4  	"fmt"
     5  	"testing"
     6  
     7  	"github.com/YousefHaggyHeroku/pack/internal/builder/writer"
     8  	h "github.com/YousefHaggyHeroku/pack/testhelpers"
     9  
    10  	"github.com/heroku/color"
    11  	"github.com/sclevine/spec"
    12  	"github.com/sclevine/spec/report"
    13  )
    14  
    15  func TestFactory(t *testing.T) {
    16  	color.Disable(true)
    17  	defer color.Disable(false)
    18  	spec.Run(t, "Builder Writer Factory", testFactory, spec.Parallel(), spec.Report(report.Terminal{}))
    19  }
    20  
    21  func testFactory(t *testing.T, when spec.G, it spec.S) {
    22  	var assert = h.NewAssertionManager(t)
    23  
    24  	when("Writer", func() {
    25  		when("output format is human-readable", func() {
    26  			it("returns a HumanReadable writer", func() {
    27  				factory := writer.NewFactory()
    28  
    29  				returnedWriter, err := factory.Writer("human-readable")
    30  				assert.Nil(err)
    31  				_, ok := returnedWriter.(*writer.HumanReadable)
    32  				assert.TrueWithMessage(
    33  					ok,
    34  					fmt.Sprintf("expected %T to be assignable to type `*writer.HumanReadable`", returnedWriter),
    35  				)
    36  			})
    37  		})
    38  
    39  		when("output format is json", func() {
    40  			it("return a JSON writer", func() {
    41  				factory := writer.NewFactory()
    42  
    43  				returnedWriter, err := factory.Writer("json")
    44  				assert.Nil(err)
    45  
    46  				_, ok := returnedWriter.(*writer.JSON)
    47  				assert.TrueWithMessage(
    48  					ok,
    49  					fmt.Sprintf("expected %T to be assignable to type `*writer.JSON`", returnedWriter),
    50  				)
    51  			})
    52  		})
    53  
    54  		when("output format is yaml", func() {
    55  			it("return a YAML writer", func() {
    56  				factory := writer.NewFactory()
    57  
    58  				returnedWriter, err := factory.Writer("yaml")
    59  				assert.Nil(err)
    60  
    61  				_, ok := returnedWriter.(*writer.YAML)
    62  				assert.TrueWithMessage(
    63  					ok,
    64  					fmt.Sprintf("expected %T to be assignable to type `*writer.YAML`", returnedWriter),
    65  				)
    66  			})
    67  		})
    68  
    69  		when("output format is toml", func() {
    70  			it("return a TOML writer", func() {
    71  				factory := writer.NewFactory()
    72  
    73  				returnedWriter, err := factory.Writer("toml")
    74  				assert.Nil(err)
    75  
    76  				_, ok := returnedWriter.(*writer.TOML)
    77  				assert.TrueWithMessage(
    78  					ok,
    79  					fmt.Sprintf("expected %T to be assignable to type `*writer.TOML`", returnedWriter),
    80  				)
    81  			})
    82  		})
    83  
    84  		when("output format is not supported", func() {
    85  			it("returns an error", func() {
    86  				factory := writer.NewFactory()
    87  
    88  				_, err := factory.Writer("mind-beam")
    89  				assert.ErrorWithMessage(err, "output format 'mind-beam' is not supported")
    90  			})
    91  		})
    92  	})
    93  }