1+ using System . Net ;
2+ using System . Net . Http . Json ;
3+ using System . Text . Json ;
4+ using API . Test . InlineData ;
5+ using CommonTestUtilities . Requests ;
6+ using CommonTestUtilities . Services ;
7+ using RecipesApp . Exception . Resources ;
8+
9+ namespace API . Test . User . Register ;
10+
11+ public class RegisterUserEndpoint ( WebApplicationMockFactory factory )
12+ : IClassFixture < WebApplicationMockFactory >
13+ {
14+ private readonly HttpClient _client = factory . CreateClient ( ) ;
15+
16+ [ Fact ]
17+ public async Task Test_OnSuccess ( )
18+ {
19+ var request = RegisterUserRequestJSONMockFactory . CreateMock ( ) ;
20+
21+ var response = await _client . PostAsJsonAsync ( "/Users" , request ) ;
22+ await using var body = await response . Content . ReadAsStreamAsync ( ) ;
23+ var result = await JsonDocument . ParseAsync ( body ) ;
24+ var username = result . RootElement . GetProperty ( "name" ) . GetString ( ) ;
25+
26+ Assert . Equal ( HttpStatusCode . Created , response . StatusCode ) ;
27+ Assert . False ( string . IsNullOrWhiteSpace ( username ) ) ;
28+ Assert . Equal ( request . Name , username ) ;
29+ }
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+ }
110+ }
0 commit comments