1package cmd_test 2 3import ( 4 "errors" 5 6 . "github.com/onsi/ginkgo" 7 . "github.com/onsi/gomega" 8 9 . "github.com/cloudfoundry/bosh-cli/cmd" 10 fakecmd "github.com/cloudfoundry/bosh-cli/cmd/cmdfakes" 11 cmdconf "github.com/cloudfoundry/bosh-cli/cmd/config" 12 fakecmdconf "github.com/cloudfoundry/bosh-cli/cmd/config/configfakes" 13 boshdir "github.com/cloudfoundry/bosh-cli/director" 14 fakedir "github.com/cloudfoundry/bosh-cli/director/directorfakes" 15 fakeui "github.com/cloudfoundry/bosh-cli/ui/fakes" 16 boshtbl "github.com/cloudfoundry/bosh-cli/ui/table" 17) 18 19var _ = Describe("AliasEnvCmd", func() { 20 var ( 21 sessions map[*fakecmdconf.FakeConfig2]*fakecmd.FakeSession 22 config *fakecmdconf.FakeConfig2 23 ui *fakeui.FakeUI 24 command AliasEnvCmd 25 ) 26 27 BeforeEach(func() { 28 sessions = map[*fakecmdconf.FakeConfig2]*fakecmd.FakeSession{} 29 30 sessionFactory := func(config cmdconf.Config) Session { 31 typedConfig, ok := config.(*fakecmdconf.FakeConfig2) 32 if !ok { 33 panic("Expected to find FakeConfig2") 34 } 35 36 for c, sess := range sessions { 37 if c.Existing == typedConfig.Existing { 38 return sess 39 } 40 } 41 42 panic("Expected to find fake session") 43 } 44 45 config = &fakecmdconf.FakeConfig2{ 46 Existing: fakecmdconf.ConfigContents{ 47 EnvironmentURL: "curr-environment-url", 48 EnvironmentCACert: "curr-ca-cert", 49 }, 50 } 51 52 ui = &fakeui.FakeUI{} 53 54 command = NewAliasEnvCmd(sessionFactory, config, ui) 55 }) 56 57 Describe("Run", func() { 58 var ( 59 opts AliasEnvOpts 60 updatedSession *fakecmd.FakeSession 61 updatedConfig *fakecmdconf.FakeConfig2 62 updatedDirector *fakedir.FakeDirector 63 ) 64 65 BeforeEach(func() { 66 opts = AliasEnvOpts{} 67 68 opts.URL = "environment-url" 69 opts.Args.Alias = "environment-alias" 70 opts.CACert = CACertArg{Content: "environment-ca-cert"} 71 72 updatedConfig = &fakecmdconf.FakeConfig2{ 73 Existing: fakecmdconf.ConfigContents{ 74 EnvironmentURL: "environment-url", 75 EnvironmentAlias: "environment-alias", 76 EnvironmentCACert: "environment-ca-cert", 77 }, 78 } 79 80 updatedDirector = &fakedir.FakeDirector{} 81 82 updatedSession = &fakecmd.FakeSession{} 83 updatedSession.DirectorReturns(updatedDirector, nil) 84 updatedSession.EnvironmentReturns("environment-url") 85 86 sessions[updatedConfig] = updatedSession 87 }) 88 89 act := func() error { return command.Run(opts) } 90 91 It("returns error if aliasing fails", func() { 92 config.AliasEnvironmentErr = errors.New("fake-err") 93 94 err := act() 95 Expect(err).To(HaveOccurred()) 96 Expect(err.Error()).To(ContainSubstring("fake-err")) 97 98 Expect(config.Saved.Called).To(BeFalse()) 99 }) 100 101 It("saves environment and shows director info if director is reachable", func() { 102 info := boshdir.Info{ 103 Name: "director-name", 104 UUID: "director-uuid", 105 Version: "director-version", 106 } 107 updatedDirector.InfoReturns(info, nil) 108 109 err := act() 110 Expect(err).ToNot(HaveOccurred()) 111 112 Expect(config.Saved.Called).To(BeTrue()) 113 Expect(config.Saved.EnvironmentURL).To(Equal("environment-url")) 114 Expect(config.Saved.EnvironmentAlias).To(Equal("environment-alias")) 115 Expect(config.Saved.EnvironmentCACert).To(Equal("environment-ca-cert")) 116 117 Expect(ui.Table).To(Equal(boshtbl.Table{ 118 Header: []boshtbl.Header{ 119 boshtbl.NewHeader("Name"), 120 boshtbl.NewHeader("UUID"), 121 boshtbl.NewHeader("Version"), 122 boshtbl.NewHeader("User"), 123 }, 124 Rows: [][]boshtbl.Value{ 125 { 126 boshtbl.NewValueString("director-name"), 127 boshtbl.NewValueString("director-uuid"), 128 boshtbl.NewValueString("director-version"), 129 boshtbl.NewValueString("(not logged in)"), 130 }, 131 }, 132 Transpose: true, 133 })) 134 }) 135 136 It("returns an error and does not save environment if director is not reachable", func() { 137 updatedDirector.InfoReturns(boshdir.Info{}, errors.New("fake-err")) 138 139 err := act() 140 Expect(err).To(HaveOccurred()) 141 Expect(err.Error()).To(ContainSubstring("fake-err")) 142 143 Expect(config.Saved.Called).To(BeFalse()) 144 }) 145 }) 146}) 147