@@ -38,6 +38,7 @@ func TestPrefixClaim_GetAvailablePrefixesByParentPrefix(t *testing.T) {
3838	//prefix mock input 
3939	parentPrefixId  :=  int64 (3 )
4040	availablePrefixListInput  :=  ipam .NewIpamPrefixesAvailablePrefixesListParams ().WithID (parentPrefixId )
41+ 
4142	//prefix mock output 
4243	childPrefix1  :=  "10.112.140.0/24" 
4344	childPrefix2  :=  "10.120.180.0/24" 
@@ -129,6 +130,9 @@ func TestPrefixClaim_GetAvailablePrefixByClaim_WithWrongParent(t *testing.T) {
129130	actual , err  :=  netboxClient .GetAvailablePrefixByClaim (& models.PrefixClaim {
130131		ParentPrefix : prefix ,
131132		PrefixLength : "/28" ,
133+ 		Metadata : & models.NetboxMetadata {
134+ 			Tenant : tenantName ,
135+ 		},
132136	})
133137	assert .Nil (t , actual )
134138	assert .EqualError (t , err , "parent prefix not found" )
@@ -196,6 +200,9 @@ func TestPrefixClaim_GetBestFitPrefixByClaim(t *testing.T) {
196200	actual , err  :=  netboxClient .GetAvailablePrefixByClaim (& models.PrefixClaim {
197201		ParentPrefix : parentPrefix ,
198202		PrefixLength : "/28" ,
203+ 		Metadata : & models.NetboxMetadata {
204+ 			Tenant : tenantName ,
205+ 		},
199206	})
200207
201208	assert .Nil (t , err )
@@ -272,6 +279,9 @@ func TestPrefixClaim_GetBestFitPrefixByClaimNoAvailablePrefixMatchesSize(t *test
272279	actual , err  :=  netboxClient .GetAvailablePrefixByClaim (& models.PrefixClaim {
273280		ParentPrefix : parentPrefix ,
274281		PrefixLength : "/28" ,
282+ 		Metadata : & models.NetboxMetadata {
283+ 			Tenant : tenantName ,
284+ 		},
275285	})
276286
277287	assert .Nil (t , err )
@@ -340,6 +350,9 @@ func TestPrefixClaim_GetBestFitPrefixByClaimNoAvailablePrefixMatchesSizeCriteria
340350	_ , err  :=  netboxClient .GetAvailablePrefixByClaim (& models.PrefixClaim {
341351		ParentPrefix : parentPrefix ,
342352		PrefixLength : "/28" ,
353+ 		Metadata : & models.NetboxMetadata {
354+ 			Tenant : tenantName ,
355+ 		},
343356	})
344357
345358	assert .True (t , errors .Is (err , ErrNoPrefixMatchsSizeCriteria ))
@@ -415,6 +428,9 @@ func TestPrefixClaim_GetBestFitPrefixByClaimInvalidFormatFromNetbox(t *testing.T
415428	actual , err  :=  netboxClient .GetAvailablePrefixByClaim (& models.PrefixClaim {
416429		ParentPrefix : parentPrefix ,
417430		PrefixLength : "/28" ,
431+ 		Metadata : & models.NetboxMetadata {
432+ 			Tenant : tenantName ,
433+ 		},
418434	})
419435
420436	assert .Nil (t , err )
@@ -483,7 +499,112 @@ func TestPrefixClaim_GetBestFitPrefixByClaimInvalidPrefixClaim(t *testing.T) {
483499	_ , err  :=  netboxClient .GetAvailablePrefixByClaim (& models.PrefixClaim {
484500		ParentPrefix : parentPrefix ,
485501		PrefixLength : "/28." ,
502+ 		Metadata : & models.NetboxMetadata {
503+ 			Tenant : tenantName ,
504+ 		},
486505	})
487506
488507	assert .True (t , errors .Is (err , strconv .ErrSyntax ))
489508}
509+ 
510+ func  TestPrefixClaim_GetNoAvailablePrefixesWithNonExistingTenant (t  * testing.T ) {
511+ 	ctrl  :=  gomock .NewController (t )
512+ 	defer  ctrl .Finish ()
513+ 	mockPrefixIpam  :=  mock_interfaces .NewMockIpamInterface (ctrl )
514+ 	mockTenancy  :=  mock_interfaces .NewMockTenancyInterface (ctrl )
515+ 
516+ 	// example of tenant 
517+ 	tenantId  :=  int64 (2 )
518+ 	tenantName  :=  "Tenant1" 
519+ 	tenantOutputSlug  :=  "tenant1" 
520+ 
521+ 	inputTenant  :=  tenancy .NewTenancyTenantsListParams ().WithName (& tenantName )
522+ 
523+ 	expectedTenant  :=  & tenancy.TenancyTenantsListOK {
524+ 		Payload : & tenancy.TenancyTenantsListOKBody {
525+ 			Results : []* netboxModels.Tenant {
526+ 				{
527+ 					ID :   tenantId ,
528+ 					Name : & tenantName ,
529+ 					Slug : & tenantOutputSlug ,
530+ 				},
531+ 			},
532+ 		},
533+ 	}
534+ 
535+ 	// expected error 
536+ 	expectedErrorMsg  :=  "tenant not found" 
537+ 
538+ 	// empty tenant list 
539+ 	emptyTenantList  :=  & tenancy.TenancyTenantsListOK {
540+ 		Payload : & tenancy.TenancyTenantsListOKBody {
541+ 			Results : []* netboxModels.Tenant {},
542+ 		},
543+ 	}
544+ 
545+ 	// non-existing tenant 
546+ 	nonExistingTenant  :=  "non-existing-tenant" 
547+ 
548+ 	parentPrefix  :=  "10.112.140.0/24" 
549+ 
550+ 	mockTenancy .EXPECT ().TenancyTenantsList (inputTenant , nil ).Return (expectedTenant , nil ).AnyTimes ()
551+ 	mockTenancy .EXPECT ().TenancyTenantsList (gomock .Not (inputTenant ), nil ).Return (emptyTenantList , nil ).AnyTimes ()
552+ 
553+ 	netboxClient  :=  & NetboxClient {
554+ 		Ipam :    mockPrefixIpam ,
555+ 		Tenancy : mockTenancy ,
556+ 	}
557+ 
558+ 	prefix , err  :=  netboxClient .GetAvailablePrefixByClaim (& models.PrefixClaim {
559+ 		ParentPrefix : parentPrefix ,
560+ 		PrefixLength : "/28." ,
561+ 		Metadata : & models.NetboxMetadata {
562+ 			Tenant : nonExistingTenant ,
563+ 		},
564+ 	})
565+ 
566+ 	assert .EqualErrorf (t , err , expectedErrorMsg , "Error should be: %v, got: %v" , expectedErrorMsg , err )
567+ 	assert .Equal (t , prefix , (* models .Prefix )(nil ))
568+ }
569+ 
570+ func  TestPrefixClaim_GetNoAvailablePrefixesWithErrorWhenGettingTenantList (t  * testing.T ) {
571+ 	ctrl  :=  gomock .NewController (t )
572+ 	defer  ctrl .Finish ()
573+ 	mockPrefixIpam  :=  mock_interfaces .NewMockIpamInterface (ctrl )
574+ 	mockTenancy  :=  mock_interfaces .NewMockTenancyInterface (ctrl )
575+ 
576+ 	// non-existing tenant 
577+ 	tenantName  :=  "Tenant1" 
578+ 
579+ 	inputTenant  :=  tenancy .NewTenancyTenantsListParams ().WithName (& tenantName )
580+ 
581+ 	// expected errors 
582+ 	getTenantDetailsErrorMsg  :=  "failed to fetch Tenant details" 
583+ 	tenancyTenantsListErrorMsg  :=  "cannot get the list"  // testcase defined error 
584+ 
585+ 	parentPrefix  :=  "10.112.140.0/24" 
586+ 
587+ 	mockTenancy .EXPECT ().TenancyTenantsList (inputTenant , nil ).Return (nil , errors .New (tenancyTenantsListErrorMsg )).AnyTimes ()
588+ 
589+ 	netboxClient  :=  & NetboxClient {
590+ 		Ipam :    mockPrefixIpam ,
591+ 		Tenancy : mockTenancy ,
592+ 	}
593+ 
594+ 	prefix , err  :=  netboxClient .GetAvailablePrefixByClaim (& models.PrefixClaim {
595+ 		ParentPrefix : parentPrefix ,
596+ 		PrefixLength : "/28." ,
597+ 		Metadata : & models.NetboxMetadata {
598+ 			Tenant : tenantName ,
599+ 		},
600+ 	})
601+ 
602+ 	// assert 1st level error - GetTenantDetails() 
603+ 	assert .Containsf (t , err .Error (), getTenantDetailsErrorMsg , "expected error containing %q, got %s" , getTenantDetailsErrorMsg , err )
604+ 
605+ 	// assert 2nd level error - TenanyTenantsList() 
606+ 	assert .Containsf (t , err .Error (), tenancyTenantsListErrorMsg , "expected error containing %q, got %s" , tenancyTenantsListErrorMsg , err )
607+ 
608+ 	// assert nil output 
609+ 	assert .Equal (t , prefix , (* models .Prefix )(nil ))
610+ }
0 commit comments