github.com/swisscom/cloudfoundry-cli@v7.1.0+incompatible/cf/actors/planbuilder/plan_builder_test.go (about)

     1  package planbuilder_test
     2  
     3  import (
     4  	"errors"
     5  
     6  	"code.cloudfoundry.org/cli/cf/actors/planbuilder"
     7  	"code.cloudfoundry.org/cli/cf/api/apifakes"
     8  	"code.cloudfoundry.org/cli/cf/api/organizations/organizationsfakes"
     9  	"code.cloudfoundry.org/cli/cf/models"
    10  	. "github.com/onsi/ginkgo"
    11  	. "github.com/onsi/gomega"
    12  )
    13  
    14  var _ = Describe("Plan builder", func() {
    15  	var (
    16  		builder planbuilder.PlanBuilder
    17  
    18  		planRepo       *apifakes.OldFakeServicePlanRepo
    19  		visibilityRepo *apifakes.FakeServicePlanVisibilityRepository
    20  		orgRepo        *organizationsfakes.FakeOrganizationRepository
    21  
    22  		plan1 models.ServicePlanFields
    23  		plan2 models.ServicePlanFields
    24  
    25  		org1 models.Organization
    26  		org2 models.Organization
    27  	)
    28  
    29  	BeforeEach(func() {
    30  		planbuilder.PlanToOrgsVisibilityMap = nil
    31  		planbuilder.OrgToPlansVisibilityMap = nil
    32  		planRepo = new(apifakes.OldFakeServicePlanRepo)
    33  		visibilityRepo = new(apifakes.FakeServicePlanVisibilityRepository)
    34  		orgRepo = new(organizationsfakes.FakeOrganizationRepository)
    35  		builder = planbuilder.NewBuilder(planRepo, visibilityRepo, orgRepo)
    36  
    37  		plan1 = models.ServicePlanFields{
    38  			Name:                "service-plan1",
    39  			GUID:                "service-plan1-guid",
    40  			ServiceOfferingGUID: "service-guid1",
    41  		}
    42  		plan2 = models.ServicePlanFields{
    43  			Name:                "service-plan2",
    44  			GUID:                "service-plan2-guid",
    45  			ServiceOfferingGUID: "service-guid1",
    46  		}
    47  
    48  		planRepo.SearchReturns = map[string][]models.ServicePlanFields{
    49  			"service-guid1": {plan1, plan2},
    50  		}
    51  		org1 = models.Organization{}
    52  		org1.Name = "org1"
    53  		org1.GUID = "org1-guid"
    54  
    55  		org2 = models.Organization{}
    56  		org2.Name = "org2"
    57  		org2.GUID = "org2-guid"
    58  		visibilityRepo.ListReturns([]models.ServicePlanVisibilityFields{
    59  			{ServicePlanGUID: "service-plan1-guid", OrganizationGUID: "org1-guid"},
    60  			{ServicePlanGUID: "service-plan1-guid", OrganizationGUID: "org2-guid"},
    61  			{ServicePlanGUID: "service-plan2-guid", OrganizationGUID: "org1-guid"},
    62  		}, nil)
    63  		visibilityRepo.SearchReturns([]models.ServicePlanVisibilityFields{
    64  			{ServicePlanGUID: "service-plan1-guid", OrganizationGUID: "org1-guid"},
    65  			{ServicePlanGUID: "service-plan2-guid", OrganizationGUID: "org1-guid"},
    66  		}, nil)
    67  		orgRepo.GetManyOrgsByGUIDReturns([]models.Organization{org1, org2}, nil)
    68  	})
    69  
    70  	Describe(".AttachOrgsToPlans", func() {
    71  		It("returns plans fully populated with the orgnames that have visibility", func() {
    72  			barePlans := []models.ServicePlanFields{plan1, plan2}
    73  
    74  			plans, err := builder.AttachOrgsToPlans(barePlans)
    75  			Expect(err).ToNot(HaveOccurred())
    76  
    77  			Expect(plans[0].OrgNames).To(Equal([]string{"org1", "org2"}))
    78  		})
    79  	})
    80  
    81  	Describe(".AttachOrgToPlans", func() {
    82  		It("returns plans fully populated with the orgnames that have visibility", func() {
    83  			orgRepo.FindByNameReturns(org1, nil)
    84  			barePlans := []models.ServicePlanFields{plan1, plan2}
    85  
    86  			plans, err := builder.AttachOrgToPlans(barePlans, "org1")
    87  			Expect(err).ToNot(HaveOccurred())
    88  
    89  			Expect(plans[0].OrgNames).To(Equal([]string{"org1"}))
    90  		})
    91  	})
    92  
    93  	Describe(".GetPlansForServiceWithOrgs", func() {
    94  		It("returns all the plans for the service with the provided guid", func() {
    95  			plans, err := builder.GetPlansForServiceWithOrgs("service-guid1")
    96  			Expect(err).ToNot(HaveOccurred())
    97  
    98  			Expect(len(plans)).To(Equal(2))
    99  			Expect(plans[0].Name).To(Equal("service-plan1"))
   100  			Expect(plans[0].OrgNames).To(Equal([]string{"org1", "org2"}))
   101  			Expect(plans[1].Name).To(Equal("service-plan2"))
   102  		})
   103  	})
   104  
   105  	Describe(".GetPlansForManyServicesWithOrgs", func() {
   106  		It("returns all the plans for all service in a list of guids", func() {
   107  			planRepo.ListPlansFromManyServicesReturns = []models.ServicePlanFields{
   108  				plan1, plan2,
   109  			}
   110  			serviceGUIDs := []string{"service-guid1", "service-guid2"}
   111  			plans, err := builder.GetPlansForManyServicesWithOrgs(serviceGUIDs)
   112  			Expect(err).ToNot(HaveOccurred())
   113  			Expect(orgRepo.GetManyOrgsByGUIDCallCount()).To(Equal(1))
   114  			Expect(orgRepo.GetManyOrgsByGUIDArgsForCall(0)).To(ConsistOf("org1-guid", "org2-guid"))
   115  
   116  			Expect(len(plans)).To(Equal(2))
   117  			Expect(plans[0].Name).To(Equal("service-plan1"))
   118  			Expect(plans[0].OrgNames).To(Equal([]string{"org1", "org2"}))
   119  			Expect(plans[1].Name).To(Equal("service-plan2"))
   120  		})
   121  
   122  		It("returns errors from the service plan repo", func() {
   123  			planRepo.ListPlansFromManyServicesError = errors.New("Error")
   124  			serviceGUIDs := []string{"service-guid1", "service-guid2"}
   125  			_, err := builder.GetPlansForManyServicesWithOrgs(serviceGUIDs)
   126  			Expect(err).To(HaveOccurred())
   127  		})
   128  	})
   129  
   130  	Describe(".GetPlansForService", func() {
   131  		It("returns all the plans for the service with the provided guid", func() {
   132  			plans, err := builder.GetPlansForService("service-guid1")
   133  			Expect(err).ToNot(HaveOccurred())
   134  
   135  			Expect(len(plans)).To(Equal(2))
   136  			Expect(plans[0].Name).To(Equal("service-plan1"))
   137  			Expect(plans[0].OrgNames).To(BeNil())
   138  			Expect(plans[1].Name).To(Equal("service-plan2"))
   139  		})
   140  	})
   141  
   142  	Describe(".GetPlansForServiceForOrg", func() {
   143  		It("returns all the plans for the service with the provided guid", func() {
   144  			orgRepo.FindByNameReturns(org1, nil)
   145  			plans, err := builder.GetPlansForServiceForOrg("service-guid1", "org1")
   146  			Expect(err).ToNot(HaveOccurred())
   147  
   148  			Expect(len(plans)).To(Equal(2))
   149  			Expect(plans[0].Name).To(Equal("service-plan1"))
   150  			Expect(plans[0].OrgNames).To(Equal([]string{"org1"}))
   151  			Expect(plans[1].Name).To(Equal("service-plan2"))
   152  		})
   153  	})
   154  
   155  	Describe(".GetPlansVisibleToOrg", func() {
   156  		It("returns all the plans visible to the named org", func() {
   157  			plans, err := builder.GetPlansVisibleToOrg("org1")
   158  			Expect(err).ToNot(HaveOccurred())
   159  
   160  			Expect(len(plans)).To(Equal(2))
   161  			Expect(plans[0].Name).To(Equal("service-plan1"))
   162  			Expect(plans[0].OrgNames).To(Equal([]string{"org1", "org2"}))
   163  		})
   164  	})
   165  })