diff --git a/Gemfile b/Gemfile
index b5af3671..12b5bfd9 100644
--- a/Gemfile
+++ b/Gemfile
@@ -61,6 +61,7 @@ group :test do
gem 'phantomjs', require: 'phantomjs/poltergeist'
gem 'capybara_minitest_spec'
gem 'rack_session_access', require: nil
+ gem 'webmock', require: nil
platform :mri do
gem 'simplecov', require: nil
diff --git a/Gemfile.lock b/Gemfile.lock
index 72faf470..7c754a5c 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -45,6 +45,8 @@ GEM
coderay (1.1.0)
columnize (0.3.6)
connection_pool (2.0.0)
+ crack (0.4.2)
+ safe_yaml (~> 1.0.0)
debugger (1.6.6)
columnize (>= 0.3.1)
debugger-linecache (~> 1.2.0)
@@ -144,6 +146,7 @@ GEM
mime-types (>= 1.16)
retriable (1.4.1)
rmagick (2.13.2)
+ safe_yaml (1.0.1)
sass (3.3.8)
screencap (0.1.1)
phantomjs
@@ -191,6 +194,9 @@ GEM
rack
raindrops (~> 0.7)
uuidtools (2.1.4)
+ webmock (1.17.4)
+ addressable (>= 2.2.7)
+ crack (>= 0.3.2)
websocket-driver (0.3.4)
xpath (2.0.0)
nokogiri (~> 1.3)
@@ -244,4 +250,5 @@ DEPENDENCIES
sinatra-xsendfile
stripe!
tilt
+ webmock
zipruby
diff --git a/models/site.rb b/models/site.rb
index ce79dacb..90e9f969 100644
--- a/models/site.rb
+++ b/models/site.rb
@@ -366,7 +366,7 @@ class Site < Sequel::Model
ext = File.extname(path).gsub(/^./, '')
if ext.match HTML_REGEX
- ScreenshotWorker.perform_async values[:username], path
+ ScreenshotWorker.perform_async values[:username], relative_path
elsif ext.match IMAGE_REGEX
ThumbnailWorker.perform_async values[:username], relative_path
end
diff --git a/tests/environment.rb b/tests/environment.rb
index ad3cb866..b6662f43 100644
--- a/tests/environment.rb
+++ b/tests/environment.rb
@@ -17,6 +17,9 @@ Bundler.require :test
#require 'minitest/pride'
require 'minitest/autorun'
+require 'webmock'
+include WebMock::API
+require 'webmock/minitest'
require 'sidekiq/testing'
Sinatra::Application.configure do |app|
diff --git a/tests/files/index.html b/tests/files/index.html
new file mode 100644
index 00000000..c6b500bd
--- /dev/null
+++ b/tests/files/index.html
@@ -0,0 +1,8 @@
+
+
+ Hello?
+
+
+ Hi there!
+
+
diff --git a/tests/site_file_tests.rb b/tests/site_file_tests.rb
index 24eeb50e..520c3639 100644
--- a/tests/site_file_tests.rb
+++ b/tests/site_file_tests.rb
@@ -9,6 +9,24 @@ end
describe 'site_files' do
describe 'upload' do
+
+ it 'succeeds with index.html file' do
+ site = Fabricate :site
+ PurgeCacheWorker.jobs.clear
+ ScreenshotWorker.jobs.clear
+
+ post '/site_files/upload', {
+ 'files[]' => Rack::Test::UploadedFile.new('./tests/files/index.html', 'text/html'),
+ 'csrf_token' => 'abcd'
+ }, {'rack.session' => { 'id' => site.id, '_csrf_token' => 'abcd' }}
+ last_response.body.must_match /successfully uploaded/i
+ File.exists?(site.files_path('index.html')).must_equal true
+
+ args = ScreenshotWorker.jobs.first['args']
+ args.first.must_equal site.username
+ args.last.must_equal 'index.html'
+ end
+
it 'succeeds with valid file' do
site = Fabricate :site
PurgeCacheWorker.jobs.clear
diff --git a/tests/workers/screenshot_worker_tests.rb b/tests/workers/screenshot_worker_tests.rb
new file mode 100644
index 00000000..550bf8be
--- /dev/null
+++ b/tests/workers/screenshot_worker_tests.rb
@@ -0,0 +1,28 @@
+require_relative '../environment.rb'
+
+describe ScreenshotWorker do
+
+ it 'saves a screenshot for a root html file' do
+ worker = ScreenshotWorker.new
+ worker.perform 'kyledrake', 'index.html'
+ site = Fabricate :site
+ Site::SCREENSHOT_RESOLUTIONS.each do |r|
+ File.exists?(File.join(Site::SCREENSHOTS_ROOT, 'kyledrake', "index.html.#{r}.jpg")).must_equal true
+ site.screenshot_url('index.html', r).must_equal(
+ File.join(Site::SCREENSHOTS_URL_ROOT, site.username, "index.html.#{r}.jpg")
+ )
+ end
+ end
+
+ it 'saves a screenshot for a path html file' do
+ worker = ScreenshotWorker.new
+ worker.perform 'kyledrake', 'derpie/derp/index.html'
+ site = Fabricate :site
+ Site::SCREENSHOT_RESOLUTIONS.each do |r|
+ File.exists?(File.join(Site::SCREENSHOTS_ROOT, 'kyledrake', "derpie/derp/index.html.#{r}.jpg")).must_equal true
+ site.screenshot_url('derpie/derp/index.html', r).must_equal(
+ File.join(Site::SCREENSHOTS_URL_ROOT, site.username, "derpie/derp/index.html.#{r}.jpg")
+ )
+ end
+ end
+end
\ No newline at end of file
diff --git a/workers/screenshot_worker.rb b/workers/screenshot_worker.rb
index 84869bf5..e18e28c4 100644
--- a/workers/screenshot_worker.rb
+++ b/workers/screenshot_worker.rb
@@ -80,7 +80,9 @@ class ScreenshotWorker
img = img_list.reverse.flatten_images
user_screenshots_path = File.join SCREENSHOTS_PATH, username
- FileUtils.mkdir_p user_screenshots_path
+ screenshot_path = File.join user_screenshots_path, File.dirname(path)
+
+ FileUtils.mkdir_p screenshot_path unless Dir.exists?(screenshot_path)
Site::SCREENSHOT_RESOLUTIONS.each do |res|
img.scale(*res.split('x').collect {|r| r.to_i}).write(File.join(user_screenshots_path, "#{path}.#{res}.jpg")) {