Ejemplo n.º 1
0
        public void Register_Duplicate_Username_Shoud_Return_BadRequest()
        {
            var testUser = new UserModel()
            {
                Username = "******",
                DisplayName = "validdisplayname",
                AuthCode = new string('b', 40)
            };

            var response = this.httpServer.Post("api/users/register", testUser);
            var contentString = response.Content.ReadAsStringAsync().Result;
            var userModel = JsonConvert.DeserializeObject<LoggedUserModel>(contentString);

            Assert.AreEqual(testUser.DisplayName, userModel.DisplayName);
            Assert.IsNotNull(userModel.SessionKey);
            Assert.AreEqual(HttpStatusCode.Created, response.StatusCode);

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

            response = this.httpServer.Post("api/users/register", sameTestUser);
            contentString = response.Content.ReadAsStringAsync().Result;
            userModel = JsonConvert.DeserializeObject<LoggedUserModel>(contentString);

            Assert.AreEqual(userModel.DisplayName, null);
            Assert.AreEqual(userModel.SessionKey, null);
            Assert.AreEqual(HttpStatusCode.BadRequest, response.StatusCode);
        }
Ejemplo n.º 2
0
        public HttpResponseMessage PostRegisterUser(UserModel model)
        {
            var responseMsg = this.PerformOperationAndHandleExceptions(
                () =>
                {
                    var context = new BlogContext();
                    using (context)
                    {
                        this.ValidateStr(model.Username, ValidUsernameCharacters, "User");
                        this.ValidateStr(model.Nickname, ValidNicknameCharacters, "Nickname");
                        this.ValidateAuthCode(model.AuthCode);
                        var usernameToLower = model.Username.ToLower();
                        var nicknameToLower = model.Nickname.ToLower();
                        var user = context.Users.FirstOrDefault(
                            usr => usr.Username == usernameToLower
                            || usr.Nickname.ToLower() == nicknameToLower);

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

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

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

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

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

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

            return responseMsg;
        }
Ejemplo n.º 3
0
        public HttpResponseMessage PostLoginUser(UserModel model)
        {
            var responseMsg = this.PerformOperationAndHandleExceptions(
              () =>
              {
                  var context = new BloggingSystemContext();
                  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("Invalid username or password");
                      }
                      if (user.SessionKey == null)
                      {
                          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;
        }
Ejemplo n.º 4
0
        public void TestInit()
        {
            var type = typeof(PostsController);
            tran = new TransactionScope();

            var routes = new List<Route>
            {
                new Route(
                    "TagsApi",
                    "api/tags/{tagId}/posts",
                 new { controller = "tags", action = "posts"}
                 ),
                new Route(
                    "PostsApi",
                    "api/posts/{postId}/comment",
                 new { controller = "posts", action = "comment"}
                ),
                new Route(
                    "UsersApi",
                    "api/users/{action}",
                    new { controller = "users"}
                    ),
                new Route(
                    "DefaultApi",
                    "api/{controller}/{id}",
                    new { id = RouteParameter.Optional }),
            };

            this.httpServer = new InMemoryHttpServer("http://localhost/", routes);

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

            var response = this.httpServer.Post("api/users/register", testUser);
            var contentString = response.Content.ReadAsStringAsync().Result;
            var userModel = JsonConvert.DeserializeObject<LoggedUserModel>(contentString);

            this.validUser = userModel;
        }
        public HttpResponseMessage Register(UserModel model)
        {
            var responseMsg = this.ExceptionHandling(
                () =>
                {
                    var context = new BloggingSystemContext();
                    using (context)
                    {
                        this.ValidateUsername(model.Username);
                        this.ValidateNickname(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;
        }
Ejemplo n.º 6
0
        public void Register_Invalid_AuthCode_Shoud_Return_BadRequest()
        {
            var testUser = new UserModel()
            {
                Username = "******",
                DisplayName = "dn",
                AuthCode = new string('b', 20)
            };

            var response = this.httpServer.Post("api/users/register", testUser);
            var contentString = response.Content.ReadAsStringAsync().Result;
            var userModel = JsonConvert.DeserializeObject<LoggedUserModel>(contentString);

            Assert.AreEqual(userModel.DisplayName, null);
            Assert.AreEqual(userModel.SessionKey, null);
            Assert.AreEqual(HttpStatusCode.BadRequest, response.StatusCode);
        }
Ejemplo n.º 7
0
        public void Register_Valid_User_Shoud_Create_And_Return_Created()
        {
            var testUser = new UserModel()
            {
                Username = "******",
                DisplayName = "display name",
                AuthCode = new string('b', 40)
            };

            var response = this.httpServer.Post("api/users/register", testUser);
            var contentString = response.Content.ReadAsStringAsync().Result;
            var userModel = JsonConvert.DeserializeObject<LoggedUserModel>(contentString);

            Assert.AreEqual(testUser.DisplayName, userModel.DisplayName);
            Assert.IsNotNull(userModel.SessionKey);
            Assert.AreEqual(HttpStatusCode.Created, response.StatusCode);
        }
Ejemplo n.º 8
0
 private static UserModel RegisterValidUser()
 {
     var testUser = new UserModel()
     {
         Username = "******",
         DisplayName = "display name",
         AuthCode = new string('b', 40)
     };
     return testUser;
 }
Ejemplo n.º 9
0
        public void Logout()
        {
            var testUser = new UserModel()
            {
                Username = "******",
                Nickname = "VALIDNICK",
                AuthCode = new string('b', 40)
            };

            var model = RegisterOrLoginTestUser("api/users/register", httpServer, testUser);
            var response = httpServer.Put("api/users/logout?sessionKey=" + model.SessionKey);
            var contentString = response.Content.ReadAsStringAsync().Result;
        }
Ejemplo n.º 10
0
        public void Register_WhenUserModelValid_ShouldSaveToDatabase()
        {
            var testUser = new UserModel()
            {
                Username = "******",
                Nickname = "VALIDNICK",
                AuthCode = new string('b', 40)
            };

            var model = RegisterOrLoginTestUser("api/users/register", httpServer, testUser);
            Assert.AreEqual(testUser.Nickname, model.Nickname);
            Assert.IsNotNull(model.SessionKey);
        }
Ejemplo n.º 11
0
        //[TestMethod]
        //public void CreatePost()
        //{
        //    var testPost = new Post()
        //    {
        //        Title = "test post",
        //        Text = "test post content"
        //    };

        //    var testUser = new UserModel()
        //    {
        //        Username = "******",
        //        Nickname = "VALIDNICK",
        //        AuthCode = new string('b', 40)
        //    };

        //    var userModel = RegisterOrLoginTestUser("api/users/register", httpServer, testUser);

        //    var response = httpServer.Post("api/posts?sessionKey=" + userModel.SessionKey, testPost);
        //    var contentString = response.Content.ReadAsStringAsync().Result;
        //    var postModel = JsonConvert.DeserializeObject<PostModel>(contentString);

        //    Assert.AreEqual(testPost.Title, postModel.Title);
        //    Assert.AreEqual(testPost.Id, postModel.Id);
        //}

        private LoggedUserModel RegisterOrLoginTestUser(string requestUrl, InMemoryHttpServer httpServer, UserModel testUser)
        {
            var response = httpServer.Post(requestUrl, testUser);
            var contentString = response.Content.ReadAsStringAsync().Result;
            var userModel = JsonConvert.DeserializeObject<LoggedUserModel>(contentString);
            return userModel;
        }
Ejemplo n.º 12
0
        public void Login_WhenUserModelValid_ReturnNickAndSessionKey()
        {
            var testUser = new UserModel()
            {
                Username = "******",
                Nickname = "VALIDNICK",
                AuthCode = new string('b', 40)
            };

            RegisterOrLoginTestUser("api/users/register", httpServer, testUser);
            var model = this.RegisterOrLoginTestUser("api/users/login", httpServer, testUser);

            Assert.AreEqual(testUser.Nickname, model.Nickname);
            Assert.IsNotNull(model.SessionKey);
        }