roku_builder 3.12.8 → 3.13.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.
Files changed (57) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +2 -2
  3. data/CHANGELOG +9 -0
  4. data/Gemfile.lock +17 -11
  5. data/bin/roku +4 -8
  6. data/lib/roku_builder.rb +16 -24
  7. data/lib/roku_builder/config.rb +213 -0
  8. data/lib/roku_builder/config_parser.rb +304 -267
  9. data/lib/roku_builder/config_validator.rb +149 -126
  10. data/lib/roku_builder/controller.rb +34 -184
  11. data/lib/roku_builder/controller_commands.rb +85 -79
  12. data/lib/roku_builder/error_handler.rb +0 -11
  13. data/lib/roku_builder/errors.rb +12 -0
  14. data/lib/roku_builder/inspector.rb +6 -4
  15. data/lib/roku_builder/keyer.rb +1 -1
  16. data/lib/roku_builder/loader.rb +1 -1
  17. data/lib/roku_builder/logger.rb +32 -0
  18. data/lib/roku_builder/manifest_manager.rb +2 -2
  19. data/lib/roku_builder/monitor.rb +1 -1
  20. data/lib/roku_builder/options.rb +113 -0
  21. data/lib/roku_builder/stager.rb +2 -2
  22. data/lib/roku_builder/tester.rb +57 -11
  23. data/lib/roku_builder/util.rb +3 -4
  24. data/lib/roku_builder/version.rb +1 -1
  25. data/roku_builder.gemspec +2 -1
  26. data/test/roku_builder/test_config.rb +168 -0
  27. data/test/roku_builder/test_config_parser.rb +347 -394
  28. data/test/roku_builder/test_config_validator.rb +193 -190
  29. data/test/roku_builder/test_controller.rb +59 -178
  30. data/test/roku_builder/test_controller_commands.rb +407 -394
  31. data/test/roku_builder/test_error_handler.rb +67 -69
  32. data/test/roku_builder/test_files/config_test/bad.json +2 -0
  33. data/test/roku_builder/test_files/config_test/child.json +11 -0
  34. data/test/roku_builder/test_files/config_test/config.json +29 -0
  35. data/test/roku_builder/test_files/config_test/non_json.json +1 -0
  36. data/test/roku_builder/test_files/config_test/parent.json +21 -0
  37. data/test/roku_builder/test_files/config_test/parent_projects.json +35 -0
  38. data/test/roku_builder/test_files/manifest_manager_test/manifest_template_2 +1 -1
  39. data/test/roku_builder/test_helper.rb +55 -45
  40. data/test/roku_builder/test_inspector.rb +278 -213
  41. data/test/roku_builder/test_keyer.rb +144 -147
  42. data/test/roku_builder/test_linker.rb +91 -95
  43. data/test/roku_builder/test_loader.rb +279 -289
  44. data/test/roku_builder/test_logger.rb +47 -0
  45. data/test/roku_builder/test_manifest_manager.rb +92 -94
  46. data/test/roku_builder/test_monitor.rb +101 -103
  47. data/test/roku_builder/test_navigator.rb +240 -245
  48. data/test/roku_builder/test_options.rb +156 -0
  49. data/test/roku_builder/test_packager.rb +108 -108
  50. data/test/roku_builder/test_profiler.rb +20 -19
  51. data/test/roku_builder/test_scripter.rb +83 -81
  52. data/test/roku_builder/test_stager.rb +299 -311
  53. data/test/roku_builder/test_tester.rb +112 -115
  54. data/test/roku_builder/test_util.rb +18 -17
  55. metadata +39 -6
  56. data/lib/roku_builder/config_manager.rb +0 -161
  57. data/test/roku_builder/test_config_manager.rb +0 -372
@@ -5,11 +5,11 @@ module RokuBuilder
5
5
  # Change stage of roku application
6
6
  class Stager
7
7
 
8
- def initialize(key: nil, method:, root_dir: nil, logger:)
8
+ def initialize(key: nil, method:, root_dir: nil)
9
9
  @method = method
10
10
  @key = key
11
11
  @root_dir = root_dir
12
- @logger = logger
12
+ @logger = Logger.instance
13
13
  @stage_success = true
14
14
  @stash_key = "roku-builder-temp-stash"
15
15
  end
@@ -8,9 +8,16 @@ module RokuBuilder
8
8
  class Tester < Util
9
9
 
10
10
  # Initialize starting and ending regular expressions
11
- def init()
12
- @end_reg = /\*\*\*\*\* ENDING TESTS \*\*\*\*\*/
13
- @start_reg = /\*\*\*\*\* STARTING TESTS \*\*\*\*\*/
11
+ def init(root_dir:)
12
+ @root_dir = root_dir
13
+ @end_reg = /\*+\s*End testing\s*\*+/
14
+ @start_reg = /\*+\s*Start testing\s*\*+/
15
+ @test_logger = ::Logger.new(STDOUT)
16
+ @test_logger.formatter = proc {|_severity, _datetime, _progname, msg|
17
+ "%s\n\r" % [msg]
18
+ }
19
+ @in_tests = false
20
+ @logs = []
14
21
  end
15
22
 
16
23
  # Run tests and report results
@@ -21,15 +28,21 @@ module RokuBuilder
21
28
  'Port' => 8085
22
29
  }
23
30
 
31
+ @device_config[:init_params] = {
32
+ root_dir: @root_dir
33
+ }
24
34
  loader = Loader.new(**@device_config)
25
35
  connection = Net::Telnet.new(telnet_config)
26
36
  code, _build_version = loader.sideload(**sideload_config)
27
-
28
37
  if code == SUCCESS
29
- in_tests = false
38
+ @device_config[:init_params] = nil
39
+ linker = Linker.new(**@device_config)
40
+ linker.launch(options: "RunTests:true")
41
+
30
42
  connection.waitfor(@end_reg) do |txt|
31
- in_tests = handle_text(txt: txt, in_tests: in_tests)
43
+ handle_text(txt: txt)
32
44
  end
45
+ print_logs
33
46
  connection.puts("cont\n")
34
47
  end
35
48
  end
@@ -40,13 +53,46 @@ module RokuBuilder
40
53
  # @param txt [String] current text from telnet
41
54
  # @param in_tests [Boolean] currently parsing test text
