Skip to content

Commit

Permalink
feat: Allow to pass a country and/or a language to the register use…
Browse files Browse the repository at this point in the history
…r method (#754)

* Allow to pass a country and/or a language to the `register` user method

* Some tests for the `register` method

* Force translations on tests
  • Loading branch information
g123k committed Jul 12, 2023
1 parent ce3f319 commit 05c5c12
Show file tree
Hide file tree
Showing 2 changed files with 70 additions and 2 deletions.
12 changes: 11 additions & 1 deletion lib/src/open_food_api_client.dart
Original file line number Diff line number Diff line change
Expand Up @@ -1134,6 +1134,8 @@ class OpenFoodAPIClient {
required String email,
String? orgName,
bool newsletter = true,
final OpenFoodFactsLanguage? language,
final OpenFoodFactsCountry? country,
QueryType? queryType,
}) async {
if (name.length > USER_NAME_MAX_LENGTH) {
Expand All @@ -1142,12 +1144,20 @@ class OpenFoodAPIClient {
);
}

var registerUri = UriHelper.getUri(
Uri registerUri = UriHelper.getUri(
path: '/cgi/user.pl',
queryType: queryType,
addUserAgentParameters: false,
);

if (language != null || country != null) {
registerUri = UriHelper.replaceSubdomain(
registerUri,
language: language,
country: country,
);
}

Map<String, String> data = <String, String>{
'name': name,
'email': email,
Expand Down
60 changes: 59 additions & 1 deletion test/user_management_test_prod.dart
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,8 @@ void main() {
OpenFoodAPIConfiguration.userAgent = TestConstants.TEST_USER_AGENT;
OpenFoodAPIConfiguration.globalQueryType = QueryType.PROD;

group('Create existing user', () {
group('Create existing user (without specifying a country, nor a language)',
() {
final User user = TestConstants.PROD_USER;
final String email = 'grumpf@gmx.de';

Expand Down Expand Up @@ -57,6 +58,63 @@ void main() {
});
});

group('Create existing user by forcing a country + language', () {
final User user = TestConstants.PROD_USER;
final String email = 'grumpf@gmx.de';
final OpenFoodFactsCountry country = OpenFoodFactsCountry.FRANCE;
final OpenFoodFactsLanguage language = OpenFoodFactsLanguage.FRENCH;

test('Create a FR-fr user with a long username', () async {
String randomUserName = List.filled(
OpenFoodAPIClient.USER_NAME_MAX_LENGTH + 1,
'A',
).join();

expect(
OpenFoodAPIClient.register(
name: randomUserName,
user: user,
email: email,
country: country,
language: language,
),
throwsArgumentError,
);
});

test('Create an existing FR-fr user', () async {
SignUpStatus response = await OpenFoodAPIClient.register(
name: 'Irrelevant',
user: user,
email: email,
country: country,
language: language,
);
expect(response.status, 400);
expect(
response.error!.contains(
'Ce nom d\'utilisateur existe déjà, choisissez en un autre.'),
isTrue,
);
});

test('Create a FR-fr user with an existing email', () async {
SignUpStatus response = await OpenFoodAPIClient.register(
name: _generateRandomString(OpenFoodAPIClient.USER_NAME_MAX_LENGTH),
user: user,
email: 'test@test.com',
country: country,
language: language,
);
expect(response.status, 400);
expect(
response.error!.contains(
'Ce nom d\'utilisateur existe déjà, choisissez en un autre.'),
isTrue,
);
});
});

test('Login', () async {
final LoginStatus? status = await OpenFoodAPIClient.login2(
TestConstants.PROD_USER,
Expand Down

0 comments on commit 05c5c12

Please sign in to comment.