roku_builder 3.3.3 → 3.3.4

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 (42) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/.rubocop.yml +1158 -0
  4. data/.travis.yml +3 -0
  5. data/Gemfile.lock +19 -14
  6. data/README.md +5 -0
  7. data/bin/roku +32 -37
  8. data/config.json.example +2 -2
  9. data/lib/roku_builder/config_manager.rb +83 -118
  10. data/lib/roku_builder/config_parser.rb +192 -0
  11. data/lib/roku_builder/config_validator.rb +125 -0
  12. data/lib/roku_builder/controller.rb +97 -484
  13. data/lib/roku_builder/controller_commands.rb +112 -0
  14. data/lib/roku_builder/error_handler.rb +116 -0
  15. data/lib/roku_builder/inspector.rb +5 -18
  16. data/lib/roku_builder/keyer.rb +3 -11
  17. data/lib/roku_builder/linker.rb +3 -15
  18. data/lib/roku_builder/loader.rb +52 -89
  19. data/lib/roku_builder/manifest_manager.rb +2 -3
  20. data/lib/roku_builder/monitor.rb +15 -12
  21. data/lib/roku_builder/navigator.rb +2 -10
  22. data/lib/roku_builder/packager.rb +1 -7
  23. data/lib/roku_builder/tester.rb +1 -0
  24. data/lib/roku_builder/util.rb +39 -0
  25. data/lib/roku_builder/version.rb +1 -1
  26. data/lib/roku_builder.rb +96 -1
  27. data/roku_builder.gemspec +5 -4
  28. data/tests/roku_builder/config_manager_test.rb +80 -241
  29. data/tests/roku_builder/{controller_config_test.rb → config_parser_test.rb} +5 -5
  30. data/tests/roku_builder/config_validator_test.rb +158 -0
  31. data/tests/roku_builder/controller_commands_test.rb +304 -0
  32. data/tests/roku_builder/controller_test.rb +61 -620
  33. data/tests/roku_builder/error_handler_test.rb +76 -0
  34. data/tests/roku_builder/inspector_test.rb +3 -0
  35. data/tests/roku_builder/keyer_test.rb +3 -2
  36. data/tests/roku_builder/linker_test.rb +2 -1
  37. data/tests/roku_builder/loader_test.rb +2 -0
  38. data/tests/roku_builder/manifest_manager_test.rb +3 -6
  39. data/tests/roku_builder/monitor_test.rb +5 -13
  40. data/tests/roku_builder/navigator_test.rb +2 -0
  41. data/tests/roku_builder/test_helper.rb +38 -0
  42. metadata +34 -11
