github.com/franc20/ayesa_sap@v7.0.0-beta.28.0.20200124003224-302d4d52fa6c+incompatible/command/v7/create_space_command_test.go (about)

     1  package v7_test
     2  
     3  import (
     4  	"errors"
     5  
     6  	"code.cloudfoundry.org/cli/actor/actionerror"
     7  	"code.cloudfoundry.org/cli/actor/v7action"
     8  	"code.cloudfoundry.org/cli/api/cloudcontroller/ccv3/constant"
     9  	"code.cloudfoundry.org/cli/command/commandfakes"
    10  	"code.cloudfoundry.org/cli/command/flag"
    11  	v7 "code.cloudfoundry.org/cli/command/v7"
    12  	"code.cloudfoundry.org/cli/command/v7/v7fakes"
    13  	"code.cloudfoundry.org/cli/util/configv3"
    14  	"code.cloudfoundry.org/cli/util/ui"
    15  	. "github.com/onsi/ginkgo"
    16  	. "github.com/onsi/gomega"
    17  	. "github.com/onsi/gomega/gbytes"
    18  )
    19  
    20  var _ = Describe("create-space Command", func() {
    21  	var (
    22  		cmd             v7.CreateSpaceCommand
    23  		testUI          *ui.UI
    24  		fakeConfig      *commandfakes.FakeConfig
    25  		fakeSharedActor *commandfakes.FakeSharedActor
    26  		fakeActor       *v7fakes.FakeCreateSpaceActor
    27  		binaryName      string
    28  		executeErr      error
    29  
    30  		spaceName string
    31  		orgName   string
    32  		userName  string
    33  	)
    34  
    35  	BeforeEach(func() {
    36  		testUI = ui.NewTestUI(nil, NewBuffer(), NewBuffer())
    37  		fakeConfig = new(commandfakes.FakeConfig)
    38  		fakeSharedActor = new(commandfakes.FakeSharedActor)
    39  		fakeActor = new(v7fakes.FakeCreateSpaceActor)
    40  
    41  		binaryName = "faceman"
    42  		fakeConfig.BinaryNameReturns(binaryName)
    43  		spaceName = "some-space"
    44  		orgName = ""
    45  		userName = "some-user-name"
    46  	})
    47  
    48  	JustBeforeEach(func() {
    49  		cmd = v7.CreateSpaceCommand{
    50  			UI:           testUI,
    51  			Config:       fakeConfig,
    52  			SharedActor:  fakeSharedActor,
    53  			Actor:        fakeActor,
    54  			RequiredArgs: flag.Space{Space: spaceName},
    55  			Organization: orgName,
    56  		}
    57  
    58  		executeErr = cmd.Execute(nil)
    59  	})
    60  
    61  	When("the environment is not set up correctly", func() {
    62  		BeforeEach(func() {
    63  			fakeSharedActor.CheckTargetReturns(actionerror.NotLoggedInError{BinaryName: binaryName})
    64  		})
    65  
    66  		It("returns an error", func() {
    67  			Expect(executeErr).To(MatchError(actionerror.NotLoggedInError{BinaryName: binaryName}))
    68  
    69  			Expect(fakeSharedActor.CheckTargetCallCount()).To(Equal(1))
    70  			checkTargetedOrg, checkTargetedSpace := fakeSharedActor.CheckTargetArgsForCall(0)
    71  			Expect(checkTargetedOrg).To(BeFalse())
    72  			Expect(checkTargetedSpace).To(BeFalse())
    73  		})
    74  	})
    75  
    76  	When("the environment is setup correctly", func() {
    77  		BeforeEach(func() {
    78  			fakeConfig.TargetedOrganizationReturns(configv3.Organization{
    79  				Name: "some-org-name",
    80  				GUID: "some-org-guid",
    81  			})
    82  			fakeConfig.CurrentUserReturns(configv3.User{
    83  				Name:   userName,
    84  				Origin: "some-user-origin",
    85  			}, nil)
    86  		})
    87  
    88  		It("prints text indicating it is creating a space", func() {
    89  			Expect(executeErr).NotTo(HaveOccurred())
    90  			Expect(testUI.Out).To(Say(`Creating space %s in org %s as %s\.\.\.`, spaceName, "some-org-name", userName))
    91  		})
    92  
    93  		When("creating the space errors", func() {
    94  			BeforeEach(func() {
    95  				fakeActor.CreateSpaceReturns(
    96  					v7action.Space{},
    97  					v7action.Warnings{"warnings-1", "warnings-2"},
    98  					errors.New("err-create-space"),
    99  				)
   100  			})
   101  
   102  			It("returns an error and displays warnings", func() {
   103  				Expect(executeErr).To(MatchError("err-create-space"))
   104  				Expect(testUI.Err).To(Say("warnings-1"))
   105  				Expect(testUI.Err).To(Say("warnings-2"))
   106  			})
   107  		})
   108  
   109  		When("creating the space and setting roles is successful", func() {
   110  			BeforeEach(func() {
   111  				fakeActor.CreateSpaceReturns(
   112  					v7action.Space{GUID: "some-space-guid"},
   113  					v7action.Warnings{"warnings-1", "warnings-2"},
   114  					nil,
   115  				)
   116  
   117  				fakeActor.CreateSpaceRoleReturnsOnCall(0,
   118  					v7action.Warnings{"create-space-manager-role-warning"},
   119  					nil,
   120  				)
   121  
   122  				fakeActor.CreateSpaceRoleReturnsOnCall(1,
   123  					v7action.Warnings{"create-space-developer-role-warning"},
   124  					nil,
   125  				)
   126  			})
   127  
   128  			It("creates the space in the targeted organization", func() {
   129  				Expect(fakeActor.GetOrganizationByNameCallCount()).To(Equal(0))
   130  				Expect(fakeActor.CreateSpaceCallCount()).To(Equal(1))
   131  				expectedSpaceName, expectedOrgGUID := fakeActor.CreateSpaceArgsForCall(0)
   132  				Expect(expectedSpaceName).To(Equal(spaceName))
   133  				Expect(expectedOrgGUID).To(Equal("some-org-guid"))
   134  			})
   135  
   136  			It("sets the user as a space manager", func() {
   137  				Expect(fakeActor.CreateSpaceRoleCallCount()).To(Equal(2))
   138  				givenRoleType, givenOrgGuid, givenSpaceGUID, givenUserName, givenOrigin, givenIsClient := fakeActor.CreateSpaceRoleArgsForCall(0)
   139  				Expect(givenRoleType).To(Equal(constant.SpaceManagerRole))
   140  				Expect(givenOrgGuid).To(Equal("some-org-guid"))
   141  				Expect(givenSpaceGUID).To(Equal("some-space-guid"))
   142  				Expect(givenUserName).To(Equal("some-user-name"))
   143  				Expect(givenOrigin).To(Equal("some-user-origin"))
   144  				Expect(givenIsClient).To(BeFalse())
   145  			})
   146  
   147  			It("sets the user as a space developer", func() {
   148  				Expect(fakeActor.CreateSpaceRoleCallCount()).To(Equal(2))
   149  				givenRoleType, givenOrgGuid, givenSpaceGUID, givenUserName, givenOrigin, givenIsClient := fakeActor.CreateSpaceRoleArgsForCall(1)
   150  				Expect(givenRoleType).To(Equal(constant.SpaceDeveloperRole))
   151  				Expect(givenOrgGuid).To(Equal("some-org-guid"))
   152  				Expect(givenSpaceGUID).To(Equal("some-space-guid"))
   153  				Expect(givenUserName).To(Equal("some-user-name"))
   154  				Expect(givenOrigin).To(Equal("some-user-origin"))
   155  				Expect(givenIsClient).To(BeFalse())
   156  			})
   157  
   158  			It("prints all warnings, text indicating creation completion, ok and then a tip", func() {
   159  				Expect(executeErr).ToNot(HaveOccurred())
   160  				Expect(testUI.Err).To(Say("warnings-1"))
   161  				Expect(testUI.Err).To(Say("warnings-2"))
   162  				Expect(testUI.Err).To(Say("create-space-manager-role-warning"))
   163  				Expect(testUI.Err).To(Say("create-space-developer-role-warning"))
   164  
   165  				Expect(testUI.Out).To(Say("Creating space some-space in org some-org-name as some-user-name..."))
   166  				Expect(testUI.Out).To(Say("OK"))
   167  
   168  				Expect(testUI.Out).To(Say("Assigning role SpaceManager to user some-user-name in org some-org-name / space some-space as some-user-name..."))
   169  				Expect(testUI.Out).To(Say("OK"))
   170  
   171  				Expect(testUI.Out).To(Say("Assigning role SpaceDeveloper to user some-user-name in org some-org-name / space some-space as some-user-name..."))
   172  				Expect(testUI.Out).To(Say("OK"))
   173  
   174  				Expect(testUI.Out).To(Say(`TIP: Use 'cf target -o "%s" -s "%s"' to target new space`, "some-org-name", spaceName))
   175  			})
   176  		})
   177  
   178  		When("passing in a organization", func() {
   179  			When("the organization exists", func() {
   180  				BeforeEach(func() {
   181  					fakeActor.CreateSpaceReturns(v7action.Space{}, v7action.Warnings{"warnings-1", "warnings-2"}, nil)
   182  					orgName = "some-other-org"
   183  					fakeActor.GetOrganizationByNameReturns(
   184  						v7action.Organization{Name: "some-other-org", GUID: "some-other-org-guid"},
   185  						v7action.Warnings{"get-org-warnings"},
   186  						nil,
   187  					)
   188  				})
   189  
   190  				It("prints all warnings, ok and then a tip", func() {
   191  					Expect(executeErr).ToNot(HaveOccurred())
   192  					Expect(testUI.Err).To(Say("get-org-warnings"))
   193  					Expect(testUI.Err).To(Say("warnings-1"))
   194  					Expect(testUI.Err).To(Say("warnings-2"))
   195  					Expect(testUI.Out).To(Say("OK"))
   196  					Expect(testUI.Out).To(Say(`TIP: Use 'cf target -o "%s" -s "%s"' to target new space`, orgName, spaceName))
   197  				})
   198  
   199  				It("creates the space", func() {
   200  					Expect(fakeActor.GetOrganizationByNameCallCount()).To(Equal(1))
   201  					expectedOrgName := fakeActor.GetOrganizationByNameArgsForCall(0)
   202  					Expect(expectedOrgName).To(Equal(orgName))
   203  
   204  					Expect(fakeActor.CreateSpaceCallCount()).To(Equal(1))
   205  					expectedSpaceName, expectedOrgGUID := fakeActor.CreateSpaceArgsForCall(0)
   206  					Expect(expectedSpaceName).To(Equal(spaceName))
   207  					Expect(expectedOrgGUID).To(Equal("some-other-org-guid"))
   208  				})
   209  			})
   210  			When("the organization doesn't exist", func() {
   211  				BeforeEach(func() {
   212  					orgName = "some-other-org"
   213  					fakeActor.GetOrganizationByNameReturns(
   214  						v7action.Organization{},
   215  						v7action.Warnings{"get-org-warnings"},
   216  						errors.New("get-organization-error"),
   217  					)
   218  				})
   219  
   220  				It("prints all warnings, ok and then a tip", func() {
   221  					Expect(executeErr).To(MatchError(errors.New("get-organization-error")))
   222  				})
   223  
   224  				It(" does not create the space", func() {
   225  					Expect(fakeActor.GetOrganizationByNameCallCount()).To(Equal(1))
   226  					expectedOrgName := fakeActor.GetOrganizationByNameArgsForCall(0)
   227  					Expect(expectedOrgName).To(Equal(orgName))
   228  
   229  					Expect(fakeActor.CreateSpaceCallCount()).To(Equal(0))
   230  				})
   231  			})
   232  		})
   233  
   234  		When("the space already exists", func() {
   235  			BeforeEach(func() {
   236  				fakeActor.CreateSpaceReturns(v7action.Space{}, v7action.Warnings{"some-warning"}, actionerror.SpaceAlreadyExistsError{Space: spaceName})
   237  			})
   238  
   239  			It("displays all warnings, that the space already exists, and does not error", func() {
   240  				Expect(executeErr).ToNot(HaveOccurred())
   241  
   242  				Expect(testUI.Err).To(Say("some-warning"))
   243  				Expect(testUI.Out).To(Say(`Creating space %s in org %s as %s\.\.\.`, spaceName, "some-org-name", userName))
   244  				Expect(testUI.Out).To(Say(`Space '%s' already exists\.`, spaceName))
   245  				Expect(testUI.Out).To(Say("OK"))
   246  			})
   247  		})
   248  
   249  		When("setting the space manager role fails", func() {
   250  			BeforeEach(func() {
   251  				fakeActor.CreateSpaceRoleReturnsOnCall(0,
   252  					v7action.Warnings{"create-space-manager-role-warning"},
   253  					errors.New("create-space-manager-role-error"),
   254  				)
   255  			})
   256  
   257  			It("displays warnings and returns the error", func() {
   258  				Expect(testUI.Err).To(Say("create-space-manager-role-warning"))
   259  				Expect(executeErr).To(MatchError("create-space-manager-role-error"))
   260  			})
   261  		})
   262  
   263  		When("setting the space developer role fails", func() {
   264  			BeforeEach(func() {
   265  				fakeActor.CreateSpaceRoleReturnsOnCall(1,
   266  					v7action.Warnings{"create-space-developer-role-warning"},
   267  					errors.New("create-space-developer-role-error"),
   268  				)
   269  			})
   270  
   271  			It("displays warnings and returns the error", func() {
   272  				Expect(testUI.Err).To(Say("create-space-developer-role-warning"))
   273  				Expect(executeErr).To(MatchError("create-space-developer-role-error"))
   274  			})
   275  		})
   276  	})
   277  })