dk-pkg 0.0.1 → 0.1.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- data.tar.gz: 938181da0a915713d54443c5597e23eaa6dee215
4
- metadata.gz: bbd5ad3bb01f18268f93b23e972db8c93336fec5
3
+ metadata.gz: 11771e7a75edaca8db188e72bd1227074b519b40
4
+ data.tar.gz: bacebe6f8f0ef66f8338ac97326ea98e9df23b46
5
5
  SHA512:
6
- data.tar.gz: 408c329a61e4e081060345704ef97e76830179f27f20ce5ac6b72e30d2cd1966240ce236f7a558b5a5d28bd563a7865d117045ccf62f83629f383eb4ee2d43eb
7
- metadata.gz: 758874d4b2719a306863b0d36f5782d6572fbcd00491c49e3774d5f8b542a00efa0eecb0f35188020adb5167ee6579b389c74c0163bc50ddd247596daf0f2f2e
6
+ metadata.gz: f00bd74d6913fc2511fd86c71599285b544ea1309f24e426d253b3f59890320f1a7e512d7502dcdadd1f484689d989772d2cc6ff2ab16f84d63851bb0d3c637a
7
+ data.tar.gz: 7144274536ee8403fc32138e20339881cdcefa82a65db83d3cc89d97cd17d6a955cdbc30c5c932d00bafb067292fe87edd527d52f5d196090c7e37848608dbc3
@@ -18,6 +18,9 @@ Gem::Specification.new do |gem|
18
18
  gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
19
19
  gem.require_paths = ["lib"]
20
20
 
21
- gem.add_development_dependency("assert", ["~> 2.16.1"])
21
+ gem.add_development_dependency("assert", ["~> 2.16.3"])
22
+
23
+ gem.add_dependency("dk", ["~> 0.1.0"])
24
+ gem.add_dependency("much-plugin", ["~> 0.2.0"])
22
25
 
23
26
  end
@@ -1,5 +1,6 @@
1
- require "dk-pkg/version"
1
+ require 'dk-pkg/version'
2
+ require 'dk-pkg/constants'
3
+ require 'dk-pkg/install_pkg'
2
4
 
