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{luser = <<"existing_user">>}, _) -> {error, exists};
   30:                    (#jid{luser = <<"null_password_user">>}, _) -> {error, null_password};
   31:                    (#jid{lserver = <<"not_allowed_domain">>}, _) -> {error, not_allowed};
   32:                    (#jid{luser = <<"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:     SortedResult = lists:sort(Result),
   57:     % then
   58:     ?assertEqual([{bad_csv, [<<"wrong,number,of,fields,line">>]},
   59:                   {exists, [#jid{luser = <<"existing_user">>,
   60:                                  lserver = <<"localhost">>,
   61:                                  lresource = <<>>}]},
   62:                   {invalid_jid, [<<"invalid_jid_user,localhost,password">>]},
   63:                   {not_allowed, [#jid{luser = <<"bad_domain_user">>,
   64:                                       lserver = <<"not_allowed_domain">>,
   65:                                       lresource = <<>>}]},
   66: 
   67:                   {null_password, [#jid{luser = <<"null_password_user">>,
   68:                                         lserver = <<"localhost">>,
   69:                                         lresource = <<>>}]},
   70:                   {ok, [#jid{luser = <<"user">>, lserver = <<"localhost">>, lresource = <<>>}]}],
   71:                   SortedResult).
   72: 
   73: import_users_from_valid_csv_with_quoted_fields(Config) ->
   74:     % given
   75:     ValidCsvPath = data(Config, "valid_quoted.csv"),
   76:     % when
   77:     Result = ejabberd_admin:import_users(ValidCsvPath),
   78:     % then
   79:     ?assertEqual([{ok, [#jid{luser = <<"username,with,commas">>,
   80:                              lserver = <<"localhost">>,
   81:                              lresource = <<>>}]}],
   82:                  Result).
   83: 
   84: import_from_invalid_csv(_Config) ->
   85:     % given
   86:     NonExistingPath = "",
   87:     % then
   88:     ?assertError({badmatch, {error, file_not_found}},
   89:                  ejabberd_admin:import_users(NonExistingPath)).