@@ -20,6 +20,7 @@ import (
2020type mockRegisterStore struct {
2121 user * entity.User
2222 org * entity.Organization
23+ orgs []entity.Organization
2324 token string
2425 err error
2526}
@@ -35,6 +36,16 @@ func (m *mockRegisterStore) GetActiveOrganizationOrDefault() (*entity.Organizati
3536 return m .org , nil
3637}
3738
39+ func (m * mockRegisterStore ) GetOrganizationsByName (name string ) ([]entity.Organization , error ) {
40+ var matched []entity.Organization
41+ for _ , o := range m .orgs {
42+ if o .Name == name {
43+ matched = append (matched , o )
44+ }
45+ }
46+ return matched , nil
47+ }
48+
3849func (m * mockRegisterStore ) GetAccessToken () (string , error ) { return m .token , nil }
3950
4051// mockRegistrationStore satisfies RegistrationStore for orchestration tests.
@@ -173,7 +184,7 @@ func Test_runRegister_HappyPath(t *testing.T) {
173184 defer ClearTestSSHPort ()
174185
175186 term := terminal .New ()
176- err := runRegister (context .Background (), term , store , "my-spark" , deps )
187+ err := runRegister (context .Background (), term , store , "my-spark" , "" , deps )
177188 if err != nil {
178189 t .Fatalf ("runRegister failed: %v" , err )
179190 }
@@ -224,7 +235,7 @@ func Test_runRegister_UserCancels(t *testing.T) {
224235 deps .prompter = mockConfirmer {confirm : false }
225236
226237 term := terminal .New ()
227- err := runRegister (context .Background (), term , store , "my-spark" , deps )
238+ err := runRegister (context .Background (), term , store , "my-spark" , "" , deps )
228239 if err != nil {
229240 t .Fatalf ("expected nil error on cancel, got: %v" , err )
230241 }
@@ -312,7 +323,7 @@ func Test_runRegister_AlreadyRegistered(t *testing.T) {
312323 term := terminal .New ()
313324 // Pass the same name as the existing registration so we go through
314325 // the checkExistingRegistration path (not the different-name path).
315- err := runRegister (context .Background (), term , store , "Existing" , deps )
326+ err := runRegister (context .Background (), term , store , "Existing" , "" , deps )
316327 if err != nil {
317328 t .Fatalf ("expected nil error, got: %v" , err )
318329 }
@@ -340,12 +351,90 @@ func Test_runRegister_NoOrganization(t *testing.T) {
340351 defer server .Close ()
341352
342353 term := terminal .New ()
343- err := runRegister (context .Background (), term , store , "my-spark" , deps )
354+ err := runRegister (context .Background (), term , store , "my-spark" , "" , deps )
344355 if err == nil {
345356 t .Fatal ("expected error when no org exists" )
346357 }
347358}
348359
360+ func Test_runRegister_WithOrgFlag (t * testing.T ) {
361+ regStore := & mockRegistrationStore {}
362+
363+ store := & mockRegisterStore {
364+ user : & entity.User {ID : "user_1" },
365+ org : & entity.Organization {ID : "org_default" , Name : "DefaultOrg" },
366+ orgs : []entity.Organization {
367+ {ID : "org_456" , Name : "SpecificOrg" },
368+ },
369+ token : "tok" ,
370+ }
371+
372+ var capturedOrgID string
373+ svc := & fakeNodeService {
374+ addNodeFn : func (req * nodev1.AddNodeRequest ) (* nodev1.AddNodeResponse , error ) {
375+ capturedOrgID = req .GetOrganizationId ()
376+ return & nodev1.AddNodeResponse {
377+ ExternalNode : & nodev1.ExternalNode {
378+ ExternalNodeId : "unode_abc" ,
379+ OrganizationId : req .GetOrganizationId (),
380+ Name : req .GetName (),
381+ DeviceId : req .GetDeviceId (),
382+ },
383+ }, nil
384+ },
385+ }
386+
387+ setupRunner := & mockSetupRunner {}
388+ deps , server := testRegisterDeps (t , svc , regStore )
389+ defer server .Close ()
390+ deps .setupRunner = setupRunner
391+
392+ SetTestSSHPort (22 )
393+ defer ClearTestSSHPort ()
394+
395+ term := terminal .New ()
396+ err := runRegister (context .Background (), term , store , "my-spark" , "SpecificOrg" , deps )
397+ if err != nil {
398+ t .Fatalf ("runRegister with --org failed: %v" , err )
399+ }
400+
401+ if capturedOrgID != "org_456" {
402+ t .Errorf ("expected org_456, got %s" , capturedOrgID )
403+ }
404+
405+ reg , err := regStore .Load ()
406+ if err != nil {
407+ t .Fatalf ("Load failed: %v" , err )
408+ }
409+ if reg .OrgID != "org_456" {
410+ t .Errorf ("expected registration org org_456, got %s" , reg .OrgID )
411+ }
412+ }
413+
414+ func Test_runRegister_WithOrgFlag_NotFound (t * testing.T ) {
415+ regStore := & mockRegistrationStore {}
416+
417+ store := & mockRegisterStore {
418+ user : & entity.User {ID : "user_1" },
419+ org : & entity.Organization {ID : "org_default" , Name : "DefaultOrg" },
420+ orgs : []entity.Organization {},
421+ token : "tok" ,
422+ }
423+
424+ svc := & fakeNodeService {}
425+ deps , server := testRegisterDeps (t , svc , regStore )
426+ defer server .Close ()
427+
428+ term := terminal .New ()
429+ err := runRegister (context .Background (), term , store , "my-spark" , "NonexistentOrg" , deps )
430+ if err == nil {
431+ t .Fatal ("expected error when org not found" )
432+ }
433+ if ! strings .Contains (err .Error (), "no organization found" ) {
434+ t .Errorf ("expected 'no organization found' error, got: %v" , err )
435+ }
436+ }
437+
349438func Test_runRegister_AddNodeFails (t * testing.T ) {
350439 regStore := & mockRegistrationStore {}
351440
@@ -366,7 +455,7 @@ func Test_runRegister_AddNodeFails(t *testing.T) {
366455 defer server .Close ()
367456
368457 term := terminal .New ()
369- err := runRegister (context .Background (), term , store , "my-spark" , deps )
458+ err := runRegister (context .Background (), term , store , "my-spark" , "" , deps )
370459 if err == nil {
371460 t .Fatal ("expected error when AddNode fails" )
372461 }
@@ -416,7 +505,7 @@ func Test_runRegister_NoSetupCommand(t *testing.T) {
416505 defer ClearTestSSHPort ()
417506
418507 term := terminal .New ()
419- err := runRegister (context .Background (), term , store , "my-spark" , deps )
508+ err := runRegister (context .Background (), term , store , "my-spark" , "" , deps )
420509 if err != nil {
421510 t .Fatalf ("runRegister failed: %v" , err )
422511 }
@@ -549,7 +638,7 @@ func Test_runRegister_GrantSSH_retries_on_connection_error_then_succeeds(t *test
549638 defer ClearTestSSHPort ()
550639
551640 term := terminal .New ()
552- err := runRegister (context .Background (), term , store , "my-spark" , deps )
641+ err := runRegister (context .Background (), term , store , "my-spark" , "" , deps )
553642 if err != nil {
554643 t .Fatalf ("runRegister failed: %v" , err )
555644 }
@@ -598,7 +687,7 @@ func Test_runRegister_GrantSSH_no_retry_on_permanent_error(t *testing.T) {
598687 defer ClearTestSSHPort ()
599688
600689 term := terminal .New ()
601- err := runRegister (context .Background (), term , store , "my-spark" , deps )
690+ err := runRegister (context .Background (), term , store , "my-spark" , "" , deps )
602691 if err != nil {
603692 t .Fatalf ("runRegister should not fail the overall flow when SSH grant fails: %v" , err )
604693 }
@@ -658,7 +747,7 @@ func Test_runRegister_NameValidation(t *testing.T) {
658747 defer ClearTestSSHPort ()
659748
660749 term := terminal .New ()
661- err := runRegister (context .Background (), term , store , tt .input , deps )
750+ err := runRegister (context .Background (), term , store , tt .input , "" , deps )
662751 if tt .wantErr {
663752 if err == nil {
664753 t .Fatal ("expected error, got nil" )
@@ -687,7 +776,7 @@ func Test_runRegister_NoNameNotRegistered(t *testing.T) {
687776 defer server .Close ()
688777
689778 term := terminal .New ()
690- err := runRegister (context .Background (), term , store , "" , deps )
779+ err := runRegister (context .Background (), term , store , "" , "" , deps )
691780 if err == nil {
692781 t .Fatal ("expected error when no name provided and not registered" )
693782 }
@@ -728,7 +817,7 @@ func Test_runRegister_NoNameAlreadyRegistered(t *testing.T) {
728817 defer server .Close ()
729818
730819 term := terminal .New ()
731- err := runRegister (context .Background (), term , store , "" , deps )
820+ err := runRegister (context .Background (), term , store , "" , "" , deps )
732821 if err != nil {
733822 t .Fatalf ("expected nil error when already registered with no name, got: %v" , err )
734823 }
0 commit comments