3
- module Dk; end
4
- module Dk::Pkg
5
- end
5
+ # require the tasks for convenience
6
+ require 'dk-pkg/validate'
@@ -0,0 +1,11 @@
1
+ module Dk; end
2
+ module Dk::Pkg
3
+
4
+ MANIFEST_PATH_PARAM_NAME = 'dk_pkg_manifest_path'.freeze
5
+ MANIFEST_MODE_PARAM_NAME = 'dk_pkg_manifest_mode'.freeze
6
+ MANIFEST_OWNER_PARAM_NAME = 'dk_pkg_manifest_owner'.freeze
7
+ INSTALLED_PKGS_PARAM_NAME = 'dk_pkg_installed_pkgs'.freeze
8
+
9
+ MANIFEST_SEPARATOR = "\n".freeze
10
+
11
+ end
@@ -0,0 +1,83 @@
1
+ require 'dk/task'
2
+ require 'much-plugin'
3
+ require 'dk-pkg/constants'
4
+ require 'dk-pkg/validate'
5
+
6
+ module Dk::Pkg
7
+
8
+ module InstallPkg
9
+ include MuchPlugin
10
+
11
+ WRITE_MANIFEST_CMD_STR_PROC = proc{ |manifest_path| "tee #{manifest_path}" }
12
+
13
+ plugin_included do
14
+ include Dk::Task
15
+ include InstanceMethods
16
+
17
+ before Dk::Pkg::Validate
18
+
19
+ end
20
+
21
+ module InstanceMethods
22
+
23
+ private
24
+
25
+ def install_pkg(name)
26
+ raise(ArgumentError, "a pkg name must be provided") if name.to_s.empty?
27
+ raise(ArgumentError, "no block given") unless block_given?
28
+
29
+ if !params[INSTALLED_PKGS_PARAM_NAME].include?(name)
30
+ yield
31
+ dk_pkg_write_pkg_to_manifest(name)
32
+ else
33
+ log_info "#{name.inspect} has already been installed"
34
+ end
35
+ end
36
+
37
+ def dk_pkg_write_pkg_to_manifest(name)
38
+ pkgs = params[INSTALLED_PKGS_PARAM_NAME] + [name]
39
+ serialized_pkgs = Manifest.serialize(pkgs)
40
+ cmd!(
41
+ WRITE_MANIFEST_CMD_STR_PROC.call(params[MANIFEST_PATH_PARAM_NAME]),
42
+ serialized_pkgs
43
+ )
44
+ set_param INSTALLED_PKGS_PARAM_NAME, Manifest.deserialize(serialized_pkgs)
45
+ end
46
+
47
+ end
48
+
49
+ module TestHelpers
50
+ include MuchPlugin
51
+
52
+ plugin_included do
53
+ include Dk::Pkg::Validate::TestHelpers
54
+ include InstanceMethods
55
+
56
+ end
57
+
58
+ module InstanceMethods
59
+
60
+ def assert_dk_pkg_installed(test_runner, pkg_name)
61
+ assert_includes pkg_name, test_runner.params[INSTALLED_PKGS_PARAM_NAME]
62
+ end
63
+
64
+ def non_dk_install_pkg_runs(test_runner, test_runner_runs)
65
+ manifest_path = test_runner.params[MANIFEST_PATH_PARAM_NAME]
66
+ write_manifest_cmd_str = WRITE_MANIFEST_CMD_STR_PROC.call(manifest_path)
67
+
68
+ test_runner_runs.reject do |run|
69
+ validate_task_run = run.kind_of?(Dk::TaskRun) &&
70
+ run.task_class == Dk::Pkg::Validate
71
+ write_manifest_cmd = run.kind_of?(Dk::Local::CmdSpy) &&
72
+ run.cmd_str == write_manifest_cmd_str
73
+ validate_task_run || write_manifest_cmd
74
+ end
75
+ end
76
+
77
+ end
78
+
79
+ end
80
+
81
+ end
82
+
83
+ end
@@ -0,0 +1,27 @@
1
+ require 'dk-pkg/constants'
2
+
3
+ module Dk::Pkg
4
+
5
+ module Manifest
6
+
7
+ def self.serialize(pkgs)
8
+ raise ArgumentError, "pkgs must be an array" if !pkgs.kind_of?(Array)
9
+ sanitize_array(pkgs).join(MANIFEST_SEPARATOR)
10
+ end
11
+
12
+ def self.deserialize(serialized_pkgs)
13
+ if !serialized_pkgs.kind_of?(String)
14
+ raise ArgumentError, "serialized pkgs must be a string"
15
+ end
16
+ sanitize_array(serialized_pkgs.split(MANIFEST_SEPARATOR))
17
+ end
18
+
19
+ private
20
+
21
+ def self.sanitize_array(array)
22
+ array.compact.uniq.map(&:to_s).reject(&:empty?).sort
23
+ end
24
+
25
+ end
26
+
27
+ end
@@ -0,0 +1,55 @@
1
+ require 'dk/task'
2
+ require 'dk-pkg/constants'
3
+ require 'dk-pkg/manifest'
4
+
5
+ module Dk::Pkg
6
+
7
+ class Validate
8
+ include Dk::Task
9
+
10
+ desc "(dk-pkg) validate the required dk-pkg params"
11
+
12
+ run_only_once true
13
+
14
+ def run!
15
+ # validate that a manifest path has been set, so we can parse it
16
+ if params[MANIFEST_PATH_PARAM_NAME].to_s.empty?
17
+ raise ArgumentError, "no #{MANIFEST_PATH_PARAM_NAME.inspect} param set"
18
+ end
19
+
20
+ if !cmd("test -e #{params[MANIFEST_PATH_PARAM_NAME]}").success?
21
+ cmd! "touch #{params[MANIFEST_PATH_PARAM_NAME]}"
22
+ if param?(MANIFEST_MODE_PARAM_NAME)
23
+ cmd! "chmod #{params[MANIFEST_MODE_PARAM_NAME]} " \
24
+ "#{params[MANIFEST_PATH_PARAM_NAME]}"
25
+ end
26
+ if param?(MANIFEST_OWNER_PARAM_NAME)
27
+ cmd! "chown #{params[MANIFEST_OWNER_PARAM_NAME]} " \
28
+ "#{params[MANIFEST_PATH_PARAM_NAME]}"
29
+ end
30
+ end
31
+ serialized_pkgs = cmd!("cat #{params[MANIFEST_PATH_PARAM_NAME]}").stdout
32
+ set_param INSTALLED_PKGS_PARAM_NAME, Manifest.deserialize(serialized_pkgs)
33
+ end
34
+
35
+ module TestHelpers
36
+ include MuchPlugin
37
+
38
+ plugin_included do
39
+ include Dk::Task::TestHelpers
40
+
41
+ setup do
42
+ @dk_pkg_installed_pkgs ||= []
43
+
44
+ @params ||= {}
45
+ @params[MANIFEST_PATH_PARAM_NAME] ||= Factory.file_path
46
+ @params[INSTALLED_PKGS_PARAM_NAME] ||= @dk_pkg_installed_pkgs
47
+ end
48
+
49
+ end
50
+
51
+ end
52
+
53
+ end
54
+
55
+ end
@@ -1,4 +1,4 @@
1
1
  module Dk; end
