Skip to content

Commit

Permalink
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Revise testing approach
Browse files Browse the repository at this point in the history
andyw8 committed May 1, 2024

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature. The key has expired.
1 parent c3f6141 commit a03f1f4
Showing 3 changed files with 10 additions and 93 deletions.
2 changes: 1 addition & 1 deletion lib/ruby_lsp/ruby_lsp_rails/addon.rb
Original file line number Diff line number Diff line change
@@ -31,7 +31,7 @@ def activate(global_state, message_queue)
@global_state = T.let(global_state, T.nilable(RubyLsp::GlobalState))
$stderr.puts("Activating Ruby LSP Rails addon v#{VERSION}")
# Start booting the real client in a background thread. Until this completes, the client will be a NullClient
Thread.new { @client = RunnerClient.create_client }.join
Thread.new { @client = RunnerClient.create_client }
end

sig { override.void }
2 changes: 2 additions & 0 deletions test/ruby_lsp_rails/definition_test.rb
Original file line number Diff line number Diff line change
@@ -124,6 +124,8 @@ def baz; end

def generate_definitions_for_source(source, position)
with_server(source) do |server, uri|
sleep(0.1) while RubyLsp::Addon.addons.first.instance_variable_get(:@client).is_a?(NullClient)

server.process_message(
id: 1,
method: "textDocument/definition",
99 changes: 7 additions & 92 deletions test/ruby_lsp_rails/hover_test.rb
Original file line number Diff line number Diff line change
@@ -24,21 +24,6 @@ class HoverTest < ActiveSupport::TestCase
end

test "hook returns model column information" do
expected_response = {
schema_file: "#{dummy_root}/db/schema.rb",
columns: [
["id", "integer"],
["first_name", "string"],
["last_name", "string"],
["age", "integer"],
["created_at", "datetime"],
["updated_at", "datetime"],
],
primary_keys: ["id"],
}

RunnerClient.any_instance.stubs(model: expected_response)

response = hover_on_source(<<~RUBY, { line: 3, character: 0 })
class User < ApplicationRecord
end
@@ -70,40 +55,23 @@ class User < ApplicationRecord
end

test "return column information for namespaced models" do
expected_response = {
schema_file: "#{dummy_root}/db/schema.rb",
columns: [
["id", "integer"],
["first_name", "string"],
["last_name", "string"],
["age", "integer"],
["created_at", "datetime"],
["updated_at", "datetime"],
],
primary_keys: ["id"],
}

RunnerClient.any_instance.stubs(model: expected_response)

response = hover_on_source(<<~RUBY, { line: 4, character: 6 })
module Blog
class User < ApplicationRecord
class Post < ApplicationRecord
end
end
Blog::User
Blog::Post
RUBY

assert_equal(<<~CONTENT.chomp, response.contents.value)
[Schema](file://#{dummy_root}/db/schema.rb)
**id**: integer (PK)
**first_name**: string
**last_name**: string
**title**: string
**age**: integer
**body**: text
**created_at**: datetime
@@ -112,20 +80,6 @@ class User < ApplicationRecord
end

test "returns column information for models with composite primary keys" do
expected_response = {
schema_file: "#{dummy_root}/db/schema.rb",
columns: [
["order_id", "integer"],
["product_id", "integer"],
["note", "string"],
["created_at", "datetime"],
["updated_at", "datetime"],
],
primary_keys: ["order_id", "product_id"],
}

RunnerClient.any_instance.stubs(model: expected_response)

response = hover_on_source(<<~RUBY, { line: 3, character: 0 })
class CompositePrimaryKey < ApplicationRecord
end
@@ -146,55 +100,14 @@ class CompositePrimaryKey < ApplicationRecord
**product_id**: integer (PK)
**note**: string
**note**: text
**created_at**: datetime
**updated_at**: datetime
CONTENT
end

test "handles `db/structure.sql` instead of `db/schema.rb`" do
expected_response = {
schema_file: "#{dummy_root}/db/structure.sql",
columns: [],
primary_keys: [],
}

RunnerClient.any_instance.stubs(model: expected_response)

response = hover_on_source(<<~RUBY, { line: 3, character: 0 })
class User < ApplicationRecord
end
User
RUBY

assert_includes(
response.contents.value,
"[Schema](file://#{dummy_root}/db/structure.sql)",
)
end

test "handles neither `db/structure.sql` nor `db/schema.rb` being present" do
expected_response = {
schema_file: nil,
columns: [],
primary_keys: [],
}

RunnerClient.any_instance.stubs(model: expected_response)

response = hover_on_source(<<~RUBY, { line: 3, character: 0 })
class User < ApplicationRecord
end
User
RUBY

refute_match(/Schema/, response.contents.value)
end

test "shows documentation for routes DSLs" do
value = hover_on_source("root 'projects#index'", { line: 0, character: 0 }).contents.value

@@ -238,6 +151,8 @@ class ActiveRecord::Base

def hover_on_source(source, position)
with_server(source) do |server, uri|
sleep(0.1) while RubyLsp::Addon.addons.first.instance_variable_get(:@client).is_a?(NullClient)

server.process_message(
id: 1,
method: "textDocument/hover",

0 comments on commit a03f1f4

Please sign in to comment.