Exemplo n.º 1
0
 public static LoggedUserModel RegisterTestValidUser(InMemoryHttpServer httpServer, UserModel testUser)
 {
     var response = httpServer.Post("api/users/register", testUser);
     var contentString = response.Content.ReadAsStringAsync().Result;
     var userModel = JsonConvert.DeserializeObject<LoggedUserModel>(contentString);
     return userModel;
 }
        public void Register_DuplicatedUsers_ShouldNotSaveToDatabase()
        {
            var testUser = new UserModel()
            {
                Username = "******",
                DisplayName = "VALIDNICK",
                AuthCode = new string('b', 40)
            };

            var testUserDuplicate = new UserModel()
            {
                Username = "******",
                DisplayName = "VALIDNICK",
                AuthCode = new string('b', 40)
            };

            var model = RegisterUser.RegisterTestUser(httpServer, testUser);
            var modelDuplicate = RegisterUser.RegisterTestUser(httpServer, testUserDuplicate);

            Assert.IsNotNull(model.DisplayName);
            Assert.IsNotNull(model.SessionKey);

            Assert.IsNull(modelDuplicate.DisplayName); // should be null
            Assert.IsNull(modelDuplicate.SessionKey);
        }
        public void CreatePost_WhenTextIsNotValid_ShouldNotSaveToDatabase()
        {
            var testUser = new UserModel()
            {
                Username = "******",
                DisplayName = "VALIDNICK",
                AuthCode = new string('b', 40)
            };

            var testNewPost = new PostModel()
            {
                Title = "VALIDTITLE", // MISSING TEXT
                Tags = new string[] { "FIRST", "SECOND" }
            };

            LoggedUserModel userModel = RegisterUser.RegisterTestUser(httpServer, testUser);

            var response = httpServer.Post("api/posts?sessionKey=" + userModel.SessionKey, testNewPost);

            var contentString = response.Content.ReadAsStringAsync().Result;
            var postModel = JsonConvert.DeserializeObject<PostModel>(contentString);

            Assert.AreEqual(HttpStatusCode.BadRequest, response.StatusCode);
            Assert.IsNull(postModel.Title);
        }
        public void CreatePost_WithValidData_ShouldSaveToDatabase()
        {
            var testUser = new UserModel()
            {
                Username = "******",
                DisplayName = "VALIDNICK",
                AuthCode = new string('b', 40)
            };
            var userModel = Helpers.RegisterTestValidUser(httpServer, testUser);

            var testPost = new PostModel()
            {
                Title = "NEW POST",
                Tags = new List<string>()
                {
                    "post"
                },
                Text = "this is just a test post"
            };

            var response = httpServer.Post("api/posts?sessionKey=" + userModel.SessionKey, testPost);
            Assert.AreEqual(HttpStatusCode.Created, response.StatusCode);
            Assert.IsNotNull(response.Content);

            var contentString = response.Content.ReadAsStringAsync().Result;
            var postModel = JsonConvert.DeserializeObject<ResponsePostModel>(contentString);

            Assert.AreEqual(postModel.Title, testPost.Title);
            Assert.IsTrue(postModel.Id > 0);
        }
 public void Register_WhenUserNameIsNOTValid_ShouldThrowException()
 {
     var testUser = new UserModel()
     {
         Username = "******",
         DisplayName = "VALIDNICK",
         AuthCode = new string('b', 40)
     };
     var response = httpServer.Post("api/users/register", testUser);
     Assert.AreEqual(HttpStatusCode.BadRequest, response.StatusCode);
 }
 public void Register_WhenUserModelValid_ShouldSaveToDatabase()
 {
     var testUser = new UserModel()
     {
         Username = "******",
         DisplayName = "VALIDNICK",
         AuthCode = new string('b', 40)
     };
     var model = Helpers.RegisterTestValidUser(httpServer, testUser);
     Assert.AreEqual(testUser.DisplayName, model.DisplayName);
     Assert.IsNotNull(model.SessionKey);
 }
