Skip to content

Fix rake templates:test #318

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 14 commits into from
Jun 11, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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