Exemple #1
0
        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);
        }
Exemple #4
0
        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>();
 }
Exemple #6
0
        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> >();
 }