@@ -20,6 +20,7 @@ import (
2020 "fmt"
2121 "io"
2222 "os"
23+ "path/filepath"
2324 "strings"
2425
2526 . "github.com/onsi/ginkgo/v2"
@@ -807,4 +808,140 @@ plugins:
807808 })
808809 })
809810 })
811+
812+ Context ("handleInputDirForEdit" , func () {
813+ var (
814+ c * CLI
815+ cmd * cobra.Command
816+ subcommands []keySubcommandTuple
817+ tmpDir string
818+ )
819+
820+ BeforeEach (func () {
821+ c = & CLI {}
822+ cmd = & cobra.Command {}
823+ cmd .Flags ().String ("input-dir" , "" , "test input-dir flag" )
824+
825+ // Create a temporary directory for testing
826+ var err error
827+ tmpDir , err = os .MkdirTemp ("" , "cli-input-dir-test-*" )
828+ Expect (err ).NotTo (HaveOccurred ())
829+ })
830+
831+ AfterEach (func () {
832+ if tmpDir != "" {
833+ _ = os .RemoveAll (tmpDir )
834+ }
835+ })
836+
837+ It ("should return nil when input-dir flag is not set" , func () {
838+ subcommands = []keySubcommandTuple {
839+ {key : "helm.kubebuilder.io/v2-alpha" },
840+ }
841+ err := c .handleInputDirForEdit (cmd , subcommands )
842+ Expect (err ).NotTo (HaveOccurred ())
843+ })
844+
845+ It ("should return nil when input-dir flag is empty" , func () {
846+ _ = cmd .Flags ().Set ("input-dir" , "" )
847+ subcommands = []keySubcommandTuple {
848+ {key : "helm.kubebuilder.io/v2-alpha" },
849+ }
850+ err := c .handleInputDirForEdit (cmd , subcommands )
851+ Expect (err ).NotTo (HaveOccurred ())
852+ })
853+
854+ It ("should return error when plugin is not helm/v2-alpha" , func () {
855+ _ = cmd .Flags ().Set ("input-dir" , tmpDir )
856+ subcommands = []keySubcommandTuple {
857+ {key : "go.kubebuilder.io/v4" },
858+ }
859+ err := c .handleInputDirForEdit (cmd , subcommands )
860+ Expect (err ).To (HaveOccurred ())
861+ Expect (err .Error ()).To (ContainSubstring ("only supported with helm.kubebuilder.io/v2-alpha" ))
862+ })
863+
864+ It ("should return error when directory does not exist" , func () {
865+ _ = cmd .Flags ().Set ("input-dir" , "/nonexistent/path/to/dir" )
866+ subcommands = []keySubcommandTuple {
867+ {key : "helm.kubebuilder.io/v2-alpha" },
868+ }
869+ err := c .handleInputDirForEdit (cmd , subcommands )
870+ Expect (err ).To (HaveOccurred ())
871+ Expect (err .Error ()).To (ContainSubstring ("does not exist" ))
872+ })
873+
874+ It ("should return error when path is not a directory" , func () {
875+ // Create a file instead of directory
876+ filePath := filepath .Join (tmpDir , "testfile" )
877+ err := os .WriteFile (filePath , []byte ("test" ), 0o644 )
878+ Expect (err ).NotTo (HaveOccurred ())
879+
880+ _ = cmd .Flags ().Set ("input-dir" , filePath )
881+ subcommands = []keySubcommandTuple {
882+ {key : "helm.kubebuilder.io/v2-alpha" },
883+ }
884+ err = c .handleInputDirForEdit (cmd , subcommands )
885+ Expect (err ).To (HaveOccurred ())
886+ Expect (err .Error ()).To (ContainSubstring ("not a directory" ))
887+ })
888+
889+ It ("should return error when directory does not contain PROJECT file" , func () {
890+ // Create directory without PROJECT file
891+ emptyDir := filepath .Join (tmpDir , "empty-dir" )
892+ err := os .MkdirAll (emptyDir , 0o755 )
893+ Expect (err ).NotTo (HaveOccurred ())
894+
895+ _ = cmd .Flags ().Set ("input-dir" , emptyDir )
896+ subcommands = []keySubcommandTuple {
897+ {key : "helm.kubebuilder.io/v2-alpha" },
898+ }
899+ err = c .handleInputDirForEdit (cmd , subcommands )
900+ Expect (err ).To (HaveOccurred ())
901+ Expect (err .Error ()).To (ContainSubstring ("does not contain" ))
902+ Expect (err .Error ()).To (ContainSubstring ("PROJECT" ))
903+ })
904+
905+ It ("should change directory when helm plugin is present and dir exists" , func () {
906+ By ("saving original directory" )
907+ originalDir , err := os .Getwd ()
908+ Expect (err ).NotTo (HaveOccurred ())
909+ defer func () {
910+ _ = os .Chdir (originalDir )
911+ }()
912+
913+ By ("creating PROJECT file in input directory" )
914+ projectPath := filepath .Join (tmpDir , "PROJECT" )
915+ projectContent := `domain: example.com
916+ layout:
917+ - go.kubebuilder.io/v4
918+ projectName: test-project
919+ repo: example.com/test-project
920+ version: "3"
921+ `
922+ err = os .WriteFile (projectPath , []byte (projectContent ), 0o644 )
923+ Expect (err ).NotTo (HaveOccurred ())
924+
925+ _ = cmd .Flags ().Set ("input-dir" , tmpDir )
926+ subcommands = []keySubcommandTuple {
927+ {key : "helm.kubebuilder.io/v2-alpha" },
928+ }
929+
930+ By ("calling handleInputDirForEdit" )
931+ err = c .handleInputDirForEdit (cmd , subcommands )
932+ Expect (err ).NotTo (HaveOccurred ())
933+
934+ By ("verifying directory changed" )
935+ currentDir , err := os .Getwd ()
936+ Expect (err ).NotTo (HaveOccurred ())
937+
938+ By ("resolving symlinks for comparison" )
939+ expectedDir , err := filepath .EvalSymlinks (tmpDir )
940+ Expect (err ).NotTo (HaveOccurred ())
941+ actualDir , err := filepath .EvalSymlinks (currentDir )
942+ Expect (err ).NotTo (HaveOccurred ())
943+
944+ Expect (actualDir ).To (Equal (expectedDir ))
945+ })
946+ })
810947})
0 commit comments