2
2
  module Dk::Pkg
3
- VERSION = "0.0.1"
3
+ VERSION = "0.1.0"
4
4
  end
@@ -1,6 +1,11 @@
1
1
  require 'assert/factory'
2
+ require 'dk-pkg/manifest'
2
3
 
3
4
  module Factory
4
5
  extend Assert::Factory
5
6
 
7
+ def self.manifest_pkgs
8
+ Factory.integer(3).times.map{ Factory.string }.sort
9
+ end
10
+
6
11
  end
@@ -0,0 +1,26 @@
1
+ require 'assert'
2
+ require 'dk-pkg'
3
+
4
+ module Dk::Pkg
5
+
6
+ class UnitTests < Assert::Context
7
+ desc "Dk::Pkg"
8
+ setup do
9
+ @module = Dk::Pkg
10
+ end
11
+ subject{ @module }
12
+
13
+ should "know its param names" do
14
+ assert_equal 'dk_pkg_manifest_path', MANIFEST_PATH_PARAM_NAME
15
+ assert_equal 'dk_pkg_manifest_mode', MANIFEST_MODE_PARAM_NAME
16
+ assert_equal 'dk_pkg_manifest_owner', MANIFEST_OWNER_PARAM_NAME
17
+ assert_equal 'dk_pkg_installed_pkgs', INSTALLED_PKGS_PARAM_NAME
18
+ end
19
+
20
+ should "know its manifest separator" do
21
+ assert_equal "\n", MANIFEST_SEPARATOR
22
+ end
23
+
24
+ end
25
+
26
+ end
@@ -0,0 +1,162 @@
1
+ require 'assert'
2
+ require 'dk-pkg/install_pkg'
3
+
4
+ require 'dk/task'
5
+ require 'much-plugin'
6
+ require 'dk-pkg/constants'
7
+ require 'dk-pkg/validate'
8
+
9
+ module Dk::Pkg::InstallPkg
10
+
11
+ class UnitTests < Assert::Context
12
+ include Dk::Pkg::Validate::TestHelpers
13
+
14
+ desc "Dk::Pkg::InstallPkg"
15
+ subject{ Dk::Pkg::InstallPkg }
16
+
17
+ should "use much-plugin" do
18
+ assert_includes MuchPlugin, subject
19
+ end
20
+
21
+ end
22
+
23
+ class MixinTests < UnitTests
24
+ desc "mixin"
25
+ setup do
26
+ @task_class = Class.new{ include Dk::Pkg::InstallPkg }
27
+ end
28
+ subject{ @task_class }
29
+
30
+ should "be a Dk task" do
31
+ assert_includes Dk::Task, subject
32
+ end
33
+
34
+ should "run the Validate task as a before callback" do
35
+ assert_equal [Dk::Pkg::Validate], subject.before_callback_task_classes
36
+ end
37
+
38
+ end
39
+
40
+ class InitTests < MixinTests
41
+ desc "when init"
42
+ setup do
43
+ @task_class.class_eval do
44
+ def run!
45
+ install_pkg params['pkg-name'] do
46
+ set_param 'install-pkg-yielded', true
47
+ end
48
+ end
49
+ end
50
+ @params['pkg-name'] = Factory.string
51
+ @params['install-pkg-yielded'] = false
52
+
53
+ @runner = test_runner(@task_class, :params => @params)
54
+ end
55
+ subject{ @runner }
56
+
57
+ should "provide an install pkg helper" do
58
+ subject.run
59
+
60
+ assert_true subject.params['install-pkg-yielded']
61
+ # there will always be +1 because of the Validate task being run
62
+ assert_equal 2, subject.runs.size
63
+ tee_cmd = subject.runs.last
64
+ exp = "tee #{@params[Dk::Pkg::MANIFEST_PATH_PARAM_NAME]}"
65
+ assert_equal exp, tee_cmd.cmd_str
66
+
67
+ exp_pkgs = [@params['pkg-name']]
68
+ assert_equal Dk::Pkg::Manifest.serialize(exp_pkgs), tee_cmd.run_input
69
+
70
+ assert_equal exp_pkgs, subject.params[Dk::Pkg::INSTALLED_PKGS_PARAM_NAME]
71
+ end
72
+
73
+ should "not yield or run any commands if the pkg is already installed" do
74
+ @params[Dk::Pkg::INSTALLED_PKGS_PARAM_NAME] << @params['pkg-name']
75
+ runner = test_runner(@task_class, :params => @params)
76
+ runner.run
77
+
78
+ assert_false runner.params['install-pkg-yielded']
79
+ # there will always be +1 because of the Validate task being run
80
+ assert_equal 1, runner.runs.size
81
+ end
82
+
83
+ should "complain if passed invalid args" do
84
+ assert_raises(ArgumentError) do
85
+ subject.task.instance_eval{ install_pkg([nil, ''].sample){ } }
86
+ end
87
+ assert_raises(ArgumentError) do
88
+ subject.task.instance_eval{ install_pkg(Factory.string) }
89
+ end
90
+ end
91
+
92
+ end
93
+
94
+ class TestHelpersTests < UnitTests
95
+ desc "TestHelpers"
96
+ setup do
97
+ @task_class = Class.new do
98
+ include Dk::Pkg::InstallPkg
99
+
100
+ def run!
101
+ params['pkgs'].each do |(pkg_name, pkg_cmd)|
102
+ install_pkg(pkg_name){ cmd(pkg_cmd) }
103
+ end
104
+ run_task TestTask
105
+ end
106
+ end
107
+
108
+ # use an array of tuples so we don't have to worry about hash randomly
109
+ # ordering its key/values when testing
110
+ @params['pkgs'] = Factory.integer(3).times.map do
111
+ [Factory.string, Factory.string]
112
+ end
113
+ @runner = test_runner(@task_class, :params => @params)
114
+ @runner.run
115
+
116
+ @context_class = Class.new do
117
+ def self.setup(&block); end # needed for `Dk::Pkg::Validate::TestHelpers`
118
+ include Dk::Pkg::InstallPkg::TestHelpers
119
+
120
+ def initialize(assert_context)
121
+ @assert_context = assert_context
122
+ end
123
+
124
+ # needed to test `assert_dk_pkg_installed`
125
+ def assert_includes(*args)
126
+ @assert_context.assert_includes(*args)
127
+ end
128
+ end
129
+ @context = @context_class.new(self)
130
+ end
131
+ subject{ @context }
132
+
133
+ should have_imeths :assert_dk_pkg_installed, :non_dk_install_pkg_runs
134
+
135
+ should "use much-plugin" do
136
+ assert_includes MuchPlugin, Dk::Pkg::InstallPkg::TestHelpers
137
+ end
138
+
139
+ should "include dk-pkg Validate test helpers" do
140
+ assert_includes Dk::Pkg::Validate::TestHelpers, @context_class
141
+ end
142
+
143
+ should "provide a helper for asserting a pkg was installed" do
144
+ @params['pkgs'].each do |pkg_name, pkg_cmd|
145
+ subject.assert_dk_pkg_installed(@runner, pkg_name)
146
+ end
147
+ end
148
+
149
+ should "know how to select non dk-pkg install pkg runs" do
150
+ runs = subject.non_dk_install_pkg_runs(@runner, @runner.runs)
151
+ assert_not_equal runs, @runner.runs
152
+ assert_equal @params['pkgs'].size + 1, runs.size
153
+ cmd_runs = runs[0, @params['pkgs'].size]
154
+ assert_equal @params['pkgs'].map(&:last), cmd_runs.map(&:cmd_str)
155
+ assert_equal TestTask, runs.last.task_class
156
+ end
157
+
158
+ end
159
+
160
+ TestTask = Class.new{ include Dk::Task }
161
+
162
+ end
@@ -0,0 +1,63 @@
1
+ require 'assert'
2
+ require 'dk-pkg/manifest'
3
+
4
+ require 'dk-pkg/constants'
5
+
6
+ module Dk::Pkg::Manifest
7
+
8
+ class UnitTests < Assert::Context
9
+ desc "Dk::Pkg::Manifest"
10
+ setup do
11
+ @pkgs = Factory.manifest_pkgs
12
+ end
13
+ subject{ Dk::Pkg::Manifest }
14
+
15
+ should have_imeths :serialize, :deserialize
16
+
17
+ should "know how to serialize and deserialize" do
18
+ exp = @pkgs.join(Dk::Pkg::MANIFEST_SEPARATOR)
19
+ serialized_pkgs = subject.serialize(@pkgs)
20
+ assert_equal exp, serialized_pkgs
21
+ assert_equal @pkgs, subject.deserialize(serialized_pkgs)
22
+ end
23
+
24
+ should "clean pkg names using serialize/deserialize" do
25
+ valid_pkgs = Factory.manifest_pkgs.shuffle # randomize their order
26
+ non_string_pkgs = [Factory.integer, Factory.boolean, Factory.float]
27
+ duplicate_pkg = Factory.string
28
+ pkgs = valid_pkgs +
29
+ non_string_pkgs + # add non strings
30
+ ([duplicate_pkg] * Factory.integer(3)) + # add duplicates
31
+ ([nil] * Factory.integer(3)) + # add `nil` packages
32
+ ([""] * Factory.integer(3)) # add empty string packages
33
+ serialized_pkgs = pkgs.shuffle.join(Dk::Pkg::MANIFEST_SEPARATOR)
34
+
35
+ exp_pkgs = (valid_pkgs + non_string_pkgs + [duplicate_pkg]).map(&:to_s).sort
36
+ exp_serialized_pkgs = exp_pkgs.join(Dk::Pkg::MANIFEST_SEPARATOR)
37
+
38
+ assert_equal exp_serialized_pkgs, subject.serialize(pkgs)
39
+ assert_equal exp_pkgs, subject.deserialize(serialized_pkgs)
40
+ end
41
+
42
+ should "handle special cases using serialize/deserialize" do
43
+ # a single item
44
+ pkg = Factory.string
45
+ assert_equal pkg, subject.serialize([pkg])
46
+ assert_equal [pkg], subject.deserialize(pkg)
47
+
48
+ assert_equal "", subject.serialize([])
49
+ assert_equal [], subject.deserialize("")
50
+ end
51
+
52
+ should "complain if serialize/deserialize is passed invalid args" do
53
+ assert_raises(ArgumentError){ subject.serialize(nil) }
54
+ assert_raises(ArgumentError){ subject.serialize(Factory.string) }
55
+
56
+ assert_raises(ArgumentError){ subject.deserialize(nil) }
57
+ array = Factory.integer(3).times.map{ Factory.string }
58
+ assert_raises(ArgumentError){ subject.deserialize(array) }
59
+ end
60
+
61
+ end
62
+
63
+ end
@@ -0,0 +1,197 @@
1
+ require 'assert'
2
+ require 'dk-pkg/validate'
3
+
4
+ require 'dk/task'
5
+ require 'dk-pkg/constants'
6
+ require 'dk-pkg/manifest'
7
+
8
+ class Dk::Pkg::Validate
9
+
10
+ class UnitTests < Assert::Context
11
+ desc "Dk::Pkg::Validate"
12
+ setup do
13
+ @task_class = Dk::Pkg::Validate
14
+ end
15
+ subject{ @task_class }
16
+
17
+ should "be a Dk task" do
18
+ assert_includes Dk::Task, subject
19
+ end
20
+
21
+ should "know its description" do
22
+ exp = "(dk-pkg) validate the required dk-pkg params"
23
+ assert_equal exp, subject.description
24
+ end
25
+
26
+ should "only run once" do
27
+ assert_true subject.run_only_once
28
+ end
29
+
30
+ end
31
+
32
+ class RunSetupTests < UnitTests
33
+ include Dk::Task::TestHelpers
34
+
35
+ desc "when run"
36
+ setup do
37
+ @manifest_path = Factory.file_path
38
+ @manifest_mode = Factory.string
39
+ @manifest_owner = Factory.string
40
+ @installed_pkgs = Factory.manifest_pkgs
41
+
42
+ @exp_test_cmd = "test -e #{@manifest_path}"
43
+ @exp_cat_cmd = "cat #{@manifest_path}"
44
+
45
+ @params = {
46
+ Dk::Pkg::MANIFEST_PATH_PARAM_NAME => @manifest_path,
47
+ Dk::Pkg::MANIFEST_MODE_PARAM_NAME => @manifest_mode,
48
+ Dk::Pkg::MANIFEST_OWNER_PARAM_NAME => @manifest_owner
49
+ }
50
+ end
51
+ subject{ @runner }
52
+
53
+ private
54
+
55
+ def stub_test_manifest_file_exists_cmd(runner, success)
56
+ @runner.stub_cmd(@exp_test_cmd){ |s| s.exitstatus = success ? 0 : 1 }
57
+ end
58
+
59
+ def stub_cat_manifest_file_cmd(runner, manifest = nil)
60
+ manifest ||= Dk::Pkg::Manifest.serialize(@installed_pkgs)
61
+ runner.stub_cmd(@exp_cat_cmd){ |s| s.stdout = manifest }
62
+ end
63
+
64
+ end
65
+
66
+ class RunTests < RunSetupTests
67
+ setup do
68
+ @runner = test_runner(@task_class, :params => @params)
69
+ stub_test_manifest_file_exists_cmd(@runner, false)
70
+ stub_cat_manifest_file_cmd(@runner)
71
+ @runner.run
72
+ end
73
+
74
+ should "parse the manifest file and set the installed pkgs param" do
75
+ assert_equal 5, subject.runs.size
76
+
77
+ test_cmd, touch_cmd, chmod_cmd, chown_cmd, cat_cmd = subject.runs
78
+ assert_equal @exp_test_cmd, test_cmd.cmd_str
79
+ assert_equal "touch #{@manifest_path}", touch_cmd.cmd_str
80
+ assert_equal "chmod #{@manifest_mode} #{@manifest_path}", chmod_cmd.cmd_str
81
+ assert_equal "chown #{@manifest_owner} #{@manifest_path}", chown_cmd.cmd_str
82
+ assert_equal @exp_cat_cmd, cat_cmd.cmd_str
83
+
84
+ exp = @installed_pkgs
85
+ assert_equal exp, subject.params[Dk::Pkg::INSTALLED_PKGS_PARAM_NAME]
86
+ end
87
+
88
+ end
89
+
90
+ class RunWithEmptyManifestTests < RunSetupTests
91
+ desc "and the manifest is empty"
92
+ setup do
93
+ @runner = test_runner(@task_class, :params => @params)
94
+ stub_test_manifest_file_exists_cmd(@runner, Factory.boolean)
95
+ stub_cat_manifest_file_cmd(@runner, "")
96
+ @runner.run
97
+ end
98
+
99
+ should "parse the manifest file and set the installed pkgs param" do
100
+ assert_equal [], subject.params[Dk::Pkg::INSTALLED_PKGS_PARAM_NAME]
101
+ end
102
+
103
+ end
104
+
105
+ class RunWithExistingManifestTests < RunSetupTests
106
+ desc "and the manifest already exists"
107
+ setup do
108
+ @runner = test_runner(@task_class, :params => @params)
109
+ stub_test_manifest_file_exists_cmd(@runner, true)
110
+ stub_cat_manifest_file_cmd(@runner)
111
+ @runner.run
112
+ end
113
+
114
+ should "not create the manifest file but still parse it" do
115
+ assert_equal 2, subject.runs.size
116
+
117
+ test_cmd, cat_cmd = subject.runs
118
+ assert_equal @exp_test_cmd, test_cmd.cmd_str
119
+ assert_equal @exp_cat_cmd, cat_cmd.cmd_str
120
+
121
+ exp = @installed_pkgs
122
+ assert_equal exp, subject.params[Dk::Pkg::INSTALLED_PKGS_PARAM_NAME]
123
+ end
124
+
125
+ end
126
+
127
+ class RunOnNewWithoutModeOrOwnerParamsTests < RunSetupTests
128
+ desc "with a new manifest but no mode/owner params set"
129
+ setup do
130
+ @params.delete(Dk::Pkg::MANIFEST_MODE_PARAM_NAME)
131
+ @params.delete(Dk::Pkg::MANIFEST_OWNER_PARAM_NAME)
132
+
133
+ @runner = test_runner(@task_class, :params => @params)
134
+ stub_test_manifest_file_exists_cmd(@runner, false)
135
+ stub_cat_manifest_file_cmd(@runner)
136
+ @runner.run
137
+ end
138
+
139
+ should "create the manifest file but not change its mode/owner" do
140
+ assert_equal 3, subject.runs.size
141
+
142
+ test_cmd, touch_cmd, cat_cmd = subject.runs
143
+ assert_equal @exp_test_cmd, test_cmd.cmd_str
144
+ assert_equal "touch #{@manifest_path}", touch_cmd.cmd_str
145
+ assert_equal @exp_cat_cmd, cat_cmd.cmd_str
146
+
147
+ exp = @installed_pkgs
148
+ assert_equal exp, subject.params[Dk::Pkg::INSTALLED_PKGS_PARAM_NAME]
149
+ end
150
+
151
+ end
152
+
153
+ class RunWithoutManifestPathTests < RunSetupTests
154
+ desc "and the manifest path param isn't set"
155
+ setup do
156
+ @params[Dk::Pkg::MANIFEST_PATH_PARAM_NAME] = [nil, ''].sample
157
+ end
158
+
159
+ should "complain about the param not being set" do
160
+ runner = test_runner(@task_class, :params => @params)
161
+ assert_raises(ArgumentError){ runner.run }
162
+ end
163
+
164
+ end
165
+
166
+ class TestHelpersTests < UnitTests
167
+ desc "TestHelpers"
168
+ setup do
169
+ @context_class = Class.new do
170
+ def self.setup_blocks; @setup_blocks ||= []; end
171
+ def self.setup(&block)
172
+ self.setup_blocks << block
173
+ end
174
+ include Dk::Pkg::Validate::TestHelpers
175
+ attr_reader :dk_pkg_installed_pkgs, :params
176
+ def initialize
177
+ self.class.setup_blocks.each{ |b| self.instance_eval(&b) }
178
+ end
179
+ end
180
+ @context = @context_class.new
181
+ end
182
+ subject{ @context }
183
+
184
+ should "use much-plugin" do
185
+ assert_includes MuchPlugin, Dk::Pkg::Validate::TestHelpers
186
+ end
187
+
188
+ should "setup the ivars and params the validate task needs" do
189
+ assert_not_nil subject.params[Dk::Pkg::MANIFEST_PATH_PARAM_NAME]
190
+
191
+ exp = subject.dk_pkg_installed_pkgs
192
+ assert_equal exp, subject.params[Dk::Pkg::INSTALLED_PKGS_PARAM_NAME]
193
+ end
194
+
195
+ end
196
+
197
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dk-pkg
3
- version: !ruby/object:Gem::Version
4
- version: 0.0.1
3
+ version: &id002 !ruby/object:Gem::Version
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kelly Redding
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2016-08-11 00:00:00 Z
13
+ date: 2016-08-17 00:00:00 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: assert
@@ -19,9 +19,28 @@ dependencies:
19
19
  requirements:
