public async Task RegiterAndConfirmEmail_Success()
        {
            var client = await Utilities.GetClientWithCsrfAsync();

            var email = Utilities.UniqueEmail();
            var form  = new FormUrlEncodedContent(new[]
            {
                new KeyValuePair <string, string>("email", email)
            });
            var result = await client.PostAsync("api/account/register", form);

            result.EnsureSuccessStatusCode();
            Assert.IsNotNull(TestEmailSender.Emails[email]);
            GetGuidAndToken(TestEmailSender.Emails[email], out var guid, out var token);
            var form2 = Form(new
            {
                guid,
                token,
                username = Utilities.UniqueUserName(),
                password = "******"
            });
            var result2 = await client.PostAsync("api/account/confirmemail", form2);

            Assert.AreEqual(HttpStatusCode.OK, result2.StatusCode);

            var result3 = await client.GetAsync("api/account/current");

            result3.EnsureSuccessStatusCode();
            var json = JObject.Parse(await result3.Content.ReadAsStringAsync());
            // Assert.AreEqual(email, json["email"]);
        }
        public async Task Register_EmailConflict()
        {
            var client = await Utilities.GetClientWithCsrfAsync();

            // get a client before getting a service
            var usermanager = Utilities.GetService <UserManager <AppUser> >();
            var mockid      = Guid.NewGuid().ToString();
            var mockemail   = Utilities.UniqueEmail();
            await usermanager.CreateAsync(new AppUser()
            {
                Id       = mockid,
                UserName = mockid.Replace('-', '_'),
                Email    = mockemail
            });

            Assert.IsNotNull(await usermanager.FindByIdAsync(mockid));

            var form = new FormUrlEncodedContent(new[]
            {
                new KeyValuePair <string, string>("email", mockemail)
            });
            var result = await client.PostAsync("api/account/register", form);

            Assert.AreEqual(HttpStatusCode.Unauthorized, result.StatusCode);
        }
        public async Task ConfirmEmail_BadGuid()
        {
            var client = await Utilities.GetClientWithCsrfAsync();

            var email = Utilities.UniqueEmail();
            var form  = new FormUrlEncodedContent(new[]
            {
                new KeyValuePair <string, string>("email", email)
            });
            var result = await client.PostAsync("api/account/register", form);

            result.EnsureSuccessStatusCode();

            Assert.IsNotNull(TestEmailSender.Emails[email]);
            GetGuidAndToken(TestEmailSender.Emails[email], out _, out var token);

            var form2 = Form(new
            {
                guid = "badguid",
                token,
                username = Utilities.UniqueUserName(),
                password = "******"
            });

            var result2 = await client.PostAsync("api/account/confirmemail", form2);

            Assert.AreEqual(HttpStatusCode.Unauthorized, result2.StatusCode);
            Assert.IsTrue(string.IsNullOrEmpty(await result2.Content.ReadAsStringAsync()));
        }
        public async Task Init()
        {
            await Utilities.GetClientWithCsrfAsync();

            var context = Utilities.GetService <AppDbContext>();

            context.Users.RemoveRange(context.Users);
            await context.SaveChangesAsync();
        }
        public async Task ShouldReturnPong()
        {
            var client = await Utilities.GetClientWithCsrfAsync();

            var result = await client.PostAsync("api/ping", new StringContent(""));

            result.EnsureSuccessStatusCode();

            Assert.AreEqual("pong", await result.Content.ReadAsStringAsync());
        }
        public async Task Register_BadEmails(string bademail)
        {
            var client = await Utilities.GetClientWithCsrfAsync();

            var form = new FormUrlEncodedContent(new[]
            {
                new KeyValuePair <string, string>("email", bademail)
            });
            var result = await client.PostAsync("api/account/register", form);

            Assert.AreEqual(HttpStatusCode.Unauthorized, result.StatusCode);
        }
        public async Task Register_EmailSent()
        {
            var client = await Utilities.GetClientWithCsrfAsync();

            var email = Utilities.UniqueEmail();
            var form  = new FormUrlEncodedContent(new[]
            {
                new KeyValuePair <string, string>("email", email)
            });
            var result = await client.PostAsync("api/account/register", form);

            result.EnsureSuccessStatusCode();

            Assert.IsNotNull(TestEmailSender.Emails[email]);
        }
        public async Task ConfirmEmail_UserNameConflict()
        {
            var client = await Utilities.GetClientWithCsrfAsync();

            var email = Utilities.UniqueEmail();
            var form  = new FormUrlEncodedContent(new[]
            {
                new KeyValuePair <string, string>("email", email)
            });
            var result = await client.PostAsync("api/account/register", form);

            result.EnsureSuccessStatusCode();

            Assert.IsNotNull(TestEmailSender.Emails[email]);

            var usermanager  = Utilities.GetService <UserManager <AppUser> >();
            var mockid       = Guid.NewGuid().ToString();
            var mockemail    = Utilities.UniqueEmail();
            var mockusername = Utilities.UniqueUserName();
            await usermanager.CreateAsync(new AppUser()
            {
                Id       = mockid,
                UserName = mockusername,
                Email    = mockemail
            });

            Assert.IsNotNull(await usermanager.FindByIdAsync(mockid));
            GetGuidAndToken(TestEmailSender.Emails[email], out var guid, out var token);

            var form2 = Form(new
            {
                guid,
                token,
                username = mockusername,
                password = "******"
            });

            var result2 = await client.PostAsync("api/account/confirmemail", form2);

            Assert.AreEqual(HttpStatusCode.Unauthorized, result2.StatusCode);
            // Assert.AreEqual("DuplicateUserName", await result2.Content.ReadAsStringAsync());
        }