github.com/BarDweller/libpak@v0.0.0-20230630201634-8dd5cfc15ec9/carton/package_test.go (about)

     1  /*
     2   * Copyright 2018-2020 the original author or authors.
     3   *
     4   * Licensed under the Apache License, Version 2.0 (the "License");
     5   * you may not use this file except in compliance with the License.
     6   * You may obtain a copy of the License at
     7   *
     8   *      https://www.apache.org/licenses/LICENSE-2.0
     9   *
    10   * Unless required by applicable law or agreed to in writing, software
    11   * distributed under the License is distributed on an "AS IS" BASIS,
    12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    13   * See the License for the specific language governing permissions and
    14   * limitations under the License.
    15   */
    16  
    17  package carton_test
    18  
    19  import (
    20  	"os"
    21  	"path/filepath"
    22  	"testing"
    23  
    24  	"github.com/buildpacks/libcnb/mocks"
    25  	. "github.com/onsi/gomega"
    26  	"github.com/sclevine/spec"
    27  	"github.com/stretchr/testify/mock"
    28  
    29  	"github.com/BarDweller/libpak/carton"
    30  	cMocks "github.com/BarDweller/libpak/carton/mocks"
    31  	"github.com/BarDweller/libpak/effect"
    32  	eMocks "github.com/BarDweller/libpak/effect/mocks"
    33  )
    34  
    35  func testPackage(t *testing.T, context spec.G, it spec.S) {
    36  	var (
    37  		Expect = NewWithT(t).Expect
    38  
    39  		entryWriter *cMocks.EntryWriter
    40  		executor    *eMocks.Executor
    41  		exitHandler *mocks.ExitHandler
    42  		path        string
    43  	)
    44  
    45  	context("with buildpack.toml", func() {
    46  		it.Before(func() {
    47  			entryWriter = &cMocks.EntryWriter{}
    48  			entryWriter.On("Write", mock.Anything, mock.Anything).Return(nil)
    49  
    50  			executor = &eMocks.Executor{}
    51  			executor.On("Execute", mock.Anything).Return(nil)
    52  
    53  			exitHandler = &mocks.ExitHandler{}
    54  			exitHandler.On("Error", mock.Anything)
    55  
    56  			path = t.TempDir()
    57  
    58  			Expect(os.WriteFile(filepath.Join(path, "buildpack.toml"), []byte(`
    59  api = "0.0.0"
    60  
    61  [buildpack]
    62  name    = "test-name"
    63  version = "{{.version}}"
    64  
    65  [[metadata.dependencies]]
    66  id      = "test-id"
    67  name    = "test-name"
    68  version = "1.1.1"
    69  uri     = "test-uri"
    70  sha256  = "test-sha256"
    71  stacks  = [ "test-stack" ]
    72  
    73    [[metadata.dependencies.licenses]]
    74    type = "test-type"
    75    uri  = "test-uri"
    76  
    77  [metadata]
    78  pre-package   = "test-pre-package"
    79  include-files = [
    80    "test-include-files",
    81    "buildpack.toml",
    82  ]
    83  `), 0644)).To(Succeed())
    84  
    85  		})
    86  
    87  		it.After(func() {
    88  			Expect(os.RemoveAll(path)).To(Succeed())
    89  		})
    90  
    91  		it("executes pre_package script", func() {
    92  			carton.Package{
    93  				Source: path,
    94  			}.Create(
    95  				carton.WithEntryWriter(entryWriter),
    96  				carton.WithExecutor(executor),
    97  				carton.WithExitHandler(exitHandler))
    98  
    99  			e, ok := executor.Calls[0].Arguments[0].(effect.Execution)
   100  			Expect(ok).To(BeTrue())
   101  			Expect(e.Command).To(Equal("test-pre-package"))
   102  			Expect(e.Dir).To(Equal(path))
   103  		})
   104  
   105  		it("includes include_files", func() {
   106  			carton.Package{
   107  				Source:      path,
   108  				Destination: "test-destination",
   109  			}.Create(
   110  				carton.WithEntryWriter(entryWriter),
   111  				carton.WithExecutor(executor),
   112  				carton.WithExitHandler(exitHandler))
   113  
   114  			Expect(entryWriter.Calls[0].Arguments[0]).To(Equal(filepath.Join(path, "buildpack.toml")))
   115  			Expect(entryWriter.Calls[0].Arguments[1]).To(Equal(filepath.Join("test-destination", "buildpack.toml")))
   116  			Expect(entryWriter.Calls[1].Arguments[0]).To(Equal(filepath.Join(path, "test-include-files")))
   117  			Expect(entryWriter.Calls[1].Arguments[1]).To(Equal(filepath.Join("test-destination", "test-include-files")))
   118  		})
   119  
   120  		it("replaces .version in buildpack.toml", func() {
   121  			carton.Package{
   122  				Source:      path,
   123  				Destination: "test-destination",
   124  				Version:     "2.2.2",
   125  			}.Create(
   126  				carton.WithEntryWriter(entryWriter),
   127  				carton.WithExecutor(executor),
   128  				carton.WithExitHandler(exitHandler))
   129  
   130  			Expect(entryWriter.Calls[0].Arguments[0]).NotTo(Equal(filepath.Join(path, "buildpack.toml")))
   131  			Expect(entryWriter.Calls[0].Arguments[1]).To(Equal(filepath.Join("test-destination", "buildpack.toml")))
   132  			Expect(entryWriter.Calls[1].Arguments[0]).To(Equal(filepath.Join(path, "test-include-files")))
   133  			Expect(entryWriter.Calls[1].Arguments[1]).To(Equal(filepath.Join("test-destination", "test-include-files")))
   134  
   135  			Expect(os.ReadFile(entryWriter.Calls[0].Arguments[0].(string))).To(Equal([]byte(`
   136  api = "0.0.0"
   137  
   138  [buildpack]
   139  name    = "test-name"
   140  version = "2.2.2"
   141  
   142  [[metadata.dependencies]]
   143  id      = "test-id"
   144  name    = "test-name"
   145  version = "1.1.1"
   146  uri     = "test-uri"
   147  sha256  = "test-sha256"
   148  stacks  = [ "test-stack" ]
   149  
   150    [[metadata.dependencies.licenses]]
   151    type = "test-type"
   152    uri  = "test-uri"
   153  
   154  [metadata]
   155  pre-package   = "test-pre-package"
   156  include-files = [
   157    "test-include-files",
   158    "buildpack.toml",
   159  ]
   160  `)))
   161  		})
   162  
   163  		context("includes dependencies", func() {
   164  			it.Before(func() {
   165  				Expect(os.WriteFile(filepath.Join(path, "buildpack.toml"), []byte(`
   166  api = "0.0.0"
   167  
   168  [buildpack]
   169  name    = "test-name"
   170  version = "{{.version}}"
   171  
   172  [[metadata.dependencies]]
   173  id      = "test-id"
   174  name    = "test-name"
   175  version = "1.1.1"
   176  uri     = "test-uri-1"
   177  sha256  = "test-sha256-1"
   178  
   179  [[metadata.dependencies]]
   180  id      = "test-id"
   181  name    = "test-name"
   182  version = "2.0.5"
   183  uri     = "test-uri-2"
   184  sha256  = "test-sha256-2"
   185  
   186  [[metadata.dependencies]]
   187  id      = "another-test-id"
   188  name    = "test-name"
   189  version = "1.1.1"
   190  uri     = "test-uri-3"
   191  sha256  = "test-sha256-3"
   192  
   193  [metadata]
   194  pre-package   = "test-pre-package"
   195  include-files = [
   196    "test-include-files",
   197    "buildpack.toml",
   198  ]
   199  `), 0644)).To(Succeed())
   200  			})
   201  
   202  			it("includes all dependencies", func() {
   203  				carton.Package{
   204  					Source:              path,
   205  					Destination:         "test-destination",
   206  					IncludeDependencies: true,
   207  					CacheLocation:       "testdata",
   208  				}.Create(
   209  					carton.WithEntryWriter(entryWriter),
   210  					carton.WithExecutor(executor),
   211  					carton.WithExitHandler(exitHandler))
   212  
   213  				Expect(entryWriter.Calls).To(HaveLen(8))
   214  				Expect(entryWriter.Calls[0].Arguments[0]).To(Equal(filepath.Join(path, "buildpack.toml")))
   215  				Expect(entryWriter.Calls[0].Arguments[1]).To(Equal(filepath.Join("test-destination", "buildpack.toml")))
   216  
   217  				Expect(entryWriter.Calls[1].Arguments[0]).To(Equal("testdata/test-sha256-1.toml"))
   218  				Expect(entryWriter.Calls[1].Arguments[1]).To(Equal(filepath.Join("test-destination", "dependencies/test-sha256-1.toml")))
   219  				Expect(entryWriter.Calls[2].Arguments[0]).To(Equal("testdata/test-sha256-1/test-uri-1"))
   220  				Expect(entryWriter.Calls[2].Arguments[1]).To(Equal(filepath.Join("test-destination", "dependencies/test-sha256-1/test-uri-1")))
   221  
   222  				Expect(entryWriter.Calls[3].Arguments[0]).To(Equal("testdata/test-sha256-2.toml"))
   223  				Expect(entryWriter.Calls[3].Arguments[1]).To(Equal(filepath.Join("test-destination", "dependencies/test-sha256-2.toml")))
   224  				Expect(entryWriter.Calls[4].Arguments[0]).To(Equal("testdata/test-sha256-2/test-uri-2"))
   225  				Expect(entryWriter.Calls[4].Arguments[1]).To(Equal(filepath.Join("test-destination", "dependencies/test-sha256-2/test-uri-2")))
   226  
   227  				Expect(entryWriter.Calls[5].Arguments[0]).To(Equal("testdata/test-sha256-3.toml"))
   228  				Expect(entryWriter.Calls[5].Arguments[1]).To(Equal(filepath.Join("test-destination", "dependencies/test-sha256-3.toml")))
   229  				Expect(entryWriter.Calls[6].Arguments[0]).To(Equal("testdata/test-sha256-3/test-uri-3"))
   230  				Expect(entryWriter.Calls[6].Arguments[1]).To(Equal(filepath.Join("test-destination", "dependencies/test-sha256-3/test-uri-3")))
   231  
   232  				Expect(entryWriter.Calls[7].Arguments[0]).To(Equal(filepath.Join(path, "test-include-files")))
   233  				Expect(entryWriter.Calls[7].Arguments[1]).To(Equal(filepath.Join("test-destination", "test-include-files")))
   234  			})
   235  
   236  			it("includes filter by id", func() {
   237  				carton.Package{
   238  					Source:              path,
   239  					Destination:         "test-destination",
   240  					IncludeDependencies: true,
   241  					CacheLocation:       "testdata",
   242  					DependencyFilters:   []string{`^another-test-id$`},
   243  				}.Create(
   244  					carton.WithEntryWriter(entryWriter),
   245  					carton.WithExecutor(executor),
   246  					carton.WithExitHandler(exitHandler))
   247  
   248  				Expect(entryWriter.Calls).To(HaveLen(4))
   249  				Expect(entryWriter.Calls[0].Arguments[0]).To(Equal(filepath.Join(path, "buildpack.toml")))
   250  				Expect(entryWriter.Calls[0].Arguments[1]).To(Equal(filepath.Join("test-destination", "buildpack.toml")))
   251  
   252  				Expect(entryWriter.Calls[1].Arguments[0]).To(Equal("testdata/test-sha256-3.toml"))
   253  				Expect(entryWriter.Calls[1].Arguments[1]).To(Equal(filepath.Join("test-destination", "dependencies/test-sha256-3.toml")))
   254  				Expect(entryWriter.Calls[2].Arguments[0]).To(Equal("testdata/test-sha256-3/test-uri-3"))
   255  				Expect(entryWriter.Calls[2].Arguments[1]).To(Equal(filepath.Join("test-destination", "dependencies/test-sha256-3/test-uri-3")))
   256  
   257  				Expect(entryWriter.Calls[3].Arguments[0]).To(Equal(filepath.Join(path, "test-include-files")))
   258  				Expect(entryWriter.Calls[3].Arguments[1]).To(Equal(filepath.Join("test-destination", "test-include-files")))
   259  			})
   260  
   261  			it("includes filter by version", func() {
   262  				carton.Package{
   263  					Source:              path,
   264  					Destination:         "test-destination",
   265  					IncludeDependencies: true,
   266  					CacheLocation:       "testdata",
   267  					DependencyFilters:   []string{`^1.1.1$`},
   268  				}.Create(
   269  					carton.WithEntryWriter(entryWriter),
   270  					carton.WithExecutor(executor),
   271  					carton.WithExitHandler(exitHandler))
   272  
   273  				Expect(entryWriter.Calls).To(HaveLen(6))
   274  				Expect(entryWriter.Calls[0].Arguments[0]).To(Equal(filepath.Join(path, "buildpack.toml")))
   275  				Expect(entryWriter.Calls[0].Arguments[1]).To(Equal(filepath.Join("test-destination", "buildpack.toml")))
   276  
   277  				Expect(entryWriter.Calls[1].Arguments[0]).To(Equal("testdata/test-sha256-1.toml"))
   278  				Expect(entryWriter.Calls[1].Arguments[1]).To(Equal(filepath.Join("test-destination", "dependencies/test-sha256-1.toml")))
   279  				Expect(entryWriter.Calls[2].Arguments[0]).To(Equal("testdata/test-sha256-1/test-uri-1"))
   280  				Expect(entryWriter.Calls[2].Arguments[1]).To(Equal(filepath.Join("test-destination", "dependencies/test-sha256-1/test-uri-1")))
   281  
   282  				Expect(entryWriter.Calls[3].Arguments[0]).To(Equal("testdata/test-sha256-3.toml"))
   283  				Expect(entryWriter.Calls[3].Arguments[1]).To(Equal(filepath.Join("test-destination", "dependencies/test-sha256-3.toml")))
   284  				Expect(entryWriter.Calls[4].Arguments[0]).To(Equal("testdata/test-sha256-3/test-uri-3"))
   285  				Expect(entryWriter.Calls[4].Arguments[1]).To(Equal(filepath.Join("test-destination", "dependencies/test-sha256-3/test-uri-3")))
   286  
   287  				Expect(entryWriter.Calls[5].Arguments[0]).To(Equal(filepath.Join(path, "test-include-files")))
   288  				Expect(entryWriter.Calls[5].Arguments[1]).To(Equal(filepath.Join("test-destination", "test-include-files")))
   289  			})
   290  
   291  			it("includes filter by version and id", func() {
   292  				carton.Package{
   293  					Source:                  path,
   294  					Destination:             "test-destination",
   295  					IncludeDependencies:     true,
   296  					CacheLocation:           "testdata",
   297  					DependencyFilters:       []string{`^test-id$|^2\.0\.5$`},
   298  					StrictDependencyFilters: true,
   299  				}.Create(
   300  					carton.WithEntryWriter(entryWriter),
   301  					carton.WithExecutor(executor),
   302  					carton.WithExitHandler(exitHandler))
   303  
   304  				Expect(entryWriter.Calls).To(HaveLen(4))
   305  				Expect(entryWriter.Calls[0].Arguments[0]).To(Equal(filepath.Join(path, "buildpack.toml")))
   306  				Expect(entryWriter.Calls[0].Arguments[1]).To(Equal(filepath.Join("test-destination", "buildpack.toml")))
   307  
   308  				Expect(entryWriter.Calls[1].Arguments[0]).To(Equal("testdata/test-sha256-2.toml"))
   309  				Expect(entryWriter.Calls[1].Arguments[1]).To(Equal(filepath.Join("test-destination", "dependencies/test-sha256-2.toml")))
   310  				Expect(entryWriter.Calls[2].Arguments[0]).To(Equal("testdata/test-sha256-2/test-uri-2"))
   311  				Expect(entryWriter.Calls[2].Arguments[1]).To(Equal(filepath.Join("test-destination", "dependencies/test-sha256-2/test-uri-2")))
   312  
   313  				Expect(entryWriter.Calls[3].Arguments[0]).To(Equal(filepath.Join(path, "test-include-files")))
   314  				Expect(entryWriter.Calls[3].Arguments[1]).To(Equal(filepath.Join("test-destination", "test-include-files")))
   315  			})
   316  		})
   317  	})
   318  
   319  	context("with extension.toml", func() {
   320  		it.Before(func() {
   321  			entryWriter = &cMocks.EntryWriter{}
   322  			entryWriter.On("Write", mock.Anything, mock.Anything).Return(nil)
   323  
   324  			executor = &eMocks.Executor{}
   325  			executor.On("Execute", mock.Anything).Return(nil)
   326  
   327  			exitHandler = &mocks.ExitHandler{}
   328  			exitHandler.On("Error", mock.Anything)
   329  
   330  			path = t.TempDir()
   331  
   332  			Expect(os.WriteFile(filepath.Join(path, "extension.toml"), []byte(`
   333  api = "0.0.0"
   334  
   335  [extension]
   336  name    = "test-name"
   337  version = "{{.version}}"
   338  
   339  [[metadata.dependencies]]
   340  id      = "test-id"
   341  name    = "test-name"
   342  version = "1.1.1"
   343  uri     = "test-uri"
   344  sha256  = "test-sha256"
   345  stacks  = [ "test-stack" ]
   346  
   347    [[metadata.dependencies.licenses]]
   348    type = "test-type"
   349    uri  = "test-uri"
   350  
   351  [metadata]
   352  pre-package   = "test-pre-package"
   353  include-files = [
   354    "test-include-files",
   355    "extension.toml",
   356  ]
   357  `), 0644)).To(Succeed())
   358  
   359  		})
   360  
   361  		it.After(func() {
   362  			Expect(os.RemoveAll(path)).To(Succeed())
   363  		})
   364  
   365  		it("executes pre_package script", func() {
   366  			carton.Package{
   367  				Source: path,
   368  			}.Create(
   369  				carton.WithEntryWriter(entryWriter),
   370  				carton.WithExecutor(executor),
   371  				carton.WithExitHandler(exitHandler))
   372  
   373  			e, ok := executor.Calls[0].Arguments[0].(effect.Execution)
   374  			Expect(ok).To(BeTrue())
   375  			Expect(e.Command).To(Equal("test-pre-package"))
   376  			Expect(e.Dir).To(Equal(path))
   377  		})
   378  
   379  		it("includes include_files", func() {
   380  			carton.Package{
   381  				Source:      path,
   382  				Destination: "test-destination",
   383  			}.Create(
   384  				carton.WithEntryWriter(entryWriter),
   385  				carton.WithExecutor(executor),
   386  				carton.WithExitHandler(exitHandler))
   387  
   388  			Expect(entryWriter.Calls[0].Arguments[0]).To(Equal(filepath.Join(path, "extension.toml")))
   389  			Expect(entryWriter.Calls[0].Arguments[1]).To(Equal(filepath.Join("test-destination", "extension.toml")))
   390  			Expect(entryWriter.Calls[1].Arguments[0]).To(Equal(filepath.Join(path, "test-include-files")))
   391  			Expect(entryWriter.Calls[1].Arguments[1]).To(Equal(filepath.Join("test-destination", "test-include-files")))
   392  		})
   393  
   394  		it("replaces .version in extension.toml", func() {
   395  			carton.Package{
   396  				Source:      path,
   397  				Destination: "test-destination",
   398  				Version:     "2.2.2",
   399  			}.Create(
   400  				carton.WithEntryWriter(entryWriter),
   401  				carton.WithExecutor(executor),
   402  				carton.WithExitHandler(exitHandler))
   403  
   404  			Expect(entryWriter.Calls[0].Arguments[0]).NotTo(Equal(filepath.Join(path, "extension.toml")))
   405  			Expect(entryWriter.Calls[0].Arguments[1]).To(Equal(filepath.Join("test-destination", "extension.toml")))
   406  			Expect(entryWriter.Calls[1].Arguments[0]).To(Equal(filepath.Join(path, "test-include-files")))
   407  			Expect(entryWriter.Calls[1].Arguments[1]).To(Equal(filepath.Join("test-destination", "test-include-files")))
   408  
   409  			Expect(os.ReadFile(entryWriter.Calls[0].Arguments[0].(string))).To(Equal([]byte(`
   410  api = "0.0.0"
   411  
   412  [extension]
   413  name    = "test-name"
   414  version = "2.2.2"
   415  
   416  [[metadata.dependencies]]
   417  id      = "test-id"
   418  name    = "test-name"
   419  version = "1.1.1"
   420  uri     = "test-uri"
   421  sha256  = "test-sha256"
   422  stacks  = [ "test-stack" ]
   423  
   424    [[metadata.dependencies.licenses]]
   425    type = "test-type"
   426    uri  = "test-uri"
   427  
   428  [metadata]
   429  pre-package   = "test-pre-package"
   430  include-files = [
   431    "test-include-files",
   432    "extension.toml",
   433  ]
   434  `)))
   435  		})
   436  
   437  		context("includes dependencies", func() {
   438  			it.Before(func() {
   439  				Expect(os.WriteFile(filepath.Join(path, "extension.toml"), []byte(`
   440  api = "0.0.0"
   441  
   442  [extension]
   443  name    = "test-name"
   444  version = "{{.version}}"
   445  
   446  [[metadata.dependencies]]
   447  id      = "test-id"
   448  name    = "test-name"
   449  version = "1.1.1"
   450  uri     = "test-uri-1"
   451  sha256  = "test-sha256-1"
   452  
   453  [[metadata.dependencies]]
   454  id      = "test-id"
   455  name    = "test-name"
   456  version = "2.0.5"
   457  uri     = "test-uri-2"
   458  sha256  = "test-sha256-2"
   459  
   460  [[metadata.dependencies]]
   461  id      = "another-test-id"
   462  name    = "test-name"
   463  version = "1.1.1"
   464  uri     = "test-uri-3"
   465  sha256  = "test-sha256-3"
   466  
   467  [metadata]
   468  pre-package   = "test-pre-package"
   469  include-files = [
   470    "test-include-files",
   471    "extension.toml",
   472  ]
   473  `), 0644)).To(Succeed())
   474  			})
   475  
   476  			it("includes all dependencies", func() {
   477  				carton.Package{
   478  					Source:              path,
   479  					Destination:         "test-destination",
   480  					IncludeDependencies: true,
   481  					CacheLocation:       "testdata",
   482  				}.Create(
   483  					carton.WithEntryWriter(entryWriter),
   484  					carton.WithExecutor(executor),
   485  					carton.WithExitHandler(exitHandler))
   486  
   487  				Expect(entryWriter.Calls).To(HaveLen(8))
   488  
   489  				Expect(entryWriter.Calls[0].Arguments[0]).To(Equal("testdata/test-sha256-1.toml"))
   490  				Expect(entryWriter.Calls[0].Arguments[1]).To(Equal(filepath.Join("test-destination", "dependencies/test-sha256-1.toml")))
   491  				Expect(entryWriter.Calls[1].Arguments[0]).To(Equal("testdata/test-sha256-1/test-uri-1"))
   492  				Expect(entryWriter.Calls[1].Arguments[1]).To(Equal(filepath.Join("test-destination", "dependencies/test-sha256-1/test-uri-1")))
   493  
   494  				Expect(entryWriter.Calls[2].Arguments[0]).To(Equal("testdata/test-sha256-2.toml"))
   495  				Expect(entryWriter.Calls[2].Arguments[1]).To(Equal(filepath.Join("test-destination", "dependencies/test-sha256-2.toml")))
   496  				Expect(entryWriter.Calls[3].Arguments[0]).To(Equal("testdata/test-sha256-2/test-uri-2"))
   497  				Expect(entryWriter.Calls[3].Arguments[1]).To(Equal(filepath.Join("test-destination", "dependencies/test-sha256-2/test-uri-2")))
   498  
   499  				Expect(entryWriter.Calls[4].Arguments[0]).To(Equal("testdata/test-sha256-3.toml"))
   500  				Expect(entryWriter.Calls[4].Arguments[1]).To(Equal(filepath.Join("test-destination", "dependencies/test-sha256-3.toml")))
   501  				Expect(entryWriter.Calls[5].Arguments[0]).To(Equal("testdata/test-sha256-3/test-uri-3"))
   502  				Expect(entryWriter.Calls[5].Arguments[1]).To(Equal(filepath.Join("test-destination", "dependencies/test-sha256-3/test-uri-3")))
   503  
   504  				Expect(entryWriter.Calls[6].Arguments[0]).To(Equal(filepath.Join(path, "extension.toml")))
   505  				Expect(entryWriter.Calls[6].Arguments[1]).To(Equal(filepath.Join("test-destination", "extension.toml")))
   506  
   507  				Expect(entryWriter.Calls[7].Arguments[0]).To(Equal(filepath.Join(path, "test-include-files")))
   508  				Expect(entryWriter.Calls[7].Arguments[1]).To(Equal(filepath.Join("test-destination", "test-include-files")))
   509  			})
   510  
   511  			it("includes filter by id", func() {
   512  				carton.Package{
   513  					Source:              path,
   514  					Destination:         "test-destination",
   515  					IncludeDependencies: true,
   516  					CacheLocation:       "testdata",
   517  					DependencyFilters:   []string{`^another-test-id$`},
   518  				}.Create(
   519  					carton.WithEntryWriter(entryWriter),
   520  					carton.WithExecutor(executor),
   521  					carton.WithExitHandler(exitHandler))
   522  
   523  				Expect(entryWriter.Calls).To(HaveLen(4))
   524  
   525  				Expect(entryWriter.Calls[0].Arguments[0]).To(Equal("testdata/test-sha256-3.toml"))
   526  				Expect(entryWriter.Calls[0].Arguments[1]).To(Equal(filepath.Join("test-destination", "dependencies/test-sha256-3.toml")))
   527  				Expect(entryWriter.Calls[1].Arguments[0]).To(Equal("testdata/test-sha256-3/test-uri-3"))
   528  				Expect(entryWriter.Calls[1].Arguments[1]).To(Equal(filepath.Join("test-destination", "dependencies/test-sha256-3/test-uri-3")))
   529  
   530  				Expect(entryWriter.Calls[2].Arguments[0]).To(Equal(filepath.Join(path, "extension.toml")))
   531  				Expect(entryWriter.Calls[2].Arguments[1]).To(Equal(filepath.Join("test-destination", "extension.toml")))
   532  
   533  				Expect(entryWriter.Calls[3].Arguments[0]).To(Equal(filepath.Join(path, "test-include-files")))
   534  				Expect(entryWriter.Calls[3].Arguments[1]).To(Equal(filepath.Join("test-destination", "test-include-files")))
   535  			})
   536  
   537  			it("includes filter by version", func() {
   538  				carton.Package{
   539  					Source:              path,
   540  					Destination:         "test-destination",
   541  					IncludeDependencies: true,
   542  					CacheLocation:       "testdata",
   543  					DependencyFilters:   []string{`^1.1.1$`},
   544  				}.Create(
   545  					carton.WithEntryWriter(entryWriter),
   546  					carton.WithExecutor(executor),
   547  					carton.WithExitHandler(exitHandler))
   548  
   549  				Expect(entryWriter.Calls).To(HaveLen(6))
   550  
   551  				Expect(entryWriter.Calls[0].Arguments[0]).To(Equal("testdata/test-sha256-1.toml"))
   552  				Expect(entryWriter.Calls[0].Arguments[1]).To(Equal(filepath.Join("test-destination", "dependencies/test-sha256-1.toml")))
   553  				Expect(entryWriter.Calls[1].Arguments[0]).To(Equal("testdata/test-sha256-1/test-uri-1"))
   554  				Expect(entryWriter.Calls[1].Arguments[1]).To(Equal(filepath.Join("test-destination", "dependencies/test-sha256-1/test-uri-1")))
   555  
   556  				Expect(entryWriter.Calls[2].Arguments[0]).To(Equal("testdata/test-sha256-3.toml"))
   557  				Expect(entryWriter.Calls[2].Arguments[1]).To(Equal(filepath.Join("test-destination", "dependencies/test-sha256-3.toml")))
   558  				Expect(entryWriter.Calls[3].Arguments[0]).To(Equal("testdata/test-sha256-3/test-uri-3"))
   559  				Expect(entryWriter.Calls[3].Arguments[1]).To(Equal(filepath.Join("test-destination", "dependencies/test-sha256-3/test-uri-3")))
   560  
   561  				Expect(entryWriter.Calls[4].Arguments[0]).To(Equal(filepath.Join(path, "extension.toml")))
   562  				Expect(entryWriter.Calls[4].Arguments[1]).To(Equal(filepath.Join("test-destination", "extension.toml")))
   563  
   564  				Expect(entryWriter.Calls[5].Arguments[0]).To(Equal(filepath.Join(path, "test-include-files")))
   565  				Expect(entryWriter.Calls[5].Arguments[1]).To(Equal(filepath.Join("test-destination", "test-include-files")))
   566  			})
   567  
   568  			it("includes filter by version and id", func() {
   569  				carton.Package{
   570  					Source:                  path,
   571  					Destination:             "test-destination",
   572  					IncludeDependencies:     true,
   573  					CacheLocation:           "testdata",
   574  					DependencyFilters:       []string{`^test-id$|^2\.0\.5$`},
   575  					StrictDependencyFilters: true,
   576  				}.Create(
   577  					carton.WithEntryWriter(entryWriter),
   578  					carton.WithExecutor(executor),
   579  					carton.WithExitHandler(exitHandler))
   580  
   581  				Expect(entryWriter.Calls).To(HaveLen(4))
   582  
   583  				Expect(entryWriter.Calls[0].Arguments[0]).To(Equal("testdata/test-sha256-2.toml"))
   584  				Expect(entryWriter.Calls[0].Arguments[1]).To(Equal(filepath.Join("test-destination", "dependencies/test-sha256-2.toml")))
   585  				Expect(entryWriter.Calls[1].Arguments[0]).To(Equal("testdata/test-sha256-2/test-uri-2"))
   586  				Expect(entryWriter.Calls[1].Arguments[1]).To(Equal(filepath.Join("test-destination", "dependencies/test-sha256-2/test-uri-2")))
   587  
   588  				Expect(entryWriter.Calls[2].Arguments[0]).To(Equal(filepath.Join(path, "extension.toml")))
   589  				Expect(entryWriter.Calls[2].Arguments[1]).To(Equal(filepath.Join("test-destination", "extension.toml")))
   590  
   591  				Expect(entryWriter.Calls[3].Arguments[0]).To(Equal(filepath.Join(path, "test-include-files")))
   592  				Expect(entryWriter.Calls[3].Arguments[1]).To(Equal(filepath.Join("test-destination", "test-include-files")))
   593  			})
   594  		})
   595  	})
   596  
   597  }