diff --git a/cloud/cloud.go b/cloud/cloud.go index 91400f72..d899c3b2 100644 --- a/cloud/cloud.go +++ b/cloud/cloud.go @@ -37,11 +37,11 @@ const ( ) func getCloudBaseUrl() string { - return fmt.Sprintf("https://%s", GetEnvWithDefault(QodanaEndpoint, DefaultEndpoint)) + return GetEnvWithDefault(QodanaEndpoint, fmt.Sprintf("https://%s", DefaultEndpoint)) } func getCloudApiBaseUrl() string { - return fmt.Sprintf("https://api.%s", GetEnvWithDefault(QodanaEndpoint, DefaultEndpoint)) + return GetEnvWithDefault(QodanaEndpoint, fmt.Sprintf("https://api.%s", DefaultEndpoint)) } // GetCloudTeamsPageUrl returns the team page URL on Qodana Cloud @@ -126,20 +126,23 @@ func (client *QdClient) doRequest(path, method string, headers map[string]string if responseErr != nil { return RequestError{Err: responseErr} } - defer func(Body io.ReadCloser) { - err := Body.Close() - if err != nil { - log.Fatal(err) - } - }(resp.Body) - - responseBody, _ := io.ReadAll(resp.Body) - if resp.StatusCode >= http.StatusOK && resp.StatusCode < http.StatusMultipleChoices { - var data map[string]interface{} - if err := json.Unmarshal(responseBody, &data); err != nil { - return RequestError{Err: err} + if resp != nil { + defer func(Body io.ReadCloser) { + err := Body.Close() + if err != nil { + log.Fatal(err) + } + }(resp.Body) + + responseBody, _ := io.ReadAll(resp.Body) + if resp.StatusCode >= http.StatusOK && resp.StatusCode < http.StatusMultipleChoices { + var data map[string]interface{} + if err := json.Unmarshal(responseBody, &data); err != nil { + return RequestError{Err: err} + } + return Success{Data: data} } - return Success{Data: data} + return APIError{StatusCode: resp.StatusCode, Message: string(responseBody)} } - return APIError{StatusCode: resp.StatusCode, Message: string(responseBody)} + return APIError{StatusCode: 400, Message: "Wrong endpoint"} } diff --git a/cloud/cloud_test.go b/cloud/cloud_test.go index 8e2747c4..c2a91d6e 100644 --- a/cloud/cloud_test.go +++ b/cloud/cloud_test.go @@ -42,6 +42,27 @@ func TestGetProjectByBadToken(t *testing.T) { } } +func TestGetProjectByStaging(t *testing.T) { + err := os.Setenv(QodanaEndpoint, "https://cloud.sssa-stgn.aws.intellij.net") + if err != nil { + t.Fatal(err) + } + token := os.Getenv("QODANA_TOKEN") + if token == "" { + t.Skip() + } + client := NewQdClient(token) + result := client.getProject() + switch v := result.(type) { + case APIError: + if v.StatusCode > http.StatusBadRequest { + t.Errorf("Expected status code %d, got %d", http.StatusBadRequest, v.StatusCode) + } + case RequestError: + t.Errorf("Did not expect request error: %v", v) + } +} + func TestValidateToken(t *testing.T) { client := NewQdClient("kek") if projectName := client.ValidateToken(); projectName != "" {