| // Copyright 2011 Google Inc. All rights reserved. | |
| // Use of this source code is governed by the Apache 2.0 | |
| // license that can be found in the LICENSE file. | |
| //go:build !appengine | |
| // +build !appengine | |
| package user | |
| import ( | |
| "fmt" | |
| "net/http" | |
| "testing" | |
| "github.com/golang/protobuf/proto" | |
| "google.golang.org/appengine/internal" | |
| "google.golang.org/appengine/internal/aetesting" | |
| pb "google.golang.org/appengine/internal/user" | |
| ) | |
| func baseReq() *http.Request { | |
| return &http.Request{ | |
| Header: http.Header{}, | |
| } | |
| } | |
| type basicUserTest struct { | |
| nickname, email, authDomain, admin string | |
| // expectations | |
| isNil, isAdmin bool | |
| displayName string | |
| } | |
| var basicUserTests = []basicUserTest{ | |
| {"", "", "", "0", true, false, ""}, | |
| {"ken", "ken@example.com", "example.com", "0", false, false, "ken"}, | |
| {"ken", "ken@example.com", "auth_domain.com", "1", false, true, "ken@example.com"}, | |
| } | |
| func TestBasicUserAPI(t *testing.T) { | |
| for i, tc := range basicUserTests { | |
| req := baseReq() | |
| req.Header.Set("X-AppEngine-User-Nickname", tc.nickname) | |
| req.Header.Set("X-AppEngine-User-Email", tc.email) | |
| req.Header.Set("X-AppEngine-Auth-Domain", tc.authDomain) | |
| req.Header.Set("X-AppEngine-User-Is-Admin", tc.admin) | |
| c := internal.ContextForTesting(req) | |
| if ga := IsAdmin(c); ga != tc.isAdmin { | |
| t.Errorf("test %d: expected IsAdmin(c) = %v, got %v", i, tc.isAdmin, ga) | |
| } | |
| u := Current(c) | |
| if tc.isNil { | |
| if u != nil { | |
| t.Errorf("test %d: expected u == nil, got %+v", i, u) | |
| } | |
| continue | |
| } | |
| if u == nil { | |
| t.Errorf("test %d: expected u != nil, got nil", i) | |
| continue | |
| } | |
| if u.Email != tc.email { | |
| t.Errorf("test %d: expected u.Email = %q, got %q", i, tc.email, u.Email) | |
| } | |
| if gs := u.String(); gs != tc.displayName { | |
| t.Errorf("test %d: expected u.String() = %q, got %q", i, tc.displayName, gs) | |
| } | |
| if u.Admin != tc.isAdmin { | |
| t.Errorf("test %d: expected u.Admin = %v, got %v", i, tc.isAdmin, u.Admin) | |
| } | |
| } | |
| } | |
| func TestLoginURL(t *testing.T) { | |
| expectedQuery := &pb.CreateLoginURLRequest{ | |
| DestinationUrl: proto.String("/destination"), | |
| } | |
| const expectedDest = "/redir/dest" | |
| c := aetesting.FakeSingleContext(t, "user", "CreateLoginURL", func(req *pb.CreateLoginURLRequest, res *pb.CreateLoginURLResponse) error { | |
| if !proto.Equal(req, expectedQuery) { | |
| return fmt.Errorf("got %v, want %v", req, expectedQuery) | |
| } | |
| res.LoginUrl = proto.String(expectedDest) | |
| return nil | |
| }) | |
| url, err := LoginURL(c, "/destination") | |
| if err != nil { | |
| t.Fatalf("LoginURL failed: %v", err) | |
| } | |
| if url != expectedDest { | |
| t.Errorf("got %v, want %v", url, expectedDest) | |
| } | |
| } | |
| // TODO(dsymonds): Add test for LogoutURL. |