42
55
  # @return [Boolean] currently parsing test text
43
- def handle_text(txt:, in_tests:)
56
+ def handle_text(txt:)
57
+ check_for_used_connection(txt: txt)
44
58
  txt.split("\n").each do |line|
45
- in_tests = false if line =~ @end_reg
46
- @logger.unknown line if in_tests
47
- in_tests = true if line =~ @start_reg
59
+ check_for_end(line: line)
60
+ @logs.push line if @in_tests
61
+ check_for_start(line: line)
62
+ end
63
+ end
64
+
65
+ def check_for_used_connection(txt:)
66
+ if txt =~ /connection already in use/
67
+ raise IOError, "Telnet Connection Already in Use"
68
+ end
69
+ end
70
+
71
+ def check_for_end(line:)
72
+ if line =~ @end_reg
73
+ @in_tests = false
74
+ breakline = line.gsub(/./, '*')
75
+ @logs.push line
76
+ @logs.push breakline
77
+ @logs.push breakline
78
+ end
79
+ end
80
+
81
+ def check_for_start(line:)
82
+ if line =~ @start_reg
83
+ @logs = []
84
+ @in_tests = true
85
+ breakline = line.gsub(/./, '*')
86
+ @logs.push breakline
87
+ @logs.push breakline
88
+ @logs.push line
89
+ end
90
+ end
91
+
92
+ def print_logs
93
+ @logs.each do |log|
94
+ @test_logger.unknown log
48
95
  end
49
- in_tests
50
96
  end
51
97
  end
52
98
  end
@@ -11,18 +11,17 @@ module RokuBuilder
11
11
  # @param ip [String] IP address of roku device
12
12
  # @param user [String] Username for roku device
13
13
  # @param password [String] Password for roku device
14
- def initialize(ip:, user:, password:, logger:, init_params: nil)
14
+ def initialize(ip:, user:, password:, init_params: nil)
15
+ @logger = Logger.instance
15
16
  @device_config = {
16
17
  ip: ip,
17
18
  user: user,
18
- password: password,
19
- logger: logger
19
+ password: password
20
20
  }
21
21
  @roku_ip_address = ip
22
22
  @dev_username = user
23
23
  @dev_password = password
24
24
  @url = "http://#{@roku_ip_address}"
25
- @logger = logger
26
25
  if init_params
27
26
  init(**init_params)
28
27
  else
@@ -2,5 +2,5 @@
2
2
 
3
3
  module RokuBuilder
4
4
  # Version of the RokuBuilder Gem
5
- VERSION = "3.12.8"
5
+ VERSION = "3.13.0"
6
6
  end
data/roku_builder.gemspec CHANGED
@@ -11,7 +11,7 @@ Gem::Specification.new do |spec|
11
11
  spec.summary = %q{Build Tool for Roku Apps}
12
12
  spec.description = %q{Allows the user to easily sideload, package, deeplink, test, roku apps.}
13
13
  spec.homepage = ""
14
- spec.license = "MIT"
14
+ spec.license = "Apache-2.0"
15
15
 
16
16
  spec.files = `git ls-files -z`.split("\x0")
17
17
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
@@ -27,6 +27,7 @@ Gem::Specification.new do |spec|
27
27
  spec.add_dependency "net-ping", "~> 2.0"
28
28
  spec.add_dependency "net-telnet", "~> 0.1"
29
29
  spec.add_dependency "nokogiri", "~> 1.7"
30
+ spec.add_dependency "win32-security", "~> 0.5" # For windows compatibility
30
31
 
31
32
  spec.add_development_dependency "bundler", "~> 1.7"
32
33
  spec.add_development_dependency "rake", "~> 12.0"