Exemplo n.º 7
0
        public HttpResponseMessage PostRegisterUser(UserModel model)
        {
            var responseMsg = this.PerformOperationAndHandleExceptions(() =>
            {
                var context = new BloggingSystemContext();
                using (context)
                {
                    this.ValidateUsername(model.Username);
                    this.ValidateDisplayname(model.Displayname);
                    this.ValidateAuthCode(model.AuthCode);
                    var usernameToLower = model.Username.ToLower();
                    var displaynameToLower = model.Displayname.ToLower();
                    var user = context.Users.FirstOrDefault(usr => 
                        usr.Username == usernameToLower ||
                        usr.Displayname.ToLower() == displaynameToLower);

                    if (user != null)
                    {
                        throw new InvalidOperationException("User exists");
                    }

                    user = new User()
                    {
                        Username = usernameToLower,
                        Displayname = model.Displayname,
                        AuthCode = model.AuthCode
                    };

                    context.Users.Add(user);
                    context.SaveChanges();

                    user.SessionKey = this.GenerateSessionKey(user.Id);
                    context.SaveChanges();

                    var loggedModel = new LoggedUserModel()
                    {
                        Displayname = user.Displayname,
                        SessionKey = user.SessionKey
                    };

                    var response =
                        this.Request.CreateResponse(HttpStatusCode.Created,
                            loggedModel);
                    return response;
                }
            });

            return responseMsg;
        }
        public void Logout_When_Valid_SessionKey()
        {
            var testUser = new UserModel()
            {
                Username = "******",
                DisplayName = "VALIDNICK",
                AuthCode = new string('b', 40)
            };

            var userModel = RegisterUser.RegisterTestUser(httpServer, testUser);

            var response = httpServer.Put("api/users/logout?sessionKey=" + userModel.SessionKey);

            Assert.AreEqual(HttpStatusCode.OK, response.StatusCode);
        }
        public HttpResponseMessage PostLoginUser(UserModel model)
        {
            var responseMsg = this.PerformOperationAndHandleExceptions(
                () =>
                {
                    var context = new BlogContext();
                    using (context)
                    {

                        this.ValidateUsername(model.Username);
                        this.ValidateAuthCode(model.AuthCode);

                        var usernameToLower = model.Username.ToLower();

                        var user = context.Users.FirstOrDefault(
                            usr => usr.Username == usernameToLower
                            && usr.AuthCode == model.AuthCode);

                        if (user == null)
                        {
                            throw new InvalidOperationException("Users doesn't exists");
                        }

                        string generateSessionKey = this.GenerateSessionKey(user.Id);
                        user.SessionKey = generateSessionKey;
                        context.SaveChanges();

                        var loggedModel = new LoggedUserModel()
                        {
                            DisplayName = user.DisplayName,
                            SessionKey = generateSessionKey
                        };

                        var response = this.Request.CreateResponse(HttpStatusCode.Created, loggedModel);

                        return response;
                    }
                });
            return responseMsg;
        }
        public void LeaveComment_WhenPostNotExists_ShouldNotSaveToDatabase()
        {
            var testUser = new UserModel()
            {
                Username = "******",
                DisplayName = "VALIDNICK",
                AuthCode = new string('b', 40)
            };

            var testNewPost = new PostModel()
            {
                Title = "VALIDTITLE",
                Text = "VALIDTEXT",
                Tags = new string[] { "FIRST", "SECOND" }
            };

            LoggedUserModel userModel = RegisterUser.RegisterTestUser(httpServer, testUser);

            httpServer.Post("api/posts?sessionKey=" + userModel.SessionKey, testNewPost);

            var newComment = new CommentModel()
            {
                Text = "VALIDCOMMENTTEXT"
            };

            int invalidPostId = 0;

            var response = httpServer.Put("api/posts/" + invalidPostId + "/comment?sessionKey=" + userModel.SessionKey,
                newComment);

            Assert.AreEqual(HttpStatusCode.BadRequest, response.StatusCode);
        }
        public void CreateCommentar_WithInvalideSessionKeyData_ShouldSaveToDatabase()
        {
            var testUser = new UserModel()
            {
                Username = "******",
                DisplayName = "VALIDNICK",
                AuthCode = new string('b', 40)
            };
            var userModel = Helpers.RegisterTestValidUser(httpServer, testUser);

            var testPost = new PostModel()
            {
                Title = "NEW POST created",
                Tags = new List<string>()
                {
                    "post",
                    "web",
                    "api",
                    "root",
                },
                Text = "this is just a test post"
            };

            var postResponse = httpServer.Post("api/posts?sessionKey=32543tfg", testPost);
            var postContentString = postResponse.Content.ReadAsStringAsync().Result;
            var postModel = JsonConvert.DeserializeObject<PostModel>(postContentString);

            var testComment = new CommentModel()
            {
                Text = "Abe kefi me toq post"
            };

            var commentResponse = httpServer.Put("api/posts/" + postModel.Id + "/comment?sessionKey=dsadasda", testComment);
            Assert.AreEqual(HttpStatusCode.BadRequest, commentResponse.StatusCode);
        }
        public void CreateCommentar_WithWrongPostIdData_ShouldSaveToDatabase()
        {
            var testUser = new UserModel()
            {
                Username = "******",
                DisplayName = "VALIDNICK",
                AuthCode = new string('b', 40)
            };
            var userModel = Helpers.RegisterTestValidUser(httpServer, testUser);

            var testComment = new CommentModel()
            {
                Text = "Abe kefi me toq post"
            };

            var commentResponse = httpServer.Put("api/posts/9999/comment?sessionKey=" + userModel.SessionKey, testComment);
            Assert.AreEqual(HttpStatusCode.BadRequest, commentResponse.StatusCode);
        }
        public void GetPostByTags_WithNullData_ShouldSaveToDatabase()
        {
            var testUser = new UserModel()
            {
                Username = "******",
                DisplayName = "VALIDNICK",
                AuthCode = new string('b', 40)
            };
            var userModel = Helpers.RegisterTestValidUser(httpServer, testUser);

            var testPost = new PostModel()
            {
                Title = "NEW POST created",
                Tags = new List<string>()
                {
                    "post",
                    "web",
                    "api",
                    "root",
                },
                Text = "this is just a test post"
            };

            var createResponse = httpServer.Post("api/posts?sessionKey=" + userModel.SessionKey, testPost);

            var response = httpServer.Get("api/posts?tags=&sessionKey=" + userModel.SessionKey);
            Assert.AreEqual(HttpStatusCode.OK, response.StatusCode);
            Assert.IsNotNull(response.Content);

            var contentString = response.Content.ReadAsStringAsync().Result;
            var postModel = JsonConvert.DeserializeObject<List<PostModel>>(contentString);

            Assert.IsTrue(postModel.Count == 0);
        }
        public void Register_WhenAuthCodeIsNot40Chars_ShouldNotSaveToDatabase()
        {
            var testUser = new UserModel()
            {
                Username = "******",
                DisplayName = "VALIDNICK",
                AuthCode = new string('b', 30) // SHOULD BE 40 chars
            };

            var model = RegisterUser.RegisterTestUser(httpServer, testUser);

            Assert.IsNull(model.DisplayName);
            Assert.IsNull(model.SessionKey);
        }
        public void Logout_WhenSessionKeyIsValid_ShouldSaveToDatabase()
        {
            var testUser = new UserModel()
            {
                Username = "******",
                DisplayName = "VALIDNICK",
                AuthCode = new string('b', 40)
            };
            var model = Helpers.RegisterTestValidUser(httpServer, testUser);

            var response = httpServer.Put("api/users/logout?sessionKey=" + model.SessionKey, testUser);
            Assert.AreEqual(HttpStatusCode.OK, response.StatusCode);
        }
        public void GetPostsByTags_WhenTagsAreNull()
        {
            var testUser = new UserModel()
            {
                Username = "******",
                DisplayName = "VALIDNICK",
                AuthCode = new string('b', 40)
            };

            var testNewPost = new PostModel()
            {
                Title = "VALIDTITLE",
                Text = "VALIDTEXT",
                Tags = new string[] { "FIRST", "SECOND" }
            };

            LoggedUserModel userModel = RegisterUser.RegisterTestUser(httpServer, testUser);

            httpServer.Post("api/posts?sessionKey=" + userModel.SessionKey, testNewPost);

            //sendind request with empty tags parameter
            var response = httpServer.Get("api/posts?tags=&sessionKey=" + userModel.SessionKey);

            Assert.AreEqual(HttpStatusCode.BadRequest, response.StatusCode);
        }
        public void Register_WithShortUsername_ShouldNotSaveToDatabase()
        {
            var testUser = new UserModel()
            {
                Username = "******",
                DisplayName = "VALIDNICK",
                AuthCode = new string('b', 40)
            };

            var response = httpServer.Post("api/users/register", testUser);

            Assert.AreEqual(HttpStatusCode.BadRequest, response.StatusCode);
        }
        public void CreatePost_WithNullData_ShouldSaveToDatabase()
        {
            var testUser = new UserModel()
            {
                Username = "******",
                DisplayName = "VALIDNICK",
                AuthCode = new string('b', 40)
            };
            var userModel = Helpers.RegisterTestValidUser(httpServer, testUser);

            var testPost = new PostModel();

            var response = httpServer.Post("api/posts?sessionKey=" + userModel.SessionKey, testPost);
            Assert.AreEqual(HttpStatusCode.BadRequest, response.StatusCode);
        }
        public void LeaveComment_WhenCommentModelIsValid_ShouldSaveToDatabase()
        {
            var testUser = new UserModel()
            {
                Username = "******",
                DisplayName = "VALIDNICK",
                AuthCode = new string('b', 40)
            };

            var testNewPost = new PostModel()
            {
                Title = "VALIDTITLE",
                Text = "VALIDTEXT",
                Tags = new string[] { "FIRST", "SECOND" }
            };

            LoggedUserModel userModel = RegisterUser.RegisterTestUser(httpServer, testUser);

            var postResponse = httpServer.Post("api/posts?sessionKey=" + userModel.SessionKey, testNewPost);

            var contentString = postResponse.Content.ReadAsStringAsync().Result;
            var postModel = JsonConvert.DeserializeObject<PostModel>(contentString);

            var newComment = new CommentModel()
            {
                Text = "VALIDCOMMENTTEXT"
            };

            var response = httpServer.Put("api/posts/" + postModel.Id + "/comment?sessionKey=" + userModel.SessionKey,
                newComment);

            Assert.AreEqual(HttpStatusCode.OK, response.StatusCode);
        }
        public void GetPostsByTags_WhenTagsThatAreNotInDatabase()
        {
            var testUser = new UserModel()
            {
                Username = "******",
                DisplayName = "VALIDNICK",
                AuthCode = new string('b', 40)
            };

            var testNewPost = new PostModel()
            {
                Title = "VALIDTITLE",
                Text = "VALIDTEXT",
                Tags = new string[] { "FIRST", "SECOND" }
            };

            LoggedUserModel userModel = RegisterUser.RegisterTestUser(httpServer, testUser);

            httpServer.Post("api/posts?sessionKey=" + userModel.SessionKey, testNewPost);

            var response = httpServer.Get("api/posts?tags=RANDOMTAG&sessionKey=" + userModel.SessionKey);

            var contentString = response.Content.ReadAsStringAsync().Result;
            var postModel = JsonConvert.DeserializeObject<IEnumerable<PostModel>>(contentString);

            var expectedPostsCount = 0;

            Assert.AreEqual(expectedPostsCount, postModel.Count());
        }
        public void GetPostsByTags_WhenTagsAreValid()
        {
            var testUser = new UserModel()
            {
                Username = "******",
                DisplayName = "VALIDNICK",
                AuthCode = new string('b', 40)
            };

            var testNewPost = new PostModel()
            {
                Title = "VALIDTITLE",
                Text = "VALIDTEXT",
                Tags = new string[] { "FIRST", "SECOND" }
            };

            var testNewPost1 = new PostModel()
            {
                Title = "Some title",
                Text = "Some different Text",
                Tags = new string[] { "Yo", "Exam" }
            };

            LoggedUserModel userModel = RegisterUser.RegisterTestUser(httpServer, testUser);

            httpServer.Post("api/posts?sessionKey=" + userModel.SessionKey, testNewPost);

            httpServer.Post("api/posts?sessionKey=" + userModel.SessionKey, testNewPost1);

            var response = httpServer.Get("api/posts?tags=FIRST,SECOND&sessionKey=" + userModel.SessionKey);

            var contentString = response.Content.ReadAsStringAsync().Result;
            var postModel = JsonConvert.DeserializeObject<IEnumerable<PostModel>>(contentString);

            var currentPost = postModel.FirstOrDefault();

            var expectedPostsCount = 1;
            var expectedTags = 3;

            Assert.AreEqual(expectedPostsCount, postModel.Count());
            Assert.AreEqual(expectedTags, currentPost.Tags.Count());
        }
        public void LeaveComment_WhenWrongSessionKey_ShouldNotSaveToDatabase()
        {
            var testUser = new UserModel()
            {
                Username = "******",
                DisplayName = "VALIDNICK",
                AuthCode = new string('b', 40)
            };

            var testNewPost = new PostModel()
            {
                Title = "VALIDTITLE",
                Text = "VALIDTEXT",
                Tags = new string[] { "FIRST", "SECOND" }
            };

            LoggedUserModel userModel = RegisterUser.RegisterTestUser(httpServer, testUser);

            var postResponse = httpServer.Post("api/posts?sessionKey=" + userModel.SessionKey, testNewPost);

            var contentString = postResponse.Content.ReadAsStringAsync().Result;
            var postModel = JsonConvert.DeserializeObject<PostModel>(contentString);

            var newComment = new CommentModel()
            {
                Text = "VALIDCOMMENTTEXT"
            };

            //Try to make a comment with wrong sessionKey
            string invalidSessionKey = "sdasdasdasddsaijdij2jiwjijei2jiedjisjidsa";

            var response = httpServer.Put("api/posts/" + postModel.Id + "/comment?sessionKey=" + invalidSessionKey,
                newComment);

            Assert.AreEqual(HttpStatusCode.BadRequest, response.StatusCode);
        }
        public void Register_WithNull_ShouldNotSaveToDatabase()
        {
            var testUser = new UserModel();

            var model = RegisterUser.RegisterTestUser(httpServer, testUser);

            Assert.IsNull(model.DisplayName);
            Assert.IsNull(model.SessionKey);
        }