diff --git a/cmd/server/tests/test_helpers.go b/cmd/server/tests/test_helpers.go index 0471d02..3a6e203 100644 --- a/cmd/server/tests/test_helpers.go +++ b/cmd/server/tests/test_helpers.go @@ -550,10 +550,30 @@ func getTestUserID(t *testing.T, db *database.Queries) uuid.UUID { } // createTestMediaItemID creates a test media item and returns its ID -func createTestMediaItemID(t *testing.T, ts *httptest.Server, token string) string { +func createTestMediaItemID(t *testing.T, ts *httptest.Server) string { + // Generate unique library name to avoid conflicts between tests + uniqueName := fmt.Sprintf("Test Library %d", time.Now().UnixNano()) + + // Get a fresh token to ensure we have a valid user + // (previous tests may have deleted/recreated the test user) + loginReq := map[string]interface{}{ + "login": "testuser@example.com", + "password": "Test@Pass123!", + } + loginBody, _ := json.Marshal(loginReq) + loginReqHTTP, _ := http.NewRequest("POST", ts.URL+"/api/auth/login", bytes.NewBuffer(loginBody)) + loginReqHTTP.Header.Set("Content-Type", "application/json") + httpClient := &http.Client{} + loginResp, err := httpClient.Do(loginReqHTTP) + require.NoError(t, err) + defer loginResp.Body.Close() + var loginResult map[string]interface{} + json.NewDecoder(loginResp.Body).Decode(&loginResult) + validToken := loginResult["access_token"].(string) + // First create a library libReq := map[string]interface{}{ - "name": "Test Library", + "name": uniqueName, "description": "A test library for media items", "type": "ebooks", } @@ -561,10 +581,9 @@ func createTestMediaItemID(t *testing.T, ts *httptest.Server, token string) stri req, _ := http.NewRequest("POST", ts.URL+"/api/libraries", bytes.NewBuffer(libBody)) req.Header.Set("Content-Type", "application/json") - req.Header.Set("Authorization", "Bearer "+token) + req.Header.Set("Authorization", "Bearer "+validToken) - client := &http.Client{} - resp, err := client.Do(req) + resp, err := httpClient.Do(req) require.NoError(t, err) defer resp.Body.Close() @@ -584,9 +603,9 @@ func createTestMediaItemID(t *testing.T, ts *httptest.Server, token string) stri folderReqHTTP, _ := http.NewRequest("POST", ts.URL+"/api/libraries/"+libData+"/folders", bytes.NewBuffer(folderBody)) folderReqHTTP.Header.Set("Content-Type", "application/json") - folderReqHTTP.Header.Set("Authorization", "Bearer "+token) + folderReqHTTP.Header.Set("Authorization", "Bearer "+validToken) - folderResp, err := client.Do(folderReqHTTP) + folderResp, err := httpClient.Do(folderReqHTTP) require.NoError(t, err) defer folderResp.Body.Close() require.Equal(t, http.StatusCreated, folderResp.StatusCode, "Library folder creation is required before adding media items") @@ -604,9 +623,9 @@ func createTestMediaItemID(t *testing.T, ts *httptest.Server, token string) stri req2, _ := http.NewRequest("POST", ts.URL+"/api/media-items", bytes.NewBuffer(mediaItemBody)) req2.Header.Set("Content-Type", "application/json") - req2.Header.Set("Authorization", "Bearer "+token) + req2.Header.Set("Authorization", "Bearer "+validToken) - resp2, err := client.Do(req2) + resp2, err := httpClient.Do(req2) require.NoError(t, err) defer resp2.Body.Close() @@ -616,5 +635,13 @@ func createTestMediaItemID(t *testing.T, ts *httptest.Server, token string) stri json.NewDecoder(resp2.Body).Decode(&mediaItemResult) mediaItemID := mediaItemResult["id"].(string) + + // Cleanup: delete the library after the test + t.Cleanup(func() { + deleteReq, _ := http.NewRequest("DELETE", ts.URL+"/api/libraries/"+libData, nil) + deleteReq.Header.Set("Authorization", "Bearer "+validToken) + httpClient.Do(deleteReq) + }) + return mediaItemID }