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:     {ok, _} = application:ensure_all_started(jid),
   21:     Config.
   22: 
   23: end_per_suite(_Config) ->
   24:     ok.
   25: 
   26: init_per_group(_, Config) ->
   27:     meck:new(ejabberd_auth, [no_link]),
   28:     meck:expect(ejabberd_auth, try_register,
   29:                 fun(#jid{user = <<"existing_user">>}, _) -> {error, exists};
   30:                    (#jid{user = <<"null_password_user">>}, _) -> {error, null_password};
   31:                    (#jid{server = <<"not_allowed_domain">>}, _) -> {error, not_allowed};
   32:                    (#jid{user = <<"invalid_jid_user">>}, _) -> {error, invalid_jid};
   33:                    (_, _) -> ok
   34:                 end),
   35:     Config.
   36: 
   37: end_per_group(_, _Config) ->
   38:     meck:unload(ejabberd_auth),
   39:     ok.
   40: 
   41: init_per_testcase(_TestCase, Config) ->
   42:     Config.
   43: 
   44: end_per_testcase(_TestCase, _Config) ->
   45:     ok.
   46: 
   47: %%
   48: %% Tests
   49: %%
   50: 
   51: import_users_from_valid_csv(Config) ->
   52:     % given
   53:     ValidCsvPath = data(Config, "valid.csv"),
   54:     % when
   55:     Result = ejabberd_admin:import_users(ValidCsvPath),
   56:     % then
   57:     ?assertEqual([{ok, <<"user">>},
   58:                   {exists, <<"existing_user">>},
   59:                   {null_password, <<"null_password_user">>},
   60:                   {not_allowed, <<"bad_domain_user">>},
   61:                   {invalid_jid, <<"invalid_jid_user">>},
   62:                   {bad_csv, <<"wrong,number,of,fields,line">>}],
   63:                  Result).
   64: 
   65: import_users_from_valid_csv_with_quoted_fields(Config) ->
   66:     % given
   67:     ValidCsvPath = data(Config, "valid_quoted.csv"),
   68:     % when
   69:     Result = ejabberd_admin:import_users(ValidCsvPath),
   70:     % then
   71:     ?assertEqual([{ok, <<"username,with,commas">>}],
   72:                  Result).
   73: 
   74: import_from_invalid_csv(_Config) ->
   75:     % given
   76:     NonExistingPath = "",
   77:     % then
   78:     ?assertError({badmatch, {error, enoent}},
   79:                  ejabberd_admin:import_users(NonExistingPath)).