geb 0.1.11
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 +7 -0
- data/.yardopts +3 -0
- data/CHANGELOG.md +37 -0
- data/CODE_OF_CONDUCT.md +84 -0
- data/LICENSE +21 -0
- data/README.md +384 -0
- data/Rakefile +21 -0
- data/bin/geb +21 -0
- data/lib/geb/cli.rb +40 -0
- data/lib/geb/commands/build.rb +59 -0
- data/lib/geb/commands/init.rb +70 -0
- data/lib/geb/commands/release.rb +54 -0
- data/lib/geb/commands/remote.rb +48 -0
- data/lib/geb/commands/server.rb +77 -0
- data/lib/geb/commands/upload.rb +48 -0
- data/lib/geb/commands/version.rb +36 -0
- data/lib/geb/config.rb +103 -0
- data/lib/geb/defaults.rb +44 -0
- data/lib/geb/git.rb +112 -0
- data/lib/geb/page.rb +217 -0
- data/lib/geb/partial.rb +150 -0
- data/lib/geb/samples/basic/assets/css/site.css +7 -0
- data/lib/geb/samples/basic/assets/images/android-chrome-192x192.png +0 -0
- data/lib/geb/samples/basic/assets/images/android-chrome-512x512.png +0 -0
- data/lib/geb/samples/basic/assets/images/apple-touch-icon.png +0 -0
- data/lib/geb/samples/basic/assets/images/favicon-16x16.png +0 -0
- data/lib/geb/samples/basic/assets/images/favicon-32x32.png +0 -0
- data/lib/geb/samples/basic/assets/images/favicon.ico +0 -0
- data/lib/geb/samples/basic/assets/images/hero.png +0 -0
- data/lib/geb/samples/basic/assets/images/og-thumb.png +0 -0
- data/lib/geb/samples/basic/assets/images/twitter-thumb.png +0 -0
- data/lib/geb/samples/basic/assets/js/site.js +5 -0
- data/lib/geb/samples/basic/geb.config.yml +70 -0
- data/lib/geb/samples/basic/index.html +11 -0
- data/lib/geb/samples/basic/page.html +11 -0
- data/lib/geb/samples/basic/shared/partials/_analytics.html +9 -0
- data/lib/geb/samples/basic/shared/partials/_footer.html +3 -0
- data/lib/geb/samples/basic/shared/partials/_global_assets.html +19 -0
- data/lib/geb/samples/basic/shared/partials/_header.html +0 -0
- data/lib/geb/samples/basic/shared/partials/_meta_tags.html +34 -0
- data/lib/geb/samples/basic/shared/templates/_blog_post.html +0 -0
- data/lib/geb/samples/basic/shared/templates/_site.html +19 -0
- data/lib/geb/samples/basic/site.webmanifest +1 -0
- data/lib/geb/samples/bootstrap_jquery/assets/css/site.css +7 -0
- data/lib/geb/samples/bootstrap_jquery/assets/images/android-chrome-192x192.png +0 -0
- data/lib/geb/samples/bootstrap_jquery/assets/images/android-chrome-512x512.png +0 -0
- data/lib/geb/samples/bootstrap_jquery/assets/images/apple-touch-icon.png +0 -0
- data/lib/geb/samples/bootstrap_jquery/assets/images/favicon-16x16.png +0 -0
- data/lib/geb/samples/bootstrap_jquery/assets/images/favicon-32x32.png +0 -0
- data/lib/geb/samples/bootstrap_jquery/assets/images/favicon.ico +0 -0
- data/lib/geb/samples/bootstrap_jquery/assets/images/hero.png +0 -0
- data/lib/geb/samples/bootstrap_jquery/assets/images/og-thumb.png +0 -0
- data/lib/geb/samples/bootstrap_jquery/assets/images/twitter-thumb.png +0 -0
- data/lib/geb/samples/bootstrap_jquery/assets/js/site.js +5 -0
- data/lib/geb/samples/bootstrap_jquery/blog/blog_post_1.html +35 -0
- data/lib/geb/samples/bootstrap_jquery/blog/blog_post_2.html +35 -0
- data/lib/geb/samples/bootstrap_jquery/blog/blog_post_3.html +35 -0
- data/lib/geb/samples/bootstrap_jquery/blog/index.html +17 -0
- data/lib/geb/samples/bootstrap_jquery/geb.config.yml +69 -0
- data/lib/geb/samples/bootstrap_jquery/index.html +11 -0
- data/lib/geb/samples/bootstrap_jquery/page.html +11 -0
- data/lib/geb/samples/bootstrap_jquery/shared/partials/_analytics.html +9 -0
- data/lib/geb/samples/bootstrap_jquery/shared/partials/_footer.html +3 -0
- data/lib/geb/samples/bootstrap_jquery/shared/partials/_global_assets.html +19 -0
- data/lib/geb/samples/bootstrap_jquery/shared/partials/_header.html +0 -0
- data/lib/geb/samples/bootstrap_jquery/shared/partials/_meta_tags.html +34 -0
- data/lib/geb/samples/bootstrap_jquery/shared/templates/_blog_post.html +0 -0
- data/lib/geb/samples/bootstrap_jquery/shared/templates/_site.html +19 -0
- data/lib/geb/samples/bootstrap_jquery/site.webmanifest +1 -0
- data/lib/geb/samples/geb.config.yml +70 -0
- data/lib/geb/server.rb +138 -0
- data/lib/geb/site/build.rb +189 -0
- data/lib/geb/site/core.rb +229 -0
- data/lib/geb/site/release.rb +70 -0
- data/lib/geb/site/remote.rb +142 -0
- data/lib/geb/site/template.rb +208 -0
- data/lib/geb/site.rb +83 -0
- data/lib/geb/template.rb +166 -0
- data/lib/geb/utilities.rb +110 -0
- data/lib/geb.rb +36 -0
- data/lib/seth.rb +50 -0
- data/sig/geb.rbs +4 -0
- data/test/api tests/test_cli.rb +200 -0
- data/test/api tests/test_config.rb +330 -0
- data/test/api tests/test_defaults.rb +62 -0
- data/test/api tests/test_git.rb +105 -0
- data/test/api tests/test_page.rb +320 -0
- data/test/api tests/test_partial.rb +152 -0
- data/test/api tests/test_server.rb +416 -0
- data/test/api tests/test_site.rb +1315 -0
- data/test/api tests/test_template.rb +249 -0
- data/test/api tests/test_utilities.rb +162 -0
- data/test/command tests/test_geb_build.rb +199 -0
- data/test/command tests/test_geb_init.rb +312 -0
- data/test/command tests/test_geb_release.rb +166 -0
- data/test/command tests/test_geb_remote.rb +66 -0
- data/test/command tests/test_geb_server.rb +122 -0
- data/test/command tests/test_geb_upload.rb +96 -0
- data/test/command tests/test_geb_version.rb +58 -0
- data/test/support/geb_api_test.rb +37 -0
- data/test/support/geb_cli_test.rb +275 -0
- data/test/support/geb_minitest_ext.rb +35 -0
- data/test/support/geb_test_helpers.rb +84 -0
- data/test/support/geb_web_server_proxy.rb +128 -0
- data/test/test_helper.rb +61 -0
- metadata +301 -0
|
@@ -0,0 +1,312 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
#
|
|
3
|
+
# Tests the init command class
|
|
4
|
+
#
|
|
5
|
+
# @title Geb - Test - Init Command
|
|
6
|
+
# @author Edin Mustajbegovic <edin@actiontwelve.com>
|
|
7
|
+
# @copyright 2024 Edin Mustajbegovic
|
|
8
|
+
# @license MIT
|
|
9
|
+
#
|
|
10
|
+
# @see https://github.com/mainfram-work/geb for more information
|
|
11
|
+
|
|
12
|
+
require "test_helper"
|
|
13
|
+
require "fileutils"
|
|
14
|
+
require "tmpdir"
|
|
15
|
+
require 'webmock/minitest'
|
|
16
|
+
|
|
17
|
+
class TestGebCommandInit < Geb::CliTest
|
|
18
|
+
|
|
19
|
+
test "that the CLI api call works" do
|
|
20
|
+
|
|
21
|
+
# initialize new command instance
|
|
22
|
+
command = Geb::CLI::Commands::Init.new
|
|
23
|
+
|
|
24
|
+
site_path = "path/to/site"
|
|
25
|
+
command_options = { template: "default", skip_template: false, skip_git: false, force: false }
|
|
26
|
+
|
|
27
|
+
site_mock = mock('site')
|
|
28
|
+
site_mock.expects(:validate)
|
|
29
|
+
site_mock.expects(:create)
|
|
30
|
+
|
|
31
|
+
Geb::Site.expects(:new).returns(site_mock)
|
|
32
|
+
Geb::Git.expects(:validate_git_repo)
|
|
33
|
+
Geb::Git.expects(:create_git_repo)
|
|
34
|
+
|
|
35
|
+
original_stdout = $stdout
|
|
36
|
+
original_stderr = $stderr
|
|
37
|
+
|
|
38
|
+
$stdout = StringIO.new
|
|
39
|
+
$stderr = StringIO.new
|
|
40
|
+
|
|
41
|
+
command.call(site_path: site_path, **command_options)
|
|
42
|
+
|
|
43
|
+
assert_empty $stderr.string
|
|
44
|
+
|
|
45
|
+
$stdout = original_stdout
|
|
46
|
+
$stderr = original_stderr
|
|
47
|
+
|
|
48
|
+
end # test "that the CLI api call works"
|
|
49
|
+
|
|
50
|
+
test "that the CLI api call works and handles exceptions" do
|
|
51
|
+
|
|
52
|
+
# initialize new command instance
|
|
53
|
+
command = Geb::CLI::Commands::Init.new
|
|
54
|
+
|
|
55
|
+
site_path = "path/to/site"
|
|
56
|
+
command_options = { template: "default", skip_template: false, skip_git: false, force: false }
|
|
57
|
+
|
|
58
|
+
site_mock = mock('site')
|
|
59
|
+
site_mock.expects(:validate).raises(Geb::Error.new("Test Error"))
|
|
60
|
+
site_mock.stubs(:create)
|
|
61
|
+
|
|
62
|
+
Geb::Site.stubs(:new).returns(site_mock)
|
|
63
|
+
Geb::Git.stubs(:validate_git_repo)
|
|
64
|
+
Geb::Git.stubs(:create_git_repo)
|
|
65
|
+
|
|
66
|
+
# setup a StringIO to capture standard output and error
|
|
67
|
+
original_stdout = $stdout
|
|
68
|
+
original_stderr = $stderr
|
|
69
|
+
|
|
70
|
+
$stdout = StringIO.new
|
|
71
|
+
$stderr = StringIO.new
|
|
72
|
+
|
|
73
|
+
command.call(site_path: site_path, **command_options)
|
|
74
|
+
|
|
75
|
+
refute_empty $stderr.string
|
|
76
|
+
assert_includes $stderr.string, "Test Error"
|
|
77
|
+
|
|
78
|
+
$stdout = original_stdout
|
|
79
|
+
$stderr = original_stderr
|
|
80
|
+
|
|
81
|
+
end # test "that the CLI api call works and handles exceptions"
|
|
82
|
+
|
|
83
|
+
test "that command default executes" do
|
|
84
|
+
|
|
85
|
+
new_site_path = "new_site"
|
|
86
|
+
|
|
87
|
+
stdout, stderr, status = Open3.capture3("geb init #{new_site_path}")
|
|
88
|
+
|
|
89
|
+
assert status.success?
|
|
90
|
+
assert_empty stderr
|
|
91
|
+
|
|
92
|
+
assert_includes stdout, "Validating site path #{new_site_path} ... done."
|
|
93
|
+
assert_includes stdout, "No template specified, using default: #{Geb::Defaults::DEFAULT_TEMPLATE}."
|
|
94
|
+
assert_includes stdout, "Validating template path #{Geb::Defaults::DEFAULT_TEMPLATE_DIR} ... done."
|
|
95
|
+
assert_includes stdout, "Validating proposed site path as a git repository ... done."
|
|
96
|
+
refute_includes stdout, "Skipping git repository validation as told."
|
|
97
|
+
|
|
98
|
+
assert_includes stdout, "Creating site folder: #{new_site_path} ... done."
|
|
99
|
+
assert File.directory?(new_site_path)
|
|
100
|
+
|
|
101
|
+
assert_includes stdout, "Loading template site from path #{Geb::Defaults::DEFAULT_TEMPLATE_DIR} ... done."
|
|
102
|
+
assert_includes stdout, "Resolving directories and files from template site to copy ... done."
|
|
103
|
+
assert_includes stdout, "copying directory and all sub-directories from #{Geb::Defaults::DEFAULT_TEMPLATE_DIR}"
|
|
104
|
+
assert_includes stdout, "copying directory and all sub-directories from"
|
|
105
|
+
assert_includes stdout, "Creating: local and release output folders ...done."
|
|
106
|
+
assert File.directory?(File.join(new_site_path, Geb::Defaults::OUTPUT_DIR, Geb::Defaults::LOCAL_OUTPUT_DIR))
|
|
107
|
+
assert File.directory?(File.join(new_site_path, Geb::Defaults::OUTPUT_DIR, Geb::Defaults::RELEASE_OUTPUT_DIR))
|
|
108
|
+
|
|
109
|
+
assert_includes stdout, "Initialising git repository ... done."
|
|
110
|
+
refute_includes stdout, "Skipping git repository creation as told."
|
|
111
|
+
assert File.directory?(File.join(new_site_path, ".git"))
|
|
112
|
+
assert File.exist?(File.join(new_site_path, ".gitignore"))
|
|
113
|
+
|
|
114
|
+
end # test "that command default executes"
|
|
115
|
+
|
|
116
|
+
test "that new site can ignore git creation" do
|
|
117
|
+
|
|
118
|
+
new_site_path = "new_site"
|
|
119
|
+
|
|
120
|
+
stdout, stderr, status = Open3.capture3("geb init #{new_site_path} --skip-git")
|
|
121
|
+
|
|
122
|
+
assert status.success?
|
|
123
|
+
assert_empty stderr
|
|
124
|
+
|
|
125
|
+
assert_includes stdout, "Validating site path #{new_site_path} ... done."
|
|
126
|
+
assert_includes stdout, "No template specified, using default: #{Geb::Defaults::DEFAULT_TEMPLATE}."
|
|
127
|
+
assert_match(/Validating template path.*#{Geb::Defaults::DEFAULT_TEMPLATE}.*\.\.\. done\./, stdout)
|
|
128
|
+
assert_includes stdout, "Skipping git repository validation as told."
|
|
129
|
+
|
|
130
|
+
assert_includes stdout, "Creating site folder: #{new_site_path} ... done."
|
|
131
|
+
assert File.directory?(new_site_path)
|
|
132
|
+
|
|
133
|
+
|
|
134
|
+
assert_includes stdout, "Loading template site from path #{Geb::Defaults::DEFAULT_TEMPLATE_DIR} ... done."
|
|
135
|
+
assert_includes stdout, "Resolving directories and files from template site to copy ... done."
|
|
136
|
+
assert_includes stdout, "copying directory and all sub-directories from #{Geb::Defaults::DEFAULT_TEMPLATE_DIR}"
|
|
137
|
+
assert_includes stdout, "copying directory and all sub-directories from"
|
|
138
|
+
assert_includes stdout, "Creating: local and release output folders ...done."
|
|
139
|
+
assert File.directory?(File.join(new_site_path, Geb::Defaults::OUTPUT_DIR, Geb::Defaults::LOCAL_OUTPUT_DIR))
|
|
140
|
+
assert File.directory?(File.join(new_site_path, Geb::Defaults::OUTPUT_DIR, Geb::Defaults::RELEASE_OUTPUT_DIR))
|
|
141
|
+
|
|
142
|
+
refute_includes stdout, "Initialising git repository ... done."
|
|
143
|
+
assert_includes stdout, "Skipping git repository creation as told."
|
|
144
|
+
|
|
145
|
+
refute File.directory?(File.join(new_site_path, ".git"))
|
|
146
|
+
refute File.exist?(File.join(new_site_path, ".gitignore"))
|
|
147
|
+
|
|
148
|
+
end # test "that new site can ignore git creation"
|
|
149
|
+
|
|
150
|
+
test "that new site can ignore template creation" do
|
|
151
|
+
|
|
152
|
+
new_site_path = "new_site"
|
|
153
|
+
|
|
154
|
+
stdout, stderr, status = Open3.capture3("geb init #{new_site_path} --skip-template")
|
|
155
|
+
|
|
156
|
+
assert status.success?
|
|
157
|
+
assert_empty stderr
|
|
158
|
+
|
|
159
|
+
assert_includes stdout, "Validating site path #{new_site_path} ... done."
|
|
160
|
+
assert_includes stdout, "Skipping template validation as told."
|
|
161
|
+
assert_includes stdout, "Validating proposed site path as a git repository ... done."
|
|
162
|
+
refute_includes stdout, "Skipping git repository validation as told."
|
|
163
|
+
|
|
164
|
+
assert_includes stdout, "Creating site folder: #{new_site_path} ... done."
|
|
165
|
+
assert File.directory?(new_site_path)
|
|
166
|
+
|
|
167
|
+
assert_includes stdout, "Skipping template creation as told."
|
|
168
|
+
assert_includes stdout, "Creating: local and release output folders ...done."
|
|
169
|
+
|
|
170
|
+
assert File.directory?(File.join(new_site_path, Geb::Defaults::OUTPUT_DIR, Geb::Defaults::LOCAL_OUTPUT_DIR))
|
|
171
|
+
assert File.directory?(File.join(new_site_path, Geb::Defaults::OUTPUT_DIR, Geb::Defaults::RELEASE_OUTPUT_DIR))
|
|
172
|
+
|
|
173
|
+
assert_includes stdout, "Initialising git repository ... done."
|
|
174
|
+
refute_includes stdout, "Skipping git repository creation as told."
|
|
175
|
+
assert File.directory?(File.join(new_site_path, ".git"))
|
|
176
|
+
assert File.exist?(File.join(new_site_path, ".gitignore"))
|
|
177
|
+
|
|
178
|
+
end # test "that new site can ignore template creation"
|
|
179
|
+
|
|
180
|
+
test "that new site can handle specified geb sample template" do
|
|
181
|
+
|
|
182
|
+
new_site_path = "new_site"
|
|
183
|
+
template = "bootstrap_jquery"
|
|
184
|
+
|
|
185
|
+
stdout, stderr, status = Open3.capture3("geb init #{new_site_path} --template #{template}")
|
|
186
|
+
|
|
187
|
+
assert status.success?
|
|
188
|
+
assert_empty stderr
|
|
189
|
+
|
|
190
|
+
template_full_path = File.join(Geb::Defaults::BUNDLED_TEMPLATES_DIR, template)
|
|
191
|
+
|
|
192
|
+
assert_includes stdout, "Validating site path #{new_site_path} ... done."
|
|
193
|
+
assert_includes stdout, "Specified template is a Geb sample: #{template}, using it as site template."
|
|
194
|
+
assert_includes stdout, "Validating template path #{template_full_path} ... done."
|
|
195
|
+
assert_includes stdout, "Validating proposed site path as a git repository ... done."
|
|
196
|
+
refute_includes stdout, "Skipping git repository validation as told."
|
|
197
|
+
|
|
198
|
+
assert_includes stdout, "Creating site folder: #{new_site_path} ... done."
|
|
199
|
+
assert File.directory?(new_site_path)
|
|
200
|
+
|
|
201
|
+
assert_includes stdout, "Loading template site from path #{template_full_path} ... done."
|
|
202
|
+
assert_includes stdout, "Resolving directories and files from template site to copy ... done."
|
|
203
|
+
assert_includes stdout, "copying directory and all sub-directories from #{template_full_path}"
|
|
204
|
+
assert_includes stdout, "copying directory and all sub-directories from"
|
|
205
|
+
assert_includes stdout, "Creating: local and release output folders ...done."
|
|
206
|
+
assert File.directory?(File.join(new_site_path, Geb::Defaults::OUTPUT_DIR, Geb::Defaults::LOCAL_OUTPUT_DIR))
|
|
207
|
+
assert File.directory?(File.join(new_site_path, Geb::Defaults::OUTPUT_DIR, Geb::Defaults::RELEASE_OUTPUT_DIR))
|
|
208
|
+
|
|
209
|
+
assert_includes stdout, "Initialising git repository ... done."
|
|
210
|
+
refute_includes stdout, "Skipping git repository creation as told."
|
|
211
|
+
assert File.directory?(File.join(new_site_path, ".git"))
|
|
212
|
+
assert File.exist?(File.join(new_site_path, ".gitignore"))
|
|
213
|
+
|
|
214
|
+
end # test "that new site can handle specified geb sample template"
|
|
215
|
+
|
|
216
|
+
test "that invalid specified template is handled correctly" do
|
|
217
|
+
|
|
218
|
+
new_site_path = "new_site"
|
|
219
|
+
template = "invalid_template_just_to_make_sure_3_for_sure"
|
|
220
|
+
|
|
221
|
+
_, stderr, status = Open3.capture3("geb init #{new_site_path} --template #{template}")
|
|
222
|
+
|
|
223
|
+
assert status.success?
|
|
224
|
+
assert_includes stderr, "Invalid template site. Make sure the specified path is a directory and contains a valid geb.config.yml file."
|
|
225
|
+
refute File.directory?(new_site_path)
|
|
226
|
+
|
|
227
|
+
end # test "that invalid specified template is handled correctly"
|
|
228
|
+
|
|
229
|
+
test "that template url is used correctly" do
|
|
230
|
+
|
|
231
|
+
http_proxy = start_proxy
|
|
232
|
+
|
|
233
|
+
new_site_path = "new_site"
|
|
234
|
+
template_url = "#{http_proxy.base_url}/geb-template.tar.gz"
|
|
235
|
+
|
|
236
|
+
http_proxy.stub_request(template_url, { 'Content-Type' => 'application/x-gzip' }) do
|
|
237
|
+
File.read(File.join(File.dirname(__FILE__), "../files", "geb-template.tar.gz"))
|
|
238
|
+
end
|
|
239
|
+
|
|
240
|
+
stdout, stderr, status = Open3.capture3("geb init #{new_site_path} --template #{template_url}")
|
|
241
|
+
|
|
242
|
+
assert status.success?
|
|
243
|
+
assert_empty stderr
|
|
244
|
+
|
|
245
|
+
assert_includes stdout, "Validating site path #{new_site_path} ... done."
|
|
246
|
+
assert_includes stdout, "Validating template URL #{template_url} ... done."
|
|
247
|
+
assert_includes stdout, "Found a gzip archive at template url #{template_url}."
|
|
248
|
+
assert_includes stdout, "Downloading template from URL #{template_url} ... done."
|
|
249
|
+
|
|
250
|
+
assert_includes stdout, "Validating proposed site path as a git repository ... done."
|
|
251
|
+
refute_includes stdout, "Skipping git repository validation as told."
|
|
252
|
+
|
|
253
|
+
assert_includes stdout, "Creating site folder: #{new_site_path} ... done."
|
|
254
|
+
assert File.directory?(new_site_path)
|
|
255
|
+
|
|
256
|
+
assert_match(/Loading template site from path .*\.\.\. done\./, stdout)
|
|
257
|
+
assert_includes stdout, "Creating: local and release output folders ...done."
|
|
258
|
+
assert_includes stdout, "Resolving directories and files from template site to copy ... done."
|
|
259
|
+
assert_match(/copying directory and all sub-directories from .*\.\.\. done\./, stdout)
|
|
260
|
+
assert_match(/copying file from .*\.\.\. done\./, stdout)
|
|
261
|
+
|
|
262
|
+
assert File.directory?(File.join(new_site_path, Geb::Defaults::OUTPUT_DIR, Geb::Defaults::LOCAL_OUTPUT_DIR))
|
|
263
|
+
assert File.directory?(File.join(new_site_path, Geb::Defaults::OUTPUT_DIR, Geb::Defaults::RELEASE_OUTPUT_DIR))
|
|
264
|
+
|
|
265
|
+
assert_includes stdout, "Initialising git repository ... done."
|
|
266
|
+
refute_includes stdout, "Skipping git repository creation as told."
|
|
267
|
+
|
|
268
|
+
assert File.directory?(File.join(new_site_path, ".git"))
|
|
269
|
+
assert File.exist?(File.join(new_site_path, ".gitignore"))
|
|
270
|
+
|
|
271
|
+
end # test "that template url is used correctly"
|
|
272
|
+
|
|
273
|
+
test "that invalid template url is handled correctly" do
|
|
274
|
+
|
|
275
|
+
new_site_path = "new_site"
|
|
276
|
+
template_url = "http://www.examplexyz7y.com/geb-template.tar.gz"
|
|
277
|
+
|
|
278
|
+
stdout, stderr, status = Open3.capture3("geb init #{new_site_path} --template #{template_url}")
|
|
279
|
+
|
|
280
|
+
assert status.success?
|
|
281
|
+
|
|
282
|
+
assert_includes stdout, "Validating site path #{new_site_path} ... done."
|
|
283
|
+
assert_includes stdout, "Validating template URL #{template_url}"
|
|
284
|
+
assert_includes stderr, "HTTP error"
|
|
285
|
+
|
|
286
|
+
refute File.directory?(new_site_path)
|
|
287
|
+
|
|
288
|
+
end # test "that invalid template url is handled correctly"
|
|
289
|
+
|
|
290
|
+
test "that template url not being an archive is handled correctly" do
|
|
291
|
+
|
|
292
|
+
http_proxy = start_proxy
|
|
293
|
+
|
|
294
|
+
new_site_path = "new_site"
|
|
295
|
+
template_url = "#{http_proxy.base_url}/geb-template.tar.gz"
|
|
296
|
+
|
|
297
|
+
http_proxy.stub_request(template_url, { 'Content-Type' => 'text/plain' }, "This is not a tar.gz file")
|
|
298
|
+
|
|
299
|
+
stdout, stderr, status = Open3.capture3("geb init #{new_site_path} --template #{template_url}")
|
|
300
|
+
|
|
301
|
+
assert status.success?
|
|
302
|
+
|
|
303
|
+
assert_includes stdout, "Validating site path #{new_site_path} ... done."
|
|
304
|
+
|
|
305
|
+
assert_includes stdout, "Validating template URL #{template_url} ... done."
|
|
306
|
+
assert_includes stderr, "Specified template is not a gzip archive"
|
|
307
|
+
|
|
308
|
+
refute File.directory?(new_site_path)
|
|
309
|
+
|
|
310
|
+
end # test "that template url not being an archive is handled correctly"
|
|
311
|
+
|
|
312
|
+
end # class TestGebCommandInit < Minitest::Test
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
#
|
|
3
|
+
# Tests the release command class
|
|
4
|
+
#
|
|
5
|
+
# @title Geb - Test - Release Command
|
|
6
|
+
# @author Edin Mustajbegovic <edin@actiontwelve.com>
|
|
7
|
+
# @copyright 2024 Edin Mustajbegovic
|
|
8
|
+
# @license MIT
|
|
9
|
+
#
|
|
10
|
+
# @see https://github.com/mainfram-work/geb for more information
|
|
11
|
+
|
|
12
|
+
require "test_helper"
|
|
13
|
+
|
|
14
|
+
class TestGebCommandRelease < Geb::CliTest
|
|
15
|
+
|
|
16
|
+
test "that the CLI api call works" do
|
|
17
|
+
|
|
18
|
+
copy_test_site()
|
|
19
|
+
|
|
20
|
+
command = Geb::CLI::Commands::Release.new
|
|
21
|
+
|
|
22
|
+
command_options = { with_template: false }
|
|
23
|
+
|
|
24
|
+
site_mock = mock('site')
|
|
25
|
+
site_mock.expects(:load).with(Dir.pwd)
|
|
26
|
+
site_mock.expects(:release)
|
|
27
|
+
|
|
28
|
+
Geb::Site.expects(:new).returns(site_mock)
|
|
29
|
+
|
|
30
|
+
original_stdout = $stdout
|
|
31
|
+
original_stderr = $stderr
|
|
32
|
+
|
|
33
|
+
$stdout = StringIO.new
|
|
34
|
+
$stderr = StringIO.new
|
|
35
|
+
|
|
36
|
+
command.call(**command_options)
|
|
37
|
+
|
|
38
|
+
assert_empty $stderr.string
|
|
39
|
+
|
|
40
|
+
$stdout = original_stdout
|
|
41
|
+
$stderr = original_stderr
|
|
42
|
+
|
|
43
|
+
end # test "that the CLI api call works"
|
|
44
|
+
|
|
45
|
+
test "that the CLI api call works and handles exceptions" do
|
|
46
|
+
|
|
47
|
+
# initialize new command instance
|
|
48
|
+
command = Geb::CLI::Commands::Release.new
|
|
49
|
+
|
|
50
|
+
command_options = { with_template: false }
|
|
51
|
+
|
|
52
|
+
Geb::Site.expects(:new).raises(Geb::Error.new("Test Error"))
|
|
53
|
+
|
|
54
|
+
# setup a StringIO to capture standard output and error
|
|
55
|
+
original_stdout = $stdout
|
|
56
|
+
original_stderr = $stderr
|
|
57
|
+
|
|
58
|
+
$stdout = StringIO.new
|
|
59
|
+
$stderr = StringIO.new
|
|
60
|
+
|
|
61
|
+
command.call(**command_options)
|
|
62
|
+
|
|
63
|
+
refute_empty $stderr.string
|
|
64
|
+
assert_includes $stderr.string, "Test Error"
|
|
65
|
+
|
|
66
|
+
$stdout = original_stdout
|
|
67
|
+
$stderr = original_stderr
|
|
68
|
+
|
|
69
|
+
end # test "that the CLI api call works and handles exceptions"
|
|
70
|
+
|
|
71
|
+
test "that command default executes" do
|
|
72
|
+
|
|
73
|
+
copy_test_site()
|
|
74
|
+
|
|
75
|
+
# call geb auto command and capture output and error
|
|
76
|
+
_, stderr, status = Open3.capture3('geb release')
|
|
77
|
+
|
|
78
|
+
# assert that the output contains the expected string
|
|
79
|
+
assert status.success?
|
|
80
|
+
assert_empty stderr
|
|
81
|
+
|
|
82
|
+
end # test "command line"
|
|
83
|
+
|
|
84
|
+
test "that command handles being executed in a non-site directory" do
|
|
85
|
+
|
|
86
|
+
# create a temporary directory
|
|
87
|
+
Dir.mktmpdir do |dir|
|
|
88
|
+
|
|
89
|
+
# change the current directory to the temporary directory
|
|
90
|
+
Dir.chdir(dir)
|
|
91
|
+
|
|
92
|
+
# call geb auto command and capture output and error
|
|
93
|
+
_, stderr, status = Open3.capture3('geb release')
|
|
94
|
+
|
|
95
|
+
# assert that the output contains the expected string
|
|
96
|
+
assert status.success?
|
|
97
|
+
refute_empty stderr
|
|
98
|
+
|
|
99
|
+
end # Dir.mktmpdir
|
|
100
|
+
|
|
101
|
+
end # test "that command handles being executed in a non-site directory"
|
|
102
|
+
|
|
103
|
+
test "that the command actually builds and releases the site" do
|
|
104
|
+
|
|
105
|
+
copy_test_site()
|
|
106
|
+
|
|
107
|
+
stdout, stderr, status = Open3.capture3('geb release')
|
|
108
|
+
|
|
109
|
+
assert status.success?
|
|
110
|
+
assert_empty stderr
|
|
111
|
+
|
|
112
|
+
assert_includes stdout, "Loading site from path #{Dir.pwd} ... done."
|
|
113
|
+
assert_includes stdout, "Found geb site at path #{Dir.pwd}"
|
|
114
|
+
assert_match(/Building \d* pages for/, stdout)
|
|
115
|
+
assert_includes stdout, "loading page"
|
|
116
|
+
assert_includes stdout, "loading template"
|
|
117
|
+
assert_includes stdout, "loading partial"
|
|
118
|
+
assert_includes stdout, "building page"
|
|
119
|
+
assert_match(/Done building \d* pages for/, stdout)
|
|
120
|
+
assert_includes stdout, "Clearing site output folder"
|
|
121
|
+
assert_match(/Outputting site to.*done/, stdout)
|
|
122
|
+
assert_includes stdout, "Building assets for"
|
|
123
|
+
assert_includes stdout, "Done building assets for"
|
|
124
|
+
assert_match(/Clearing site release folder.*done/, stdout)
|
|
125
|
+
assert_match(/Releasing site to.*done/, stdout)
|
|
126
|
+
refute_match(/Resolving directories and files to include in the template archive.*done/, stdout)
|
|
127
|
+
refute_match(/Creating template archive in.*done/, stdout)
|
|
128
|
+
|
|
129
|
+
end # test "that the command actually builds the site"
|
|
130
|
+
|
|
131
|
+
test "that the command actually builds and releases the site with a template" do
|
|
132
|
+
|
|
133
|
+
copy_test_site()
|
|
134
|
+
|
|
135
|
+
output_archive_filename = File.join(Dir.pwd, Geb::Defaults::OUTPUT_DIR, Geb::Defaults::RELEASE_OUTPUT_DIR, Geb::Defaults::TEMPLATE_ARCHIVE_FILENAME)
|
|
136
|
+
|
|
137
|
+
stdout, stderr, status = Open3.capture3('geb release --with_template')
|
|
138
|
+
|
|
139
|
+
assert status.success?
|
|
140
|
+
assert_empty stderr
|
|
141
|
+
|
|
142
|
+
assert_includes stdout, "Loading site from path #{Dir.pwd} ... done."
|
|
143
|
+
assert_includes stdout, "Found geb site at path #{Dir.pwd}"
|
|
144
|
+
assert_match(/Building \d* pages for/, stdout)
|
|
145
|
+
assert_includes stdout, "loading page"
|
|
146
|
+
assert_includes stdout, "loading template"
|
|
147
|
+
assert_includes stdout, "loading partial"
|
|
148
|
+
assert_includes stdout, "building page"
|
|
149
|
+
assert_match(/Done building \d* pages for/, stdout)
|
|
150
|
+
assert_includes stdout, "Clearing site output folder"
|
|
151
|
+
assert_match(/Outputting site to.*done/, stdout)
|
|
152
|
+
assert_includes stdout, "Building assets for"
|
|
153
|
+
assert_includes stdout, "Done building assets for"
|
|
154
|
+
assert_match(/Clearing site release folder.*done/, stdout)
|
|
155
|
+
assert_match(/Releasing site to.*done/, stdout)
|
|
156
|
+
assert_match(/Resolving directories and files to include in the template archive.*done/, stdout)
|
|
157
|
+
assert_match(/copying directory and all sub-directories from.*to.*done/, stdout)
|
|
158
|
+
assert_match(/copying file from.*to.*done/, stdout)
|
|
159
|
+
assert_includes stdout, "Done copying directories and files to the template archive directory."
|
|
160
|
+
assert_match(/Creating template archive in.*done/, stdout)
|
|
161
|
+
|
|
162
|
+
assert File.exist?(output_archive_filename)
|
|
163
|
+
|
|
164
|
+
end # test "that the command actually builds the site with a template"
|
|
165
|
+
|
|
166
|
+
end # class TestGebCommandRelease < Minitest::Test
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
#
|
|
3
|
+
# Tests the remote command class
|
|
4
|
+
#
|
|
5
|
+
# @title Geb - Test - Remote Command
|
|
6
|
+
# @author Edin Mustajbegovic <edin@actiontwelve.com>
|
|
7
|
+
# @copyright 2024 Edin Mustajbegovic
|
|
8
|
+
# @license MIT
|
|
9
|
+
#
|
|
10
|
+
# @see https://github.com/mainfram-work/geb for more information
|
|
11
|
+
|
|
12
|
+
require "test_helper"
|
|
13
|
+
|
|
14
|
+
class TestGebCommandRemote < Geb::CliTest
|
|
15
|
+
|
|
16
|
+
test "that the CLI api call works" do
|
|
17
|
+
|
|
18
|
+
copy_test_site()
|
|
19
|
+
|
|
20
|
+
command = Geb::CLI::Commands::Remote.new
|
|
21
|
+
|
|
22
|
+
command_options = { }
|
|
23
|
+
|
|
24
|
+
original_stdout = $stdout
|
|
25
|
+
original_stderr = $stderr
|
|
26
|
+
|
|
27
|
+
$stdout = StringIO.new
|
|
28
|
+
$stderr = StringIO.new
|
|
29
|
+
|
|
30
|
+
Open3.expects(:capture3).with("ssh", "user@server.com").returns(["", "", ""])
|
|
31
|
+
|
|
32
|
+
command.call(**command_options)
|
|
33
|
+
|
|
34
|
+
assert_empty $stderr.string
|
|
35
|
+
|
|
36
|
+
$stdout = original_stdout
|
|
37
|
+
$stderr = original_stderr
|
|
38
|
+
|
|
39
|
+
end # test "that the CLI api call works"
|
|
40
|
+
|
|
41
|
+
test "that the CLI api call works with an error" do
|
|
42
|
+
|
|
43
|
+
copy_test_site()
|
|
44
|
+
|
|
45
|
+
command = Geb::CLI::Commands::Remote.new
|
|
46
|
+
|
|
47
|
+
command_options = { }
|
|
48
|
+
|
|
49
|
+
original_stdout = $stdout
|
|
50
|
+
original_stderr = $stderr
|
|
51
|
+
|
|
52
|
+
$stdout = StringIO.new
|
|
53
|
+
$stderr = StringIO.new
|
|
54
|
+
|
|
55
|
+
Geb::Site.expects(:new).raises(Geb::Error.new("Site not loaded"))
|
|
56
|
+
|
|
57
|
+
command.call(**command_options)
|
|
58
|
+
|
|
59
|
+
assert_match(/Site not loaded/, $stderr.string)
|
|
60
|
+
|
|
61
|
+
$stdout = original_stdout
|
|
62
|
+
$stderr = original_stderr
|
|
63
|
+
|
|
64
|
+
end # test "that the CLI api call works with an error"
|
|
65
|
+
|
|
66
|
+
end # class TestGebCommandRemote < Minitest::Test
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
#
|
|
3
|
+
# Tests the server command class
|
|
4
|
+
#
|
|
5
|
+
# @title Geb - Test - Server Command
|
|
6
|
+
# @author Edin Mustajbegovic <edin@actiontwelve.com>
|
|
7
|
+
# @copyright 2024 Edin Mustajbegovic
|
|
8
|
+
# @license MIT
|
|
9
|
+
#
|
|
10
|
+
# @see https://github.com/mainfram-work/geb for more information
|
|
11
|
+
|
|
12
|
+
require "test_helper"
|
|
13
|
+
|
|
14
|
+
class TestGebCommandServer < Geb::CliTest
|
|
15
|
+
|
|
16
|
+
test "that the CLI api call works" do
|
|
17
|
+
|
|
18
|
+
copy_test_site()
|
|
19
|
+
|
|
20
|
+
command = Geb::CLI::Commands::Server.new
|
|
21
|
+
server_port = Geb::Test::WebServerProxy.find_available_port()
|
|
22
|
+
|
|
23
|
+
command_options = { port: server_port, skip_build: false, skip_auto_build: false }
|
|
24
|
+
|
|
25
|
+
original_stdout = $stdout
|
|
26
|
+
original_stderr = $stderr
|
|
27
|
+
|
|
28
|
+
$stdout = StringIO.new
|
|
29
|
+
$stderr = StringIO.new
|
|
30
|
+
|
|
31
|
+
server_thread = Thread.new do
|
|
32
|
+
command.call(**command_options)
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
sleep 2
|
|
36
|
+
|
|
37
|
+
command.force_shutdown()
|
|
38
|
+
server_thread.join
|
|
39
|
+
|
|
40
|
+
assert_includes($stdout.string, "Loading site from path #{Dir.pwd}")
|
|
41
|
+
assert_includes($stdout.string, "Server running on http://localhost:#{@port}")
|
|
42
|
+
assert_includes($stdout.string, "Watching for changes in [#{Dir.pwd}]")
|
|
43
|
+
|
|
44
|
+
$stdout = original_stdout
|
|
45
|
+
$stderr = original_stderr
|
|
46
|
+
|
|
47
|
+
end # test "that the CLI api call works"
|
|
48
|
+
|
|
49
|
+
test "that the CLI api call works when an error is thrown" do
|
|
50
|
+
|
|
51
|
+
# copy_test_site() # no site, so it should fail
|
|
52
|
+
|
|
53
|
+
command = Geb::CLI::Commands::Server.new
|
|
54
|
+
server_port = Geb::Test::WebServerProxy.find_available_port()
|
|
55
|
+
|
|
56
|
+
command_options = { port: server_port, skip_build: false, skip_auto_build: false }
|
|
57
|
+
|
|
58
|
+
original_stdout = $stdout
|
|
59
|
+
original_stderr = $stderr
|
|
60
|
+
|
|
61
|
+
$stdout = StringIO.new
|
|
62
|
+
$stderr = StringIO.new
|
|
63
|
+
|
|
64
|
+
server_thread = Thread.new do
|
|
65
|
+
command.call(**command_options)
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
sleep 2
|
|
69
|
+
|
|
70
|
+
command.force_shutdown()
|
|
71
|
+
server_thread.join
|
|
72
|
+
|
|
73
|
+
refute_empty $stderr.string
|
|
74
|
+
assert_includes($stdout.string, "Loading site from path #{Dir.pwd}")
|
|
75
|
+
refute_includes($stdout.string, "Server running on http://localhost:#{@port}")
|
|
76
|
+
refute_includes($stdout.string, "Watching for changes in [#{Dir.pwd}]")
|
|
77
|
+
|
|
78
|
+
$stdout = original_stdout
|
|
79
|
+
$stderr = original_stderr
|
|
80
|
+
|
|
81
|
+
end # test "that the CLI api call works when an error is thrown"
|
|
82
|
+
|
|
83
|
+
test "that command default executes" do
|
|
84
|
+
|
|
85
|
+
copy_test_site()
|
|
86
|
+
server_port = Geb::Test::WebServerProxy.find_available_port()
|
|
87
|
+
geb_command = "geb server --port #{server_port}"
|
|
88
|
+
|
|
89
|
+
server_up = lambda do |output, error_output|
|
|
90
|
+
output.include?("Server running on http://localhost:#{server_port}")
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
run_command_with_timeout(geb_command, break_condition: server_up) do |output, error_output|
|
|
94
|
+
|
|
95
|
+
assert_includes output, "Loading site from path #{Dir.pwd}"
|
|
96
|
+
assert_includes output, "Server running on http://localhost:#{server_port}"
|
|
97
|
+
assert_includes output, "Watching for changes in [#{Dir.pwd}]"
|
|
98
|
+
|
|
99
|
+
end # run_command_with_timeout
|
|
100
|
+
|
|
101
|
+
end # test "that command default executes"
|
|
102
|
+
|
|
103
|
+
test "that command handles being executed in a non-site directory" do
|
|
104
|
+
|
|
105
|
+
# create a temporary directory
|
|
106
|
+
Dir.mktmpdir do |dir|
|
|
107
|
+
|
|
108
|
+
# change the current directory to the temporary directory
|
|
109
|
+
Dir.chdir(dir)
|
|
110
|
+
|
|
111
|
+
# call geb auto command and capture output and error
|
|
112
|
+
_, stderr, status = Open3.capture3('geb server')
|
|
113
|
+
|
|
114
|
+
# assert that the output contains the expected string
|
|
115
|
+
assert status.success?
|
|
116
|
+
assert_includes stderr, "is not and is not in a geb site. Could not find geb config file."
|
|
117
|
+
|
|
118
|
+
end # Dir.mktmpdir
|
|
119
|
+
|
|
120
|
+
end # test "that command handles being executed in a non-site directory"
|
|
121
|
+
|
|
122
|
+
end # class TestGebCommandServer < Minitest::Test
|