%% TODO: add tests for:
|
|
%% - only part of deps fetched
|
|
%% - only part of deps locked
|
|
%% - output only shown once
|
|
%% - modification asterisk on locked file
|
|
-module(rebar_deps_SUITE).
|
|
-compile(export_all).
|
|
-include_lib("common_test/include/ct.hrl").
|
|
-include_lib("eunit/include/eunit.hrl").
|
|
|
|
all() -> [default_nodep, default_lock].
|
|
|
|
init_per_suite(Config) ->
|
|
application:start(meck),
|
|
Config.
|
|
|
|
end_per_suite(_Config) ->
|
|
application:stop(meck).
|
|
|
|
init_per_testcase(Case, Config) ->
|
|
meck:new(io, [no_link, passthrough, unstick]),
|
|
setup_project(Case, Config).
|
|
|
|
end_per_testcase(_, Config) ->
|
|
meck:unload(),
|
|
Config.
|
|
|
|
config_content() ->
|
|
[{deps, [
|
|
{src_a, ".*", {git, "https://example.org/ferd/src_a.git", {branch, "master"}}},
|
|
{src_b, {git, "https://example.org/ferd/src_b.git", {branch, "master"}}},
|
|
{pkg_a, "1.0.0"}
|
|
]},
|
|
{profiles,
|
|
[{test,
|
|
[{deps, [
|
|
{tdep, {git, "git://example.org/ferd/tdep.git", {tag, "0.8.2"}}}
|
|
]}]
|
|
}]}
|
|
].
|
|
|
|
setup_project(Case, Config0) ->
|
|
Config = rebar_test_utils:init_rebar_state(
|
|
Config0,
|
|
atom_to_list(Case)++"_"
|
|
),
|
|
AppDir = ?config(apps, Config),
|
|
rebar_test_utils:create_app(AppDir, "A", "0.0.0", [kernel, stdlib]),
|
|
TopDeps = proplists:get_value(deps, config_content()),
|
|
StringDeps = [erlang:setelement(1, Dep, atom_to_list(element(1,Dep)))
|
|
|| Dep <- TopDeps],
|
|
RebarConf = rebar_test_utils:create_config(AppDir, [{deps, TopDeps}]),
|
|
mock_git_resource:mock([{deps, lists:filter(fun src_dep/1, StringDeps)}]),
|
|
mock_pkg_resource:mock([{pkgdeps,
|
|
[{{ec_cnv:to_binary(N),
|
|
ec_cnv:to_binary(V)},[]}
|
|
|| {N,V} <- lists:filter(fun pkg_dep/1, StringDeps)]}]),
|
|
[{rebarconfig, RebarConf} | Config].
|
|
|
|
src_dep(Dep) ->
|
|
case element(1, Dep) of
|
|
"src_"++_ -> true;
|
|
_ -> false
|
|
end.
|
|
|
|
pkg_dep(Dep) ->
|
|
case element(1, Dep) of
|
|
"pkg_"++_ -> true;
|
|
_ -> false
|
|
end.
|
|
|
|
default_nodep(Config) ->
|
|
{ok, RebarConfig} = file:consult(?config(rebarconfig, Config)),
|
|
rebar_test_utils:run_and_check(
|
|
Config, RebarConfig, ["deps"], {ok, []}
|
|
),
|
|
History = meck:history(io),
|
|
Strings = [io_lib:format(Str, Args) || {_, {io, format, [Str, Args]}, _} <- History],
|
|
{match, _} = re:run(Strings, "src_a\\* \\(git source\\)"),
|
|
{match, _} = re:run(Strings, "src_b\\* \\(git source\\)"),
|
|
{match, _} = re:run(Strings, "pkg_a\\* \\(package 1.0.0\\)").
|
|
|
|
default_lock(Config) ->
|
|
{ok, RebarConfig} = file:consult(?config(rebarconfig, Config)),
|
|
rebar_test_utils:run_and_check(
|
|
Config, RebarConfig, ["lock"], {ok, []}
|
|
),
|
|
rebar_test_utils:run_and_check(
|
|
Config, RebarConfig, ["deps"], {ok, []}
|
|
),
|
|
History = meck:history(io),
|
|
Strings = [io_lib:format(Str, Args) || {_, {io, format, [Str, Args]}, _} <- History],
|
|
{match, _} = re:run(Strings, "src_a\\ \\(locked git source\\)"),
|
|
{match, _} = re:run(Strings, "src_b\\ \\(locked git source\\)"),
|
|
{match, _} = re:run(Strings, "pkg_a\\ \\(locked package 1.0.0\\)").
|