@@ -141,22 +141,96 @@ func TestGetUserByPhoneNumber(t *testing.T) {
141141 }
142142}
143143
144+ func TestGetUserByProviderIDNotFound (t * testing.T ) {
145+ mockUsers := []byte (`{ "users": [] }` )
146+ s := echoServer (mockUsers , t )
147+ defer s .Close ()
148+
149+ userRecord , err := s .Client .GetUserByProviderID (context .Background (), "google.com" , "google_uid1" )
150+ want := "cannot find user from providerID: { google.com, google_uid1 }"
151+ if userRecord != nil || err == nil || err .Error () != want || ! IsUserNotFound (err ) {
152+ t .Errorf ("GetUserByProviderID() = (%v, %q); want = (nil, %q)" , userRecord , err , want )
153+ }
154+ }
155+
156+ func TestGetUserByProviderId (t * testing.T ) {
157+ cases := []struct {
158+ providerID string
159+ providerUID string
160+ want string
161+ }{
162+ {
163+ "google.com" ,
164+ "google_uid1" ,
165+ `{"federatedUserId":[{"providerId":"google.com","rawId":"google_uid1"}]}` ,
166+ }, {
167+ "phone" ,
168+ "+15555550001" ,
169+ `{"phoneNumber":["+15555550001"]}` ,
170+ }, {
171+ "email" ,
172+ "user@example.com" ,
173+ `{"email":["user@example.com"]}` ,
174+ },
175+ }
176+
177+ // The resulting user isn't parsed, so it just needs to exist (even if it's empty).
178+ mockUsers := []byte (`{ "users": [{}] }` )
179+ s := echoServer (mockUsers , t )
180+ defer s .Close ()
181+
182+ for _ , tc := range cases {
183+ t .Run (tc .providerID + ":" + tc .providerUID , func (t * testing.T ) {
184+
185+ _ , err := s .Client .GetUserByProviderID (context .Background (), tc .providerID , tc .providerUID )
186+ if err != nil {
187+ t .Fatalf ("GetUserByProviderID() = %q" , err )
188+ }
189+
190+ got := string (s .Rbody )
191+ if got != tc .want {
192+ t .Errorf ("GetUserByProviderID() Req = %v; want = %v" , got , tc .want )
193+ }
194+
195+ wantPath := "/projects/mock-project-id/accounts:lookup"
196+ if s .Req [0 ].RequestURI != wantPath {
197+ t .Errorf ("GetUserByProviderID() URL = %q; want = %q" , s .Req [0 ].RequestURI , wantPath )
198+ }
199+ })
200+ }
201+ }
202+
144203func TestInvalidGetUser (t * testing.T ) {
145204 client := & Client {
146205 baseClient : & baseClient {},
147206 }
207+
148208 user , err := client .GetUser (context .Background (), "" )
149209 if user != nil || err == nil {
150210 t .Errorf ("GetUser('') = (%v, %v); want = (nil, error)" , user , err )
151211 }
212+
152213 user , err = client .GetUserByEmail (context .Background (), "" )
153214 if user != nil || err == nil {
154215 t .Errorf ("GetUserByEmail('') = (%v, %v); want = (nil, error)" , user , err )
155216 }
217+
156218 user , err = client .GetUserByPhoneNumber (context .Background (), "" )
157219 if user != nil || err == nil {
158220 t .Errorf ("GetUserPhoneNumber('') = (%v, %v); want = (nil, error)" , user , err )
159221 }
222+
223+ userRecord , err := client .GetUserByProviderID (context .Background (), "" , "google_uid1" )
224+ want := "providerID must be a non-empty string"
225+ if userRecord != nil || err == nil || err .Error () != want {
226+ t .Errorf ("GetUserByProviderID() = (%v, %q); want = (nil, %q)" , userRecord , err , want )
227+ }
228+
229+ userRecord , err = client .GetUserByProviderID (context .Background (), "google.com" , "" )
230+ want = "providerUID must be a non-empty string"
231+ if userRecord != nil || err == nil || err .Error () != want {
232+ t .Errorf ("GetUserByProviderID() = (%v, %q); want = (nil, %q)" , userRecord , err , want )
233+ }
160234}
161235
162236// Checks to see if the users list contain the given uids. Order is ignored.
0 commit comments