Skip to content

Commit ca1e020

Browse files
authored
Merge pull request #106 from julwrites/staging
We should retrieve Project ID from secrets.yaml
2 parents cbe65c0 + d0f220a commit ca1e020

5 files changed

Lines changed: 47 additions & 13 deletions

File tree

pkg/app/api_client.go

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ func SetAPIConfigOverride(url, key string) {
4343
configInitialized = true
4444
}
4545

46-
func getAPIConfig() (string, string) {
46+
func getAPIConfig(projectID string) (string, string) {
4747
configMutex.Lock()
4848
defer configMutex.Unlock()
4949

@@ -56,7 +56,11 @@ func getAPIConfig() (string, string) {
5656

5757
// If env vars are missing, try to fetch from Secret Manager
5858
if url == "" || key == "" {
59-
projectID := os.Getenv("GCLOUD_PROJECT_ID")
59+
envProjectID := os.Getenv("GCLOUD_PROJECT_ID")
60+
if envProjectID != "" {
61+
projectID = envProjectID
62+
}
63+
6064
if projectID != "" {
6165
if url == "" {
6266
var err error
@@ -73,7 +77,7 @@ func getAPIConfig() (string, string) {
7377
}
7478
}
7579
} else {
76-
log.Println("GCLOUD_PROJECT_ID is not set, skipping Secret Manager lookup")
80+
log.Println("GCLOUD_PROJECT_ID is not set and no project ID passed, skipping Secret Manager lookup")
7781
}
7882
}
7983

@@ -86,8 +90,8 @@ func getAPIConfig() (string, string) {
8690

8791
// SubmitQuery sends the QueryRequest to the Bible API and unmarshals the response into result.
8892
// result should be a pointer to the expected response struct.
89-
func SubmitQuery(req QueryRequest, result interface{}) error {
90-
apiURL, apiKey := getAPIConfig()
93+
func SubmitQuery(req QueryRequest, result interface{}, projectID string) error {
94+
apiURL, apiKey := getAPIConfig(projectID)
9195
if apiURL == "" {
9296
return fmt.Errorf("BIBLE_API_URL environment variable is not set")
9397
}

pkg/app/api_client_test.go

Lines changed: 35 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ func TestSubmitQuery(t *testing.T) {
4949
t.Run("Success", func(t *testing.T) {
5050
req := QueryRequest{Query: QueryObject{Prompt: "hello"}}
5151
var resp VerseResponse
52-
err := SubmitQuery(req, &resp)
52+
err := SubmitQuery(req, &resp, "")
5353
if err != nil {
5454
t.Errorf("Unexpected error: %v", err)
5555
}
@@ -62,7 +62,7 @@ func TestSubmitQuery(t *testing.T) {
6262
t.Run("API Error", func(t *testing.T) {
6363
req := QueryRequest{Query: QueryObject{Prompt: "error"}}
6464
var resp VerseResponse
65-
err := SubmitQuery(req, &resp)
65+
err := SubmitQuery(req, &resp, "")
6666
if err == nil {
6767
t.Error("Expected error, got nil")
6868
}
@@ -76,7 +76,7 @@ func TestSubmitQuery(t *testing.T) {
7676
t.Run("Bad JSON", func(t *testing.T) {
7777
req := QueryRequest{Query: QueryObject{Prompt: "badjson"}}
7878
var resp VerseResponse
79-
err := SubmitQuery(req, &resp)
79+
err := SubmitQuery(req, &resp, "")
8080
if err == nil {
8181
t.Error("Expected error for bad JSON, got nil")
8282
}
@@ -89,10 +89,11 @@ func TestSubmitQuery(t *testing.T) {
8989
defer restore()
9090
// Also unset PROJECT_ID to avoid Secret Manager lookup
9191
defer setEnv("GCLOUD_PROJECT_ID", "")()
92+
resetAPIConfigCache()
9293

9394
req := QueryRequest{}
9495
var resp VerseResponse
95-
err := SubmitQuery(req, &resp)
96+
err := SubmitQuery(req, &resp, "")
9697
if err == nil {
9798
t.Error("Expected error when BIBLE_API_URL is unset")
9899
}
@@ -104,6 +105,7 @@ func TestGetAPIConfig_SecretManagerFallback(t *testing.T) {
104105
defer setEnv("BIBLE_API_URL", "")()
105106
defer setEnv("BIBLE_API_KEY", "")()
106107
defer setEnv("GCLOUD_PROJECT_ID", "test-project")()
108+
resetAPIConfigCache()
107109

108110
// Mock the secret function
109111
oldGetSecret := getSecretFunc
@@ -122,7 +124,7 @@ func TestGetAPIConfig_SecretManagerFallback(t *testing.T) {
122124
return "", fmt.Errorf("unexpected secret: %s", name)
123125
}
124126

125-
url, key := getAPIConfig()
127+
url, key := getAPIConfig("")
126128

127129
if url != "http://secret-url.com" {
128130
t.Errorf("Expected URL 'http://secret-url.com', got '%s'", url)
@@ -131,3 +133,31 @@ func TestGetAPIConfig_SecretManagerFallback(t *testing.T) {
131133
t.Errorf("Expected Key 'secret-key', got '%s'", key)
132134
}
133135
}
136+
137+
func TestGetAPIConfig_PassedProjectID(t *testing.T) {
138+
// Ensure Env Vars are empty, including GCLOUD_PROJECT_ID
139+
defer setEnv("BIBLE_API_URL", "")()
140+
defer setEnv("BIBLE_API_KEY", "")()
141+
defer setEnv("GCLOUD_PROJECT_ID", "")()
142+
resetAPIConfigCache()
143+
144+
// Mock the secret function
145+
oldGetSecret := getSecretFunc
146+
defer func() { getSecretFunc = oldGetSecret }()
147+
148+
getSecretFunc = func(project, name string) (string, error) {
149+
if project != "passed-project" {
150+
return "", fmt.Errorf("unexpected project: %s", project)
151+
}
152+
if name == "BIBLE_API_URL" {
153+
return "http://secret-url-passed.com", nil
154+
}
155+
return "", fmt.Errorf("unexpected secret: %s", name)
156+
}
157+
158+
url, _ := getAPIConfig("passed-project")
159+
160+
if url != "http://secret-url-passed.com" {
161+
t.Errorf("Expected URL 'http://secret-url-passed.com', got '%s'", url)
162+
}
163+
}

pkg/app/ask.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ func GetBibleAsk(env def.SessionData) def.SessionData {
2525
}
2626

2727
var resp OQueryResponse
28-
err := SubmitQuery(req, &resp)
28+
err := SubmitQuery(req, &resp, env.Secrets.PROJECT_ID)
2929
if err != nil {
3030
log.Printf("Error asking bible: %v", err)
3131
env.Res.Message = "Sorry, I encountered an error processing your question."

pkg/app/passage.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,7 @@ func GetBiblePassage(env def.SessionData) def.SessionData {
146146
}
147147

148148
var resp VerseResponse
149-
err := SubmitQuery(req, &resp)
149+
err := SubmitQuery(req, &resp, env.Secrets.PROJECT_ID)
150150
if err != nil {
151151
log.Printf("Error retrieving passage: %v", err)
152152
// Fallback or error message?

pkg/app/search.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ func GetBibleSearch(env def.SessionData) def.SessionData {
3838
}
3939

4040
var resp WordSearchResponse
41-
err := SubmitQuery(req, &resp)
41+
err := SubmitQuery(req, &resp, env.Secrets.PROJECT_ID)
4242
if err != nil {
4343
log.Printf("Error searching bible: %v", err)
4444
env.Res.Message = "Sorry, I encountered an error while searching."

0 commit comments

Comments
 (0)