Initial commit
Go CI / build (push) Failing after 2m42s

feat: create basic server to manage google oauth, account, sessions, places, attributes and ratings.
This commit is contained in:
2025-09-19 02:43:04 -07:00
commit f1909da1ad
26 changed files with 2619 additions and 0 deletions
+98
View File
@@ -0,0 +1,98 @@
package test
import (
"encoding/json"
"net/http"
"testing"
"git.pengzhan.dev/noteplace-server/internal/models"
"github.com/stretchr/testify/assert"
"go.uber.org/zap"
)
func TestPlacesAPI(t *testing.T) {
logger, _ := zap.NewDevelopment()
zap.ReplaceGlobals(logger)
router, s := setupTestRouter(t)
adminSessionID := createTestUser(t, s, adminUser)
user1SessionID := createTestUser(t, s, regularUser1)
t.Run("Admin can create a place", func(t *testing.T) {
newPlace := models.Place{
Name: "Admin Created Place",
Category: "Restaurant",
Address: models.Address{
Street: "123 Admin St",
City: "Adminville",
},
}
w := performRequest(router, "POST", "/api/places", newPlace, adminSessionID)
assert.Equal(t, http.StatusCreated, w.Code)
var createdPlace models.Place
err := json.Unmarshal(w.Body.Bytes(), &createdPlace)
assert.NoError(t, err)
assert.NotEmpty(t, createdPlace.ID)
assert.Equal(t, newPlace.Name, createdPlace.Name)
// Verify it's in the store
foundPlace, found := s.GetPlaceByID(createdPlace.ID)
assert.True(t, found)
assert.Equal(t, createdPlace.Name, foundPlace.Name)
})
t.Run("Regular user cannot create a place", func(t *testing.T) {
newPlace := models.Place{
Name: "User Created Place",
Category: "Cafe",
Address: models.Address{
Street: "456 User Ave",
City: "Userton",
},
}
w := performRequest(router, "POST", "/api/places", newPlace, user1SessionID)
assert.Equal(t, http.StatusUnauthorized, w.Code) // Expect 401 as per current API implementation
})
t.Run("Get all places", func(t *testing.T) {
// Create a few places directly in the store for testing retrieval
place1 := models.Place{ID: "place-1", Name: "Place One", Category: "Bar"}
place2 := models.Place{ID: "place-2", Name: "Place Two", Category: "Park"}
_ = s.CreatePlace(place1)
_ = s.CreatePlace(place2)
w := performRequest(router, "GET", "/api/places", nil, "") // No auth needed for GET
assert.Equal(t, http.StatusOK, w.Code)
var placesMap map[string]models.Place
err := json.Unmarshal(w.Body.Bytes(), &placesMap)
assert.NoError(t, err)
var places []models.Place
for _, p := range placesMap {
places = append(places, p)
}
assert.Len(t, places, 3) // Includes the one created by admin earlier
assert.Contains(t, places, place1)
assert.Contains(t, places, place2)
})
t.Run("Get place by ID", func(t *testing.T) {
place3 := models.Place{ID: "place-3", Name: "Specific Place", Category: "Museum"}
_ = s.CreatePlace(place3)
w := performRequest(router, "GET", "/api/places/place-3", nil, "")
assert.Equal(t, http.StatusOK, w.Code)
var foundPlace models.Place
err := json.Unmarshal(w.Body.Bytes(), &foundPlace)
assert.NoError(t, err)
assert.Equal(t, place3.Name, foundPlace.Name)
w = performRequest(router, "GET", "/api/places/non-existent", nil, "")
assert.Equal(t, http.StatusNotFound, w.Code)
})
}