1package client
2
3import (
4 "testing"
5
6 "github.com/bnema/vev/internal/domain"
7 "github.com/bnema/vev/internal/ports"
8 "github.com/stretchr/testify/require"
9)
10
11func TestSyncReconnectRemoteKeepsRequestAndToastClassificationTogether(t *testing.T) {
12 reconnect := &reconnectUI{}
13 for _, tt := range []struct {
14 name string
15 remote bool
16 }{
17 {name: "local picker", remote: false},
18 {name: "remote handoff", remote: true},
19 } {
20 t.Run(tt.name, func(t *testing.T) {
21 require.Equal(t, tt.remote, syncReconnectRemote(reconnect, tt.remote))
22 require.Equal(t, tt.remote, reconnect.remote)
23 })
24 }
25}
26
27func TestValidateAttachRequestNavigationTable(t *testing.T) {
28 var lifecycle domain.SessionLifecycleID
29 lifecycle[0] = 1
30 remoteRoute := &domain.RemoteSessionTarget{
31 Endpoint: "arch", DisplayOrigin: "arch", LifecycleID: lifecycle,
32 SessionName: "work", LiveTabID: "tab-1",
33 }
34 tests := []struct {
35 name string
36 request AttachRequest
37 valid bool
38 }{
39 {name: "ordinary route", request: AttachRequest{}, valid: true},
40 {name: "home picker without remote route", request: AttachRequest{Intent: ports.IntentAttach, SessionName: "work", NavigationCapabilities: ports.NavigationCapabilityHomePicker}, valid: false},
41 {name: "home picker on daemon-owned remote route", request: AttachRequest{Intent: ports.IntentAttach, SessionName: "work", Remote: true, EnvironmentPolicy: ports.EnvironmentPolicyDaemonOwned, NavigationCapabilities: ports.NavigationCapabilityHomePicker}, valid: true},
42 {name: "back on client-owned route", request: AttachRequest{StartupOverlay: ports.StartupOverlaySessionPicker, NavigationCapabilities: ports.NavigationCapabilityBack}, valid: true},
43 {name: "back on remote-target route", request: AttachRequest{Intent: ports.IntentAttach, SessionName: "work", RemoteTarget: remoteRoute, EnvironmentPolicy: ports.EnvironmentPolicyDaemonOwned, StartupOverlay: ports.StartupOverlaySessionPicker, NavigationCapabilities: ports.NavigationCapabilityBack}, valid: false},
44 {name: "unknown capability", request: AttachRequest{NavigationCapabilities: 4}, valid: false},
45 {name: "back without startup picker", request: AttachRequest{NavigationCapabilities: ports.NavigationCapabilityBack}, valid: false},
46 {name: "startup picker without back", request: AttachRequest{StartupOverlay: ports.StartupOverlaySessionPicker}, valid: false},
47 }
48
49 for _, tt := range tests {
50 t.Run(tt.name, func(t *testing.T) {
51 err := validateAttachRequest(tt.request)
52 if tt.valid {
53 require.NoError(t, err)
54 return
55 }
56 require.Error(t, err)
57 require.ErrorContains(t, err, "navigation")
58 })
59 }
60}