Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix(User): edit register and update user methods. #109

Merged
merged 1 commit into from
Sep 9, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 5 additions & 2 deletions AnalysisData/AnalysisData.sln.DotSettings.user
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
<s:String x:Key="/Default/Environment/Highlighting/HighlightingSourceSnapshotLocation/@EntryValue">C:\Users\kimia\AppData\Local\JetBrains\Rider2024.1\resharper-host\temp\Rider\vAny\CoverageData\_AnalysisData.-35481945\Snapshot\snapshot.utdcvr</s:String>
<s:String x:Key="/Default/Environment/UnitTesting/UnitTestSessionStore/Sessions/=098e78e2_002D707b_002D4922_002D926d_002Dcb148189e0cf/@EntryIndexedValue">&lt;SessionState ContinuousTestingMode="0" IsActive="True" Name="CheckExistenceOfRole_ShouldTNothrowRoleNotFoundException_WhenRoleExist" xmlns="urn:schemas-jetbrains-com:jetbrains-ut-session"&gt;&#xD;
&lt;Project Location="E:\CodeStar1403\Summer1403-Project-Group03-Backend\AnalysisData\TestProject" Presentation="&amp;lt;TestProject&amp;gt;" /&gt;&#xD;
&lt;/SessionState&gt;</s:String>
Expand All @@ -7,8 +8,10 @@
&lt;TestId&gt;xUnit::9AEC1F3F-B1B3-47C1-82D4-E432E2D77E0E::net8.0::TestProject.User.Repository.RoleRepository.RoleRepositoryTests&lt;/TestId&gt;&#xD;
&lt;/TestAncestor&gt;&#xD;
&lt;/SessionState&gt;</s:String>
<s:String x:Key="/Default/Environment/UnitTesting/UnitTestSessionStore/Sessions/=5a6db5c4_002D6b10_002D4bf8_002D8325_002D71b5cea4c333/@EntryIndexedValue">&lt;SessionState ContinuousTestingMode="0" IsActive="True" Name="UpdateCategory_ShouldReturnOk_WhenCategoryIsUpdatedSuccessfully" xmlns="urn:schemas-jetbrains-com:jetbrains-ut-session"&gt;&#xD;
&lt;Project Location="C:\Users\Mahdi\Desktop\code star proje\Summer1403-Project-Group03-Backend\AnalysisData\TestProject" Presentation="&amp;lt;TestProject&amp;gt;" /&gt;&#xD;
<s:String x:Key="/Default/Environment/UnitTesting/UnitTestSessionStore/Sessions/=5a6db5c4_002D6b10_002D4bf8_002D8325_002D71b5cea4c333/@EntryIndexedValue">&lt;SessionState ContinuousTestingMode="0" Name="UpdateCategory_ShouldReturnOk_WhenCategoryIsUpdatedSuccessfully" xmlns="urn:schemas-jetbrains-com:jetbrains-ut-session"&gt;&#xD;
&lt;TestAncestor&gt;&#xD;
&lt;TestId&gt;xUnit::9AEC1F3F-B1B3-47C1-82D4-E432E2D77E0E::net8.0::TestProject.User.Repository.UserRepository.UserRepositoryTests.GetUserByPhoneNumberAsync_ShouldReturnsNull_WhenUserWithInputPhoneNumberDoesNotExist&lt;/TestId&gt;&#xD;
&lt;/TestAncestor&gt;&#xD;
&lt;/SessionState&gt;</s:String>
<s:String x:Key="/Default/Environment/UnitTesting/UnitTestSessionStore/Sessions/=fe4fe44b_002D7953_002D4423_002Dac04_002Da7f1b464e5c0/@EntryIndexedValue">&lt;SessionState ContinuousTestingMode="0" Name="ResetPasswordAsync_ShouldCallPasswordCheck_WhenCalled" xmlns="urn:schemas-jetbrains-com:jetbrains-ut-session"&gt;&#xD;
&lt;Project Location="E:\CodeStar1403\Summer1403-Project-Group03-Backend\AnalysisData\TestProject" Presentation="&amp;lt;TestProject&amp;gt;" /&gt;&#xD;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ public interface IUserRepository
{
Task<User> GetUserByUsernameAsync(string userName);
Task<User> GetUserByEmailAsync(string email);
Task<User> GetUserByPhoneNumberAsync(string phoneNumber);
Task<User> GetUserByIdAsync(Guid id);
Task<List<User>> GetAllUserPaginationAsync(int page, int limit);
Task<bool> DeleteUserAsync(Guid id);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,11 @@ public async Task<User> GetUserByEmailAsync(string email)
{
return await _context.Users.Include(u => u.Role).FirstOrDefaultAsync(x => x.Email == email);
}

public async Task<User> GetUserByPhoneNumberAsync(string phoneNumber)
{
return await _context.Users.Include(u => u.Role).FirstOrDefaultAsync(x => x.PhoneNumber == phoneNumber);
}


public async Task<User> GetUserByIdAsync(Guid id)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,8 @@ private async Task CheckForDuplicateUserAsync(UserRegisterDto userRegisterDto)
{
var existingUserByEmail = await _userRepository.GetUserByEmailAsync(userRegisterDto.Email);
var existingUserByUsername = await _userRepository.GetUserByUsernameAsync(userRegisterDto.UserName);
if (existingUserByEmail != null || existingUserByUsername != null)
var existingUserByPhoneNumber = await _userRepository.GetUserByPhoneNumberAsync(userRegisterDto.PhoneNumber);
if (existingUserByEmail != null || existingUserByUsername != null || existingUserByPhoneNumber!=null)
throw new DuplicateUserException();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,6 @@ public async Task UpdateUserInformationByAdminAsync(Guid id, UpdateAdminDto upda
{
throw new AdminProtectedException();
}

await ValidateUserInformation(user, updateAdminDto);
_validationService.EmailCheck(updateAdminDto.Email);
_validationService.PhoneNumberCheck(updateAdminDto.PhoneNumber);
Expand All @@ -45,8 +44,8 @@ private async Task ValidateUserInformation(User user, UpdateAdminDto updateAdmin
{
var checkUsername = await _userRepository.GetUserByUsernameAsync(updateAdminDto.UserName);
var checkEmail = await _userRepository.GetUserByEmailAsync(updateAdminDto.Email);

if ((checkUsername != null && !user.Equals(checkUsername)) || (checkEmail != null && !user.Equals(checkEmail)))
var checkPhoneNumber = await _userRepository.GetUserByPhoneNumberAsync(updateAdminDto.PhoneNumber);
if ((checkUsername != null && !user.Equals(checkUsername)) || (checkEmail != null && !user.Equals(checkEmail)) || (checkPhoneNumber != null && !user.Equals(checkPhoneNumber)))
throw new DuplicateUserException();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
public async Task<User> GetUserFromUserClaimsAsync(ClaimsPrincipal userClaim)
{
var userName = userClaim.FindFirstValue("username");
var user = await _userRepository.GetUserByUsernameAsync(userName);

Check warning on line 25 in AnalysisData/AnalysisData/Services/UserService/UserService/Business/UserManager.cs

View workflow job for this annotation

GitHub Actions / test

Possible null reference argument for parameter 'userName' in 'Task<User> IUserRepository.GetUserByUsernameAsync(string userName)'.
if (user == null)
{
throw new UserNotFoundException();
Expand All @@ -33,7 +33,7 @@
public async Task UpdateUserInformationAsync(User user, UpdateUserDto updateUserDto)
{
await ValidateEmailAsync(user, updateUserDto.Email);

await ValidatePhoneNumberAsync(user, updateUserDto.PhoneNumber);
_validationService.EmailCheck(updateUserDto.Email);
_validationService.PhoneNumberCheck(updateUserDto.PhoneNumber);

Expand All @@ -59,6 +59,15 @@
throw new DuplicateUserException();
}
}

private async Task ValidatePhoneNumberAsync(User user, string newPhoneNumber)
{
var checkPhoneNumber = await _userRepository.GetUserByPhoneNumberAsync(newPhoneNumber);
if (checkPhoneNumber != null && user.PhoneNumber != newPhoneNumber)
{
throw new DuplicateUserException();
}
}

private async Task ReplaceUserDetails(User user, UpdateUserDto updateUserDto)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -128,6 +128,58 @@ public async Task GetUserByEmailAsync_ShouldReturnsNull_WhenUserWithInputEmailDo
// Assert
Assert.Null(result);
}

[Fact]
public async Task GetUserByPhoneNumberAsync_ShouldReturnsUserWithInputPhoneNumber_WhenUserWithInputPhoneNumberExists()
{
using var scope = _serviceProvider.CreateScope();
var context = CreateDbContext();

//Arrange
var role = new Role { RoleName = "Admin", RolePolicy = "gold" };
var user = new AnalysisData.Models.UserModel.User
{
Username = "test", Password = "@Test1234",
Email = "[email protected]",
FirstName = "test", LastName = "test",
PhoneNumber = "09111111111", ImageURL = null, Role = role
};
context.Users.Add(user);
await context.SaveChangesAsync();

// Act
var result = await _sut.GetUserByPhoneNumberAsync("09111111111");

// Assert
Assert.NotNull(result);
Assert.Equal("test", result.Username);
}

[Fact]
public async Task GetUserByPhoneNumberAsync_ShouldReturnsNull_WhenUserWithInputPhoneNumberDoesNotExist()
{
using var scope = _serviceProvider.CreateScope();
var context = CreateDbContext();

//Arrange
var role = new Role { RoleName = "Admin", RolePolicy = "gold" };
var user = new AnalysisData.Models.UserModel.User
{
Username = "test", Password = "@Test1234",
Email = "[email protected]",
FirstName = "test", LastName = "test",
PhoneNumber = "09111111111", ImageURL = null, Role = role
};
context.Users.Add(user);
await context.SaveChangesAsync();

// Act
var result = await _sut.GetUserByPhoneNumberAsync("09111111112");

// Assert
Assert.Null(result);
}


[Fact]
public async Task GetUserByIdAsync_ShouldReturnsUserWithInputId_WhenUserWithInputIdExists()
Expand Down
Loading