github.com/paketo-buildpacks/packit@v1.3.2-0.20211206231111-86b75c657449/postal/internal/dependency_mappings_test.go (about)

     1  package internal_test
     2  
     3  import (
     4  	"os"
     5  	"path/filepath"
     6  	"testing"
     7  
     8  	"github.com/paketo-buildpacks/packit/postal/internal"
     9  	"github.com/paketo-buildpacks/packit/postal/internal/fakes"
    10  	"github.com/paketo-buildpacks/packit/servicebindings"
    11  	"github.com/sclevine/spec"
    12  
    13  	. "github.com/onsi/gomega"
    14  )
    15  
    16  func testDependencyMappings(t *testing.T, context spec.G, it spec.S) {
    17  	var (
    18  		Expect          = NewWithT(t).Expect
    19  		tmpDir          string
    20  		resolver        internal.DependencyMappingResolver
    21  		bindingResolver *fakes.BindingResolver
    22  		err             error
    23  	)
    24  
    25  	it.Before(func() {
    26  		tmpDir, err = os.MkdirTemp("", "dependency-mappings")
    27  		Expect(err).NotTo(HaveOccurred())
    28  		Expect(os.WriteFile(filepath.Join(tmpDir, "entry-data"), []byte("dependency-mapping-entry.tgz"), os.ModePerm))
    29  
    30  		bindingResolver = &fakes.BindingResolver{}
    31  		resolver = internal.NewDependencyMappingResolver(bindingResolver)
    32  		Expect(err).NotTo(HaveOccurred())
    33  	})
    34  
    35  	it.After(func() {
    36  		Expect(os.RemoveAll(tmpDir)).To(Succeed())
    37  	})
    38  
    39  	context("FindDependencyMapping", func() {
    40  		it.Before(func() {
    41  			bindingResolver.ResolveCall.Returns.BindingSlice = []servicebindings.Binding{
    42  				{
    43  					Name: "some-binding",
    44  					Path: "some-path",
    45  					Type: "dependency-mapping",
    46  					Entries: map[string]*servicebindings.Entry{
    47  						"some-sha": servicebindings.NewEntry(filepath.Join(tmpDir, "entry-data")),
    48  					},
    49  				},
    50  				{
    51  					Name: "other-binding",
    52  					Path: "other-path",
    53  					Type: "dependency-mapping",
    54  					Entries: map[string]*servicebindings.Entry{
    55  						"other-sha": servicebindings.NewEntry("some-entry-path"),
    56  					},
    57  				},
    58  				{
    59  					Name:    "another-binding",
    60  					Path:    "another-path",
    61  					Type:    "another-type",
    62  					Entries: map[string]*servicebindings.Entry{},
    63  				},
    64  			}
    65  		})
    66  
    67  		context("given a set of bindings and a dependency", func() {
    68  			it("finds a matching dependency mappings in the platform bindings if there is one", func() {
    69  				boundDependency, err := resolver.FindDependencyMapping("some-sha", "some-platform-dir")
    70  				Expect(err).ToNot(HaveOccurred())
    71  				Expect(bindingResolver.ResolveCall.Receives.Typ).To(Equal("dependency-mapping"))
    72  				Expect(bindingResolver.ResolveCall.Receives.Provider).To(BeEmpty())
    73  				Expect(bindingResolver.ResolveCall.Receives.PlatformDir).To(Equal("some-platform-dir"))
    74  				Expect(boundDependency).To(Equal("dependency-mapping-entry.tgz"))
    75  			})
    76  		})
    77  
    78  		context("given a set of bindings and a dependency", func() {
    79  			it("returns an empty DependencyMapping if there is no match", func() {
    80  				boundDependency, err := resolver.FindDependencyMapping("unmatched-sha", "")
    81  				Expect(err).ToNot(HaveOccurred())
    82  				Expect(boundDependency).To(Equal(""))
    83  			})
    84  		})
    85  	})
    86  }