feat(api): add DELETE /api/profile with Garmin client/tokenstore teardown
This commit is contained in:
@@ -153,3 +153,31 @@ func TestIsolation_RequireProvisionedUser_BlocksDataRoutesUntilSetup(t *testing.
|
||||
t.Fatalf("status = %d, want 403 (no profile provisioned yet), body = %s", rec.Code, rec.Body.String())
|
||||
}
|
||||
}
|
||||
|
||||
// TestIsolation_DeleteProfileOnlyDeletesOwnAccount confirms one user
|
||||
// deleting their own profile never touches another user's account, even
|
||||
// though DeleteUser is keyed purely by the session-resolved userID.
|
||||
func TestIsolation_DeleteProfileOnlyDeletesOwnAccount(t *testing.T) {
|
||||
s, db, userA := newTestServer(t) // provisions "test-user" (userA)
|
||||
if _, err := db.ProvisionUser(newCtx(), "user-b", "B"); err != nil {
|
||||
t.Fatalf("ProvisionUser(b): %v", err)
|
||||
}
|
||||
|
||||
router := s.Router()
|
||||
rec := doJSONAs(t, router, "user-b", http.MethodDelete, "/api/profile", nil)
|
||||
if rec.Code != http.StatusNoContent {
|
||||
t.Fatalf("userB delete status = %d, body = %s", rec.Code, rec.Body.String())
|
||||
}
|
||||
|
||||
if _, found, err := db.GetUserBySub(newCtx(), "user-b"); err != nil || found {
|
||||
t.Fatalf("expected userB gone after their own delete, found=%v err=%v", found, err)
|
||||
}
|
||||
u, found, err := db.GetUserBySub(newCtx(), "test-user")
|
||||
if err != nil || !found || u.ID != userA {
|
||||
t.Fatalf("expected userA to survive userB's deletion, found=%v err=%v id=%d want=%d", found, err, u.ID, userA)
|
||||
}
|
||||
rec = doJSON(t, router, http.MethodGet, "/api/profile", nil) // as userA
|
||||
if rec.Code != http.StatusOK {
|
||||
t.Fatalf("userA profile status after userB deleted themselves = %d, body = %s", rec.Code, rec.Body.String())
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user