Переглянути джерело

Validate zones before opening RGB commands

Paul Klumpp 2 тижнів тому
батько
коміт
22e9cf3085
2 змінених файлів з 36 додано та 0 видалено
  1. 4 0
      cmd/wobkey/rgb/rgb.go
  2. 32 0
      cmd/wobkey/rgb/rgb_test.go

+ 4 - 0
cmd/wobkey/rgb/rgb.go

@@ -74,6 +74,10 @@ func Init() *cobra.Command {
 	cmd := &cobra.Command{
 		Use:   "rgb",
 		Short: "RGB lighting commands",
+		PersistentPreRunE: func(*cobra.Command, []string) error {
+			_, err := selectedZones()
+			return err
+		},
 	}
 	cmd.PersistentFlags().StringVar(&targetDevice, "device", "", "HID device path to use")
 	cmd.PersistentFlags().StringVar(&targetZone, "zone", "", "RGB lighting zone")

+ 32 - 0
cmd/wobkey/rgb/rgb_test.go

@@ -165,3 +165,35 @@ func TestZoneValidationPrecedesDeviceOpening(t *testing.T) {
 		t.Errorf("OpenDevice() error = %v, want unknown zone error", err)
 	}
 }
+
+func TestZoneValidationRunsBeforeCommandOpener(t *testing.T) {
+	originalTargetDevice := targetDevice
+	originalTargetZone := targetZone
+	t.Cleanup(func() {
+		targetDevice = originalTargetDevice
+		targetZone = originalTargetZone
+	})
+
+	cmd := Init()
+	openerCalled := false
+	cmd.AddCommand(&cobra.Command{
+		Use: "probe",
+		RunE: func(*cobra.Command, []string) error {
+			openerCalled = true
+			_, _, err := OpenDevice()
+			return err
+		},
+	})
+	cmd.SetArgs([]string{"--zone", "matrix", "probe"})
+
+	err := cmd.Execute()
+	if err == nil {
+		t.Fatal("Execute() expected zone error, got nil")
+	}
+	if !strings.Contains(err.Error(), "unknown zone") {
+		t.Errorf("Execute() error = %v, want unknown zone error", err)
+	}
+	if openerCalled {
+		t.Fatal("child command invoked OpenDevice before zone validation")
+	}
+}