roku_builder 3.3.3 → 3.3.4

Sign up to get free protection for your applications and to get access to all the features.
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