usmu 0.3.1 → 0.3.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -2
- data/.travis.yml +3 -0
- data/CHANGELOG.md +21 -0
- data/Gemfile +7 -0
- data/Guardfile +7 -7
- data/README.md +5 -1
- data/Rakefile +16 -5
- data/lib/usmu.rb +3 -1
- data/lib/usmu/configuration.rb +25 -13
- data/lib/usmu/deployment.rb +12 -0
- data/lib/usmu/deployment/directory_diff.rb +64 -0
- data/lib/usmu/deployment/remote_file_interface.rb +25 -0
- data/lib/usmu/plugin.rb +5 -1
- data/lib/usmu/template/layout.rb +24 -17
- data/lib/usmu/version.rb +1 -1
- data/{test/spec → spec}/acceptance/full_site_build.feature +2 -2
- data/{test/spec → spec}/acceptance/steps/full_site_build_steps.rb +0 -0
- data/spec/configuration_spec.rb +257 -0
- data/spec/deployment/directory_diff_spec.rb +126 -0
- data/{test/spec → spec}/mock/usmu/mock_plugin.rb +0 -0
- data/spec/mock/usmu/mock_remote_files.rb +19 -0
- data/{test/spec → spec}/plugin/core_spec.rb +0 -0
- data/{test/spec → spec}/plugin_spec.rb +0 -0
- data/{test/spec → spec}/site_generator_spec.rb +1 -1
- data/{test/spec → spec}/spec_helper.rb +18 -4
- data/{test/spec → spec}/support/shared_layout.rb +0 -0
- data/{test/spec → spec}/template/layout_spec.rb +1 -1
- data/{test/spec → spec}/template/page_spec.rb +0 -0
- data/{test/spec → spec}/template/static_file_spec.rb +2 -2
- data/{test/spec → spec}/ui/console_spec.rb +4 -4
- data/{test/expected-site → test-site/content}/.dotfiletest.txt +0 -0
- data/{test/site → test-site}/content/css/_partial.scss +0 -0
- data/{test/site → test-site}/content/css/app.scss +0 -0
- data/{test/site → test-site}/content/default.md +0 -0
- data/{test/site → test-site}/content/embedded.md +0 -0
- data/{test/site → test-site}/content/embedded.meta.yml +0 -0
- data/{test/site → test-site}/content/index.md +0 -0
- data/{test/site → test-site}/content/index.meta.yml +0 -0
- data/{test/site → test-site}/content/posts/test-post.md +0 -0
- data/{test/expected-site → test-site/content}/robots.txt +0 -0
- data/{test/site/content → test-site/expected-site}/.dotfiletest.txt +0 -0
- data/{test → test-site}/expected-site/css/app.css +0 -0
- data/{test → test-site}/expected-site/default.html +0 -0
- data/{test → test-site}/expected-site/embedded.html +0 -0
- data/{test → test-site}/expected-site/index.html +0 -0
- data/{test → test-site}/expected-site/posts/test-post.html +0 -0
- data/{test/site/content → test-site/expected-site}/robots.txt +0 -0
- data/{test/site → test-site}/includes/footer.meta.yml +0 -0
- data/{test/site → test-site}/includes/footer.slim +0 -0
- data/{test/site → test-site}/layouts/embedded.meta.yml +0 -0
- data/{test/site → test-site}/layouts/embedded.slim +0 -0
- data/{test/site → test-site}/layouts/html.slim +0 -0
- data/{test/site → test-site}/usmu.yml +0 -0
- data/usmu-jruby.gemspec +1 -0
- data/usmu.gemspec +1 -2
- metadata +73 -105
- data/.cane +0 -4
- data/.simplecov +0 -4
- data/test/spec/configuration_spec.rb +0 -176
data/lib/usmu/version.rb
CHANGED
@@ -10,7 +10,7 @@ Feature:
|
|
10
10
|
|
11
11
|
|
12
12
|
Scenario:
|
13
|
-
Given I have a site at "test
|
13
|
+
Given I have a site at "test-site"
|
14
14
|
When I run usmu with the arguments "generate"
|
15
|
-
Then the directory "test
|
15
|
+
Then the directory "test-site/site" should match "test-site/expected-site"
|
16
16
|
And the modification time for the input file "index.md" should match the output file "index.html"
|
File without changes
|
@@ -0,0 +1,257 @@
|
|
1
|
+
require 'usmu/configuration'
|
2
|
+
|
3
|
+
RSpec.describe Usmu::Configuration do
|
4
|
+
let (:configuration_hash) {
|
5
|
+
{
|
6
|
+
'source' => 'source',
|
7
|
+
'destination' => 'destination',
|
8
|
+
'layouts' => 'templates',
|
9
|
+
'includes' => 'inc',
|
10
|
+
}
|
11
|
+
}
|
12
|
+
let (:configuration) { Usmu::Configuration.from_hash(configuration_hash, 'test/usmu.yaml') }
|
13
|
+
let (:empty_configuration) { Usmu::Configuration.from_hash({}) }
|
14
|
+
|
15
|
+
context '#initialize' do
|
16
|
+
it 'should set class variables correctly' do
|
17
|
+
expect(configuration.config_dir).to eq('test')
|
18
|
+
expect(configuration.config_file).to eq('test/usmu.yaml')
|
19
|
+
expect(configuration.send :config).to eq(configuration_hash)
|
20
|
+
expect(configuration.send(:log).class).to eq(Logging::Logger)
|
21
|
+
expect(configuration.send(:log).name).to eq(described_class.name)
|
22
|
+
end
|
23
|
+
|
24
|
+
it 'should set config_path to the current directory for a bare filename' do
|
25
|
+
configuration = Usmu::Configuration.from_hash(configuration_hash, 'usmu.yaml')
|
26
|
+
expect(configuration.config_dir).to eq('.')
|
27
|
+
end
|
28
|
+
|
29
|
+
it 'should set config_dir to nil if no config_path is set' do
|
30
|
+
configuration = Usmu::Configuration.from_hash(configuration_hash)
|
31
|
+
expect(configuration.config_dir).to eq(nil)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
context '.from_file' do
|
36
|
+
it 'should raise an error if no filename is specified' do
|
37
|
+
expect { Usmu::Configuration.from_file(nil) }.to raise_error(ArgumentError, 'File not found: ')
|
38
|
+
end
|
39
|
+
|
40
|
+
it 'should raise an error if file does not exist' do
|
41
|
+
expect { Usmu::Configuration.from_file('nonexistent.yml') }.to raise_error(ArgumentError, 'File not found: nonexistent.yml')
|
42
|
+
end
|
43
|
+
|
44
|
+
it 'should pass through the contents of the named file to constructor' do
|
45
|
+
allow(YAML).to receive(:load_file).with('usmu.yml').and_return(configuration_hash)
|
46
|
+
allow(File).to receive(:exist?).with('usmu.yml').and_return(true)
|
47
|
+
expect(Usmu::Configuration).to receive(:new).with(configuration_hash, 'usmu.yml')
|
48
|
+
Usmu::Configuration.from_file('usmu.yml')
|
49
|
+
expect(@log_output.readline).to eq(" DEBUG Usmu::Configuration : Loading configuration from usmu.yml\n")
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
context '.from_hash' do
|
54
|
+
it 'should pass through it\'s arguments through to constructor' do
|
55
|
+
expect(Usmu::Configuration).to receive(:new).with(configuration_hash, 'usmu.yml')
|
56
|
+
Usmu::Configuration.from_hash(configuration_hash, 'usmu.yml')
|
57
|
+
end
|
58
|
+
|
59
|
+
it 'should have a default of nil for the configuration name' do
|
60
|
+
expect(Usmu::Configuration).to receive(:new).with(configuration_hash, nil)
|
61
|
+
Usmu::Configuration.from_hash(configuration_hash)
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
context '#source_path' do
|
66
|
+
it 'should prepend configuration folder' do
|
67
|
+
expect(configuration.source_path).to eq('test/source')
|
68
|
+
end
|
69
|
+
|
70
|
+
it 'should have a default path' do
|
71
|
+
expect(empty_configuration.source_path).to eq('src')
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
context '#destination_path' do
|
76
|
+
it 'should prepend configuration folder' do
|
77
|
+
expect(configuration.destination_path).to eq('test/destination')
|
78
|
+
end
|
79
|
+
|
80
|
+
it 'should have a default path' do
|
81
|
+
expect(empty_configuration.destination_path).to eq('site')
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
context '#layouts_path' do
|
86
|
+
it 'should prepend configuration folder' do
|
87
|
+
expect(configuration.layouts_path).to eq('test/templates')
|
88
|
+
end
|
89
|
+
|
90
|
+
it 'should have a default path' do
|
91
|
+
expect(empty_configuration.layouts_path).to eq('layouts')
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
context '#includes_path' do
|
96
|
+
it 'should prepend configuration folder' do
|
97
|
+
expect(configuration.includes_path).to eq('test/inc')
|
98
|
+
end
|
99
|
+
|
100
|
+
it 'should have a default path' do
|
101
|
+
expect(empty_configuration.includes_path).to eq('includes')
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
context '#source_files' do
|
106
|
+
it 'should return a list of source files' do
|
107
|
+
allow(Dir).to receive(:'[]').with('src/**/{*,.??*}').and_return(%w(src/index.md src/test.md))
|
108
|
+
expect(empty_configuration.source_files).to eq(%w(index.md test.md))
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
context '#layouts_files' do
|
113
|
+
it 'should have a list of layouts files' do
|
114
|
+
allow(Dir).to receive(:'[]').with('layouts/**/{*,.??*}').and_return(%w(layouts/html.slim layouts/page.slim))
|
115
|
+
expect(empty_configuration.layouts_files).to eq(%w(html.slim page.slim))
|
116
|
+
end
|
117
|
+
|
118
|
+
it 'should ignore metadata files in the layouts folder' do
|
119
|
+
allow(Dir).to receive(:'[]').with('layouts/**/{*,.??*}').and_return(%w(layouts/html.slim layouts/html.meta.yml layouts/page.slim))
|
120
|
+
expect(empty_configuration.layouts_files).to eq(%w(html.slim page.slim))
|
121
|
+
end
|
122
|
+
end
|
123
|
+
|
124
|
+
context '#includes_files' do
|
125
|
+
it 'should have a list of includes files' do
|
126
|
+
allow(Dir).to receive(:'[]').with('includes/**/{*,.??*}').and_return(%w(includes/footer.slim))
|
127
|
+
expect(empty_configuration.includes_files).to eq(%w(footer.slim))
|
128
|
+
end
|
129
|
+
|
130
|
+
it 'should ignore metadata files in the includes folder' do
|
131
|
+
allow(Dir).to receive(:'[]').with('includes/**/{*,.??*}').and_return(%w(includes/footer.slim includes/footer.meta.yml))
|
132
|
+
expect(empty_configuration.includes_files).to eq(%w(footer.slim))
|
133
|
+
end
|
134
|
+
end
|
135
|
+
|
136
|
+
context '#exclude' do
|
137
|
+
it 'returns the exclude option in the configuration array' do
|
138
|
+
expect(Usmu::Configuration.from_hash({'exclude' => ['test.md']}).exclude).to eq(['test.md'])
|
139
|
+
end
|
140
|
+
|
141
|
+
it 'has a default value of an empty array' do
|
142
|
+
expect(empty_configuration.exclude).to eq([])
|
143
|
+
end
|
144
|
+
end
|
145
|
+
|
146
|
+
context '#[]' do
|
147
|
+
it 'should remember arbitrary configuration' do
|
148
|
+
configuration = Usmu::Configuration.from_hash({:test => 'foo'})
|
149
|
+
expect(configuration[:test]).to eq('foo')
|
150
|
+
end
|
151
|
+
|
152
|
+
it 'should allow indexing the configuration file' do
|
153
|
+
configuration = Usmu::Configuration.from_hash({test: 'foo'})
|
154
|
+
expect(configuration[:test]).to eq('foo')
|
155
|
+
end
|
156
|
+
|
157
|
+
it 'should allow indexing the configuration file with a default value' do
|
158
|
+
configuration = Usmu::Configuration.from_hash({test: 'foo'})
|
159
|
+
expect(configuration[:bar, default: 'baz']).to eq('baz')
|
160
|
+
end
|
161
|
+
|
162
|
+
it 'should allow indexing the configuration file using a path of indices' do
|
163
|
+
configuration = Usmu::Configuration.from_hash({test: {bar: 'foo'}})
|
164
|
+
expect(configuration[:test, :bar]).to eq('foo')
|
165
|
+
end
|
166
|
+
|
167
|
+
it 'should return nil if the element does not exist' do
|
168
|
+
expect(empty_configuration[:test]).to eq(nil)
|
169
|
+
end
|
170
|
+
end
|
171
|
+
|
172
|
+
context '#get_path' do
|
173
|
+
it 'should return input if config_dir is nil' do
|
174
|
+
expect(empty_configuration.send :get_path, 'source').to eq('source')
|
175
|
+
end
|
176
|
+
|
177
|
+
it 'should prepend input with config_dir if it is not nil' do
|
178
|
+
expect(configuration.send :get_path, 'source').to eq('test/source')
|
179
|
+
end
|
180
|
+
end
|
181
|
+
|
182
|
+
context '#get_files' do
|
183
|
+
it 'should ignore metadata files' do
|
184
|
+
allow(Dir).to receive(:'[]').with('src/**/{*,.??*}').and_return(%w(src/index.md src/index.meta.yml src/test.md))
|
185
|
+
expect(empty_configuration.send :get_files, 'src').to eq(%w(index.md test.md))
|
186
|
+
end
|
187
|
+
|
188
|
+
it 'should not return folders' do
|
189
|
+
allow(File).to receive(:directory?).and_return(false)
|
190
|
+
allow(File).to receive(:directory?).with('src/test').and_return(true)
|
191
|
+
allow(Dir).to receive(:'[]').with('src/**/{*,.??*}').and_return(%w(src/index.md src/index.meta.yml src/test src/test/test.md))
|
192
|
+
expect(empty_configuration.send :get_files, 'src').to eq(%w(index.md test/test.md))
|
193
|
+
end
|
194
|
+
|
195
|
+
it 'should exclude files' do
|
196
|
+
allow(Dir).to receive(:'[]').with('src/**/{*,.??*}').and_return(%w(src/foo.md))
|
197
|
+
allow(configuration).to receive(:excluded?).with('foo.md').and_return(true)
|
198
|
+
expect(configuration.send :get_files, 'src').to eq([])
|
199
|
+
end
|
200
|
+
end
|
201
|
+
|
202
|
+
context '#excluded?' do
|
203
|
+
it 'should ignore files in folders if a trailing "/" is used' do
|
204
|
+
configuration = Usmu::Configuration.from_hash({'exclude' => ['test/']})
|
205
|
+
expect(configuration.send :excluded?, 'test/foo/test.md').to eq(true)
|
206
|
+
end
|
207
|
+
|
208
|
+
it 'should honor *' do
|
209
|
+
configuration = Usmu::Configuration.from_hash({'exclude' => ['*/foo.md']})
|
210
|
+
expect(configuration.send :excluded?, 'test/foo.md').to eq(true)
|
211
|
+
end
|
212
|
+
|
213
|
+
it 'should ignore folders specified with * without a trailing /' do
|
214
|
+
configuration = Usmu::Configuration.from_hash({'exclude' => ['*']})
|
215
|
+
expect(configuration.send :excluded?, 'test/foo.md').to eq(false)
|
216
|
+
end
|
217
|
+
|
218
|
+
it 'should ignore files inside folders specified via globs with trailing "/"' do
|
219
|
+
configuration = Usmu::Configuration.from_hash({'exclude' => ['test/*/']})
|
220
|
+
expect(configuration.send :excluded?, 'test/foot/foo.md').to eq(true)
|
221
|
+
end
|
222
|
+
|
223
|
+
it 'should honor **' do
|
224
|
+
configuration = Usmu::Configuration.from_hash({'exclude' => ['**/foo.md']})
|
225
|
+
expect(configuration.send :excluded?, 'test/foo/foo.md').to eq(true)
|
226
|
+
end
|
227
|
+
|
228
|
+
it 'should honor []' do
|
229
|
+
configuration = Usmu::Configuration.from_hash({'exclude' => ['[ab].md']})
|
230
|
+
expect(configuration.send :excluded?, 'a.md').to eq(true)
|
231
|
+
expect(configuration.send :excluded?, 'b.md').to eq(true)
|
232
|
+
expect(configuration.send :excluded?, 'index.md').to eq(false)
|
233
|
+
end
|
234
|
+
|
235
|
+
# FNM_EXTGLOB is supported from MRI 2.0 onwards. We also support the 1.9.3 ABI for JRuby and Rubinius sake. Only
|
236
|
+
# run this test if it's possible for it to pass.
|
237
|
+
if defined?(File::FNM_EXTGLOB)
|
238
|
+
it 'should honor {a,b}' do
|
239
|
+
configuration = Usmu::Configuration.from_hash({'exclude' => ['{a,b}.md']})
|
240
|
+
expect(configuration.send :excluded?, 'a.md').to eq(true)
|
241
|
+
expect(configuration.send :excluded?, 'b.md').to eq(true)
|
242
|
+
expect(configuration.send :excluded?, 'index.md').to eq(false)
|
243
|
+
end
|
244
|
+
end
|
245
|
+
|
246
|
+
it 'should honor \\ as an escape' do
|
247
|
+
configuration = Usmu::Configuration.from_hash({'exclude' => ['\*.md']})
|
248
|
+
expect(configuration.send :excluded?, '*.md').to eq(true)
|
249
|
+
expect(configuration.send :excluded?, 'index.md').to eq(false)
|
250
|
+
end
|
251
|
+
|
252
|
+
it 'should honor ?' do
|
253
|
+
configuration = Usmu::Configuration.from_hash({'exclude' => ['?.md']})
|
254
|
+
expect(configuration.send :excluded?, 'a.md').to eq(true)
|
255
|
+
end
|
256
|
+
end
|
257
|
+
end
|
@@ -0,0 +1,126 @@
|
|
1
|
+
require 'usmu/deployment/directory_diff'
|
2
|
+
require 'usmu/mock_remote_files'
|
3
|
+
require 'ostruct'
|
4
|
+
require 'digest'
|
5
|
+
|
6
|
+
RSpec.describe Usmu::Deployment::DirectoryDiff do
|
7
|
+
context '#get_diffs' do
|
8
|
+
let (:configuration) { Usmu::Configuration.from_hash({}) }
|
9
|
+
let (:file) { 'Hello world!' }
|
10
|
+
let (:now) { Time.at(1420875742) }
|
11
|
+
|
12
|
+
before do
|
13
|
+
allow(File).to receive(:stat).with('site/index.html').and_return(OpenStruct.new({mtime: now}))
|
14
|
+
allow(File).to receive(:read).with('site/index.html').and_return(file)
|
15
|
+
end
|
16
|
+
|
17
|
+
it 'returns remote only files' do
|
18
|
+
allow(Dir).to receive(:'[]').with('site/**/{*,.??*}').and_return(%w())
|
19
|
+
remote_files = Usmu::MockRemoteFiles.new(
|
20
|
+
{
|
21
|
+
'index.html' => {
|
22
|
+
:mtime => now + 100,
|
23
|
+
},
|
24
|
+
}
|
25
|
+
)
|
26
|
+
diff = Usmu::Deployment::DirectoryDiff.new(configuration, remote_files)
|
27
|
+
|
28
|
+
expect(diff.get_diffs).to eq({remote: ['index.html'], local: [], updated: []})
|
29
|
+
end
|
30
|
+
|
31
|
+
it 'returns local only files' do
|
32
|
+
allow(Dir).to receive(:'[]').with('site/**/{*,.??*}').and_return(%w(site/index.html))
|
33
|
+
remote_files = Usmu::MockRemoteFiles.new({})
|
34
|
+
diff = Usmu::Deployment::DirectoryDiff.new(configuration, remote_files)
|
35
|
+
|
36
|
+
expect(diff.get_diffs).to eq({local: ['index.html'], remote: [], updated: []})
|
37
|
+
end
|
38
|
+
|
39
|
+
it 'hides identical files' do
|
40
|
+
allow(Dir).to receive(:'[]').with('site/**/{*,.??*}').and_return(%w(site/index.html))
|
41
|
+
remote_files = Usmu::MockRemoteFiles.new(
|
42
|
+
{
|
43
|
+
'index.html' => {
|
44
|
+
:mtime => now,
|
45
|
+
},
|
46
|
+
}
|
47
|
+
)
|
48
|
+
diff = Usmu::Deployment::DirectoryDiff.new(configuration, remote_files)
|
49
|
+
|
50
|
+
expect(diff.get_diffs).to eq({local: [], remote: [], updated: []})
|
51
|
+
end
|
52
|
+
|
53
|
+
it 'hides files newer on remote' do
|
54
|
+
allow(Dir).to receive(:'[]').with('site/**/{*,.??*}').and_return(%w(site/index.html))
|
55
|
+
remote_files = Usmu::MockRemoteFiles.new(
|
56
|
+
{
|
57
|
+
'index.html' => {
|
58
|
+
:mtime => now + 100,
|
59
|
+
},
|
60
|
+
}
|
61
|
+
)
|
62
|
+
diff = Usmu::Deployment::DirectoryDiff.new(configuration, remote_files)
|
63
|
+
|
64
|
+
expect(diff.get_diffs).to eq({local: [], remote: [], updated: []})
|
65
|
+
end
|
66
|
+
|
67
|
+
it 'returns files newer on local' do
|
68
|
+
allow(Dir).to receive(:'[]').with('site/**/{*,.??*}').and_return(%w(site/index.html))
|
69
|
+
remote_files = Usmu::MockRemoteFiles.new(
|
70
|
+
{
|
71
|
+
'index.html' => {
|
72
|
+
:mtime => now - 100,
|
73
|
+
},
|
74
|
+
}
|
75
|
+
)
|
76
|
+
diff = Usmu::Deployment::DirectoryDiff.new(configuration, remote_files)
|
77
|
+
|
78
|
+
expect(diff.get_diffs).to eq({local: [], remote: [], updated: ['index.html']})
|
79
|
+
end
|
80
|
+
|
81
|
+
it 'returns files with different md5 hashes' do
|
82
|
+
allow(Dir).to receive(:'[]').with('site/**/{*,.??*}').and_return(%w(site/index.html))
|
83
|
+
remote_files = Usmu::MockRemoteFiles.new(
|
84
|
+
{
|
85
|
+
'index.html' => {
|
86
|
+
:mtime => now,
|
87
|
+
:md5 => Digest::MD5.hexdigest(file + 'foo'),
|
88
|
+
},
|
89
|
+
}
|
90
|
+
)
|
91
|
+
diff = Usmu::Deployment::DirectoryDiff.new(configuration, remote_files)
|
92
|
+
|
93
|
+
expect(diff.get_diffs).to eq({local: [], remote: [], updated: ['index.html']})
|
94
|
+
end
|
95
|
+
|
96
|
+
it 'returns files with different sha1 hashes' do
|
97
|
+
allow(Dir).to receive(:'[]').with('site/**/{*,.??*}').and_return(%w(site/index.html))
|
98
|
+
remote_files = Usmu::MockRemoteFiles.new(
|
99
|
+
{
|
100
|
+
'index.html' => {
|
101
|
+
:mtime => now,
|
102
|
+
:sha1 => Digest::SHA1.hexdigest(file + 'foo'),
|
103
|
+
},
|
104
|
+
}
|
105
|
+
)
|
106
|
+
diff = Usmu::Deployment::DirectoryDiff.new(configuration, remote_files)
|
107
|
+
|
108
|
+
expect(diff.get_diffs).to eq({local: [], remote: [], updated: ['index.html']})
|
109
|
+
end
|
110
|
+
|
111
|
+
it 'returns files with different hashes and newer remote file' do
|
112
|
+
allow(Dir).to receive(:'[]').with('site/**/{*,.??*}').and_return(%w(site/index.html))
|
113
|
+
remote_files = Usmu::MockRemoteFiles.new(
|
114
|
+
{
|
115
|
+
'index.html' => {
|
116
|
+
:mtime => now + 100,
|
117
|
+
:md5 => Digest::MD5.hexdigest(file + 'foo'),
|
118
|
+
},
|
119
|
+
}
|
120
|
+
)
|
121
|
+
diff = Usmu::Deployment::DirectoryDiff.new(configuration, remote_files)
|
122
|
+
|
123
|
+
expect(diff.get_diffs).to eq({local: [], remote: [], updated: ['index.html']})
|
124
|
+
end
|
125
|
+
end
|
126
|
+
end
|
File without changes
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'usmu/deployment/remote_file_interface'
|
2
|
+
|
3
|
+
module Usmu
|
4
|
+
class MockRemoteFiles
|
5
|
+
include Usmu::Deployment::RemoteFileInterface
|
6
|
+
|
7
|
+
def initialize(files)
|
8
|
+
@files = files
|
9
|
+
end
|
10
|
+
|
11
|
+
def files_list
|
12
|
+
@files.keys
|
13
|
+
end
|
14
|
+
|
15
|
+
def stat(filename)
|
16
|
+
@files[filename]
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
File without changes
|
File without changes
|
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'usmu/site_generator'
|
2
2
|
|
3
3
|
RSpec.describe Usmu::SiteGenerator do
|
4
|
-
let(:configuration) { Usmu::Configuration.from_file('test
|
4
|
+
let(:configuration) { Usmu::Configuration.from_file('test-site/usmu.yml') }
|
5
5
|
let(:generator) { Usmu::SiteGenerator.new(configuration) }
|
6
6
|
|
7
7
|
it 'should have layouts' do
|
@@ -1,7 +1,12 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
begin
|
2
|
+
require 'codeclimate-test-reporter'
|
3
|
+
CodeClimate::TestReporter.start
|
4
|
+
rescue LoadError
|
5
|
+
end
|
3
6
|
|
4
7
|
require 'logging'
|
8
|
+
require 'rspec/logging_helper'
|
9
|
+
require 'timeout'
|
5
10
|
|
6
11
|
# This file was generated by the `rspec --init` command. Conventionally, all
|
7
12
|
# specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.
|
@@ -87,10 +92,19 @@ RSpec.configure do |config|
|
|
87
92
|
# test failures related to randomization by passing the same `--seed` value
|
88
93
|
# as the one that triggered the failure.
|
89
94
|
Kernel.srand config.seed
|
95
|
+
|
96
|
+
# Set a timeout on individual tests
|
97
|
+
config.around(:each) do |example|
|
98
|
+
Timeout.timeout(5, &example)
|
99
|
+
end
|
100
|
+
|
101
|
+
# Configure RSpec to capture log messages for tests.
|
102
|
+
include RSpec::LoggingHelper
|
103
|
+
config.capture_log_messages
|
90
104
|
end
|
91
105
|
|
92
106
|
# Load turnip step definitions
|
93
|
-
Dir['
|
107
|
+
Dir['spec/**/*_steps.rb'].each {|f| require f[5..f.length] }
|
94
108
|
|
95
109
|
# Allow loading of mocks
|
96
|
-
$LOAD_PATH.unshift(File.realpath('
|
110
|
+
$LOAD_PATH.unshift(File.realpath('spec/mock'))
|