appengine未保存

For some reason nothing gets saved when the test code below is run. I have other api methods that when run (not through tests, this is just the first test) do save.

When I check the database stats via localhost:8000, it can be seen that nothing is being inserted.

Update: After copying and pasting the code below and wrapping it is GET request handler with some hardcoded data it does save to the database. So this seems like an issue with the testing aetest.Context that is used. I have added the code for the NewTestHandler helper code.

Method to create the context within the tests

func NewTestHandler(handlerFunc func(appengine.Context, http.ResponseWriter, *http.Request)) http.HandlerFunc {
    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        c, _ := aetest.NewContext(nil)
        handlerFunc(c, w, r)
    })
}

Error (update: the key that is generated returns 0 when calling .IntId())

// happens in the .Get() error handling
--- err datastore: internal error: server returned the wrong number of entities

Model

package app

import "time"

type League struct {
    Name      string `json:"name"`
    Location  string `json:"location"`
    CreatedAt time.Time
}

Code

func (api *LeagueApi) Create(c appengine.Context, w http.ResponseWriter, r *http.Request) {

    // data
    var league League
    json.NewDecoder(r.Body).Decode(&league)
    defer r.Body.Close()

    // save to db
    key := datastore.NewIncompleteKey(c, "leagues", nil)
    if _, err := datastore.Put(c, key, &league); err != nil {
        http.Error(w, err.Error(), http.StatusInternalServerError)
        return
    }

    var leagueCheck League
    if err := datastore.Get(c, key, &leagueCheck); err != nil {
        log.Println("---  err", err)
        http.Error(w, err.Error(), http.StatusInternalServerError)
        return
    }

    // json response
    if err := json.NewEncoder(w).Encode(league); err != nil {
        http.Error(w, err.Error(), http.StatusInternalServerError)
    }
}

Test

func Test_LeagueReturnedOnCreate(t *testing.T) {

    league := League{Name: "foobar"}
    data, _ := json.Marshal(league)
    reader := bytes.NewReader(data)

    // setup request and writer
    r, _ := http.NewRequest("POST", "/leagues", reader)
    w := httptest.NewRecorder()

    // make request
    api := LeagueApi{}
    handler := tux.NewTestHandler(api.Create)
    handler.ServeHTTP(w, r)

    // extract api response
    var leagueCheck League
    json.NewDecoder(w.Body).Decode(&leagueCheck)

    if leagueCheck.Name != "foobar" {
        t.Error("should return the league")
    }

    // ensure the league is in the db
}