20
20
  - - ~>
21
21
  - !ruby/object:Gem::Version
22
- version: 2.16.1
22
+ version: 2.16.3
23
23
  type: :development
24
24
  version_requirements: *id001
25
+ - !ruby/object:Gem::Dependency
26
+ name: dk
27
+ prerelease: false
28
+ requirement: &id003 !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - ~>
31
+ - *id002
32
+ type: :runtime
33
+ version_requirements: *id003
34
+ - !ruby/object:Gem::Dependency
35
+ name: much-plugin
36
+ prerelease: false
37
+ requirement: &id004 !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - ~>
40
+ - !ruby/object:Gem::Version
41
+ version: 0.2.0
42
+ type: :runtime
43
+ version_requirements: *id004
25
44
  description: Dk logic for installing pkgs
26
45
  email:
27
46
  - kelly@kellyredding.com
@@ -39,10 +58,18 @@ files:
39
58
  - README.md
40
59
  - dk-pkg.gemspec
41
60
  - lib/dk-pkg.rb
61
+ - lib/dk-pkg/constants.rb
62
+ - lib/dk-pkg/install_pkg.rb
63
+ - lib/dk-pkg/manifest.rb
64
+ - lib/dk-pkg/validate.rb
42
65
  - lib/dk-pkg/version.rb
