@@ -4,6 +4,7 @@ import { describe, expect, it } from "vite-plus/test";
44import type { EnvironmentProject } from "@t3tools/client-runtime/state/shell" ;
55import type { HomeProjectScope } from "../home/homeThreadList" ;
66import {
7+ getProjectScopeSelectionTarget ,
78 newTaskDestination ,
89 resolveDraftProjectSelection ,
910 resolveEnvironmentProjectMatch ,
@@ -53,6 +54,26 @@ function makeScope(projects: ReadonlyArray<EnvironmentProject>): HomeProjectScop
5354 } ;
5455}
5556
57+ describe ( "getProjectScopeSelectionTarget" , ( ) => {
58+ it ( "prefers a connected copy of a project that spans environments" , ( ) => {
59+ const mac = makeProject ( "t3code" , "mac" ) ;
60+ const server = makeProject ( "t3code" , "server" ) ;
61+ const target = ( connected : ReadonlyArray < string > , preferred : string | null = null ) =>
62+ getProjectScopeSelectionTarget (
63+ makeScope ( [ mac , server ] ) ,
64+ preferred === null ? null : EnvironmentId . make ( preferred ) ,
65+ new Set ( connected . map ( ( id ) => EnvironmentId . make ( id ) ) ) ,
66+ ) ;
67+ expect ( target ( [ "server" ] ) ) . toBe ( server ) ;
68+ expect ( target ( [ "server" ] , "mac" ) ) . toBe ( server ) ;
69+ expect ( target ( [ "mac" , "server" ] , "server" ) ) . toBe ( server ) ;
70+ expect ( target ( [ "mac" , "server" ] ) ) . toBe ( mac ) ;
71+ // With nothing connected, the usual order still applies.
72+ expect ( target ( [ ] , "server" ) ) . toBe ( server ) ;
73+ expect ( target ( [ ] ) ) . toBe ( mac ) ;
74+ } ) ;
75+ } ) ;
76+
5677describe ( "resolveEnvironmentProjectMatch" , ( ) => {
5778 it ( "follows the same repository onto the target machine" , ( ) => {
5879 const selected = makeProject ( "t3code" , "mac" , { repositoryKey : "github.com/t3tools/t3code" } ) ;
0 commit comments