@@ -163,6 +163,36 @@ func fieldExportWithPath(namespace, name string, kind ackv1alpha1.FieldExportOut
163163	}
164164}
165165
166+ func  fieldExportWithKey (namespace , name  string , kind  ackv1alpha1.FieldExportOutputType , key  string ) * ackv1alpha1.FieldExport  {
167+ 	path  :=  ".spec.name" 
168+ 	return  & ackv1alpha1.FieldExport {
169+ 		TypeMeta : v1.TypeMeta {},
170+ 		ObjectMeta : v1.ObjectMeta {
171+ 			Namespace :  namespace ,
172+ 			Name :       name ,
173+ 			Finalizers : []string {"finalizers.services.k8s.aws/FieldExport" },
174+ 		},
175+ 		Spec : ackv1alpha1.FieldExportSpec {
176+ 			From : & ackv1alpha1.ResourceFieldSelector {
177+ 				Path : & path ,
178+ 				Resource : ackv1alpha1.NamespacedResource {
179+ 					GroupKind : v1.GroupKind {
180+ 						Group : BookGVK .Group ,
181+ 						Kind :  BookGVK .Kind ,
182+ 					},
183+ 					Name : strPtr (SourceResourceName ),
184+ 				},
185+ 			},
186+ 			To : & ackv1alpha1.FieldExportTarget {
187+ 				Name : strPtr ("fake-export-output" ),
188+ 				Kind : kind ,
189+ 				Key :  & key ,
190+ 			},
191+ 		},
192+ 		Status : ackv1alpha1.FieldExportStatus {},
193+ 	}
194+ }
195+ 
166196func  mockFieldExportList () []ackv1alpha1.FieldExport  {
167197	// Matching cases 
168198	defaultConfigMap  :=  fieldExportConfigMap (FieldExportNamespace , "export-1" )
@@ -452,6 +482,66 @@ func TestSync_HappyCaseResourceNoExports(t *testing.T) {
452482	require .Len (exports , 0 )
453483}
454484
485+ func  TestSync_SetKeyNameExplicitly (t  * testing.T ) {
486+ 	// Setup 
487+ 	require  :=  require .New (t )
488+ 	// Mock resource creation 
489+ 	r , kc , apiReader  :=  mockFieldExportReconciler ()
490+ 	descriptor , res , _  :=  mockDescriptorAndAWSResource ()
491+ 	manager  :=  mockManager ()
492+ 	fieldExport  :=  fieldExportWithKey (FieldExportNamespace , FieldExportName , ackv1alpha1 .FieldExportOutputTypeSecret , "new-key" )
493+ 	sourceResource , _ , _  :=  mockSourceResource ()
494+ 	ctx  :=  context .TODO ()
495+ 	statusWriter  :=  & ctrlrtclientmock.StatusWriter {}
496+ 
497+ 	//Mock behavior setup 
498+ 	setupMockClientForFieldExport (kc , statusWriter , ctx , fieldExport )
499+ 	setupMockApiReaderForFieldExport (apiReader , ctx , res )
500+ 	setupMockManager (manager , ctx , res )
501+ 	setupMockDescriptor (descriptor , res )
502+ 	setupMockUnstructuredConverter ()
503+ 
504+ 	// Call 
505+ 	latest , err  :=  r .Sync (ctx , sourceResource , * fieldExport )
506+ 
507+ 	//Assertions 
508+ 	require .Nil (err )
509+ 	require .NotNil (latest .Status )
510+ 	require .Len (latest .Status .Conditions , 0 )
511+ 	assertPatchedConfigMap (false , t , ctx , kc )
512+ 	assertPatchedSecretWithKey (true , t , ctx , kc , "new-key" )
513+ }
514+ 
515+ func  TestSync_SetKeyNameExplicitlyWithEmptyString (t  * testing.T ) {
516+ 	// Setup 
517+ 	require  :=  require .New (t )
518+ 	// Mock resource creation 
519+ 	r , kc , apiReader  :=  mockFieldExportReconciler ()
520+ 	descriptor , res , _  :=  mockDescriptorAndAWSResource ()
521+ 	manager  :=  mockManager ()
522+ 	fieldExport  :=  fieldExportWithKey (FieldExportNamespace , FieldExportName , ackv1alpha1 .FieldExportOutputTypeSecret , "" )
523+ 	sourceResource , _ , _  :=  mockSourceResource ()
524+ 	ctx  :=  context .TODO ()
525+ 	statusWriter  :=  & ctrlrtclientmock.StatusWriter {}
526+ 
527+ 	//Mock behavior setup 
528+ 	setupMockClientForFieldExport (kc , statusWriter , ctx , fieldExport )
529+ 	setupMockApiReaderForFieldExport (apiReader , ctx , res )
530+ 	setupMockManager (manager , ctx , res )
531+ 	setupMockDescriptor (descriptor , res )
532+ 	setupMockUnstructuredConverter ()
533+ 
534+ 	// Call 
535+ 	latest , err  :=  r .Sync (ctx , sourceResource , * fieldExport )
536+ 
537+ 	//Assertions 
538+ 	require .Nil (err )
539+ 	require .NotNil (latest .Status )
540+ 	require .Len (latest .Status .Conditions , 0 )
541+ 	assertPatchedConfigMap (false , t , ctx , kc )
542+ 	assertPatchedSecret (true , t , ctx , kc )
543+ }
544+ 
455545// Assertions 
456546
457547func  assertPatchedConfigMap (expected  bool , t  * testing.T , ctx  context.Context , kc  * ctrlrtclientmock.Client ) {
@@ -492,6 +582,24 @@ func assertPatchedSecret(expected bool, t *testing.T, ctx context.Context, kc *c
492582	}
493583}
494584
585+ func  assertPatchedSecretWithKey (expected  bool , t  * testing.T , ctx  context.Context , kc  * ctrlrtclientmock.Client , key  string ) {
586+ 	dataMatcher  :=  mock .MatchedBy (func (cm  * corev1.Secret ) bool  {
587+ 		if  cm .Data  ==  nil  {
588+ 			return  false 
589+ 		}
590+ 		val , ok  :=  cm .Data [key ]
591+ 		if  ! ok  {
592+ 			return  false 
593+ 		}
594+ 		return  bytes .Equal (val , []byte ("test-book-name" ))
595+ 	})
596+ 	if  expected  {
597+ 		kc .AssertCalled (t , "Patch" , ctx , dataMatcher , mock .Anything )
598+ 	} else  {
599+ 		kc .AssertNotCalled (t , "Patch" , ctx , dataMatcher , mock .Anything )
600+ 	}
601+ }
602+ 
495603// assertRecoverableCondition asserts that 'ConditionTypeRecoverable' condition 
496604// is present in the resource's status and that it's value is equal to 
497605// 'conditionStatus' parameter 
0 commit comments