43
66
  - log/.gitkeep
44
67
  - test/helper.rb
45
68
  - test/support/factory.rb
69
+ - test/unit/dk-pkg_tests.rb
70
+ - test/unit/install_pkg_tests.rb
71
+ - test/unit/manifest_tests.rb
72
+ - test/unit/validate_tests.rb
46
73
  - tmp/.gitkeep
47
74
  homepage: https://github.com/redding/dk-pkg
48
75
  licenses:
@@ -56,13 +83,13 @@ require_paths:
56
83
  - lib
57
84
  required_ruby_version: !ruby/object:Gem::Requirement
58
85
  requirements:
59
- - &id002
86
+ - &id005
60
87
  - ">="
61
88
  - !ruby/object:Gem::Version
62
89
  version: "0"
63
90
  required_rubygems_version: !ruby/object:Gem::Requirement
64
91
  requirements:
65
- - *id002
92
+ - *id005
66
93
  requirements: []
67
94
 
68
95
  rubyforge_project:
@@ -73,3 +100,7 @@ summary: Dk logic for installing pkgs
73
100
  test_files:
74
101
  - test/helper.rb
75
102
  - test/support/factory.rb
103
+ - test/unit/dk-pkg_tests.rb
104
+ - test/unit/install_pkg_tests.rb
105
+ - test/unit/manifest_tests.rb
106
+ - test/unit/validate_tests.rb