Installer: Add option to expose PostgreSQL

Change-Id: I1e00bc4d1d1f417956c1744634287c32d9e3f513
diff --git a/core/installer/dodo_app_test.go b/core/installer/dodo_app_test.go
new file mode 100644
index 0000000..e9d7737
--- /dev/null
+++ b/core/installer/dodo_app_test.go
@@ -0,0 +1,69 @@
+package installer
+
+import (
+	"testing"
+
+	"cuelang.org/go/cue/errors"
+)
+
+var exposedPostgreSQL = `
+app: {
+	type: "golang:1.20.0"
+	run: "main.go"
+	ingress: {
+		network: "private"
+		subdomain: "testapp"
+		auth: enabled: false
+	}
+}
+
+postgresql: [{
+	name: "db_1"
+	expose: ["private", "public", "private"]
+}, {
+	name: "db_2"
+	expose: ["public", "private", "public"]
+}]`
+
+func TestExposedPostgreSQL(t *testing.T) {
+	app, err := NewDodoApp([]byte(exposedPostgreSQL))
+	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, nil, map[string]any{
+		"repoAddr":       "",
+		"repoPublicAddr": "",
+		"managerAddr":    "",
+		"appId":          "",
+		"branch":         "",
+		"sshPrivateKey":  "",
+		"port_db_1_0":    1,
+		"port_db_1_1":    2,
+		"port_db_1_2":    3,
+		"port_db_2_0":    4,
+		"port_db_2_1":    5,
+		"port_db_2_2":    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))
+}