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

     1  package client
     2  
     3  import (
     4  	"fmt"
     5  	"os"
     6  	"path/filepath"
     7  	"testing"
     8  
     9  	"github.com/heroku/color"
    10  	"github.com/sclevine/spec"
    11  	"github.com/sclevine/spec/report"
    12  
    13  	h "github.com/buildpacks/pack/testhelpers"
    14  )
    15  
    16  func TestInputImageReference(t *testing.T) {
    17  	color.Disable(true)
    18  	defer color.Disable(false)
    19  	spec.Run(t, "InputImageReference", testInputImageReference, spec.Parallel(), spec.Report(report.Terminal{}))
    20  }
    21  
    22  func testInputImageReference(t *testing.T, when spec.G, it spec.S) {
    23  	var defaultImageReference, layoutImageReference InputImageReference
    24  
    25  	it.Before(func() {
    26  		defaultImageReference = ParseInputImageReference("busybox")
    27  		layoutImageReference = ParseInputImageReference("oci:my-app")
    28  	})
    29  
    30  	when("#ParseInputImageReference", func() {
    31  		when("oci layout image reference is not provided", func() {
    32  			it("default implementation is returned", func() {
    33  				h.AssertEq(t, defaultImageReference.Layout(), false)
    34  				h.AssertEq(t, defaultImageReference.Name(), "busybox")
    35  
    36  				fullName, err := defaultImageReference.FullName()
    37  				h.AssertNil(t, err)
    38  				h.AssertEq(t, fullName, "busybox")
    39  			})
    40  		})
    41  
    42  		when("oci layout image reference is provided", func() {
    43  			it("layout implementation is returned", func() {
    44  				h.AssertTrue(t, layoutImageReference.Layout())
    45  				h.AssertEq(t, layoutImageReference.Name(), "my-app")
    46  			})
    47  		})
    48  	})
    49  
    50  	when("#FullName", func() {
    51  		when("oci layout image reference is provided", func() {
    52  			when("not absolute path provided", func() {
    53  				it("it will be joined with the current working directory", func() {
    54  					fullPath, err := layoutImageReference.FullName()
    55  					h.AssertNil(t, err)
    56  
    57  					currentWorkingDir, err := os.Getwd()
    58  					h.AssertNil(t, err)
    59  
    60  					expectedPath := filepath.Join(currentWorkingDir, layoutImageReference.Name())
    61  					h.AssertEq(t, fullPath, expectedPath)
    62  				})
    63  			})
    64  
    65  			when("absolute path provided", func() {
    66  				var (
    67  					fullPath, expectedFullPath, tmpDir string
    68  					err                                error
    69  				)
    70  
    71  				it.Before(func() {
    72  					tmpDir, err = os.MkdirTemp("", "pack.input.image.reference.test")
    73  					h.AssertNil(t, err)
    74  					expectedFullPath = filepath.Join(tmpDir, "my-app")
    75  					layoutImageReference = ParseInputImageReference(fmt.Sprintf("oci:%s", expectedFullPath))
    76  				})
    77  
    78  				it.After(func() {
    79  					err = os.RemoveAll(tmpDir)
    80  					h.AssertNil(t, err)
    81  				})
    82  
    83  				it("it must returned the path provided", func() {
    84  					fullPath, err = layoutImageReference.FullName()
    85  					h.AssertNil(t, err)
    86  					h.AssertEq(t, fullPath, expectedFullPath)
    87  				})
    88  			})
    89  		})
    90  	})
    91  }