11using System . Linq ;
22using System . Net ;
33using System . Net . Http ;
4+ using System . Text ;
45using System . Threading . Tasks ;
56using Microsoft . AspNetCore . Identity ;
67using Microsoft . EntityFrameworkCore ;
8+ using Newtonsoft . Json ;
79using Test . Api . ClassData ;
810using Test . Api . Models ;
911using Test . Api . Utils ;
@@ -84,5 +86,135 @@ public async Task GivenInvalidModels_WhenPostRegisterRequest_ThenReturnBadReques
8486 // Assert
8587 Assert . Equal ( HttpStatusCode . BadRequest , response . StatusCode ) ;
8688 }
89+
90+ [ Fact ]
91+ public async Task GivenEmployeeModel_WhenPutUpdatePasswordRequest_ThenReturnOk ( )
92+ {
93+ // Arrange
94+ const string NEW_PASSWORD = "654321" ;
95+
96+ var model = _fixture . Context . Users . ToList ( ) . ElementAt ( 5 ) ;
97+ var viewModel = new UpdatePasswordViewModel
98+ {
99+ UserName = model . UserName ,
100+ Password = NEW_PASSWORD ,
101+ } ;
102+
103+ // Act
104+ var response = await _fixture . Client . PutAsJsonAsync ( $ "{ API_URL } /update-password", viewModel ) ;
105+
106+ // Assert
107+ response . EnsureSuccessStatusCode ( ) ;
108+
109+ var assertLogin = await AuthExtensions . GetJwt (
110+ _fixture ,
111+ new LoginViewModel
112+ {
113+ UserName = model . UserName ,
114+ Password = NEW_PASSWORD ,
115+ }
116+ ) ;
117+ Assert . NotEmpty ( assertLogin ) ;
118+ }
119+
120+ [ Theory ]
121+ [ InlineData ( "" , "valid_password" ) ]
122+ [ InlineData ( "valid_username" , "" ) ]
123+ [ InlineData ( "invalid_username" , "valid_password" ) ]
124+ // error: min length for password 6
125+ [ InlineData ( "valid_username" , "12345" ) ]
126+ public async Task GivenInvalidViewModels_WhenPutUpdatePasswordRequest_ThenReturnBadRequest ( string username , string password )
127+ {
128+ // Arrange
129+ var viewModel = new UpdatePasswordViewModel
130+ {
131+ UserName = username ,
132+ Password = password ,
133+ } ;
134+
135+ if ( username == "valid_username" )
136+ {
137+ var validUserName = _fixture . Context . Users . Last ( ) . UserName ;
138+ viewModel . UserName = validUserName ;
139+ }
140+
141+ // Act
142+ var response = await _fixture . Client . PutAsJsonAsync ( $ "{ API_URL } /update-password", viewModel ) ;
143+
144+ // Assert
145+ Assert . Equal ( HttpStatusCode . BadRequest , response . StatusCode ) ;
146+ }
147+
148+ [ Fact ]
149+ public async Task GivenAuthByEmployee_WhenPutChangePasswordRequest_ThenReturnOk ( )
150+ {
151+ // Arrange
152+ const string NEW_PASSWORD = "654321" ;
153+ const string DEFAULT_PASSWORD = DefaultAdmin . Password ;
154+
155+ var model = _fixture . Context . Users . Last ( ) ;
156+ var viewModel = await Task . Run ( ( ) => JsonConvert . SerializeObject (
157+ new ChangePasswordViewModel
158+ {
159+ OldPassword = DEFAULT_PASSWORD ,
160+ NewPassword = NEW_PASSWORD ,
161+ }
162+ ) ) ;
163+
164+ // Act
165+ var request = new HttpRequestMessage ( HttpMethod . Put , $ "{ API_URL } /change-password") ;
166+ // Send request as Employee
167+ request . Content = new StringContent ( viewModel , Encoding . UTF8 , "application/json" ) ;
168+
169+ await AuthExtensions . SetupRequestAuth (
170+ request ,
171+ _fixture ,
172+ new LoginViewModel
173+ {
174+ UserName = model . UserName ,
175+ Password = DEFAULT_PASSWORD ,
176+ }
177+ ) ;
178+
179+ var response = await _fixture . Client . SendAsync ( request ) ;
180+
181+ // Assert
182+ response . EnsureSuccessStatusCode ( ) ;
183+
184+ var assertLogin = await AuthExtensions . GetJwt (
185+ _fixture ,
186+ new LoginViewModel
187+ {
188+ UserName = model . UserName ,
189+ Password = NEW_PASSWORD ,
190+ }
191+ ) ;
192+ Assert . NotEmpty ( assertLogin ) ;
193+ }
194+
195+ [ Theory ]
196+ [ InlineData ( "" , "valid_password" ) ]
197+ [ InlineData ( "valid_old_password" , "" ) ]
198+ [ InlineData ( "invalid_old_password" , "valid_password" ) ]
199+ // error: min length for password 6
200+ [ InlineData ( "valid_old_password" , "12345" ) ]
201+ public async Task GivenInvalidModels_WhenPutChangePasswordRequest_ThenReturnBadRequest ( string oldPassword , string newPassword )
202+ {
203+ // Arrange
204+ var viewModel = new ChangePasswordViewModel
205+ {
206+ OldPassword = oldPassword ,
207+ NewPassword = newPassword ,
208+ } ;
209+
210+ if ( oldPassword == "valid_old_password" )
211+ viewModel . OldPassword = DefaultAdmin . Password ;
212+
213+ // Act
214+ var response = await _fixture . Client . PutAsJsonAsync ( $ "{ API_URL } /change-password", viewModel ) ;
215+
216+ // Assert
217+ Assert . Equal ( HttpStatusCode . BadRequest , response . StatusCode ) ;
218+ }
87219 }
88220}
0 commit comments