public void Serialize()
        {
            var userProviders = new List <UserProvider>
            {
                new UserProvider()
                {
                    Uid        = "google.uid",
                    ProviderId = "google.com",
                },
            };

            var customClaims = new Dictionary <string, object>()
            {
                { "admin", true },
            };

            var userMetadata = new UserMetadata(1, 2, null);
            var passwordHash = Encoding.ASCII.GetBytes("secret");
            var passwordSalt = Encoding.ASCII.GetBytes("salt");

            var importUserRecordArgs = new ImportUserRecordArgs()
            {
                Uid           = "123",
                Email         = "*****@*****.**",
                EmailVerified = true,
                DisplayName   = "Example",
                PhotoUrl      = "http://example.com/photo",
                PhoneNumber   = "+11234567890",
                Disabled      = false,
                UserMetadata  = userMetadata,
                PasswordHash  = passwordHash,
                PasswordSalt  = passwordSalt,
                CustomClaims  = customClaims,
                UserProviders = userProviders,
            };

            var expected = new Dictionary <string, object>()
            {
                { "createdAt", userMetadata.CreationTimestamp },
                { "customAttributes", JsonConvert.SerializeObject(customClaims) },
                { "disabled", false },
                { "displayName", "Example" },
                { "email", "*****@*****.**" },
                { "emailVerified", true },
                { "lastLoginAt", userMetadata.LastSignInTimestamp },
                { "passwordHash", JwtUtils.UrlSafeBase64Encode(passwordHash) },
                { "salt", JwtUtils.UrlSafeBase64Encode(passwordSalt) },
                { "phoneNumber", "+11234567890" },
                { "photoUrl", "http://example.com/photo" },
                { "providerUserInfo", userProviders.Select(userProvider => userProvider.ToRequest()) },
                { "localId", "123" },
            };

            Assert.Equal(
                JsonConvert.SerializeObject(expected),
                JsonConvert.SerializeObject(importUserRecordArgs.ToRequest()));
        }
        public void MissingUid()
        {
            var userRecordArgsWithMissingUid = new ImportUserRecordArgs()
            {
            };

            Assert.Throws <ArgumentNullException>(
                () => userRecordArgsWithMissingUid.ToRequest());
        }
        public void InvalidPhone()
        {
            var userProviderWithMissingUid = new ImportUserRecordArgs()
            {
                Uid         = "123",
                PhoneNumber = "11234567890",
            };

            Assert.Throws <ArgumentException>(
                () => userProviderWithMissingUid.ToRequest());
        }
        public void InvalidEmail()
        {
            var userRecordArgsInvalidEmail = new ImportUserRecordArgs()
            {
                Uid   = "123",
                Email = "invalidemail",
            };

            Assert.Throws <ArgumentException>(
                () => userRecordArgsInvalidEmail.ToRequest());
        }
        public void RequiredOnly()
        {
            var userRecordMinimal = new ImportUserRecordArgs()
            {
                Uid = "123",
            };

            var expected = new Dictionary <string, object>()
            {
                { "localId", "123" },
            };

            Assert.Equal(
                NewtonsoftJsonSerializer.Instance.Serialize(expected),
                NewtonsoftJsonSerializer.Instance.Serialize(userRecordMinimal.ToRequest()));
        }
 public void ReservedCustomClaims()
 {
     foreach (var reservedKey in FirebaseTokenFactory.ReservedClaims)
     {
         var userProviderWithReservedClaimKey = new ImportUserRecordArgs()
         {
             Uid          = "123",
             CustomClaims = new Dictionary <string, object>()
             {
                 { reservedKey, "abc" },
             },
         };
         Assert.Throws <ArgumentException>(
             () => userProviderWithReservedClaimKey.ToRequest());
     }
 }