11using System . Net ;
22using System . Net . Http . Json ;
33using System . Text . Json ;
4+ using API . Test . InlineData ;
45using CommonTestUtilities . Requests ;
56using CommonTestUtilities . Services ;
7+ using RecipesApp . Exception . Resources ;
68
79namespace API . Test . User . Register ;
810
911public class RegisterUserEndpoint ( WebApplicationMockFactory factory )
1012 : IClassFixture < WebApplicationMockFactory >
1113{
1214 private readonly HttpClient _client = factory . CreateClient ( ) ;
13-
15+
1416 [ Fact ]
1517 public async Task Test_OnSuccess ( )
1618 {
@@ -20,9 +22,89 @@ public async Task Test_OnSuccess()
2022 await using var body = await response . Content . ReadAsStreamAsync ( ) ;
2123 var result = await JsonDocument . ParseAsync ( body ) ;
2224 var username = result . RootElement . GetProperty ( "name" ) . GetString ( ) ;
23-
25+
2426 Assert . Equal ( HttpStatusCode . Created , response . StatusCode ) ;
2527 Assert . False ( string . IsNullOrWhiteSpace ( username ) ) ;
2628 Assert . Equal ( request . Name , username ) ;
2729 }
30+
31+ [ Theory ]
32+ [ ClassData ( typeof ( CultureInlineData ) ) ]
33+ public async Task Test_EmptyName_OnFailure ( string ? culture )
34+ {
35+ _client . DefaultRequestHeaders . TryAddWithoutValidation ( "Accept-Language" , culture ) ;
36+ var request = RegisterUserRequestJSONMockFactory . CreateMockWithoutName ( ) ;
37+
38+ var response = await _client . PostAsJsonAsync ( "/Users" , request ) ;
39+ await using var body = await response . Content . ReadAsStreamAsync ( ) ;
40+ var result = await JsonDocument . ParseAsync ( body ) ;
41+ var errors = result . RootElement . GetProperty ( "errors" )
42+ . EnumerateArray ( ) . ToList ( ) ;
43+
44+ var expectedMessage = ResourcesAccessor . GetMessageByCulture ( "NAME_REQUIRED" , culture ) ;
45+
46+ Assert . Equal ( HttpStatusCode . BadRequest , response . StatusCode ) ;
47+ Assert . Single ( errors ,
48+ error => error . GetString ( ) ! . Equals ( expectedMessage ) ) ;
49+ }
50+
51+ [ Theory ]
52+ [ ClassData ( typeof ( CultureInlineData ) ) ]
53+ public async Task Test_EmptyEmail_OnFailure ( string ? culture )
54+ {
55+ _client . DefaultRequestHeaders . TryAddWithoutValidation ( "Accept-Language" , culture ) ;
56+ var request = RegisterUserRequestJSONMockFactory . CreateMockWithoutEmail ( ) ;
57+
58+ var response = await _client . PostAsJsonAsync ( "/Users" , request ) ;
59+ await using var body = await response . Content . ReadAsStreamAsync ( ) ;
60+ var result = await JsonDocument . ParseAsync ( body ) ;
61+ var errors = result . RootElement . GetProperty ( "errors" )
62+ . EnumerateArray ( ) . ToList ( ) ;
63+
64+ var expectedMessage = ResourcesAccessor . GetMessageByCulture ( "EMAIL_REQUIRED" , culture ) ;
65+
66+ Assert . Equal ( HttpStatusCode . BadRequest , response . StatusCode ) ;
67+ Assert . Single ( errors ,
68+ error => error . GetString ( ) ! . Equals ( expectedMessage ) ) ;
69+ }
70+
71+ [ Theory ]
72+ [ ClassData ( typeof ( CultureInlineData ) ) ]
73+ public async Task Test_InvalidEmail_OnFailure ( string ? culture )
74+ {
75+ _client . DefaultRequestHeaders . TryAddWithoutValidation ( "Accept-Language" , culture ) ;
76+ var request = RegisterUserRequestJSONMockFactory . CreateMockWithInvalidEmail ( "email.com" ) ;
77+
78+ var response = await _client . PostAsJsonAsync ( "/Users" , request ) ;
79+ await using var body = await response . Content . ReadAsStreamAsync ( ) ;
80+ var result = await JsonDocument . ParseAsync ( body ) ;
81+ var errors = result . RootElement . GetProperty ( "errors" )
82+ . EnumerateArray ( ) . ToList ( ) ;
83+
84+ var expectedMessage = ResourcesAccessor . GetMessageByCulture ( "EMAIL_INVALID" , culture ) ;
85+
86+ Assert . Equal ( HttpStatusCode . BadRequest , response . StatusCode ) ;
87+ Assert . Single ( errors ,
88+ error => error . GetString ( ) ! . Equals ( expectedMessage ) ) ;
89+ }
90+
91+ [ Theory ]
92+ [ ClassData ( typeof ( CultureInlineData ) ) ]
93+ public async Task Test_EmptyPassword_OnFailure ( string ? culture )
94+ {
95+ _client . DefaultRequestHeaders . TryAddWithoutValidation ( "Accept-Language" , culture ) ;
96+ var request = RegisterUserRequestJSONMockFactory . CreateMockWithoutPassword ( ) ;
97+
98+ var response = await _client . PostAsJsonAsync ( "/Users" , request ) ;
99+ await using var body = await response . Content . ReadAsStreamAsync ( ) ;
100+ var result = await JsonDocument . ParseAsync ( body ) ;
101+ var errors = result . RootElement . GetProperty ( "errors" )
102+ . EnumerateArray ( ) . ToList ( ) ;
103+
104+ var expectedMessage = ResourcesAccessor . GetMessageByCulture ( "PASSWORD_REQUIRED" , culture ) ;
105+
106+ Assert . Equal ( HttpStatusCode . BadRequest , response . StatusCode ) ;
107+ Assert . Single ( errors ,
108+ error => error . GetString ( ) ! . Equals ( expectedMessage ) ) ;
109+ }
28110}
0 commit comments