Advertisement
Guest User

Untitled

a guest
Mar 19th, 2018
567
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 12.31 KB | None | 0 0
  1. using Microsoft.AspNetCore.Mvc;
  2. using Moq;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.Security.Cryptography;
  6. using System.Text;
  7. using Microsoft.Azure.KeyVault.Models;
  8. using Xunit;
  9.  
  10. namespace TDD2.Tests
  11. {
  12.     public class UnitTest1
  13.     {
  14.  
  15.         [Fact]
  16.         public void ShouldLoginWithSuccess()
  17.         {
  18.             var user = new User { Username = "login", Email = "mail@mail.com", Password = GetHash("asd") };
  19.  
  20.             var loginModel = new LoginModel
  21.             {
  22.                 Username = "login",
  23.                 Password = "asd"
  24.             };
  25.             var userRepository = new Mock<IRepository<User>>();
  26.             userRepository.Setup(x => x.Exist(It.IsAny<Func<User, bool>>())).Returns(true);
  27.             userRepository.Setup(x => x.GetBy(It.IsAny<Func<User, bool>>())).Returns(user);
  28.  
  29.             var userService = new UserService(userRepository.Object);
  30.  
  31.             var accountController = new AccountController(userService);
  32.  
  33.  
  34.             var result = accountController.Login(loginModel);
  35.             var okResult = Assert.IsType<OkObjectResult>(result);
  36.             var email = Assert.IsAssignableFrom<ResultDto<LoginResultDto>>(okResult.Value);
  37.  
  38.             Assert.Equal(user.Email, email.SuccessResult.Email);
  39.         }
  40.         private string GetHash(string text)
  41.         {
  42.             // SHA512 is disposable by inheritance.  
  43.             using (var sha256 = SHA256.Create())
  44.             {
  45.                 // Send a sample text to hash.  
  46.                 var hashedBytes = sha256.ComputeHash(Encoding.UTF8.GetBytes(text));
  47.                 // Get the hashed string.  
  48.                 return BitConverter.ToString(hashedBytes).Replace("-", "").ToLower();
  49.             }
  50.         }
  51.  
  52.         [Fact]
  53.         public void ShouldReturnErrorOnInvalidUser()
  54.         {
  55.             var error = "Hasło lub Użytkownik są błędne";
  56.             //user w bazie
  57.             var user = new User { Username = "login", Email = "mail@mail.com", Password = GetHash("asd") };
  58.  
  59.             var loginModel = new LoginModel
  60.             {
  61.                 Username = "login",
  62.                 Password = "asd"
  63.             };
  64.             var userRepository = new Mock<IRepository<User>>();
  65.  
  66.             var userService = new UserService(userRepository.Object);
  67.  
  68.             var accountController = new AccountController(userService);
  69.  
  70.             var result = accountController.Login(loginModel);
  71.             var badRequest = Assert.IsType<BadRequestObjectResult>(result);
  72.             var errorResult = Assert.IsAssignableFrom<ResultDto<LoginResultDto>>(badRequest.Value);
  73.  
  74.             Assert.Contains(error, errorResult.Errors);
  75.         }
  76.  
  77.         [Fact]
  78.         public void ShouldReturnErrorOnInvalidPassword()
  79.         {
  80.             var error = "Hasło lub Użytkownik są błędne";
  81.             //user w bazie
  82.             var user = new User { Username = "login", Email = "mail@mail.com", Password = GetHash("asd55") };
  83.  
  84.             var loginModel = new LoginModel
  85.             {
  86.                 Username = "login",
  87.                 Password = "asd"
  88.             };
  89.             var userRepository = new Mock<IRepository<User>>();
  90.             userRepository.Setup(x => x.Exist(It.IsAny<Func<User, bool>>())).Returns(true);
  91.             userRepository.Setup(x => x.GetBy(It.IsAny<Func<User, bool>>())).Returns(user);
  92.  
  93.             var userService = new UserService(userRepository.Object);
  94.  
  95.             var accountController = new AccountController(userService);
  96.  
  97.             var result = accountController.Login(loginModel);
  98.             var badRequest = Assert.IsType<BadRequestObjectResult>(result);
  99.             var errorResult = Assert.IsAssignableFrom<ResultDto<LoginResultDto>>(badRequest.Value);
  100.  
  101.             Assert.Contains(error, errorResult.Errors);
  102.         }
  103.        
  104.         [Fact]
  105.         public void ShouldRegisterWithSuccess()
  106.         {
  107.             var newUser = new RegisterModel()
  108.             {
  109.                 Email = "damian@gmail.com",
  110.                 Username = "Damian",
  111.                 Password = "verystrongpass",
  112.                 ConfirmPassword = "verystrongpass"
  113.             };
  114.  
  115.             var userRepository = new Mock<IRepository<User>>();
  116.             userRepository.Setup(x => x.Exist(It.IsAny<Func<User, bool>>())).Returns(false);
  117.             userRepository.Setup(x => x.Add(It.IsAny<User>())).Returns(true);
  118.  
  119.             var userService = new UserService(userRepository.Object);
  120.             var accountController = new AccountController(userService);
  121.  
  122.             var result = accountController.Register(newUser);
  123.             var createdResult = Assert.IsType<ObjectResult>(result);
  124.             var emailResult = Assert.IsAssignableFrom<ResultDto<RegisterResultDto>>(createdResult.Value);
  125.  
  126.             Assert.Equal(newUser.Email, emailResult.SuccessResult.Email);
  127.         }
  128.  
  129.         [Fact]
  130.         public void ShouldReturnErrorOnExistingUser()
  131.         {
  132.             var newUser = new RegisterModel()
  133.             {
  134.                 Email = "damian@gmail.com",
  135.                 Username = "Damian",
  136.                 Password = "verystrongpass",
  137.                 ConfirmPassword = "verystrongpass"
  138.             };
  139.  
  140.             var errorMessage = $"An user with username {newUser.Username} already exists";
  141.  
  142.             var userRepository = new Mock<IRepository<User>>();
  143.  
  144.             userRepository.Setup(x => x.Exist(It.IsAny<Func<User, bool>>())).Returns(true);
  145.  
  146.             var userService = new UserService(userRepository.Object);
  147.             var accountController = new AccountController(userService);
  148.  
  149.             var result = accountController.Register(newUser);
  150.             var badRequest = Assert.IsType<BadRequestObjectResult>(result);
  151.             var errorResult = Assert.IsType<ResultDto<RegisterResultDto>>(badRequest.Value);
  152.  
  153.             Assert.Contains(errorMessage, errorResult.Errors);
  154.         }
  155.  
  156.         [Fact]
  157.         public void ShouldReturnErrorCausedDifferentPasswords()
  158.         {
  159.             var newUser = new RegisterModel()
  160.             {
  161.                 Email = "damian@gmail.com",
  162.                 Username = "Damian",
  163.                 Password = "verystrongpass",
  164.                 ConfirmPassword = "verystrongpass22"
  165.             };
  166.  
  167.             var errorMessage = "Passwords should match";
  168.  
  169.             var userRepository = new Mock<IRepository<User>>();
  170.            
  171.  
  172.             var userService = new UserService(userRepository.Object);
  173.             var accountController = new AccountController(userService);
  174.  
  175.             var result = accountController.Register(newUser);
  176.             var badRequest = Assert.IsType<BadRequestObjectResult>(result);
  177.             var errorResult = Assert.IsType<ResultDto<RegisterResultDto>>(badRequest.Value);
  178.  
  179.             Assert.Contains(errorMessage, errorResult.Errors);
  180.  
  181.         }
  182.  
  183.  
  184.         public class User : Entity
  185.         {
  186.             public string Username { get; set; }
  187.             public string Email { get; set; }
  188.             public string Password { get; set; }
  189.         }
  190.  
  191.         public class LoginModel
  192.         {
  193.             public string Username { get; set; }
  194.             public string Password { get; set; }
  195.         }
  196.  
  197.         public class RegisterModel
  198.         {
  199.             public string Email { get; set; }
  200.             public string Username { get; set; }
  201.             public string Password { get; set; }
  202.             public string ConfirmPassword { get; set; }
  203.         }
  204.  
  205.         public interface IRepository<T> where T : Entity
  206.         {
  207.             bool Exist(Func<User, bool> function);
  208.             T GetBy(Func<User, bool> function);
  209.             bool Add(User user);
  210.         }
  211.  
  212.         public interface IUserService
  213.         {
  214.             ResultDto<LoginResultDto> Login(LoginModel loginModel);
  215.             ResultDto<RegisterResultDto> Register(RegisterModel registerModel);
  216.         }
  217.  
  218.         public class UserService : IUserService
  219.         {
  220.             private readonly IRepository<User> _userRepository;
  221.             public UserService(IRepository<User> userRepository)
  222.             {
  223.                 _userRepository = userRepository;
  224.             }
  225.             public ResultDto<LoginResultDto> Login(LoginModel loginModel)
  226.             {
  227.                 var result = new ResultDto<LoginResultDto>();
  228.                 var user = _userRepository.GetBy(x => x.Username == loginModel.Username);
  229.  
  230.                 if (user?.Password != GetHash(loginModel.Password))
  231.                 {
  232.                     result.Errors.Add("Hasło lub Użytkownik są błędne");
  233.                     return result;
  234.                 }
  235.  
  236.                 result.SuccessResult = new LoginResultDto { Email = user.Email };
  237.                 return result;
  238.             }
  239.  
  240.             public ResultDto<RegisterResultDto> Register(RegisterModel registerModel)
  241.             {
  242.                 var result = new ResultDto<RegisterResultDto>();
  243.  
  244.                 if (_userRepository.Exist(u => u.Username == registerModel.Username))
  245.                 {
  246.                     result.Errors.Add($"An user with username {registerModel.Username} already exists");
  247.                     return result;
  248.                 }
  249.  
  250.                 if (registerModel.Password != registerModel.ConfirmPassword)
  251.                 {
  252.                     result.Errors.Add("Passwords should match");
  253.                     return result;
  254.                 }
  255.  
  256.                 var user = new User
  257.                 {
  258.                     Email = registerModel.Email,
  259.                     Username = registerModel.Username,
  260.                     Password = GetHash(registerModel.Password)
  261.                 };
  262.  
  263.  
  264.                 if (!_userRepository.Add(user))
  265.                 {
  266.                     result.Errors.Add("An error occured while adding user.");
  267.                     return result;
  268.                 }
  269.                 result.SuccessResult = new RegisterResultDto()
  270.                 {
  271.                     Email = registerModel.Email
  272.                 };
  273.  
  274.                 return result;
  275.             }
  276.  
  277.             private string GetHash(string text)
  278.             {
  279.                 // SHA512 is disposable by inheritance.  
  280.                 using (var sha256 = SHA256.Create())
  281.                 {
  282.                     // Send a sample text to hash.  
  283.                     var hashedBytes = sha256.ComputeHash(Encoding.UTF8.GetBytes(text));
  284.                     // Get the hashed string.  
  285.                     return BitConverter.ToString(hashedBytes).Replace("-", "").ToLower();
  286.                 }
  287.             }
  288.         }
  289.         public class RegisterResultDto : BaseDto
  290.         {
  291.             public string Email { get; set; }
  292.             //Token
  293.             //ExpirationDate
  294.             //UserName  ->optional
  295.             //FirstName ->optional
  296.             //LastName  ->optional
  297.         }
  298.  
  299.         public class LoginResultDto : BaseDto
  300.         {
  301.             public string Email { get; set; }
  302.         }
  303.  
  304.         public class ResultDto<T> where T : BaseDto
  305.         {
  306.             public T SuccessResult { get; set; }
  307.             public List<string> Errors { get; set; }
  308.             public bool IsError { get { return Errors?.Count > 0; } }
  309.             public ResultDto()
  310.             {
  311.                 Errors = new List<string>();
  312.             }
  313.         }
  314.  
  315.         public class BaseDto
  316.         {
  317.  
  318.         }
  319.  
  320.         public class Entity
  321.         {
  322.             public long Id { get; set; }
  323.         }
  324.  
  325.         public class AccountController : Controller
  326.         {
  327.             private readonly IUserService _userService;
  328.  
  329.             public AccountController(IUserService userService)
  330.             {
  331.                 _userService = userService;
  332.             }
  333.  
  334.             public IActionResult Login(LoginModel loginModel)
  335.             {
  336.                 var result = _userService.Login(loginModel);
  337.  
  338.                 if (result.IsError)
  339.                 {
  340.                     return BadRequest(result);
  341.                 }
  342.  
  343.                 return Ok(result);
  344.             }
  345.             public IActionResult Register(RegisterModel registerModel)
  346.             {
  347.                 var result = _userService.Register(registerModel);
  348.  
  349.                 if (result.IsError)
  350.                 {
  351.                     return BadRequest(result);
  352.                 }
  353.  
  354.                 return StatusCode(201, result);
  355.             }
  356.            
  357.         }
  358.  
  359.     }
  360. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement