DodoApp: Support remote clusters

Change-Id: I6f4e6a0a32cc723b47c96518d83b1ffdb5169f14
diff --git a/core/installer/app_test.go b/core/installer/app_test.go
index 4f3f7dd..83cf701 100644
--- a/core/installer/app_test.go
+++ b/core/installer/app_test.go
@@ -59,6 +59,17 @@
 			DeallocatePortAddr: fmt.Sprintf("http://port-allocator.%s-ingress-private.svc.cluster.local/api/remove", env.Id),
 		},
 	}
+
+	clusters = []Cluster{
+		{
+			Name: "default",
+		},
+		{
+			Name:             "io",
+			IngressClassName: "io",
+			Kubeconfig:       "kubeconfig",
+		},
+	}
 )
 
 func TestAuthProxyEnabled(t *testing.T) {
@@ -297,6 +308,42 @@
 	}
 }
 
+func TestAppPackagesRemoteCluster(t *testing.T) {
+	contents, err := valuesTmpls.ReadFile("values-tmpl/rpuppy.cue")
+	if err != nil {
+		t.Fatal(err)
+	}
+	app, err := NewCueEnvApp(CueAppData{
+		"base.cue":   []byte(cueBaseConfig),
+		"app.cue":    []byte(contents),
+		"global.cue": []byte(cueEnvAppGlobal),
+	})
+	if err != nil {
+		t.Fatal(err)
+	}
+	release := Release{
+		Namespace: "foo",
+	}
+	values := map[string]any{
+		"network":   "Public",
+		"subdomain": "woof",
+		"auth": map[string]any{
+			"enabled": false,
+		},
+		"cluster": "io",
+	}
+	rendered, err := app.Render(release, env, networks, clusters, values, nil, nil)
+	if err != nil {
+		t.Fatal(err)
+	}
+	for _, r := range rendered.Resources {
+		t.Log(string(r))
+	}
+	for _, r := range rendered.Data {
+		t.Log(string(r))
+	}
+}
+
 func TestDNSGateway(t *testing.T) {
 	contents, err := valuesTmpls.ReadFile("values-tmpl/dns-gateway.cue")
 	if err != nil {
@@ -337,6 +384,58 @@
 	}
 }
 
+var dodoAppRemoteClusterCue = `
+app: {
+	type: "golang:1.22.0"
+	run: "main.go"
+	ingress: {
+		network: "private"
+		subdomain: "testapp"
+		auth: enabled: false
+	}
+	dev: {
+		enabled: false
+	}
+    cluster: "io"
+}`
+
+func TestDodoAppRemoteCluster(t *testing.T) {
+	app, err := NewDodoApp([]byte(dodoAppRemoteClusterCue))
+	if err != nil {
+		for _, e := range errors.Errors(err) {
+			t.Log(e)
+		}
+		t.Fatal(err)
+	}
+
+	release := Release{
+		Namespace:     "foo",
+		AppInstanceId: "foo-bar",
+		RepoAddr:      "ssh://192.168.100.210:22/config",
+		AppDir:        "/foo/bar",
+	}
+	keyGen := testKeyGen{}
+	r, err := app.Render(release, env, networks, clusters, map[string]any{
+		"repoAddr":       "1",
+		"repoPublicAddr": "2",
+		"managerAddr":    "3",
+		"appId":          "4",
+		"branch":         "5",
+		"sshPrivateKey":  "6",
+	}, nil, keyGen)
+	if err != nil {
+		for _, e := range errors.Errors(err) {
+			for _, f := range errors.Errors(e) {
+				for _, g := range errors.Errors(f) {
+					t.Log(g)
+				}
+			}
+		}
+		t.Fatal(err)
+	}
+	t.Log(string(r.Raw))
+}
+
 var dodoAppDevDisabledCue = `
 app: {
 	type: "golang:1.22.0"