async void should_import_new_user_and_signin_from_external_idp() { var userId = StringUtility.Random(5); var name = StringUtility.Random(); var emailAddress = $"{StringUtility.Random(5)}@someplace.com"; MockExternalSignin(false, out var httpContext); var importedPrincipal = await _app.GetService <ExternalSigninManager>() .TransformToDiscussionUser(httpContext, ComposeJwtClaims(userId, name, emailAddress, Guid.NewGuid().ToString("D"))); var userRepo = _app.GetService <IRepository <User> >(); var importedUser = userRepo.All().FirstOrDefault(user => user.OpenId == userId && user.OpenIdProvider == "external"); VerifyTransformedUser(importedUser, importedPrincipal, name, emailAddress, true); }
public async Task should_reject_post_request_without_valid_anti_forgery_token() { // arrange var username = StringUtility.Random(); var password = "******"; var tokens = _app.GetAntiForgeryTokens(); // Act var request = _app.Server.CreateRequest("/register") .WithForm(new Dictionary <string, string>() { { "UserName", username }, { "Password", password }, { "__RequestVerificationToken", "some invalid token" } }) .WithCookie(tokens.Cookie); var response = await request.PostAsync(); // assert response.StatusCode.ShouldEqual(HttpStatusCode.BadRequest); var isRegistered = _app.GetService <IRepository <User> >().All().Any(u => u.UserName == username); isRegistered.ShouldEqual(false); }
public async Task should_update_password() { var user = _theApp.MockUser(); var viewModel = new ChangePasswordViewModel { OldPassword = "******", NewPassword = "******" }; var userCtrl = _theApp.CreateController <UserController>(); var result = await userCtrl.DoChangePassword(viewModel); _theApp.ReloadEntity(user); ShouldBeRedirectResult(result, "ChangePassword"); var passwordChanged = await _theApp.GetService <UserManager <User> >().CheckPasswordAsync(user, viewModel.NewPassword); Assert.True(passwordChanged); }
public void should_be_able_to_register_new_user() { var username = StringUtility.Random(); var password = "******"; _app.Path("/register") .Post() .WithForm(new { UserName = username, Password = password }) .ShouldSuccessWithRedirect(_app.NoUser()); var isRegistered = _app.GetService <IRepository <User> >().All().Any(u => u.UserName == username); isRegistered.ShouldEqual(true); }
public CommonControllerSpecs(TestDiscussionWebApp app) { _app = app.Reset(); _fileRepo = _app.GetService <IRepository <FileRecord> >(); _fs = _app.GetService <IFileSystem>(); }
public async Task should_create_topic_and_import_chat_session() { var mockUser = _app.MockUser(); var chatyApiService = new Mock <ChatyApiServiceMock>(); const string wxId = "wx_account_id"; const string chatId = "1234214"; const string authorWxId = "Wx_879LKJGSJJ"; chatyApiService .Setup(chaty => chaty.GetMessageList(wxId)) .Returns(Task.FromResult(new List <ChatyMessageListItemViewModel>() { new ChatyMessageListItemViewModel() { ChatId = chatId, MessageSummaryList = new [] { "导入的消息概要1" } } })); chatyApiService .Setup(chaty => chaty.GetMessagesInChat(wxId, chatId)) .Returns(Task.FromResult(new [] { new ChatMessage { SourceName = "某人", SourceTime = "2018/12/02 12:00:09", SourceTimestamp = 1547558937, SourceWxId = authorWxId, Content = new TextChatMessageContent() { Text = "导入的消息概要1 微信消息正文" } } })); var wxAccountRepo = _app.GetService <IRepository <WeChatAccount> >(); wxAccountRepo.Save(new WeChatAccount() { WxId = wxId, UserId = mockUser.Id }); var topicController = CreateControllerWithChatyApiService(chatyApiService.Object); var model = new ChatHistoryImportingModel { Title = "first topic imported form wechat", Content = "**This is the content of this markdown**\r\n* markdown content is greate*", ChatId = chatId, Type = TopicType.Job }; var actionResult = await topicController.ImportFromWeChat(model); var topicCreated = VerifyTopicCreated(actionResult, model); Assert.NotNull(topicCreated.LastRepliedAt); topicCreated.LastRepliedAt.Value.ToString("dddd/MM/dd hh:mm:ss").ShouldNotEqual("2018/12/02 12:00:09"); var author = wxAccountRepo.All().Single(wx => wx.WxId == authorWxId); topicCreated.LastRepliedBy.ShouldBeNull(); topicCreated.LastRepliedByWeChat.ShouldEqual(author.Id); topicCreated.ReplyCount.ShouldEqual(1); topicCreated.ViewCount.ShouldEqual(0); var importedReply = _app.GetService <IRepository <Reply> >().All().Where(reply => reply.TopicId == topicCreated.Id).ToList(); Assert.NotNull(importedReply[0].CreatedByWeChat); importedReply[0].CreatedByWeChat.Value.ShouldEqual(author.Id); importedReply[0].CreatedBy.ShouldBeNull(); importedReply[0].Content.ShouldEqual("导入的消息概要1 微信消息正文"); importedReply.Count.ShouldEqual(1); var importedLog = _app.GetLogs().FirstOrDefault(log => log.Message.Contains("导入对话成功")); Assert.NotNull(importedLog); Assert.Contains($"ChatId = {chatId}", importedLog.Message); Assert.Contains($"TopicId = {topicCreated.Id}", importedLog.Message); Assert.Contains($"ReplyCount = {importedReply.Count}", importedLog.Message); }
public AccountControllerSpecs(TestDiscussionWebApp app) { _app = app.Reset(); _userRepo = _app.GetService <IRepository <User> >(); }