Expect(cmd.Usage()).To(Equal("bmp bms --deployment[-d] <deployment file>"))
		})
	})

	Describe("#Options", func() {
		It("returns the options of a BmsCommand", func() {
			Expect(cmds.EqualOptions(cmd.Options(), options)).To(BeTrue())

			Expect(cmd.Options().Deployment).ToNot(Equal(""))
			Expect(cmd.Options().Deployment).To(Equal("../../test_fixtures/bmp/deployment.yml"))
		})
	})

	Describe("#Validate", func() {
		It("validates a good BmsCommand", func() {
			validate, err := cmd.Validate()
			Expect(validate).To(BeTrue())
			Expect(err).ToNot(HaveOccurred())
		})

		Context("bad BmsCommand", func() {
			BeforeEach(func() {
				options = cmds.Options{
					Verbose:    false,
					Deployment: "fake-deployment-file",
				}
			})

			It("fails validation when deployment file not existed", func() {
				cmd = bmp.NewBmsCommand(options, fakeBmpClient)
				validate, err := cmd.Validate()
	Describe("#Usage", func() {
		It("returns the usage text of a TargetCommand", func() {
			Expect(cmd.Usage()).To(Equal("bmp target http://url.to.bmp.server"))
		})
	})

	Describe("#Options", func() {
		It("returns the options of a TargetCommand", func() {
			Expect(cmds.EqualOptions(cmd.Options(), options)).To(BeTrue())
		})
	})

	Describe("#Validate", func() {
		Context("when the options includes a URL", func() {
			It("returns true on validation", func() {
				validate, err := cmd.Validate()
				Expect(validate).To(BeTrue())
				Expect(err).ToNot(HaveOccurred())
			})
		})

		Context("when the options includes an empty target URL", func() {
			BeforeEach(func() {
				options.Target = ""
				cmd = bmp.NewTargetCommand(options, fakeBmpClient)
			})

			It("returns false on validation", func() {
				validate, err := cmd.Validate()
				Expect(validate).To(BeFalse())
				Expect(err).To(HaveOccurred())