Skip to content

Commit

Permalink
Merge pull request #318 from mishina2228/fix-for-templates-test
Browse files Browse the repository at this point in the history
Fix `rake templates:test`
  • Loading branch information
gsamokovarov authored Jun 11, 2022
2 parents e3dcf4c + bdd0617 commit 83b282e
Show file tree
Hide file tree
Showing 16 changed files with 48 additions and 60 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -9,5 +9,6 @@ test/dummy/tmp/
test/dummy/.sass-cache
Gemfile.lock
node_modules/
package-lock.json
dist/
tmp/
4 changes: 2 additions & 2 deletions extensions/chrome/js/background.js
Original file line number Diff line number Diff line change
Expand Up @@ -84,10 +84,10 @@ function initHttpListener() {
function onResponse(details) {
var headers = getHeaders(details);
var sessionId;
if (sessionId = headers['X-Web-Console-Session-Id']) {
if (sessionId = headers['x-web-console-session-id']) {
sessions[details.tabId] = {
sessionId: sessionId,
mountPoint: headers['X-Web-Console-Mount-Point'],
mountPoint: headers['x-web-console-mount-point'],
remoteHost: details.url.match(/([^:]+:\/\/[^\/]+)\/?/)[1]
};
}
Expand Down
2 changes: 1 addition & 1 deletion lib/web_console.rb
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ module WebConsole
end

def self.logger
Rails.logger || (@logger ||= ActiveSupport::Logger.new($stderr))
(defined?(Rails.logger) && Rails.logger) || (@logger ||= ActiveSupport::Logger.new($stderr))
end
end

Expand Down
6 changes: 3 additions & 3 deletions lib/web_console/injector.rb
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,10 @@ def initialize(body, headers)
end

def inject(content)
# Set Content-Length header to the size of the current body
# Set content-length header to the size of the current body
# + the extra content. Otherwise the response will be truncated.
if @headers["Content-Length"]
@headers["Content-Length"] = (@body.bytesize + content.bytesize).to_s
if @headers["content-length"]
@headers["content-length"] = (@body.bytesize + content.bytesize).to_s
end

[
Expand Down
8 changes: 4 additions & 4 deletions lib/web_console/middleware.rb
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,8 @@ def call(env)
status, headers, body = call_app(env)

if (session = Session.from(Thread.current)) && acceptable_content_type?(headers)
headers["X-Web-Console-Session-Id"] = session.id
headers["X-Web-Console-Mount-Point"] = mount_point
headers["x-web-console-session-id"] = session.id
headers["x-web-console-mount-point"] = mount_point

template = Template.new(env, session)
body, headers = Injector.new(body, headers).inject(template.render("index"))
Expand All @@ -52,12 +52,12 @@ def call(env)
private

def acceptable_content_type?(headers)
headers["Content-Type"].to_s.include?("html")
headers["content-type"].to_s.include?("html")
end

def json_response(opts = {})
status = opts.fetch(:status, 200)
headers = { "Content-Type" => "application/json; charset = utf-8" }
headers = { "content-type" => "application/json; charset = utf-8" }
body = yield.to_json

[ status, headers, [ body ] ]
Expand Down
14 changes: 4 additions & 10 deletions lib/web_console/tasks/templates.rake
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
# frozen_string_literal: true

require "net/http"

namespace :templates do
desc "Run tests for templates"
task test: [ :daemonize, :npm, :rackup, :wait, :mocha, :kill, :exit ]
Expand All @@ -10,7 +12,6 @@ namespace :templates do
runner = URI.parse("http://#{ENV['IP'] || '127.0.0.1'}:#{ENV['PORT'] || 29292}/html/test_runner.html")
rackup = "rackup --host #{runner.host} --port #{runner.port}"
result = nil
browser = "phantomjs"

def need_to_wait?(uri)
Net::HTTP.start(uri.host, uri.port) { |http| http.get(uri.path) }
Expand All @@ -22,17 +23,10 @@ namespace :templates do
rackup += " -D --pid #{pid}"
end

task npm: [ :phantomjs ] do
task :npm do
Dir.chdir(workdir) { system "npm install --silent" }
end

task :phantomjs do
unless system("which #{browser} >/dev/null")
browser = "./node_modules/.bin/phantomjs"
Dir.chdir(workdir) { system("test -f #{browser} || npm install --silent phantomjs-prebuilt") }
end
end

task :rackup do
Dir.chdir(workdir) { system rackup }
end
Expand All @@ -43,7 +37,7 @@ namespace :templates do
end

task :mocha do
Dir.chdir(workdir) { result = system("#{browser} ./node_modules/mocha-phantomjs-core/mocha-phantomjs-core.js #{runner} dot") }
Dir.chdir(workdir) { result = system("npx mocha-headless-chrome -f #{runner} -r dot") }
end

task :kill do
Expand Down
4 changes: 2 additions & 2 deletions lib/web_console/templates/console.js.erb
Original file line number Diff line number Diff line change
Expand Up @@ -935,8 +935,8 @@ REPLConsole.request = function request(method, url, params, callback) {
var xhr = new REPLConsole.XMLHttpRequest();

xhr.open(method, url, true);
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");
xhr.setRequestHeader("content-type", "application/x-www-form-urlencoded");
xhr.setRequestHeader("x-requested-with", "XMLHttpRequest");
xhr.send(params);

xhr.onreadystatechange = function() {
Expand Down
12 changes: 8 additions & 4 deletions lib/web_console/testing/fake_middleware.rb
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
# frozen_string_literal: true

require "action_view"
require "action_dispatch" # This is needed to use Mime::Type
require "web_console"
require "web_console/testing/helper"

Expand All @@ -9,7 +10,7 @@ module Testing
class FakeMiddleware
I18n.load_path.concat(Dir[Helper.gem_root.join("lib/web_console/locales/*.yml")])

DEFAULT_HEADERS = { "Content-Type" => "application/javascript" }
DEFAULT_HEADERS = { "content-type" => "application/javascript" }

def initialize(opts)
@headers = opts.fetch(:headers, DEFAULT_HEADERS)
Expand All @@ -18,18 +19,21 @@ def initialize(opts)
end

def call(env)
[ 200, @headers, [ render(req_path(env)) ] ]
body = render(req_path(env))
@headers["content-length"] = body.bytesize.to_s

[ 200, @headers, [ body ] ]
end

def view
@view = View.new(@view_path)
@view = View.with_empty_template_cache.with_view_paths(@view_path)
end

private

# extract target path from REQUEST_PATH
def req_path(env)
env["REQUEST_PATH"].match(@req_path_regex)[1]
File.basename(env["REQUEST_PATH"].match(@req_path_regex)[1], ".*")
end

def render(template)
Expand Down
15 changes: 4 additions & 11 deletions test/templates/config.ru
Original file line number Diff line number Diff line change
Expand Up @@ -15,18 +15,11 @@ end
map "/html" do
run WebConsole::Testing::FakeMiddleware.new(
req_path_regex: %r{^/html/(.*)},
headers: {"Content-Type" => "text/html"},
headers: {"content-type" => "text/html"},
view_path: TEST_ROOT.join("html"),
)
end

map "/spec" do
run WebConsole::Testing::FakeMiddleware.new(
req_path_regex: %r{^/spec/(.*)},
view_path: TEST_ROOT.join("spec"),
)
end

map "/test" do
run WebConsole::Testing::FakeMiddleware.new(
req_path_regex: %r{^/test/(.*)},
Expand All @@ -42,19 +35,19 @@ map "/templates" do
end

map "/mock/repl_sessions/result" do
headers = { 'Content-Type' => 'application/json' }
headers = { 'content-type' => 'application/json' }
body = [ { output: '=> "fake-result"\n', context: [ [ :something, :somewhat, :somewhere ] ] }.to_json ]
run lambda { |env| [ 200, headers, body ] }
end

map "/mock/repl_sessions/error" do
headers = { 'Content-Type' => 'application/json' }
headers = { 'content-type' => 'application/json' }
body = [ { output: 'fake-error-message' }.to_json ]
run lambda { |env| [ 400, headers, body ] }
end

map "/mock/repl_sessions/error.txt" do
headers = { 'Content-Type' => 'plain/text' }
headers = { 'content-type' => 'plain/text' }
body = [ 'error message' ]
run lambda { |env| [ 400, headers, body ] }
end
7 changes: 1 addition & 6 deletions test/templates/html/test_runner.html.erb
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@
<script src="/node_modules/chai/chai.js"></script>
<script>
mocha.setup('tdd');
mocha.reporter('html');
</script>

<!-- load templates -->
Expand All @@ -26,11 +25,7 @@

<!-- run tests -->
<script>
if (window.mochaPhantomJS) {
mochaPhantomJS.run();
} else {
mocha.run();
}
mocha.run();
</script>
</body>
</html>
6 changes: 3 additions & 3 deletions test/templates/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@
"url": "https://github.com/rails/web-console"
},
"devDependencies": {
"chai": "^3.0.0",
"mocha": "^2.2.5",
"mocha-phantomjs-core": "^1.3.1"
"chai": "^4.3.6",
"mocha": "^10.0.0",
"mocha-headless-chrome": "^4.0.0"
}
}
7 changes: 4 additions & 3 deletions test/templates/test/repl_console_test.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
suite('REPLCosnole', function() {
suite('REPLConsole', function() {
suiteSetup(function() {
this.stage = document.createElement('div');
document.body.appendChild(this.stage);
Expand Down Expand Up @@ -179,13 +179,14 @@ suite('REPLCosnole', function() {
}, 100);
});

test('inserts the current word if tab key is pressed', function() {
test('inserts the current word if tab key is pressed', function(done) {
var c = this.console;
c.setInput('some');

setTimeout(function() {
c.onKeyDown(TestHelper.KeyDown(TestHelper.KEY_TAB));
c.onKeyDown(TestHelper.keyDown(TestHelper.KEY_TAB));
assert.equal('something', c._input);
done();
}, 100);
});
});
Expand Down
2 changes: 1 addition & 1 deletion test/web_console/exception_mapper_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
require "test_helper"

module WebConsole
class ExcetionMapperTest < ActiveSupport::TestCase
class ExceptionMapperTest < ActiveSupport::TestCase
test "#first tries to find the first application binding" do
Rails.stubs(:root).returns Pathname(__FILE__).parent

Expand Down
2 changes: 1 addition & 1 deletion test/web_console/helper_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ def status
end

def headers
{ "Content-Type" => "text/html; charset=utf-8" }
{ "content-type" => "text/html; charset=utf-8" }
end

def body
Expand Down
6 changes: 3 additions & 3 deletions test/web_console/injector_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -28,11 +28,11 @@ class InjectorTest < ActiveSupport::TestCase
assert_equal [ [ "foobar" ], {} ], Injector.new(body, {}).inject("bar")
end

test "updates the Content-Length header" do
test "updates the content-length header" do
body = [ "foo" ]
headers = { "Content-Length" => 3 }
headers = { "content-length" => 3 }

assert_equal [ [ "foobar" ], { "Content-Length" => "6" } ], Injector.new(body, headers).inject("bar")
assert_equal [ [ "foobar" ], { "content-length" => "6" } ], Injector.new(body, headers).inject("bar")
end
end
end
12 changes: 6 additions & 6 deletions test/web_console/middleware_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -35,8 +35,8 @@ def status

def headers
Hash.new.tap do |header_hash|
header_hash["Content-Type"] = "#{@response_content_type}; charset=utf-8" unless @response_content_type.nil?
header_hash["Content-Length"] = @response_content_length unless @response_content_length.nil?
header_hash["content-type"] = "#{@response_content_type}; charset=utf-8" unless @response_content_type.nil?
header_hash["content-length"] = @response_content_length unless @response_content_length.nil?
end
end
end
Expand Down Expand Up @@ -84,13 +84,13 @@ def headers
assert_select "#console"
end

test "sets correct Content-Length header" do
test "sets correct content-length header" do
Thread.current[:__web_console_binding] = binding
@app = Middleware.new(Application.new(response_content_length: 7))

get "/", params: nil

assert_equal(response.body.size, response.headers["Content-Length"].to_i)
assert_equal(response.body.size, response.headers["content-length"].to_i)
end

test "it closes original body if rendering console" do
Expand Down Expand Up @@ -121,12 +121,12 @@ def headers
assert_select "#console", 0
end

test "returns X-Web-Console-Session-Id as response header" do
test "returns x-web-console-session-id as response header" do
Thread.current[:__web_console_binding] = binding

get "/", params: nil

session_id = response.headers["X-Web-Console-Session-Id"]
session_id = response.headers["x-web-console-session-id"]

assert_not Session.find(session_id).nil?
end
Expand Down

0 comments on commit 83b282e

Please sign in to comment.