@@ -0,0 +1,158 @@
1
+ require_relative "test_helper.rb"
2
+
3
+ class ConfigValidatorTest < Minitest::Test
4
+
5
+ def test_config_manager_validate_devices
6
+ config = good_config
7
+ config[:devices] = nil
8
+ codes = RokuBuilder::ConfigValidator.validate_config(config: config)
9
+ assert_equal [1], codes
10
+ end
11
+
12
+ def test_config_manager_validate_devices_default
13
+ config = good_config
14
+ config[:devices][:default] = nil
15
+ codes = RokuBuilder::ConfigValidator.validate_config(config: config)
16
+ assert_equal [2], codes
17
+ end
18
+
19
+ def test_config_manager_validate_devices_default_is_symbol
20
+ config = good_config
21
+ config[:devices][:default] = "bad"
22
+ codes = RokuBuilder::ConfigValidator.validate_config(config: config)
23
+ assert_equal [3], codes
24
+ end
25
+
26
+ def test_config_manager_validate_device_ip
27
+ config = good_config
28
+ config[:devices][:roku][:ip] = nil
29
+ codes = RokuBuilder::ConfigValidator.validate_config(config: config)
30
+ assert_equal [7], codes
31
+ end
32
+
33
+ def test_config_manager_validate_device_ip_empty
34
+ config = good_config
35
+ config[:devices][:roku][:ip] = ""
36
+ codes = RokuBuilder::ConfigValidator.validate_config(config: config)
37
+ assert_equal [7], codes
38
+ end
39
+
40
+ def test_config_manager_validate_device_ip_default_value
41
+ config = good_config
42
+ config[:devices][:roku][:ip] = "xxx.xxx.xxx.xxx"
43
+ codes = RokuBuilder::ConfigValidator.validate_config(config: config)
44
+ assert_equal [7], codes
45
+ end
46
+
47
+ def test_config_manager_validate_device_user
48
+ config = good_config
49
+ config[:devices][:roku][:user] = nil
50
+ codes = RokuBuilder::ConfigValidator.validate_config(config: config)
51
+ assert_equal [8], codes
52
+ end
53
+
54
+ def test_config_manager_validate_device_user_empty
55
+ config = good_config
56
+ config[:devices][:roku][:user] = ""
57
+ codes = RokuBuilder::ConfigValidator.validate_config(config: config)
58
+ assert_equal [8], codes
59
+ end
60
+
61
+ def test_config_manager_validate_device_user_default_value
62
+ config = good_config
63
+ config[:devices][:roku][:user] = "<username>"
64
+ codes = RokuBuilder::ConfigValidator.validate_config(config: config)
65
+ assert_equal [8], codes
66
+ end
67
+
68
+ def test_config_manager_validate_device_password
69
+ config = good_config
70
+ config[:devices][:roku][:password] = nil
71
+ codes = RokuBuilder::ConfigValidator.validate_config(config: config)
72
+ assert_equal [9], codes
73
+ end
74
+
75
+ def test_config_manager_validate_device_password_empty
76
+ config = good_config
77
+ config[:devices][:roku][:password] = ""
78
+ codes = RokuBuilder::ConfigValidator.validate_config(config: config)
79
+ assert_equal [9], codes
80
+ end
81
+
82
+ def test_config_manager_validate_device_password_default_value
83
+ config = good_config
84
+ config[:devices][:roku][:password] = "<password>"
85
+ codes = RokuBuilder::ConfigValidator.validate_config(config: config)
86
+ assert_equal [9], codes
87
+ end
88
+
89
+ def test_config_manager_validate_projects
90
+ config = good_config
91
+ config[:projects] = nil
92
+ codes = RokuBuilder::ConfigValidator.validate_config(config: config)
93
+ assert_equal [4], codes
94
+ end
95
+
96
+ def test_config_manager_validate_projects_default
97
+ config = good_config
98
+ config[:projects][:default] = nil
99
+ codes = RokuBuilder::ConfigValidator.validate_config(config: config)
100
+ assert_equal [5], codes
101
+ end
102
+
103
+ def test_config_manager_validate_projects_default_default_value
104
+ config = good_config
105
+ config[:projects][:default] = "<project id>".to_sym
106
+ codes = RokuBuilder::ConfigValidator.validate_config(config: config)
107
+ assert_equal [5], codes
108
+ end
109
+
110
+ def test_config_manager_validate_projects_default_is_symbol
111
+ config = good_config
112
+ config[:projects][:default] = "project_id"
113
+ codes = RokuBuilder::ConfigValidator.validate_config(config: config)
114
+ assert_equal [6], codes
115
+ end
116
+
117
+ def test_config_manager_validate_project_app_name
118
+ config = good_config
119
+ config[:projects][:project1][:app_name] = nil
120
+ codes = RokuBuilder::ConfigValidator.validate_config(config: config)
121
+ assert_equal [10], codes
122
+ end
123
+
124
+ def test_config_manager_validate_project_directory
125
+ config = good_config
126
+ config[:projects][:project1][:directory] = nil
127
+ codes = RokuBuilder::ConfigValidator.validate_config(config: config)
128
+ assert_equal [11], codes
129
+ end
130
+
131
+ def test_config_manager_validate_project_folders
132
+ config = good_config
133
+ config[:projects][:project1][:folders] = nil
134
+ codes = RokuBuilder::ConfigValidator.validate_config(config: config)
135
+ assert_equal [12], codes
136
+ end
137
+
138
+ def test_config_manager_validate_project_folders_is_array
139
+ config = good_config
140
+ config[:projects][:project1][:folders] = "Folders"
141
+ codes = RokuBuilder::ConfigValidator.validate_config(config: config)
142
+ assert_equal [13], codes
143
+ end
144
+
145
+ def test_config_manager_validate_project_files
146
+ config = good_config
147
+ config[:projects][:project1][:files] = nil
148
+ codes = RokuBuilder::ConfigValidator.validate_config(config: config)
149
+ assert_equal [14], codes
150
+ end
151
+
152
+ def test_config_manager_validate_project_filess_is_array
153
+ config = good_config
154
+ config[:projects][:project1][:files] = "Files"
155
+ codes = RokuBuilder::ConfigValidator.validate_config(config: config)
156
+ assert_equal [15], codes
157
+ end
158
+ end
@@ -0,0 +1,304 @@
1
+ require_relative "test_helper.rb"
2
+
3
+ class ControllerCommandsTest < Minitest::Test
4
+
5
+ def test_controller_commands_sideload
6
+ logger = Logger.new("/dev/null")
7
+ loader = Minitest::Mock.new
8
+
9
+ options = {sideload: true, stage: 'production', config: "~/.roku_config.rb"}
10
+ config = good_config
11
+ code, configs = RokuBuilder::ConfigParser.parse_config(options: options, config: config, logger: logger)
12
+ # Test Success
13
+ loader.expect(:sideload, true, [configs[:sideload_config]])
14
+ RokuBuilder::Loader.stub(:new, loader) do
15
+ code = RokuBuilder::Controller.send(:execute_commands, {options: options, config: config, configs: configs, logger: logger})
16
+ end
17
+ assert_equal RokuBuilder::SUCCESS, code
18
+
19
+ # Test Failure
20
+ loader.expect(:sideload, false, [configs[:sideload_config]])
21
+ RokuBuilder::Loader.stub(:new, loader) do
22
+ code = RokuBuilder::Controller.send(:execute_commands, {options: options, config: config, configs: configs, logger: logger})
23
+ end
24
+ assert_equal RokuBuilder::FAILED_SIDELOAD, code
25
+
26
+ loader.verify
27
+ end
28
+
29
+ def test_controller_commands_package
30
+ logger = Logger.new("/dev/null")
31
+ keyer = Minitest::Mock.new
32
+ loader = Minitest::Mock.new
33
+ packager = Minitest::Mock.new
34
+ inspector = Minitest::Mock.new
35
+
36
+ options = {package: true, inspect: true, stage: 'production', out_folder: "/tmp", config: "~/.roku_config.json"}
37
+ config = good_config
38
+ code, configs = RokuBuilder::ConfigParser.parse_config(options: options, config: config, logger: logger)
39
+ info = {app_name: "app", dev_id: "id", creation_date: "date", dev_zip: ""}
40
+
41
+ loader.expect(:sideload, "build_version", [configs[:sideload_config]])
42
+ keyer.expect(:rekey, true, [configs[:key]])
43
+ packager.expect(:package, true, [configs[:package_config]])
44
+ inspector.expect(:inspect, info, [configs[:inspect_config]])
45
+
46
+ code = nil
47
+ RokuBuilder::Keyer.stub(:new, keyer) do
48
+ RokuBuilder::Loader.stub(:new, loader) do
49
+ RokuBuilder::Packager.stub(:new, packager) do
50
+ RokuBuilder::Inspector.stub(:new, inspector) do
51
+ code = RokuBuilder::Controller.send(:execute_commands, {options: options, config: config, configs: configs, logger: logger})
52
+ end
53
+ end
54
+ end
55
+ end
56
+ assert_equal RokuBuilder::SUCCESS, code
57
+
58
+ keyer.verify
59
+ loader.verify
60
+ packager.verify
61
+ inspector.verify
62
+ end
63
+
64
+ def test_controller_commands_package_outfile
65
+ logger = Logger.new("/dev/null")
66
+ keyer = Minitest::Mock.new
67
+ loader = Minitest::Mock.new
68
+ packager = Minitest::Mock.new
69
+ inspector = Minitest::Mock.new
70
+
71
+ options = {package: true, inspect: true, stage: 'production', out: "/tmp/out.pkg", config: "~/.roku_config.json"}
72
+ config = good_config
73
+ code, configs = RokuBuilder::ConfigParser.parse_config(options: options, config: config, logger: logger)
74
+ info = {app_name: "app", dev_id: "id", creation_date: "date", dev_zip: ""}
75
+
76
+ loader.expect(:sideload, "build_version", [configs[:sideload_config]])
77
+ keyer.expect(:rekey, true, [configs[:key]])
78
+ packager.expect(:package, true, [configs[:package_config]])
79
+ inspector.expect(:inspect, info, [configs[:inspect_config]])
80
+
81
+ code = nil
82
+ RokuBuilder::Keyer.stub(:new, keyer) do
83
+ RokuBuilder::Loader.stub(:new, loader) do
84
+ RokuBuilder::Packager.stub(:new, packager) do
85
+ RokuBuilder::Inspector.stub(:new, inspector) do
86
+ code = RokuBuilder::Controller.send(:execute_commands, {options: options, config: config, configs: configs, logger: logger})
87
+ end
88
+ end
89
+ end
90
+ end
91
+ assert_equal RokuBuilder::SUCCESS, code
92
+
93
+ keyer.verify
94
+ loader.verify
95
+ packager.verify
96
+ inspector.verify
97
+ end
98
+
99
+ def test_controller_commands_build
100
+ logger = Logger.new("/dev/null")
101
+ loader = Minitest::Mock.new
102
+
103
+ code = nil
104
+ options = {build: true, stage: 'production', out_folder: "/tmp", config: "~/.roku_config.json"}
105
+ config = good_config
106
+ code, configs = RokuBuilder::ConfigParser.parse_config(options: options, config: config, logger: logger)
107
+ loader.expect(:build, "/tmp/build", [configs[:build_config]])
108
+ RokuBuilder::Loader.stub(:new, loader) do
109
+ RokuBuilder::ManifestManager.stub(:build_version, "1") do
110
+ code = RokuBuilder::Controller.send(:execute_commands, {options: options, config: config, configs: configs, logger: logger})
111
+ end
112
+ end
113
+ assert_equal RokuBuilder::SUCCESS, code
114
+ loader.verify
115
+ end
116
+ def test_controller_commands_update
117
+ logger = Logger.new("/dev/null")
118
+ mock = Minitest::Mock.new
119
+
120
+ code = nil
121
+ options = {update: true, stage: 'production', out_folder: "/tmp", config: ":execute_commands,/.roku_config.json"}
122
+ config = good_config
123
+ code, configs = RokuBuilder::ConfigParser.parse_config(options: options, config: config, logger: logger)
124
+ mock.expect(:call, "1", [configs[:manifest_config]])
125
+ mock.expect(:call, "2", [configs[:manifest_config]])
126
+ RokuBuilder::ManifestManager.stub(:build_version, mock) do
127
+ RokuBuilder::ManifestManager.stub(:update_build, mock) do
128
+ code = RokuBuilder::Controller.send(:execute_commands, {options: options, config: config, configs: configs, logger: logger})
129
+ end
130
+ end
131
+ mock.verify
132
+ assert_equal RokuBuilder::SUCCESS, code
133
+ end
134
+
135
+ def test_controller_commands_deeplink
136
+ logger = Logger.new("/dev/null")
137
+ mock = Minitest::Mock.new
138
+
139
+ code = nil
140
+ options = {deeplink: true, stage: 'production', deeplink_options: "a:b", config: ":execute_commands,/.roku_config.json"}
141
+ config = good_config
142
+ code, configs = RokuBuilder::ConfigParser.parse_config(options: options, config: config, logger: logger)
143
+ mock.expect(:link, "true", [configs[:deeplink_config]])
144
+ RokuBuilder::Linker.stub(:new, mock) do
145
+ code = RokuBuilder::Controller.send(:execute_commands, {options: options, config: config, configs: configs, logger: logger})
146
+ end
147
+ mock.verify
148
+ assert_equal RokuBuilder::SUCCESS, code
149
+ end
150
+ def test_controller_commands_delete
151
+ logger = Logger.new("/dev/null")
152
+ loader = Minitest::Mock.new
153
+
154
+ options = {delete: true, stage: 'production', config: ":execute_commands,/.roku_config.json"}
155
+ config = good_config
156
+ code, configs = RokuBuilder::ConfigParser.parse_config(options: options, config: config, logger: logger)
157
+ loader.expect(:unload, nil)
158
+ code = nil
159
+ RokuBuilder::Loader.stub(:new, loader) do
160
+ RokuBuilder::ManifestManager.stub(:build_version, "1") do
161
+ code = RokuBuilder::Controller.send(:execute_commands, {options: options, config: config, configs: configs, logger: logger})
162
+ end
163
+ end
164
+ assert_equal RokuBuilder::SUCCESS, code
165
+ loader.verify
166
+ end
167
+ def test_controller_commands_monitor
168
+ logger = Logger.new("/dev/null")
169
+ monitor = Minitest::Mock.new
170
+
171
+ options = {monitor: "main", stage: 'production', config: ":execute_commands,/.roku_config.json"}
172
+ config = good_config
173
+ code, configs = RokuBuilder::ConfigParser.parse_config(options: options, config: config, logger: logger)
174
+ monitor.expect(:monitor, nil, [configs[:monitor_config]])
175
+ code = nil
176
+ RokuBuilder::Monitor.stub(:new, monitor) do
177
+ RokuBuilder::ManifestManager.stub(:build_version, "1") do
178
+ code = RokuBuilder::Controller.send(:execute_commands, {options: options, config: config, configs: configs, logger: logger})
179
+ end
180
+ end
181
+ assert_equal RokuBuilder::SUCCESS, code
182
+ monitor.verify
183
+ end
184
+ def test_controller_commands_navigate
185
+ logger = Logger.new("/dev/null")
186
+ navigator = Minitest::Mock.new
187
+
188
+ options = {navigate: "up", stage: 'production', config: ":execute_commands,/.roku_config.json"}
189
+ config = good_config
190
+ code, configs = RokuBuilder::ConfigParser.parse_config(options: options, config: config, logger: logger)
191
+ navigator.expect(:nav, true, [configs[:navigate_config]])
192
+ code = nil
193
+ RokuBuilder::Navigator.stub(:new, navigator) do
194
+ code = RokuBuilder::Controller.send(:execute_commands, {options: options, config: config, configs: configs, logger: logger})
195
+ end
196
+ assert_equal RokuBuilder::SUCCESS, code
197
+ navigator.verify
198
+ end
199
+ def test_controller_commands_navigate_fail
200
+ logger = Logger.new("/dev/null")
201
+ navigator = Minitest::Mock.new
202
+
203
+ options = {navigate: "up", stage: 'production', config: ":execute_commands,/.roku_config.json"}
204
+ config = good_config
205
+ code, configs = RokuBuilder::ConfigParser.parse_config(options: options, config: config, logger: logger)
206
+ navigator.expect(:nav, nil, [configs[:navigate_config]])
207
+ code = nil
208
+ RokuBuilder::Navigator.stub(:new, navigator) do
209
+ code = RokuBuilder::Controller.send(:execute_commands, {options: options, config: config, configs: configs, logger: logger})
210
+ end
211
+ assert_equal RokuBuilder::FAILED_NAVIGATING, code
212
+ navigator.verify
213
+ end
214
+ def test_controller_commands_screen
215
+ logger = Logger.new("/dev/null")
216
+ navigator = Minitest::Mock.new
217
+
218
+ options = {screen: "secret", stage: 'production', config: ":execute_commands,/.roku_config.json"}
219
+ config = good_config
220
+ code, configs = RokuBuilder::ConfigParser.parse_config(options: options, config: config, logger: logger)
221
+ navigator.expect(:screen, true, [configs[:screen_config]])
222
+ code = nil
223
+ RokuBuilder::Navigator.stub(:new, navigator) do
224
+ code = RokuBuilder::Controller.send(:execute_commands, {options: options, config: config, configs: configs, logger: logger})
225
+ end
226
+ assert_equal RokuBuilder::SUCCESS, code
227
+ navigator.verify
228
+ end
229
+ def test_controller_commands_screens
230
+ logger = Logger.new("/dev/null")
231
+ navigator = Minitest::Mock.new
232
+
233
+ options = {screens: true, stage: 'production', config: ":execute_commands,/.roku_config.json"}
234
+ config = good_config
235
+ code, configs = RokuBuilder::ConfigParser.parse_config(options: options, config: config, logger: logger)
236
+ navigator.expect(:screens, true)
237
+ code = nil
238
+ RokuBuilder::Navigator.stub(:new, navigator) do
239
+ code = RokuBuilder::Controller.send(:execute_commands, {options: options, config: config, configs: configs, logger: logger})
240
+ end
241
+ assert_equal RokuBuilder::SUCCESS, code
242
+ navigator.verify
243
+ end
244
+ def test_controller_commands_text
245
+ logger = Logger.new("/dev/null")
246
+ navigator = Minitest::Mock.new
247
+
248
+ options = {text: "text string", stage: 'production', config: ":execute_commands,/.roku_config.json"}
249
+ config = good_config
250
+ code, configs = RokuBuilder::ConfigParser.parse_config(options: options, config: config, logger: logger)
251
+ navigator.expect(:type, true, [configs[:text_config]])
252
+ code = nil
253
+ RokuBuilder::Navigator.stub(:new, navigator) do
254
+ code = RokuBuilder::Controller.send(:execute_commands, {options: options, config: config, configs: configs, logger: logger})
255
+ end
256
+ assert_equal RokuBuilder::SUCCESS, code
257
+ navigator.verify
258
+ end
259
+ def test_controller_commands_test
260
+ logger = Logger.new("/dev/null")
261
+ tester = Minitest::Mock.new
262
+
263
+ options = {test: true, stage: 'production', config: ":execute_commands,/.roku_config.json"}
264
+ config = good_config
265
+ code, configs = RokuBuilder::ConfigParser.parse_config(options: options, config: config, logger: logger)
266
+ tester.expect(:run_tests, true, [configs[:test_config]])
267
+ code = nil
268
+ RokuBuilder::Tester.stub(:new, tester) do
269
+ code = RokuBuilder::Controller.send(:execute_commands, {options: options, config: config, configs: configs, logger: logger})
270
+ end
271
+ assert_equal RokuBuilder::SUCCESS, code
272
+ tester.verify
273
+ end
274
+ def test_controller_commands_screencapture
275
+ logger = Logger.new("/dev/null")
276
+ inspector = Minitest::Mock.new
277
+
278
+ options = {screencapture: true, stage: 'production', out: "/tmp/capture.jpg", config: ":execute_commands,/.roku_config.json"}
279
+ config = good_config
280
+ code, configs = RokuBuilder::ConfigParser.parse_config(options: options, config: config, logger: logger)
281
+ inspector.expect(:screencapture, true, [configs[:screencapture_config]])
282
+ code = nil
283
+ RokuBuilder::Inspector.stub(:new, inspector) do
284
+ code = RokuBuilder::Controller.send(:execute_commands, {options: options, config: config, configs: configs, logger: logger})
285
+ end
286
+ assert_equal RokuBuilder::SUCCESS, code
287
+ inspector.verify
288
+ end
289
+ def test_controller_commands_screencapture_fail
290
+ logger = Logger.new("/dev/null")
291
+ inspector = Minitest::Mock.new
292
+
293
+ options = {screencapture: true, stage: 'production', out: "/tmp", config: ":execute_commands,/.roku_config.json"}
294
+ config = good_config
295
+ code, configs = RokuBuilder::ConfigParser.parse_config(options: options, config: config, logger: logger)
296
+ inspector.expect(:screencapture, false, [configs[:screencapture_config]])
297
+ code = nil
298
+ RokuBuilder::Inspector.stub(:new, inspector) do
299
+ code = RokuBuilder::Controller.send(:execute_commands, {options: options, config: config, configs: configs, logger: logger})
300
+ end
301
+ assert_equal RokuBuilder::FAILED_SCREENCAPTURE, code
302
+ inspector.verify
303
+ end
304
+ end