@@ -150,6 +150,172 @@ func TestBuildDockerDeps(t *testing.T) {
150150	}
151151}
152152
153+ func  TestDockerPkgConfig_ExportToCache (t  * testing.T ) {
154+ 	tests  :=  []struct  {
155+ 		name            string 
156+ 		config          leeway.DockerPkgConfig 
157+ 		expectedExport  bool 
158+ 	}{
159+ 		{
160+ 			name : "default behavior - push directly" ,
161+ 			config : leeway.DockerPkgConfig {
162+ 				Image : []string {"test:latest" },
163+ 			},
164+ 			expectedExport : false ,
165+ 		},
166+ 		{
167+ 			name : "explicit export to cache" ,
168+ 			config : leeway.DockerPkgConfig {
169+ 				Image :         []string {"test:latest" },
170+ 				ExportToCache : true ,
171+ 			},
172+ 			expectedExport : true ,
173+ 		},
174+ 		{
175+ 			name : "explicit push directly" ,
176+ 			config : leeway.DockerPkgConfig {
177+ 				Image :         []string {"test:latest" },
178+ 				ExportToCache : false ,
179+ 			},
180+ 			expectedExport : false ,
181+ 		},
182+ 	}
183+ 
184+ 	for  _ , tt  :=  range  tests  {
185+ 		t .Run (tt .name , func (t  * testing.T ) {
186+ 			if  tt .config .ExportToCache  !=  tt .expectedExport  {
187+ 				t .Errorf ("ExportToCache = %v, want %v" , tt .config .ExportToCache , tt .expectedExport )
188+ 			}
189+ 		})
190+ 	}
191+ }
192+ 
193+ func  TestBuildDocker_ExportToCache (t  * testing.T ) {
194+ 	if  * testutil .Dut  {
195+ 		pth , err  :=  os .MkdirTemp ("" , "" )
196+ 		if  err  !=  nil  {
197+ 			t .Fatal (err )
198+ 		}
199+ 		err  =  os .WriteFile (filepath .Join (pth , "docker" ), []byte (dummyDocker ), 0755 )
200+ 		if  err  !=  nil  {
201+ 			t .Fatal (err )
202+ 		}
203+ 		t .Cleanup (func () { os .RemoveAll (pth ) })
204+ 
205+ 		os .Setenv ("PATH" , pth + ":" + os .Getenv ("PATH" ))
206+ 		log .WithField ("path" , os .Getenv ("PATH" )).Debug ("modified path to use dummy docker" )
207+ 	}
208+ 	testutil .RunDUT ()
209+ 
210+ 	tests  :=  []* testutil.CommandFixtureTest {
211+ 		{
212+ 			Name :      "docker export to cache" ,
213+ 			T :         t ,
214+ 			Args :      []string {"build" , "-v" , "-c" , "none" , "comp:pkg" },
215+ 			StderrSub : "Exporting Docker image to cache" ,
216+ 			ExitCode :  0 ,
217+ 			Fixture : & testutil.Setup {
218+ 				Components : []testutil.Component {
219+ 					{
220+ 						Location : "comp" ,
221+ 						Files : map [string ]string {
222+ 							"Dockerfile" : "FROM alpine:latest" ,
223+ 						},
224+ 						Packages : []leeway.Package {
225+ 							{
226+ 								PackageInternal : leeway.PackageInternal {
227+ 									Name : "pkg" ,
228+ 									Type : leeway .DockerPackage ,
229+ 								},
230+ 								Config : leeway.DockerPkgConfig {
231+ 									Dockerfile :    "Dockerfile" ,
232+ 									Image :         []string {"test:latest" },
233+ 									ExportToCache : true ,
234+ 								},
235+ 							},
236+ 						},
237+ 					},
238+ 				},
239+ 			},
240+ 		},
241+ 	}
242+ 
243+ 	for  _ , test  :=  range  tests  {
244+ 		test .Run ()
245+ 	}
246+ }
247+ 
248+ func  TestDockerPackage_BuildContextOverride (t  * testing.T ) {
249+ 	tests  :=  []struct  {
250+ 		name                    string 
251+ 		packageConfigValue      bool 
252+ 		buildContextExportFlag  bool 
253+ 		buildContextExportSet   bool 
254+ 		expectedFinal           bool 
255+ 	}{
256+ 		{
257+ 			name :                   "no override - use package config false" ,
258+ 			packageConfigValue :     false ,
259+ 			buildContextExportFlag : false ,
260+ 			buildContextExportSet :  false ,
261+ 			expectedFinal :          false ,
262+ 		},
263+ 		{
264+ 			name :                   "no override - use package config true" ,
265+ 			packageConfigValue :     true ,
266+ 			buildContextExportFlag : false ,
267+ 			buildContextExportSet :  false ,
268+ 			expectedFinal :          true ,
269+ 		},
270+ 		{
271+ 			name :                   "CLI flag enables export (overrides package false)" ,
272+ 			packageConfigValue :     false ,
273+ 			buildContextExportFlag : true ,
274+ 			buildContextExportSet :  true ,
275+ 			expectedFinal :          true ,
276+ 		},
277+ 		{
278+ 			name :                   "CLI flag keeps export enabled (package true)" ,
279+ 			packageConfigValue :     true ,
280+ 			buildContextExportFlag : true ,
281+ 			buildContextExportSet :  true ,
282+ 			expectedFinal :          true ,
283+ 		},
284+ 		{
285+ 			name :                   "CLI flag disables export (overrides package true) - CRITICAL TEST" ,
286+ 			packageConfigValue :     true ,
287+ 			buildContextExportFlag : false ,
288+ 			buildContextExportSet :  true ,
289+ 			expectedFinal :          false ,
290+ 		},
291+ 		{
292+ 			name :                   "CLI flag keeps export disabled (package false)" ,
293+ 			packageConfigValue :     false ,
294+ 			buildContextExportFlag : false ,
295+ 			buildContextExportSet :  true ,
296+ 			expectedFinal :          false ,
297+ 		},
298+ 	}
299+ 
300+ 	for  _ , tt  :=  range  tests  {
301+ 		t .Run (tt .name , func (t  * testing.T ) {
302+ 			cfg  :=  leeway.DockerPkgConfig {
303+ 				ExportToCache : tt .packageConfigValue ,
304+ 			}
305+ 
306+ 			// Simulate the build context override logic from buildDocker 
307+ 			// This mimics: if buildctx.DockerExportSet { cfg.ExportToCache = buildctx.DockerExportToCache } 
308+ 			if  tt .buildContextExportSet  {
309+ 				cfg .ExportToCache  =  tt .buildContextExportFlag 
310+ 			}
311+ 
312+ 			if  cfg .ExportToCache  !=  tt .expectedFinal  {
313+ 				t .Errorf ("ExportToCache = %v, want %v" , cfg .ExportToCache , tt .expectedFinal )
314+ 			}
315+ 		})
316+ 	}
317+ }
318+ 
153319func  TestDockerPostProcessing (t  * testing.T ) {
154320	if  * testutil .Dut  {
155321		pth , err  :=  os .MkdirTemp ("" , "" )
0 commit comments