BeforeEach(func() {
		vmFinder = &fakevm.FakeFinder{}
		action = NewHasVM(vmFinder)
	})

	Describe("Run", func() {
		It("tries to find VM with given VM CID", func() {
			_, err := action.Run(1234)
			Expect(err).ToNot(HaveOccurred())

			Expect(vmFinder.FindID).To(Equal(1234))
		})

		Context("when VM is found with given CID", func() {
			It("returns true without error", func() {
				vmFinder.FindFound = true

				found, err := action.Run(1234)
				Expect(err).ToNot(HaveOccurred())
				Expect(found).To(BeTrue())
			})
		})

		Context("when VM is not found with given CID", func() {
			It("returns false without error", func() {
				found, err := action.Run(1234)
				Expect(err).ToNot(HaveOccurred())
				Expect(found).To(BeFalse())
			})
		})
		It("tries to find vm with given vm cid", func() {
			_, err := action.Run(1234)
			Expect(err).ToNot(HaveOccurred())

			Expect(vmFinder.FindID).To(Equal(1234))
		})

		Context("when vm is found with given vm cid", func() {
			var (
				vm *fakevm.FakeVM
			)

			BeforeEach(func() {
				vm = fakevm.NewFakeVM(1234)
				vmFinder.FindVM = vm
				vmFinder.FindFound = true
			})

			It("reboots vm", func() {
				_, err := action.Run(1234)
				Expect(err).ToNot(HaveOccurred())

				Expect(vm.RebootCalled).To(BeTrue())
			})

			It("returns error if rebooting vm fails", func() {
				vm.RebootErr = errors.New("fake-reboot-err")

				_, err := action.Run(1234)
				Expect(err).To(HaveOccurred())
				Expect(err.Error()).To(ContainSubstring("fake-reboot-err"))