1: -module(ejabberd_admin_SUITE).
    2: -compile([export_all, nowarn_export_all]).
    3: 
    4: -include_lib("common_test/include/ct.hrl").
    5: -include_lib("eunit/include/eunit.hrl").
    6: -include("jlib.hrl").
    7: 
    8: -import(ejabberd_helper, [data/2]).
    9: 
   10: 
   11: all() ->
   12:     [{group, import_users}].
   13: 
   14: groups() ->
   15:     [{import_users, [], [import_users_from_valid_csv,
   16:                          import_users_from_valid_csv_with_quoted_fields,
   17:                          import_from_invalid_csv]}].
   18: 
   19: init_per_suite(Config) ->
   20:     Config.
   21: 
   22: end_per_suite(_Config) ->
   23:     ok.
   24: 
   25: init_per_group(_, Config) ->
   26:     meck:new(ejabberd_auth, [no_link]),
   27:     meck:expect(ejabberd_auth, try_register,
   28:                 fun(#jid{user = <<"existing_user">>}, _) -> {error, exists};
   29:                    (#jid{user = <<"null_password_user">>}, _) -> {error, null_password};
   30:                    (#jid{server = <<"not_allowed_domain">>}, _) -> {error, not_allowed};
   31:                    (#jid{user = <<"invalid_jid_user">>}, _) -> {error, invalid_jid};
   32:                    (_, _) -> ok
   33:                 end),
   34:     Config.
   35: 
   36: end_per_group(_, _Config) ->
   37:     meck:unload(ejabberd_auth),
   38:     ok.
   39: 
   40: init_per_testcase(_TestCase, Config) ->
   41:     Config.
   42: 
   43: end_per_testcase(_TestCase, _Config) ->
   44:     ok.
   45: 
   46: %%
   47: %% Tests
   48: %%
   49: 
   50: import_users_from_valid_csv(Config) ->
   51:     % given
   52:     ValidCsvPath = data(Config, "valid.csv"),
   53:     % when
   54:     Result = ejabberd_admin:import_users(ValidCsvPath),
   55:     % then
   56:     ?assertEqual([{ok, <<"user">>},
   57:                   {exists, <<"existing_user">>},
   58:                   {null_password, <<"null_password_user">>},
   59:                   {not_allowed, <<"bad_domain_user">>},
   60:                   {invalid_jid, <<"invalid_jid_user">>},
   61:                   {bad_csv, <<"wrong,number,of,fields,line">>}],
   62:                  Result).
   63: 
   64: import_users_from_valid_csv_with_quoted_fields(Config) ->
   65:     % given
   66:     ValidCsvPath = data(Config, "valid_quoted.csv"),
   67:     % when
   68:     Result = ejabberd_admin:import_users(ValidCsvPath),
   69:     % then
   70:     ?assertEqual([{ok, <<"username,with,commas">>}],
   71:                  Result).
   72: 
   73: import_from_invalid_csv(_Config) ->
   74:     % given
   75:     NonExistingPath = "",
   76:     % then
   77:     ?assertError({badmatch, {error, enoent}},
   78:                  ejabberd_admin:import_users(NonExistingPath)).