hammer_cli_katello 0.14.1 → 0.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/hammer_cli_katello/apipie_helper.rb +15 -0
- data/lib/hammer_cli_katello/associating_commands.rb +6 -2
- data/lib/hammer_cli_katello/commands.rb +7 -0
- data/lib/hammer_cli_katello/content_view_purge.rb +1 -1
- data/lib/hammer_cli_katello/content_view_version.rb +238 -2
- data/lib/hammer_cli_katello/erratum.rb +4 -0
- data/lib/hammer_cli_katello/file.rb +4 -6
- data/lib/hammer_cli_katello/foreman_search_options_creators.rb +1 -1
- data/lib/hammer_cli_katello/id_resolver.rb +2 -0
- data/lib/hammer_cli_katello/local_helper.rb +9 -0
- data/lib/hammer_cli_katello/module_stream.rb +69 -0
- data/lib/hammer_cli_katello/module_stream_profile.rb +0 -0
- data/lib/hammer_cli_katello/ostree_branch.rb +4 -0
- data/lib/hammer_cli_katello/package_group.rb +4 -0
- data/lib/hammer_cli_katello/puppet_module.rb +4 -0
- data/lib/hammer_cli_katello/repository.rb +21 -7
- data/lib/hammer_cli_katello/repository_scoped_to_product.rb +3 -3
- data/lib/hammer_cli_katello/search_options_creators.rb +10 -2
- data/lib/hammer_cli_katello/sync_plan.rb +6 -8
- data/lib/hammer_cli_katello/version.rb +1 -1
- data/lib/hammer_cli_katello.rb +9 -0
- data/test/data/3.8/foreman_api.json +1 -1
- data/test/data/3.9/foreman_api.json +1 -0
- data/test/functional/apipie_helper_test.rb +26 -0
- data/test/functional/content_view/publish_test.rb +20 -0
- data/test/functional/content_view/version/export_test.rb +87 -0
- data/test/functional/content_view/version/import_test.rb +111 -0
- data/test/functional/content_view/version/incremental_update_test.rb +0 -0
- data/test/functional/local_helper_test.rb +30 -0
- data/test/functional/module_stream/info_test.rb +58 -0
- data/test/functional/module_stream/list_test.rb +53 -0
- data/test/functional/package_group/list_test.rb +14 -9
- data/test/functional/sync_plan/create_test.rb +60 -0
- data/test/functional/sync_plan/delete_test.rb +46 -0
- data/test/functional/sync_plan/update_test.rb +44 -0
- data/test/test_helper.rb +1 -1
- data/test/unit/search_options_creators_test.rb +4 -1
- metadata +30 -9
@@ -0,0 +1,26 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), '../test_helper')
|
2
|
+
|
3
|
+
describe 'apipie helper' do
|
4
|
+
before do
|
5
|
+
class ApipieTestHelper
|
6
|
+
include HammerCLIKatello::ApipieHelper
|
7
|
+
end
|
8
|
+
|
9
|
+
@apipie_helper = ApipieTestHelper.new
|
10
|
+
end
|
11
|
+
|
12
|
+
it "calls show method apipie resource" do
|
13
|
+
api_expects(:repositories, :show).with_params('id' => '1').returns({})
|
14
|
+
assert @apipie_helper.show(:repositories, 'id' => '1')
|
15
|
+
end
|
16
|
+
|
17
|
+
it "calls index method apipie resource" do
|
18
|
+
api_expects(:repositories, :index).with_params('name' => 'foo').returns('results' => [])
|
19
|
+
assert @apipie_helper.index(:repositories, 'name' => 'foo')
|
20
|
+
end
|
21
|
+
|
22
|
+
it "call method for apipie resources works" do
|
23
|
+
api_expects(:repositories, :index).with_params('name' => 'foo').returns('results' => [])
|
24
|
+
assert @apipie_helper.call(:index, :repositories, 'name' => 'foo')
|
25
|
+
end
|
26
|
+
end
|
@@ -2,6 +2,26 @@ require_relative '../test_helper'
|
|
2
2
|
require 'hammer_cli_katello/content_view_puppet_module'
|
3
3
|
|
4
4
|
module HammerCLIKatello
|
5
|
+
describe ContentView do
|
6
|
+
it 'allows major & minor' do
|
7
|
+
ex = api_expects(:organizations, :index) do |p|
|
8
|
+
p[:search] == "name = \"org1\""
|
9
|
+
end
|
10
|
+
ex.returns(index_response([{'id' => 1}]))
|
11
|
+
|
12
|
+
ex = api_expects(:content_views, :index) do |p|
|
13
|
+
p['name'] == 'cv' && p['organization_id'] == 1
|
14
|
+
end
|
15
|
+
ex.returns(index_response([{'id' => 3}]))
|
16
|
+
|
17
|
+
api_expects(:content_views, :publish) do |p|
|
18
|
+
p['id'] == 3 && p['major'] == 5 && p['minor'] == 1
|
19
|
+
end
|
20
|
+
|
21
|
+
run_cmd(%w(content-view publish --major 5 --minor 1 --organization org1 --name cv --async))
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
5
25
|
describe ContentViewPuppetModule do
|
6
26
|
it 'allows adding a puppet module' do
|
7
27
|
ex = api_expects(:organizations, :index) do |p|
|
@@ -0,0 +1,87 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), '../../test_helper')
|
2
|
+
|
3
|
+
describe 'content-view version export' do
|
4
|
+
include ForemanTaskHelpers
|
5
|
+
|
6
|
+
before do
|
7
|
+
@cmd = %w(content-view version export)
|
8
|
+
end
|
9
|
+
|
10
|
+
it "performs export" do
|
11
|
+
params = [
|
12
|
+
'--id=5',
|
13
|
+
'--export-dir=/tmp/exports'
|
14
|
+
]
|
15
|
+
|
16
|
+
ex = api_expects(:content_view_versions, :show)
|
17
|
+
ex.returns(
|
18
|
+
'id' => '5',
|
19
|
+
'repositories' => [{'id' => '2'}],
|
20
|
+
'major' => 1,
|
21
|
+
'minor' => 0,
|
22
|
+
'content_view' => {'name' => 'cv'}
|
23
|
+
)
|
24
|
+
|
25
|
+
ex = api_expects(:repositories, :show).with_params('id' => '2')
|
26
|
+
ex.returns(
|
27
|
+
'id' => '2',
|
28
|
+
'label' => 'Test_Repo',
|
29
|
+
'content_type' => 'yum',
|
30
|
+
'backend_identifier' => 'Default_Organization-Library-Test_Repo',
|
31
|
+
'relative_path' => 'Default_Organization/Library/Test_Repo',
|
32
|
+
'library_instance_id' => '1'
|
33
|
+
)
|
34
|
+
|
35
|
+
api_expects(:repositories, :show).with_params('id' => '1').returns(
|
36
|
+
'id' => '1',
|
37
|
+
'download_policy' => 'immediate'
|
38
|
+
)
|
39
|
+
api_expects(:packages, :index).returns('results' => [])
|
40
|
+
api_expects(:errata, :index).returns('results' => [])
|
41
|
+
|
42
|
+
File.expects(:exist?).with('/usr/share/foreman').returns(true)
|
43
|
+
Dir.expects(:chdir).with("/var/lib/pulp/published/yum/https/repos/").returns(true)
|
44
|
+
Dir.expects(:mkdir).with('/tmp/exports/export-5').returns(0)
|
45
|
+
Dir.expects(:chdir).with('/tmp/exports').returns(0)
|
46
|
+
Dir.expects(:chdir).with('/tmp/exports/export-5').returns(0)
|
47
|
+
|
48
|
+
result = run_cmd(@cmd + params)
|
49
|
+
assert_equal(HammerCLI::EX_OK, result.exit_code)
|
50
|
+
end
|
51
|
+
|
52
|
+
it "fails export if any repository is set to on_demand" do
|
53
|
+
params = [
|
54
|
+
'--id=5',
|
55
|
+
'--export-dir=/tmp/exports'
|
56
|
+
]
|
57
|
+
|
58
|
+
ex = api_expects(:content_view_versions, :show)
|
59
|
+
ex.returns(
|
60
|
+
'id' => '5',
|
61
|
+
'repositories' => [{'id' => '2'}],
|
62
|
+
'major' => 1,
|
63
|
+
'minor' => 0,
|
64
|
+
'content_view' => {'name' => 'cv'}
|
65
|
+
)
|
66
|
+
|
67
|
+
ex = api_expects(:repositories, :show).with_params('id' => '2')
|
68
|
+
ex.returns(
|
69
|
+
'id' => '2',
|
70
|
+
'label' => 'Test_Repo',
|
71
|
+
'content_type' => 'yum',
|
72
|
+
'backend_identifier' => 'Default_Organization-Library-Test_Repo',
|
73
|
+
'relative_path' => 'Default_Organization/Library/Test_Repo',
|
74
|
+
'library_instance_id' => '1'
|
75
|
+
)
|
76
|
+
|
77
|
+
api_expects(:repositories, :show).with_params('id' => '1').returns(
|
78
|
+
'id' => '1',
|
79
|
+
'download_policy' => 'on_demand'
|
80
|
+
)
|
81
|
+
|
82
|
+
File.expects(:exist?).with('/usr/share/foreman').returns(true)
|
83
|
+
|
84
|
+
result = run_cmd(@cmd + params)
|
85
|
+
assert_equal(HammerCLI::EX_SOFTWARE, result.exit_code)
|
86
|
+
end
|
87
|
+
end
|
@@ -0,0 +1,111 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), '../../test_helper')
|
2
|
+
|
3
|
+
describe 'content-view version import' do
|
4
|
+
include ForemanTaskHelpers
|
5
|
+
|
6
|
+
before do
|
7
|
+
@cmd = %w(content-view version import)
|
8
|
+
end
|
9
|
+
|
10
|
+
it "performs import" do
|
11
|
+
params = [
|
12
|
+
'--export-tar=/tmp/exports/export-2.tar',
|
13
|
+
'--organization-id=1'
|
14
|
+
]
|
15
|
+
|
16
|
+
File.expects(:exist?).with('/usr/share/foreman').returns(true)
|
17
|
+
|
18
|
+
File.expects(:exist?).with("/tmp/exports/export-2.tar").returns(true)
|
19
|
+
Dir.expects(:chdir).with('/tmp/exports').returns(0)
|
20
|
+
Dir.expects(:chdir).with('/tmp/exports/export-2').returns(0)
|
21
|
+
File.expects(:read).with("/tmp/exports/export-2/export-2.json").returns(
|
22
|
+
JSON.dump(
|
23
|
+
'name' => 'Foo View',
|
24
|
+
'major' => '5',
|
25
|
+
'minor' => '0',
|
26
|
+
'repositories' => [{
|
27
|
+
'label' => 'foo',
|
28
|
+
'rpm_filenames' => ['foo-1.0-1.el7']
|
29
|
+
}]
|
30
|
+
)
|
31
|
+
)
|
32
|
+
|
33
|
+
ex = api_expects(:content_views, :index)
|
34
|
+
ex = ex.with_params('name' => 'Foo View', 'organization_id' => '1')
|
35
|
+
ex.returns(
|
36
|
+
'results' => [{
|
37
|
+
'id' => '5',
|
38
|
+
'repositories' => [{'id' => '2', 'label' => 'foo'}],
|
39
|
+
'content_view' => {'name' => 'cv'}
|
40
|
+
}]
|
41
|
+
)
|
42
|
+
|
43
|
+
ex = api_expects(:repositories, :index)
|
44
|
+
ex = ex.with_params('organization_id' => '1', 'library' => true)
|
45
|
+
ex.returns(
|
46
|
+
'results' => [{
|
47
|
+
'id' => '2',
|
48
|
+
'label' => 'foo'
|
49
|
+
}]
|
50
|
+
)
|
51
|
+
|
52
|
+
ex = api_expects(:repositories, :sync)
|
53
|
+
ex = ex.with_params('id' => '2', 'source_url' => "file:///tmp/exports/export-2/")
|
54
|
+
ex.returns('id' => '2', 'state' => 'planned')
|
55
|
+
|
56
|
+
expect_foreman_task('3')
|
57
|
+
|
58
|
+
ex = api_expects(:content_views, :publish)
|
59
|
+
ex = ex.with_params(
|
60
|
+
'id' => '5',
|
61
|
+
'major' => '5',
|
62
|
+
'minor' => '0',
|
63
|
+
'repos_units' => [{
|
64
|
+
'label' => 'foo',
|
65
|
+
'rpm_filenames' => ['foo-1.0-1.el7']
|
66
|
+
}]
|
67
|
+
)
|
68
|
+
ex.returns('id' => '2', 'state' => 'planned')
|
69
|
+
|
70
|
+
expect_foreman_task('3')
|
71
|
+
|
72
|
+
result = run_cmd(@cmd + params)
|
73
|
+
assert_equal(HammerCLI::EX_OK, result.exit_code)
|
74
|
+
end
|
75
|
+
|
76
|
+
it "fails import if any repository does not exist" do
|
77
|
+
params = [
|
78
|
+
'--export-tar=/tmp/exports/export-2.tar',
|
79
|
+
'--organization-id=1'
|
80
|
+
]
|
81
|
+
|
82
|
+
File.expects(:exist?).with('/usr/share/foreman').returns(true)
|
83
|
+
|
84
|
+
File.expects(:exist?).with("/tmp/exports/export-2.tar").returns(true)
|
85
|
+
Dir.expects(:chdir).with('/tmp/exports').returns(0)
|
86
|
+
Dir.expects(:chdir).with('/tmp/exports/export-2').returns(0)
|
87
|
+
File.expects(:read).with("/tmp/exports/export-2/export-2.json").returns(
|
88
|
+
JSON.dump(
|
89
|
+
'name' => 'Foo View',
|
90
|
+
'repositories' => ['label' => 'foo']
|
91
|
+
)
|
92
|
+
)
|
93
|
+
|
94
|
+
ex = api_expects(:content_views, :index)
|
95
|
+
ex = ex.with_params('name' => 'Foo View', 'organization_id' => '1')
|
96
|
+
ex.returns(
|
97
|
+
'results' => [{
|
98
|
+
'id' => '5',
|
99
|
+
'repositories' => [{'id' => '2', 'label' => 'foo'}],
|
100
|
+
'content_view' => {'name' => 'cv'}
|
101
|
+
}]
|
102
|
+
)
|
103
|
+
|
104
|
+
ex = api_expects(:repositories, :index)
|
105
|
+
ex = ex.with_params('organization_id' => '1', 'library' => true)
|
106
|
+
ex.returns([])
|
107
|
+
|
108
|
+
result = run_cmd(@cmd + params)
|
109
|
+
assert_equal(HammerCLI::EX_SOFTWARE, result.exit_code)
|
110
|
+
end
|
111
|
+
end
|
File without changes
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), '../test_helper')
|
2
|
+
|
3
|
+
describe 'local helper' do
|
4
|
+
before do
|
5
|
+
class SuperLocalTestHelper
|
6
|
+
def parse_subcommand
|
7
|
+
true
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
class LocalTestHelper < SuperLocalTestHelper
|
12
|
+
include HammerCLIKatello::LocalHelper
|
13
|
+
end
|
14
|
+
|
15
|
+
@local_helper = LocalTestHelper.new
|
16
|
+
end
|
17
|
+
|
18
|
+
it "does not fail if /usr/share/foreman exists" do
|
19
|
+
File.expects(:exist?).with('/usr/share/foreman').returns(true)
|
20
|
+
assert @local_helper.parse_subcommand
|
21
|
+
end
|
22
|
+
|
23
|
+
it "fails if /usr/share/foreman does not exist" do
|
24
|
+
File.expects(:exist?).with('/usr/share/foreman').returns(false)
|
25
|
+
|
26
|
+
assert_raises RuntimeError do
|
27
|
+
@local_helper.parse_subcommand
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
require_relative '../test_helper'
|
2
|
+
require 'hammer_cli_katello/module_stream'
|
3
|
+
|
4
|
+
module HammerCLIKatello
|
5
|
+
describe ModuleStreamCommand::InfoCommand do
|
6
|
+
it 'allows ID' do
|
7
|
+
api_expects(:module_streams, :show).with_params('id' => '1')
|
8
|
+
|
9
|
+
run_cmd(%w(module-stream info --id 1))
|
10
|
+
end
|
11
|
+
|
12
|
+
it 'resolves ID from name and repo id' do
|
13
|
+
api_expects(:module_streams, :index)
|
14
|
+
.with_params(search: "name = \"duck\"", name: "duck", repository_id: "1")
|
15
|
+
.returns(index_response([{'id' => 1}]))
|
16
|
+
|
17
|
+
api_expects(:module_streams, :show)
|
18
|
+
.with_params(repository_id: "1", id: 1)
|
19
|
+
|
20
|
+
run_cmd(%w(module-stream info --name duck --repository-id 1))
|
21
|
+
end
|
22
|
+
|
23
|
+
it 'resolves ID from name, repo name, and product id' do
|
24
|
+
api_expects(:module_streams, :index)
|
25
|
+
.with_params(search: "name = \"walrus\"")
|
26
|
+
.returns(index_response([{'id' => 1}]))
|
27
|
+
|
28
|
+
api_expects(:repositories, :index)
|
29
|
+
.with_params(name: 'zoo', product_id: 1)
|
30
|
+
.returns(index_response([{'id' => 1}]))
|
31
|
+
|
32
|
+
api_expects(:module_streams, :show)
|
33
|
+
.with_params(repository_id: 1, id: 1)
|
34
|
+
|
35
|
+
run_cmd(%w(module-stream info --name walrus --repository zoo --product-id 1))
|
36
|
+
end
|
37
|
+
|
38
|
+
it 'resolves ID from name, repo name, product name, and org id' do
|
39
|
+
api_expects(:products, :index)
|
40
|
+
.with_params(name: "habitat", organization_id: 1)
|
41
|
+
.returns(index_response([{'id' => 1}]))
|
42
|
+
|
43
|
+
api_expects(:module_streams, :index)
|
44
|
+
.with_params(search: "name = \"walrus\"")
|
45
|
+
.returns(index_response([{'id' => 1}]))
|
46
|
+
|
47
|
+
api_expects(:repositories, :index)
|
48
|
+
.with_params(name: 'zoo', product_id: 1)
|
49
|
+
.returns(index_response([{'id' => 1}]))
|
50
|
+
|
51
|
+
api_expects(:module_streams, :show)
|
52
|
+
.with_params(repository_id: 1, id: 1)
|
53
|
+
|
54
|
+
run_cmd(%w(module-stream info --name walrus --repository zoo
|
55
|
+
--product habitat --organization-id 1))
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
require_relative '../test_helper'
|
2
|
+
require 'hammer_cli_katello/module_stream'
|
3
|
+
|
4
|
+
module HammerCLIKatello
|
5
|
+
describe ModuleStreamCommand::ListCommand do
|
6
|
+
it 'allows minimal options' do
|
7
|
+
api_expects(:module_streams, :index)
|
8
|
+
|
9
|
+
run_cmd(%w(module-stream list))
|
10
|
+
end
|
11
|
+
|
12
|
+
it 'can be provided by repository ID' do
|
13
|
+
api_expects(:module_streams, :index).with_params(repository_id: 1)
|
14
|
+
|
15
|
+
run_cmd(%w(module-stream list --repository-id 1))
|
16
|
+
end
|
17
|
+
|
18
|
+
it 'product params needed with repository name' do
|
19
|
+
cmd = run_cmd(%w(module-stream list --repository Repo))
|
20
|
+
error_msg = "At least one of options --product, --product-id is required."
|
21
|
+
api_expects_no_call
|
22
|
+
assert_match error_msg, cmd.err
|
23
|
+
end
|
24
|
+
|
25
|
+
it 'can be provided by repository name and product id' do
|
26
|
+
api_expects(:repositories, :index)
|
27
|
+
.with_params(name: "Repo", product_id: 1)
|
28
|
+
.returns(index_response([{'id' => 1}]))
|
29
|
+
|
30
|
+
api_expects(:module_streams, :index).with_params(repository_id: 1)
|
31
|
+
|
32
|
+
run_cmd(%w(module-stream list --repository Repo --product-id 1))
|
33
|
+
end
|
34
|
+
|
35
|
+
it 'can be provided by repository id and organization id' do
|
36
|
+
api_expects(:module_streams, :index)
|
37
|
+
.with_params(repository_id: 1, organization_id: 1)
|
38
|
+
|
39
|
+
run_cmd(%w(module-stream list --repository-id 1 --organization-id 1))
|
40
|
+
end
|
41
|
+
|
42
|
+
it 'can be provided by repository name, product id, and organization id' do
|
43
|
+
api_expects(:repositories, :index)
|
44
|
+
.with_params(name: "Repo", product_id: 1)
|
45
|
+
.returns(index_response([{'id' => 1}]))
|
46
|
+
|
47
|
+
api_expects(:module_streams, :index)
|
48
|
+
.with_params(repository_id: 1, organization_id: 1)
|
49
|
+
|
50
|
+
run_cmd(%w(module-stream list --repository Repo --product-id 1 --organization-id 1))
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -17,17 +17,22 @@ module HammerCLIKatello
|
|
17
17
|
run_cmd(%w(package-group list --repository-id 1))
|
18
18
|
end
|
19
19
|
|
20
|
-
it '
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
20
|
+
it 'needs product options with repository name' do
|
21
|
+
cmd = run_cmd(%w(package-group list --repository Repo))
|
22
|
+
api_expects_no_call
|
23
|
+
error_msg = "At least one of options --product, --product-id is required."
|
24
|
+
assert_match error_msg, cmd.err
|
25
|
+
end
|
25
26
|
|
26
|
-
|
27
|
-
|
28
|
-
|
27
|
+
it 'can be provided product id and repository name' do
|
28
|
+
api_expects(:repositories, :index)
|
29
|
+
.with_params(name: "Repo", product_id: 1)
|
30
|
+
.returns(index_response([{'id' => 1}]))
|
31
|
+
|
32
|
+
api_expects(:package_groups, :index)
|
33
|
+
.with_params(repository_id: 1)
|
29
34
|
|
30
|
-
run_cmd(%w(package-group list --repository Repo))
|
35
|
+
run_cmd(%w(package-group list --repository Repo --product-id 1))
|
31
36
|
end
|
32
37
|
end
|
33
38
|
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
require_relative '../test_helper'
|
2
|
+
|
3
|
+
describe "create sync plan" do
|
4
|
+
let(:org_id) { 1 }
|
5
|
+
let(:name) { "sync_plan1" }
|
6
|
+
let(:hourly) { "hourly" }
|
7
|
+
let(:custom) { "custom cron" }
|
8
|
+
let(:cron) { "10 * * * *" }
|
9
|
+
let(:date) { "2018-09-08T00:00:00+00:00" }
|
10
|
+
|
11
|
+
it 'with organization ID,name,interval,date and enabled' do
|
12
|
+
api_expects(:sync_plans, :create, 'create a sync plan').
|
13
|
+
with_params('organization_id' => org_id,
|
14
|
+
'name' => name,
|
15
|
+
'interval' => hourly,
|
16
|
+
'sync_date' => date,
|
17
|
+
'enabled' => true)
|
18
|
+
command = %W(sync-plan create --organization-id #{org_id} --name #{name}
|
19
|
+
--interval #{hourly} --enabled 1 --sync-date #{date})
|
20
|
+
assert_equal(0, run_cmd(command).exit_code)
|
21
|
+
end
|
22
|
+
|
23
|
+
it 'with custom cron' do
|
24
|
+
api_expects(:sync_plans, :create, 'create a sync plan').
|
25
|
+
with_params('organization_id' => org_id,
|
26
|
+
'name' => name,
|
27
|
+
'interval' => custom,
|
28
|
+
'cron_expression' => cron,
|
29
|
+
'sync_date' => date,
|
30
|
+
'enabled' => true)
|
31
|
+
# end
|
32
|
+
command = %W(sync-plan create --organization-id #{org_id} --name #{name} --interval #{custom}
|
33
|
+
--cron-expression #{cron} --enabled 1 --sync-date #{date})
|
34
|
+
assert_equal(0, run_cmd(command).exit_code)
|
35
|
+
end
|
36
|
+
|
37
|
+
it 'fails without organization-id' do
|
38
|
+
command = %w(sync-plan create --name #{name}
|
39
|
+
--interval #{hourly} --enabled 1 --sync-date #{date})
|
40
|
+
refute_equal(0, run_cmd(command).exit_code)
|
41
|
+
end
|
42
|
+
|
43
|
+
it 'fails without name' do
|
44
|
+
command = %w(sync-plan create --organization-id #{org_id}
|
45
|
+
--interval #{hourly} --enabled 1 --sync-date #{date})
|
46
|
+
refute_equal(0, run_cmd(command).err)
|
47
|
+
end
|
48
|
+
|
49
|
+
it 'fails without interval' do
|
50
|
+
command = %w(sync-plan create --organization-id #{org_id} --name #{name}
|
51
|
+
--enabled 1 --sync-date #{date})
|
52
|
+
refute_equal(0, run_cmd(command).exit_code)
|
53
|
+
end
|
54
|
+
|
55
|
+
it 'fails without enabled' do
|
56
|
+
command = %w(sync-plan create --organization-id #{org_id} --name #{name}
|
57
|
+
--interval #{hourly} --sync-date #{date})
|
58
|
+
refute_equal(0, run_cmd(command).exit_code)
|
59
|
+
end
|
60
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
require_relative '../test_helper'
|
2
|
+
require_relative 'sync_plan_helpers'
|
3
|
+
require_relative '../organization/organization_helpers'
|
4
|
+
|
5
|
+
describe 'delete a sync plan' do
|
6
|
+
include OrganizationHelpers
|
7
|
+
include SyncPlanHelpers
|
8
|
+
|
9
|
+
let(:org_id) { 1 }
|
10
|
+
let(:id) { 1 }
|
11
|
+
let(:name) { "sync_plan1" }
|
12
|
+
let(:org_name) { "org1" }
|
13
|
+
|
14
|
+
it 'by organization ID and sync plan id' do
|
15
|
+
api_expects(:sync_plans, :destroy, 'delete a sync plan').
|
16
|
+
with_params('organization_id' => org_id,
|
17
|
+
'id' => id)
|
18
|
+
command = %W(sync-plan delete --organization-id #{org_id} --id #{id})
|
19
|
+
assert_equal(0, run_cmd(command).exit_code)
|
20
|
+
end
|
21
|
+
|
22
|
+
it 'by organization ID and sync plan name' do
|
23
|
+
expect_sync_plan_search(1, 'sync_plan1', 1)
|
24
|
+
api_expects(:sync_plans, :destroy, 'delete a sync plan').
|
25
|
+
with_params('id' => id)
|
26
|
+
command = %W(sync-plan delete --organization-id #{org_id} --name #{name})
|
27
|
+
assert_equal(0, run_cmd(command).exit_code)
|
28
|
+
end
|
29
|
+
|
30
|
+
it 'by organization name and sync plan name' do
|
31
|
+
expect_organization_search('org1', 1)
|
32
|
+
expect_sync_plan_search(1, 'sync_plan1', 1)
|
33
|
+
api_expects(:sync_plans, :destroy, 'delete a sync plan').
|
34
|
+
with_params('id' => id)
|
35
|
+
command = %W(sync-plan delete --organization #{org_name} --name #{name})
|
36
|
+
assert_equal(0, run_cmd(command).exit_code)
|
37
|
+
end
|
38
|
+
|
39
|
+
it 'by organization name and sync plan id' do
|
40
|
+
expect_organization_search(org_name, org_id)
|
41
|
+
api_expects(:sync_plans, :destroy, 'delete a sync plan').
|
42
|
+
with_params('id' => id)
|
43
|
+
command = %W(sync-plan delete --organization #{org_name} --id #{id})
|
44
|
+
assert_equal(0, run_cmd(command).exit_code)
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
require_relative '../test_helper'
|
2
|
+
require_relative 'sync_plan_helpers'
|
3
|
+
require_relative '../organization/organization_helpers'
|
4
|
+
|
5
|
+
describe 'update a sync plan' do
|
6
|
+
include OrganizationHelpers
|
7
|
+
include SyncPlanHelpers
|
8
|
+
|
9
|
+
let(:org_id) { 1 }
|
10
|
+
let(:id) { 1 }
|
11
|
+
let(:name) { "sync_plan1" }
|
12
|
+
let(:org_name) { "org1" }
|
13
|
+
let(:desc) { "New Description" }
|
14
|
+
|
15
|
+
it 'with organization id and sync plan ID' do
|
16
|
+
api_expects(:sync_plans, :update, 'update a sync plan').
|
17
|
+
with_params('description' => desc,
|
18
|
+
'id' => id)
|
19
|
+
command = %W(sync-plan update --organization-id #{org_id} --id #{id}
|
20
|
+
--description #{desc})
|
21
|
+
assert_equal(0, run_cmd(command).exit_code)
|
22
|
+
end
|
23
|
+
|
24
|
+
it 'with organization ID and sync plan name' do
|
25
|
+
expect_sync_plan_search(org_id, name, id)
|
26
|
+
api_expects(:sync_plans, :update, 'update a sync plan').
|
27
|
+
with_params('description' => desc,
|
28
|
+
'id' => id)
|
29
|
+
command = %W(sync-plan update --organization-id #{org_id} --name #{name}
|
30
|
+
--description #{desc})
|
31
|
+
assert_equal(0, run_cmd(command).exit_code)
|
32
|
+
end
|
33
|
+
|
34
|
+
it 'with organization name and sync plan name' do
|
35
|
+
expect_organization_search(org_name, org_id)
|
36
|
+
expect_sync_plan_search(org_id, name, id)
|
37
|
+
api_expects(:sync_plans, :update, 'update a sync plan').
|
38
|
+
with_params('description' => desc,
|
39
|
+
'id' => id)
|
40
|
+
command = %W(sync-plan update --organization #{org_name} --name #{name}
|
41
|
+
--description #{desc})
|
42
|
+
assert_equal(0, run_cmd(command).exit_code)
|
43
|
+
end
|
44
|
+
end
|
data/test/test_helper.rb
CHANGED
@@ -17,7 +17,7 @@ require 'minitest/spec'
|
|
17
17
|
require 'mocha/setup'
|
18
18
|
require 'hammer_cli'
|
19
19
|
|
20
|
-
KATELLO_VERSION = Gem::Version.new(ENV['TEST_API_VERSION'] || '3.
|
20
|
+
KATELLO_VERSION = Gem::Version.new(ENV['TEST_API_VERSION'] || '3.9')
|
21
21
|
|
22
22
|
if HammerCLI.context[:api_connection]
|
23
23
|
HammerCLI.context[:api_connection].create('foreman') do
|
@@ -118,9 +118,12 @@ describe HammerCLIKatello::SearchOptionsCreators do
|
|
118
118
|
end # describe 'without the katello api'
|
119
119
|
|
120
120
|
describe '#create_search_options_with_katello_api' do
|
121
|
+
let(:searchable1) { HammerCLIForeman::Searchable.new('one', '') }
|
122
|
+
let(:searchable2) { HammerCLIForeman::Searchable.new('two', '') }
|
123
|
+
|
121
124
|
it 'translates all searchable fields from options' do
|
122
125
|
search_options_creators.stubs(:searchables).
|
123
|
-
returns([
|
126
|
+
returns([searchable1, searchable2])
|
124
127
|
|
125
128
|
search_options_creators.create_search_options_with_katello_api(
|
126
129
|
{'option_one' => 1, 'option_two' => 2}, resource
|