import ( . "github.com/onsi/ginkgo" . "github.com/onsi/gomega" "github.com/cloudfoundry/cli/cf/api" . "github.com/cloudfoundry/cli/cf/testhelpers" . "github.com/cloudfoundry/cli/cf/testhelpers/requirements" . "github.com/cloudfoundry/cli/cf/testhelpers/matchers" . "github.com/cloudfoundry/cli/cf/trace" . "github.com/cloudfoundry/cli/cf/cli_command_test_helpers" "github.com/cloudfoundry/cli/cf/commands" "github.com/cloudfoundry/cli/cf/configuration/plugin_config" "github.com/cloudfoundry/cli/plugin/models" "github.com/cloudfoundry/cli/plugin/pluginfakes" ) var _ = Describe("MyCommand", func() { var ( cmd commands.MyCommand fakeUI *pluginfakes.FakeUI fakeConfig *pluginfakes.FakePluginConfig fakeRepo *pluginfakes.FakeMyRepository requirementsFactory *requirements.FakeReqFactory loginRequirement requirements.Requirement fakePlugin *pluginfakes.FakePlugin ) BeforeEach(func() { TraceLogger = NewLogger(nullLogger{}) fakeUI = &pluginfakes.FakeUI{} fakeConfig = &pluginfakes.FakePluginConfig{} requirementPasses := func(req requirements.Requirement, ui requirements.UI) bool { return true } loginRequirement = NewLoginRequirement() fakeRepo = &pluginfakes.FakeMyRepository{} requirementsFactory = &requirements.FakeReqFactory{ LoginRequirementImpl: loginRequirement, TargetedSpaceRequirementImpl: fakeTargetedSpaceReq, TargetedOrgRequirementImpl: fakeTargetedOrganizationReq, MinimumAPIVersionRequirementImpl: requirements.NewMinimumAPIVersionRequirement("2.12.0"), } cmd = NewMyCommand(fakeUI, fakeConfig, fakeRepo) fakePlugin = new(pluginfakes.FakePlugin) }) describe("RequirementsPass", func() { It("returns true if there are no configured requirements", func() { Expect(requirementsFactory.RequirementsPass(fakeUI)).To(BeTrue()) }) It("returns false if one requirement does not pass", func() { requirementsFactory.LoginRequirementImpl = requirements.NewLoginRequirement() Expect(requirementsFactory.RequirementsPass(fakeUI)).To(BeFalse()) }) }) })In this example, we're testing a CLI command `MyCommand` that has a minimum API version requirement of 2.12.0. We create a new `FakeReqFactory` and set its `MinimumAPIVersionRequirementImpl` field to the desired version. Then, we create a new command and pass in the `FakeReqFactory` as a requirement. Finally, we create a test case that checks if the `RequirementsPass` function returns `true` when there are no requirements or when all requirements pass, and `false` when at least one requirement doesn't pass.