@@ -0,0 +1,168 @@
1
+ # ********** Copyright Viacom, Inc. Apache 2.0 **********
2
+
3
+ require_relative "test_helper.rb"
4
+
5
+ module RokuBuilder
6
+ class ConfigTest < Minitest::Test
7
+
8
+ def test_config_init
9
+ options = build_options({config: File.join(test_files_path(ConfigTest), "config.json"), validate: true})
10
+ config = Config.new(options: options)
11
+ config.load
12
+ end
13
+
14
+ def test_config_expand_path
15
+ options = build_options({config: File.join(test_files_path(ConfigTest), "config.json"), validate: true})
16
+ options[:config].sub!(/#{File.expand_path("~")}/, "~")
17
+ config = Config.new(options: options)
18
+ config.load
19
+ end
20
+
21
+ def test_missing_config
22
+ options = build_options({config: File.join(test_files_path(ConfigTest), "missing.json"), validate: true})
23
+ assert_raises ArgumentError do
24
+ config = Config.new(options: options)
25
+ config.load
26
+ end
27
+ end
28
+
29
+ def test_invalid_config
30
+ options = build_options({config: File.join(test_files_path(ConfigTest), "bad.json"), validate: true})
31
+ assert_raises InvalidConfig do
32
+ config = Config.new(options: options)
33
+ config.load
34
+ config.validate
35
+ end
36
+ end
37
+
38
+ def test_non_json_config
39
+ options = build_options({config: File.join(test_files_path(ConfigTest), "non_json.json"), validate: true})
40
+ assert_raises InvalidConfig do
41
+ config = Config.new(options: options)
42
+ config.load
43
+ end
44
+ end
45
+
46
+ def test_config_parse
47
+ options = build_options({config: File.join(test_files_path(ConfigTest), "config.json"), validate: true})
48
+ config = Config.new(options: options)
49
+ config.load
50
+ config.parse
51
+ assert_equal Hash, config.parsed.class
52
+ end
53
+
54
+ def test_config_read
55
+ options = build_options({config: File.join(test_files_path(ConfigTest), "config.json"), validate: true})
56
+ config = Config.new(options: options)
57
+ config.load
58
+ assert_equal :roku, config.raw[:devices][:default]
59
+ assert_equal :p1, config.raw[:projects][:default]
60
+ end
61
+
62
+ def test_config_read_parent
63
+ options = build_options({config: File.join(test_files_path(ConfigTest), "child.json"), validate: true})
64
+ config = Config.new(options: options)
65
+ config.load
66
+ assert_equal :roku, config.raw[:devices][:default]
67
+ assert_equal :p1, config.raw[:projects][:default]
68
+ end
69
+
70
+ def test_config_read_parent
71
+ options = build_options({config: File.join(test_files_path(ConfigTest), "parent_projects.json"), validate: true})
72
+ config = Config.new(options: options)
73
+ config.load
74
+ assert_equal "app", config.raw[:projects][:p1][:app_name]
75
+ end
76
+
77
+ def test_config_edit
78
+ orginal = File.join(test_files_path(ConfigTest), "config.json")
79
+ tmp = File.join(test_files_path(ConfigTest), "tmpconfig.json")
80
+ FileUtils.cp(orginal, tmp)
81
+ options = build_options({config: tmp, edit_params: "ip:123.456.789", validate: true})
82
+ config = Config.new(options: options)
83
+ config.load
84
+ config.edit
85
+ options = build_options({config: tmp, validate: true})
86
+ config = Config.new(options: options)
87
+ config.load
88
+ assert_equal "123.456.789", config.raw[:devices][:roku][:ip]
89
+ FileUtils.rm(tmp)
90
+ end
91
+
92
+ def test_config_update_package
93
+ options = build_options({config: File.join(test_files_path(ConfigTest), "config.json"), package: true, stage: :production, set_stage: true})
94
+ config = Config.new(options: options)
95
+ config.load
96
+ config.parse
97
+ options[:build_version] = "BUILDVERSION"
98
+ config.update
99
+ assert_equal "app - production - BUILDVERSION", config.parsed[:package_config][:app_name_version]
100
+ assert_equal "/tmp/app_production_BUILDVERSION", config.parsed[:package_config][:out_file]
101
+ assert_equal "/tmp/app_production_BUILDVERSION", config.parsed[:inspect_config][:pkg]
102
+ end
103
+
104
+ def test_config_update_build
105
+ options = build_options({config: File.join(test_files_path(ConfigTest), "config.json"), build: true, stage: :production, set_stage: true})
106
+ config = Config.new(options: options)
107
+ config.load
108
+ config.parse
109
+ options[:build_version] = "BUILDVERSION"
110
+ config.update
111
+ assert_equal "/tmp/app_production_BUILDVERSION", config.parsed[:build_config][:out_file]
112
+ end
113
+
114
+ def test_config_update_sideload
115
+ options = build_options({config: File.join(test_files_path(ConfigTest), "config.json"), sideload: true, stage: :production, set_stage: true, out: "/tmp2"})
116
+ config = Config.new(options: options)
117
+ config.load
118
+ config.parse
119
+ options[:build_version] = "BUILDVERSION"
120
+ config.update
121
+ assert_equal "/tmp2/app_production_BUILDVERSION", config.parsed[:sideload_config][:out_file]
122
+ end
123
+
124
+ def test_config_configure_creation
125
+ target_config = File.join(test_files_path(ConfigTest), "configure_test.json")
126
+ options = build_options({config: target_config, configure: true})
127
+ File.delete(target_config) if File.exist?(target_config)
128
+ refute File.exist?(target_config)
129
+ config = Config.new(options: options)
130
+ config.configure
131
+ assert File.exist?(target_config)
132
+ File.delete(target_config) if File.exist?(target_config)
133
+ end
134
+
135
+ def test_config_configure_edit_params
136
+ target_config = File.join(test_files_path(ConfigTest), "configure_test.json")
137
+ options = build_options({
138
+ config: target_config,
139
+ configure: true,
140
+ edit_params: "ip:111.222.333.444"
141
+ })
142
+ File.delete(target_config) if File.exist?(target_config)
143
+ refute File.exist?(target_config)
144
+ config = Config.new(options: options)
145
+ config.configure
146
+ assert File.exist?(target_config)
147
+ assert_equal "111.222.333.444", config.raw[:devices][config.raw[:devices][:default]][:ip]
148
+ File.delete(target_config) if File.exist?(target_config)
149
+ end
150
+
151
+ def test_config_configure_edit_params
152
+ target_config = File.join(test_files_path(ConfigTest), "configure_test.json")
153
+ options = build_options({
154
+ config: target_config,
155
+ configure: true
156
+ })
157
+ File.delete(target_config) if File.exist?(target_config)
158
+ refute File.exist?(target_config)
159
+ config = Config.new(options: options)
160
+ config.configure
161
+ assert File.exist?(target_config)
162
+ assert_raises InvalidOptions do
163
+ config.configure
164
+ end
165
+ File.delete(target_config) if File.exist?(target_config)
166
+ end
167
+ end
168
+ end
@@ -2,438 +2,391 @@
2
2
 
3
3
  require_relative "test_helper.rb"
4
4
 
5
- class ConfigParserTest < Minitest::Test
6
- def test_manifest_config
7
- logger = Logger.new("/dev/null")
8
- options = {
9
- config: File.expand_path(File.join(File.dirname(__FILE__), "test_files", "controller_config_test", "valid_config.json")),
10
- stage: 'production',
11
- update_manifest: false,
12
- fetch: false,
13
- sideload: true
14
- }
15
- config = good_config
16
- code, configs = RokuBuilder::ConfigParser.parse_config(options: options, config: config, logger: logger)
17
-
18
- assert_equal RokuBuilder::SUCCESS, code
19
- assert_equal Hash, config.class
20
- assert_equal "/tmp", configs[:manifest_config][:root_dir]
21
- end
22
-
23
- def test_manifest_config_in
24
- logger = Logger.new("/dev/null")
25
- options = {
26
- config: File.expand_path(File.join(File.dirname(__FILE__), "test_files", "controller_config_test", "valid_config.json")),
27
- in: "/dev/null/infile",
28
- update_manifest: false,
29
- fetch: false,
30
- sideload: true
31
- }
32
- config = good_config
33
- code, configs = RokuBuilder::ConfigParser.parse_config(options: options, config: config, logger: logger)
34
-
35
- assert_equal RokuBuilder::SUCCESS, code
36
- assert_equal Hash, config.class
37
- assert_equal "/dev/null/infile", configs[:manifest_config][:root_dir]
38
- assert_equal :in, configs[:stage_config][:method]
39
- end
40
-
41
- def test_manifest_config_in_expand
42
- logger = Logger.new("/dev/null")
43
- options = {
44
- config: File.expand_path(File.join(File.dirname(__FILE__), "test_files", "controller_config_test", "valid_config.json")),
45
- in: "./infile",
46
- update_manifest: false,
47
- fetch: false,
48
- sideload: true
49
- }
50
- config = good_config
51
- code, configs = RokuBuilder::ConfigParser.parse_config(options: options, config: config, logger: logger)
52
-
53
- assert_equal RokuBuilder::SUCCESS, code
54
- assert_equal Hash, config.class
55
- assert_equal File.join(Dir.pwd, "infile"), configs[:manifest_config][:root_dir]
56
- assert_equal :in, configs[:stage_config][:method]
57
- end
58
-
59
- def test_manifest_config_current
60
- logger = Logger.new("/dev/null")
61
- options = {
62
- config: File.expand_path(File.join(File.dirname(__FILE__), "test_files", "controller_config_test", "valid_config.json")),
63
- current: true,
64
- update_manifest: false,
65
- fetch: false,
66
- sideload: true
67
- }
68
- code, configs = nil
69
- config = good_config
70
- Pathname.stub(:pwd, "/dev/null/infile") do
71
- File.stub(:exist?, true) do
72
- code, configs = RokuBuilder::ConfigParser.parse_config(options: options, config: config, logger: logger)
73
- end
5
+ module RokuBuilder
6
+ class ConfigParserTest < Minitest::Test
7
+ def test_manifest_config
8
+ options = build_options({
9
+ sideload: true,
10
+ working: true
11
+ })
12
+ config = good_config
13
+ configs = ConfigParser.parse(options: options, config: config)
14
+
15
+ assert_equal Hash, config.class
16
+ assert_equal "/tmp", configs[:manifest_config][:root_dir]
74
17
  end
75
18
 
76
- assert_equal RokuBuilder::SUCCESS, code
77
- assert_equal Hash, config.class
78
- assert_equal "/dev/null/infile", configs[:manifest_config][:root_dir]
79
- assert_equal :current, configs[:stage_config][:method]
80
- end
81
-
82
- def test_setup_project_config_current
83
- args = {
84
- config: {},
85
- options: {current: true }
86
- }
87
- project = {}
88
- File.stub(:exist?, true) do
89
- project = RokuBuilder::ConfigParser.send(:setup_project_config, **args)
90
- end
91
- assert_equal Pathname.pwd.to_s, project[:directory]
92
- assert_equal :current, project[:stage_method]
93
- assert_nil project[:folders]
94
- assert_nil project[:files]
95
- end
96
-
97
- def test_setup_project_config_good_project_dir
98
- config = good_config
99
- args = {
100
- config: config,
101
- options: {sideload: true, project: :project1}
102
- }
103
- project = {}
104
- File.stub(:exist?, true) do
105
- project = RokuBuilder::ConfigParser.send(:setup_project_config, **args)
106
- end
107
- refute_equal RokuBuilder::BAD_PROJECT_DIR, project
108
- end
19
+ def test_manifest_config_in
20
+ options = build_options({
21
+ in: "/dev/null/infile",
22
+ sideload: true
23
+ })
24
+ config = good_config
25
+ configs = ConfigParser.parse(options: options, config: config)
26
+
27
+ assert_equal Hash, config.class
28
+ assert_equal "/dev/null/infile", configs[:manifest_config][:root_dir]
29
+ assert_equal :in, configs[:stage_config][:method]
30
+ end
109
31
 
110
- def test_setup_project_config_bad_project_dir
111
- config = good_config
112
- config[:projects][:project1][:directory] = "/dev/null"
113
- args = {
114
- config: config,
115
- options: {sideload: true, project: :project1}
116
- }
117
- project = {}
118
- File.stub(:exist?, true) do
119
- project = RokuBuilder::ConfigParser.send(:setup_project_config, **args)
120
- end
121
- assert_equal RokuBuilder::BAD_PROJECT_DIR, project
122
- end
32
+ def test_manifest_config_in_expand
33
+ options = build_options({
34
+ in: "./infile",
35
+ sideload: true
36
+ })
37
+ config = good_config
38
+ configs = ConfigParser.parse(options: options, config: config)
39
+
40
+ assert_equal Hash, config.class
41
+ assert_equal File.join(Dir.pwd, "infile"), configs[:manifest_config][:root_dir]
42
+ assert_equal :in, configs[:stage_config][:method]
43
+ end
123
44
 
124
- def test_setup_project_config_bad_child_project_dir
125
- config = good_config
126
- config[:projects][:project_dir] = "/tmp"
127
- config[:projects][:project1][:directory] = "bad"
128
- args = {
129
- config: config,
130
- options: {sideload: true, project: :project1}
131
- }
132
- project = {}
133
- File.stub(:exist?, true) do
134
- project = RokuBuilder::ConfigParser.send(:setup_project_config, **args)
135
- end
136
- assert_equal RokuBuilder::BAD_PROJECT_DIR, project
137
- end
45
+ def test_manifest_config_current
46
+ options = build_options({
47
+ current: true,
48
+ sideload: true
49
+ })
50
+ configs = nil
51
+ config = good_config
52
+ Pathname.stub(:pwd, "/dev/null/infile") do
53
+ File.stub(:exist?, true) do
54
+ configs = ConfigParser.parse(options: options, config: config)
55
+ end
56
+ end
138
57
 
139
- def test_setup_project_config_bad_parent_project_dir
140
- config = good_config
141
- config[:projects][:project_dir] = "/bad"
142
- config[:projects][:project1][:directory] = "good"
143
- args = {
144
- config: config,
145
- options: {sideload: true, project: :project1}
146
- }
147
- project = {}
148
- File.stub(:exist?, true) do
149
- project = RokuBuilder::ConfigParser.send(:setup_project_config, **args)
150
- end
151
- assert_equal RokuBuilder::BAD_PROJECT_DIR, project
152
- end
58
+ assert_equal Hash, config.class
59
+ assert_equal "/dev/null/infile", configs[:manifest_config][:root_dir]
60
+ assert_equal :current, configs[:stage_config][:method]
61
+ end
153
62
 
154
- def test_setup_stage_config_script
155
- args = {
156
- configs: {project_config: {directory: "/tmp", stage_method: :script, stages: {production: {script: "script"}}}},
157
- options: {stage: "production", sideload: true},
158
- logger: Logger.new("/dev/null")
159
- }
160
- config = RokuBuilder::ConfigParser.send(:setup_stage_config, **args)[0]
161
- assert_equal args[:configs][:project_config][:stages][:production][:script], config[:key]
162
- end
63
+ def test_setup_project_config_bad_project
64
+ config = good_config
65
+ options = build_options({sideload: true, project: :project3, set_stage: true})
66
+ assert_raises ParseError do
67
+ File.stub(:exist?, true) do
68
+ ConfigParser.parse(options: options, config: config)
69
+ end
70
+ end
71
+ end
163
72
 
164
- def test_setup_stage_config_git_ref
165
- args = {
166
- configs: {project_config: {directory: "/tmp", stage_method: :git, }},
167
- options: {stage: "production", ref: "git-ref", sideload: true},
168
- logger: Logger.new("/dev/null")
169
- }
170
- config = RokuBuilder::ConfigParser.send(:setup_stage_config, **args)[0]
171
- assert_equal args[:options][:ref], config[:key]
172
- end
73
+ def test_setup_project_config_current
74
+ options = build_options({ sideload: true, current: true })
75
+ config = good_config
76
+ configs = nil
77
+ File.stub(:exist?, true) do
78
+ configs = ConfigParser.parse(options: options, config: config)
79
+ end
80
+ project = configs[:project_config]
81
+ assert_equal Pathname.pwd.to_s, project[:directory]
82
+ assert_equal :current, project[:stage_method]
83
+ assert_nil project[:folders]
84
+ assert_nil project[:files]
85
+ end
173
86
 
174
- def test_manifest_config_project_select
175
- logger = Logger.new("/dev/null")
176
- options = {
177
- config: File.expand_path(File.join(File.dirname(__FILE__), "test_files", "controller_config_test", "valid_config.json")),
178
- stage: 'production',
179
- update_manifest: false,
180
- fetch: false,
181
- sideload: true
182
- }
183
- config = good_config
87
+ def test_setup_project_config_good_project_dir
88
+ config = good_config
89
+ options = build_options({sideload: true, project: :project1, set_stage: true})
90
+ File.stub(:exist?, true) do
91
+ ConfigParser.parse(options: options, config: config)
92
+ end
93
+ end
184
94
 
185
- code = nil
186
- configs = nil
95
+ def test_setup_project_config_bad_project_dir
96
+ config = good_config
97
+ config[:projects][:project1][:directory] = "/dev/null"
98
+ options = build_options({sideload: true, project: :project1, working: true})
99
+ assert_raises ParseError do
100
+ File.stub(:exist?, true) do
101
+ ConfigParser.parse(options: options, config: config)
102
+ end
103
+ end
104
+ end
187
105
 
188
- Pathname.stub(:pwd, Pathname.new("/dev/nuller")) do
189
- code, configs = RokuBuilder::ConfigParser.parse_config(options: options, config: config, logger: logger)
106
+ def test_setup_project_config_bad_child_project_dir
107
+ config = good_config
108
+ config[:projects][:project_dir] = "/tmp"
109
+ config[:projects][:project1][:directory] = "bad"
110
+ options = build_options({sideload: true, project: :project1, working: true})
111
+ assert_raises ParseError do
112
+ File.stub(:exist?, true) do
113
+ ConfigParser.parse(options: options, config: config)
114
+ end
115
+ end
190
116
  end
191
117
 
192
- assert_equal RokuBuilder::SUCCESS, code
193
- assert_equal Hash, config.class
194
- assert_equal "/tmp", configs[:project_config][:directory]
195
- end
118
+ def test_setup_project_config_bad_parent_project_dir
119
+ config = good_config
120
+ config[:projects][:project_dir] = "/bad"
121
+ config[:projects][:project1][:directory] = "good"
122
+ options = build_options({sideload: true, project: :project1, set_stage: true})
123
+ assert_raises ParseError do
124
+ File.stub(:exist?, true) do
125
+ ConfigParser.parse(options: options, config: config)
126
+ end
127
+ end
128
+ end
196
129
 
197
- def test_manifest_config_project_directory
198
- logger = Logger.new("/dev/null")
199
- options = {
200
- sideload: true
201
- }
202
- config = good_config
203
- config[:projects][:project_dir] = "/tmp"
204
- config[:projects][:project1][:directory] = "project1"
205
- config[:projects][:project2][:directory] = "project2"
130
+ def test_setup_stage_config_bad_stage
131
+ config = good_config
132
+ options = build_options({sideload: true, project: :project1, stage: :bad, set_stage: true})
133
+ assert_raises ParseError do
134
+ File.stub(:exist?, true) do
135
+ ConfigParser.parse(options: options, config: config)
136
+ end
137
+ end
138
+ end
206
139
 
140
+ def test_setup_stage_config_bad_method
141
+ config = good_config
142
+ config[:projects][:project1][:stage_method] = :bad
143
+ options = build_options({sideload: true, project: :project1, set_stage: true})
144
+ assert_raises ParseError do
145
+ File.stub(:exist?, true) do
146
+ ConfigParser.parse(options: options, config: config)
147
+ end
148
+ end
149
+ end
207
150
 
208
- code = nil
209
- configs = nil
151
+ def test_setup_stage_config_missing_method
152
+ config = good_config
153
+ config[:projects][:project1][:stage_method] = nil
154
+ options = build_options({sideload: true, project: :project1, set_stage: true})
155
+ assert_raises ParseError do
156
+ File.stub(:exist?, true) do
157
+ ConfigParser.parse(options: options, config: config)
158
+ end
159
+ end
160
+ end
210
161
 
211
- Dir.stub(:exist?, true) do
212
- code, configs = RokuBuilder::ConfigParser.parse_config(options: options, config: config, logger: logger)
162
+ def test_setup_stage_config_script
163
+ config = good_config
164
+ config[:projects][:project1][:stage_method] = :script
165
+ config[:projects][:project1][:stages][:production][:script] = {stage: "script", unstage: "script"}
166
+ options = build_options({stage: "production", sideload: true, set_stage: true})
167
+ parsed = ConfigParser.parse(options: options, config: config)
168
+ assert_equal parsed[:project_config][:stages][:production][:script], config[:projects][:project1][:stages][:production][:script]
213
169
  end
214
170
 
215
- assert_equal RokuBuilder::SUCCESS, code
216
- assert_equal Hash, config.class
217
- assert_equal "/tmp/project1", configs[:project_config][:directory]
218
- end
171
+ def test_setup_stage_config_git_ref
172
+ config = good_config
173
+ options = build_options({stage: "production", ref: "git-ref", sideload: true})
174
+ parsed = ConfigParser.parse(options: options, config: config)
175
+ assert_equal options[:ref], parsed[:stage_config][:key]
176
+ end
219
177
 
220
- def test_manifest_config_project_directory_select
221
- logger = Logger.new("/dev/null")
222
- options = {
223
- config: File.expand_path(File.join(File.dirname(__FILE__), "test_files", "controller_config_test", "valid_config.json")),
224
- stage: 'production',
225
- update_manifest: false,
226
- fetch: false,
227
- sideload: true
228
- }
229
- config = good_config
230
- config[:projects][:project_dir] = "/tmp"
231
- config[:projects][:project1][:directory] = "project1"
232
- config[:projects][:project2][:directory] = "project2"
233
-
234
- code = nil
235
- configs = nil
236
-
237
- Pathname.stub(:pwd, Pathname.new("/tmp/project2")) do
238
- Dir.stub(:exist?, true) do
239
- code, configs = RokuBuilder::ConfigParser.parse_config(options: options, config: config, logger: logger)
178
+ def test_manifest_config_project_select
179
+ options = build_options({ sideload: true, working: true })
180
+ config = good_config
181
+ configs = nil
182
+ Pathname.stub(:pwd, Pathname.new("/dev/nuller")) do
183
+ configs = ConfigParser.parse(options: options, config: config)
240
184
  end
185
+ assert_equal Hash, config.class
186
+ assert_equal "/tmp", configs[:project_config][:directory]
241
187
  end
242
188
 
243
- assert_equal RokuBuilder::SUCCESS, code
244
- assert_equal Hash, config.class
245
- assert_equal "/tmp/project2", configs[:project_config][:directory]
246
- end
189
+ def test_manifest_config_project_directory
190
+ options = build_options({
191
+ sideload: true,
192
+ working: true
193
+ })
194
+ config = good_config
195
+ config[:projects][:project_dir] = "/tmp"
196
+ config[:projects][:project1][:directory] = "project1"
197
+ config[:projects][:project2][:directory] = "project2"
247
198
 
248
- def test_manifest_config_key_directory
249
- tmp_file = Tempfile.new("pkg")
250
- logger = Logger.new("/dev/null")
251
- options = {key: true, project: :project2}
252
- config = good_config
253
- config[:keys][:key_dir] = File.dirname(tmp_file.path)
254
- config[:keys][:a][:keyed_pkg] = File.basename(tmp_file.path)
199
+ configs = nil
255
200
 
201
+ Dir.stub(:exist?, true) do
202
+ configs = ConfigParser.parse(options: options, config: config)
203
+ end
256
204
 
257
- code = nil
258
- configs = nil
205
+ assert_equal Hash, config.class
206
+ assert_equal "/tmp/project1", configs[:project_config][:directory]
207
+ end
259
208
 
260
- code, configs = RokuBuilder::ConfigParser.parse_config(options: options, config: config, logger: logger)
209
+ def test_manifest_config_project_directory_select
210
+ options = build_options({sideload: true, working: true})
211
+ config = good_config
212
+ config[:projects][:project_dir] = "/tmp"
213
+ config[:projects][:project1][:directory] = "project1"
214
+ config[:projects][:project2][:directory] = "project2"
215
+
216
+ configs = nil
217
+ Pathname.stub(:pwd, Pathname.new("/tmp/project2")) do
218
+ Dir.stub(:exist?, true) do
219
+ configs = ConfigParser.parse(options: options, config: config)
220
+ end
221
+ end
261
222
 
262
- assert_equal RokuBuilder::SUCCESS, code
263
- assert_equal Hash, config.class
264
- assert_equal tmp_file.path, configs[:key][:keyed_pkg]
265
- tmp_file.close
266
- end
223
+ assert_equal Hash, config.class
224
+ assert_equal "/tmp/project2", configs[:project_config][:directory]
225
+ end
267
226
 
268
- def test_manifest_config_key_directory_bad
269
- tmp_file = Tempfile.new("pkg")
270
- logger = Logger.new("/dev/null")
271
- options = {key: true, project: :project2}
272
- config = good_config
273
- config[:keys][:key_dir] = "/bad"
274
- config[:keys][:a][:keyed_pkg] = File.basename(tmp_file.path)
227
+ def test_key_config_key_directory
228
+ tmp_file = Tempfile.new("pkg")
229
+ options = build_options({key: true, project: :project2, set_stage: true})
230
+ config = good_config
231
+ config[:keys][:key_dir] = File.dirname(tmp_file.path)
232
+ config[:keys][:a][:keyed_pkg] = File.basename(tmp_file.path)
275
233
 
276
- code = nil
277
- configs = nil
234
+ configs = ConfigParser.parse(options: options, config: config)
278
235
 
279
- code, configs = RokuBuilder::ConfigParser.parse_config(options: options, config: config, logger: logger)
236
+ assert_equal Hash, config.class
237
+ assert_equal tmp_file.path, configs[:key][:keyed_pkg]
238
+ tmp_file.close
239
+ end
280
240
 
281
- assert_equal RokuBuilder::BAD_KEY_FILE, code
282
- end
241
+ def test_key_config_key_directory_bad
242
+ tmp_file = Tempfile.new("pkg")
243
+ options = build_options({key: true, project: :project2, set_stage: true})
244
+ config = good_config
245
+ config[:keys][:key_dir] = "/bad"
246
+ config[:keys][:a][:keyed_pkg] = File.basename(tmp_file.path)
247
+
248
+ assert_raises ParseError do
249
+ ConfigParser.parse(options: options, config: config)
250
+ end
251
+ end
283
252
 
284
- def test_manifest_config_key_path_bad
285
- tmp_file = Tempfile.new("pkg")
286
- logger = Logger.new("/dev/null")
287
- options = {key: true, project: :project2}
288
- config = good_config
289
- config[:keys][:key_dir] = File.dirname(tmp_file.path)
290
- config[:keys][:a][:keyed_pkg] = File.basename(tmp_file.path)+".bad"
253
+ def test_key_config_key_path_bad
254
+ tmp_file = Tempfile.new("pkg")
255
+ options = build_options({key: true, project: :project2, set_stage: true})
256
+ config = good_config
257
+ config[:keys][:key_dir] = File.dirname(tmp_file.path)
258
+ config[:keys][:a][:keyed_pkg] = File.basename(tmp_file.path)+".bad"
291
259
 
292
- code = nil
293
- configs = nil
260
+ assert_raises ParseError do
261
+ ConfigParser.parse(options: options, config: config)
262
+ end
263
+ end
294
264
 
295
- code, configs = RokuBuilder::ConfigParser.parse_config(options: options, config: config, logger: logger)
265
+ def test_key_config_bad_key
266
+ options = build_options({key: true, project: :project1, set_stage: true})
267
+ config = good_config
268
+ config[:projects][:project1][:stages][:production][:key] = "bad"
296
269
 
297
- assert_equal RokuBuilder::BAD_KEY_FILE, code
298
- end
270
+ assert_raises ParseError do
271
+ ConfigParser.parse(options: options, config: config)
272
+ end
273
+ end
299
274
 
300
- def test_setup_sideload_config
301
- args = {
302
- configs: {project_config: {directory: "/tmp", folders: ["a", "b"], files: ["c", "d"], excludes: []}, init_params: {}},
303
- options: {sideload: true}
304
- }
305
- RokuBuilder::ConfigParser.send(:setup_sideload_config, **args)
306
-
307
- refute_nil args[:configs][:sideload_config]
308
- refute_nil args[:configs][:sideload_config][:content]
309
- refute_nil args[:configs][:build_config]
310
- refute_nil args[:configs][:build_config][:content]
311
- refute_nil args[:configs][:init_params][:loader]
312
- refute_nil args[:configs][:init_params][:loader][:root_dir]
313
-
314
- assert_nil args[:configs][:sideload_config][:content][:excludes]
315
- assert_nil args[:configs][:sideload_config][:update_manifest]
316
- assert_nil args[:configs][:sideload_config][:infile]
317
- end
318
- def test_setup_sideload_config_exclude
319
- args = {
320
- configs: {project_config: {directory: "/tmp", folders: ["a", "b"], files: ["c", "d"], excludes: []}, init_params: {}},
321
- options: {sideload: true}
322
- }
323
- RokuBuilder::ConfigParser.send(:setup_sideload_config, **args)
324
- assert_nil args[:configs][:sideload_config][:content][:excludes]
325
-
326
- args = {
327
- configs: {project_config: {directory: "/tmp", folders: ["a", "b"], files: ["c", "d"], excludes: []}, init_params: {}},
328
- options: {build: true}
329
- }
330
- RokuBuilder::ConfigParser.send(:setup_sideload_config, **args)
331
- refute_nil args[:configs][:sideload_config][:content][:excludes]
332
-
333
- args = {
334
- configs: {project_config: {directory: "/tmp", folders: ["a", "b"], files: ["c", "d"], excludes: []}, init_params: {}},
335
- options: {package: true}
336
- }
337
- RokuBuilder::ConfigParser.send(:setup_sideload_config, **args)
338
- refute_nil args[:configs][:sideload_config][:content][:excludes]
339
-
340
- args = {
341
- configs: {project_config: {directory: "/tmp", folders: ["a", "b"], files: ["c", "d"], excludes: []}, init_params: {}},
342
- options: {sideload: true, exclude: true}
343
- }
344
- RokuBuilder::ConfigParser.send(:setup_sideload_config, **args)
345
- refute_nil args[:configs][:sideload_config][:content][:excludes]
346
- end
275
+ def test_setup_sideload_config
276
+ config = good_config
277
+ options = build_options({sideload: true, working: true})
278
+ parsed = ConfigParser.parse(options: options, config: config)
279
+
280
+ refute_nil parsed[:sideload_config]
281
+ refute_nil parsed[:sideload_config][:content]
282
+ refute_nil parsed[:build_config]
283
+ refute_nil parsed[:build_config][:content]
284
+ refute_nil parsed[:init_params][:loader]
285
+ refute_nil parsed[:init_params][:loader][:root_dir]
286
+
287
+ assert_nil parsed[:sideload_config][:content][:excludes]
288
+ assert_nil parsed[:sideload_config][:update_manifest]
289
+ assert_nil parsed[:sideload_config][:infile]
290
+ end
291
+ def test_setup_sideload_config_exclude
292
+ config = good_config
293
+ config[:projects][:project1][:excludes] = []
294
+ options = build_options({sideload: true, working: true})
295
+ parsed = ConfigParser.parse(options: options, config: config)
296
+ assert_nil parsed[:sideload_config][:content][:excludes]
297
+
298
+ options = build_options({build: true, working: true})
299
+ parsed = ConfigParser.parse(options: options, config: config)
300
+ refute_nil parsed[:sideload_config][:content][:excludes]
301
+
302
+ options = build_options({package: true, set_stage: true})
303
+ parsed = ConfigParser.parse(options: options, config: config)
304
+ refute_nil parsed[:sideload_config][:content][:excludes]
305
+
306
+ options = build_options({sideload: true, working: true, exclude: true})
307
+ parsed = ConfigParser.parse(options: options, config: config)
308
+ refute_nil parsed[:sideload_config][:content][:excludes]
309
+ end
347
310
 
348
- def test_deeplink_app_config
349
- args = {
350
- config: {},
351
- configs: {project_config: {directory: "dir"}, init_params: {}, out: {}},
352
- options: {deeplink: "a:b", app_id: "xxxxxx"},
353
- }
354
- RokuBuilder::ConfigParser.send(:setup_simple_configs, **args)
355
- end
311
+ def test_deeplink_app_config
312
+ config = good_config
313
+ options = build_options({deeplink: "a:b", app_id: "xxxxxx"})
314
+ parsed = ConfigParser.parse(options: options, config: config)
356
315
 
357
- def test_monitor_config
358
- args = {
359
- config: {},
360
- configs: {project_config: {directory: "dir"}, init_params: {}, out: {}},
361
- options: {monitor: "main", regexp: "^A$"},
362
- }
363
- RokuBuilder::ConfigParser.send(:setup_active_configs, **args)
364
- refute_nil args[:configs][:monitor_config][:regexp]
365
- assert args[:configs][:monitor_config][:regexp].match("A")
366
- end
316
+ assert_equal parsed[:deeplink_config][:options], options[:deeplink]
317
+ assert_equal parsed[:deeplink_config][:app_id], options[:app_id]
318
+ end
367
319
 
368
- def test_outfile_config
369
- configs = {}
370
- args = {
371
- options: {out: nil},
372
- configs: configs
373
- }
374
- RokuBuilder::ConfigParser.send(:setup_outfile, **args)
375
- refute_nil configs[:out]
376
- refute_nil configs[:out][:folder]
377
- assert_nil configs[:out][:file]
378
- assert_equal "/tmp", configs[:out][:folder]
379
-
380
- configs = {}
381
- args = {
382
- options: {out: "/home/user"},
383
- configs: configs
384
- }
385
- RokuBuilder::ConfigParser.send(:setup_outfile, **args)
386
- refute_nil configs[:out]
387
- refute_nil configs[:out][:folder]
388
- assert_nil configs[:out][:file]
389
- assert_equal "/home/user", configs[:out][:folder]
390
-
391
- configs = {}
392
- args = {
393
- options: {out: "/home/user/file.pkg"},
394
- configs: configs
395
- }
396
- RokuBuilder::ConfigParser.send(:setup_outfile, **args)
397
- refute_nil configs[:out]
398
- refute_nil configs[:out][:folder]
399
- refute_nil configs[:out][:file]
400
- assert_equal "/home/user", configs[:out][:folder]
401
- assert_equal "file.pkg", configs[:out][:file]
402
-
403
- configs = {}
404
- args = {
405
- options: {out: "/home/user/file.zip"},
406
- configs: configs
407
- }
408
- RokuBuilder::ConfigParser.send(:setup_outfile, **args)
409
- refute_nil configs[:out]
410
- refute_nil configs[:out][:folder]
411
- refute_nil configs[:out][:file]
412
- assert_equal "/home/user", configs[:out][:folder]
413
- assert_equal "file.zip", configs[:out][:file]
414
-
415
- configs = {}
416
- args = {
417
- options: {out: "/home/user/file.jpg"},
418
- configs: configs
419
- }
420
- RokuBuilder::ConfigParser.send(:setup_outfile, **args)
421
- refute_nil configs[:out]
422
- refute_nil configs[:out][:folder]
423
- refute_nil configs[:out][:file]
424
- assert_equal "/home/user", configs[:out][:folder]
425
- assert_equal "file.jpg", configs[:out][:file]
426
-
427
- configs = {}
428
- args = {
429
- options: {out: "file.jpg"},
430
- configs: configs
431
- }
432
- RokuBuilder::ConfigParser.send(:setup_outfile, **args)
433
- refute_nil configs[:out]
434
- refute_nil configs[:out][:folder]
435
- refute_nil configs[:out][:file]
436
- assert_equal "/tmp", configs[:out][:folder]
437
- assert_equal "file.jpg", configs[:out][:file]
320
+ def test_monitor_config
321
+ config = good_config
322
+ options = build_options({monitor: "main", regexp: "^A$"})
323
+ parsed = ConfigParser.parse(options: options, config: config)
324
+ refute_nil parsed[:monitor_config][:regexp]
325
+ assert parsed[:monitor_config][:regexp].match("A")
326
+ end
327
+ def test_outfile_config_default
328
+ config = good_config
329
+ options = build_options({build: true, working: true, out: nil})
330
+ parsed = ConfigParser.parse(options: options, config: config)
331
+
332
+ refute_nil parsed[:out]
333
+ refute_nil parsed[:out][:folder]
334
+ assert_nil parsed[:out][:file]
335
+ assert_equal "/tmp", parsed[:out][:folder]
336
+ end
337
+ def test_outfile_config_folder
338
+ config = good_config
339
+
340
+ options = build_options({build: true, working: true, out: "/home/user"})
341
+ parsed = ConfigParser.parse(options: options, config: config)
342
+ refute_nil parsed[:out]
343
+ refute_nil parsed[:out][:folder]
344
+ assert_nil parsed[:out][:file]
345
+ assert_equal "/home/user", parsed[:out][:folder]
346
+ end
347
+ def test_outfile_config_pkg
348
+ config = good_config
349
+
350
+ options = build_options({build: true, working: true, out: "/home/user/file.pkg"})
351
+ parsed = ConfigParser.parse(options: options, config: config)
352
+ refute_nil parsed[:out]
353
+ refute_nil parsed[:out][:folder]
354
+ refute_nil parsed[:out][:file]
355
+ assert_equal "/home/user", parsed[:out][:folder]
356
+ assert_equal "file.pkg", parsed[:out][:file]
357
+ end
358
+ def test_outfile_config_zip
359
+ config = good_config
360
+
361
+ options = build_options({build: true, working: true, out: "/home/user/file.zip"})
362
+ parsed = ConfigParser.parse(options: options, config: config)
363
+ refute_nil parsed[:out]
364
+ refute_nil parsed[:out][:folder]
365
+ refute_nil parsed[:out][:file]
366
+ assert_equal "/home/user", parsed[:out][:folder]
367
+ assert_equal "file.zip", parsed[:out][:file]
368
+ end
369
+ def test_outfile_config_jpg
370
+ config = good_config
371
+
372
+ options = build_options({build: true, working: true, out: "/home/user/file.jpg"})
373
+ parsed = ConfigParser.parse(options: options, config: config)
374
+ refute_nil parsed[:out]
375
+ refute_nil parsed[:out][:folder]
376
+ refute_nil parsed[:out][:file]
377
+ assert_equal "/home/user", parsed[:out][:folder]
378
+ assert_equal "file.jpg", parsed[:out][:file]
379
+ end
380
+ def test_outfile_config_default_jpg
381
+ config = good_config
382
+
383
+ options = build_options({build: true, working: true, out: "file.jpg"})
384
+ parsed = ConfigParser.parse(options: options, config: config)
385
+ refute_nil parsed[:out]
386
+ refute_nil parsed[:out][:folder]
387
+ refute_nil parsed[:out][:file]
388
+ assert_equal "/tmp", parsed[:out][:folder]
389
+ assert_equal "file.jpg", parsed[:out][:file]
390
+ end
438
391
  end
439
392
  end