func (s *S) TestReserveUserAppForwardAppNotPointer(c *gocheck.C) { user := auth.User{ Email: "*****@*****.**", Quota: quota.Quota{Limit: 1}, } err := user.Create() c.Assert(err, gocheck.IsNil) defer s.conn.Users().Remove(bson.M{"email": user.Email}) app := App{ Name: "clap", Platform: "django", } expected := map[string]string{"user": user.Email, "app": app.Name} previous, err := reserveUserApp.Forward(action.FWContext{Params: []interface{}{app, user}}) c.Assert(err, gocheck.IsNil) c.Assert(previous, gocheck.DeepEquals, expected) err = auth.ReserveApp(&user) _, ok := err.(*quota.QuotaExceededError) c.Assert(ok, gocheck.Equals, true) err = auth.ReleaseApp(&user) c.Assert(err, gocheck.IsNil) err = auth.ReserveApp(&user) c.Assert(err, gocheck.IsNil) }
func (s *S) TestReserveUserAppBackward(c *gocheck.C) { user := auth.User{ Email: "*****@*****.**", Quota: quota.Quota{Limit: 1, InUse: 1}, } err := user.Create() c.Assert(err, gocheck.IsNil) defer s.conn.Users().Remove(bson.M{"email": user.Email}) app := App{ Name: "clap", Platform: "django", } ctx := action.BWContext{ FWResult: map[string]string{ "app": app.Name, "user": user.Email, }, } reserveUserApp.Backward(ctx) err = auth.ReserveApp(&user) c.Assert(err, gocheck.IsNil) }
return nil, errors.New("First parameter must be *App.") } var user auth.User switch ctx.Params[1].(type) { case auth.User: user = ctx.Params[1].(auth.User) case *auth.User: user = *ctx.Params[1].(*auth.User) default: return nil, errors.New("Third parameter must be auth.User or *auth.User.") } usr, err := auth.GetUserByEmail(user.Email) if err != nil { return nil, err } if err := auth.ReserveApp(usr); err != nil { return nil, err } return map[string]string{"app": app.Name, "user": user.Email}, nil }, Backward: func(ctx action.BWContext) { m := ctx.FWResult.(map[string]string) if user, err := auth.GetUserByEmail(m["user"]); err == nil { auth.ReleaseApp(user) } }, MinParams: 2, } // insertApp is an action that inserts an app in the database in Forward and // removes it in the Backward.