Skip to content

Commit

Permalink
wip test fix against CI
Browse files Browse the repository at this point in the history
  • Loading branch information
alexcrocha committed Jan 22, 2025
1 parent 3dd5d4b commit 6b9f24f
Show file tree
Hide file tree
Showing 5 changed files with 101 additions and 101 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ jobs:
bundler-cache: true
rubygems: ${{ matrix.rubygems }}
- name: Run tests
run: bin/test
run: bin/test spec/tapioca/ruby_lsp/run_gem_rbi_check_spec.rb
continue-on-error: ${{ !!matrix.experimental }}

buildall:
Expand Down
8 changes: 5 additions & 3 deletions lib/ruby_lsp/tapioca/run_gem_rbi_check.rb
Original file line number Diff line number Diff line change
Expand Up @@ -50,12 +50,12 @@ def git_repo?
sig { returns(T::Boolean) }
def lockfile_changed?
fetch_lockfile_diff
!T.must(@lockfile_diff).empty?
!@lockfile_diff.empty?
end

sig { returns(String) }
def fetch_lockfile_diff
@lockfile_diff = %x(git diff HEAD Gemfile.lock).strip
@lockfile_diff = File.exist?("Gemfile.lock") ? %x(git diff Gemfile.lock).strip : ""
end

sig { void }
Expand All @@ -77,7 +77,9 @@ def execute_tapioca_gem_command(gems)
# Resetting BUNDLE_GEMFILE to root folder to use the project's Gemfile instead of Ruby LSP's composed Gemfile
stdout, stderr, status = T.unsafe(Open3).capture3(
{ "BUNDLE_GEMFILE" => "Gemfile" },
"bin/tapioca",
"bundle",
"exec",
"tapioca",
"gem",
"--lsp_addon",
*gems,
Expand Down
2 changes: 1 addition & 1 deletion spec/helpers/mock_gem.rb
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ class MockGem < Spoom::Context

# The gem's version string such as "1.0.0" or ">= 2.0.5"
sig { returns(String) }
attr_reader :version
attr_accessor :version

# The dependencies to be added to the gem's gemspec
sig { returns(T::Array[String]) }
Expand Down
7 changes: 7 additions & 0 deletions spec/spec_with_project.rb
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,13 @@ def mock_gem(name, version, dependencies: [], path: default_gem_path(name), &blo
gem
end

sig { params(gem: MockGem, version: String).returns(MockGem) }
def update_gem(gem, version)
gem.version = version
gem.gemspec(gem.default_gemspec_contents)
gem
end

# Spec assertions

# Assert that the contents of `path` inside `@project` is equals to `expected`
Expand Down
183 changes: 87 additions & 96 deletions spec/tapioca/ruby_lsp/run_gem_rbi_check_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -12,140 +12,131 @@ module Foo
end
RUBY

# TODO: understand why this fails with `before(:all)`
# before(:all) do
before do
@project.tapioca("configure")
@project = mock_project
end

after do
project.write_gemfile!(project.tapioca_gemfile)
@project.require_default_gems
project.remove!("sorbet/rbi")
project.remove!("../gems")
project.remove!(".git")
project.remove!("sorbet/tapioca/require.rb")
project.remove!("config/application.rb")
ensure
@project.remove!("output")
@project.destroy!
end

def setup_git_repo
@project.exec("git init")
@project.exec("touch Gemfile.lock")
FileUtils.mkdir_p("#{@project.absolute_path}/sorbet/rbi/gems")
@project.exec("git add . && git commit -m 'Initial commit'")
end

it "does nothing if there is no git repo" do
foo = mock_gem("foo", "0.0.1") do
write!("lib/foo.rb", FOO_RB)
describe "without git" do
before do
@project.bundle_install!
@project.tapioca("configure")
end
@project.require_mock_gem(foo)

@project.bundle_install!
check = ::RubyLsp::Tapioca::RunGemRbiCheck.new
check.run(@project.absolute_path)

assert check.result.stdout.include?("Not a git repository")
end
it "does nothing if there is no git repo" do
foo = mock_gem("foo", "0.0.1") do
write!("lib/foo.rb", FOO_RB)
end
@project.require_mock_gem(foo)

it "creates the RBI for a newly added gem" do
setup_git_repo
@project.bundle_install!
check = ::RubyLsp::Tapioca::RunGemRbiCheck.new
check.run(@project.absolute_path)

foo = mock_gem("foo", "0.0.1") do
write!("lib/foo.rb", FOO_RB)
assert check.result.stdout.include?("Not a git repository")
end
@project.require_mock_gem(foo)
@project.bundle_install!

check = ::RubyLsp::Tapioca::RunGemRbiCheck.new
check.run(@project.absolute_path)

assert_project_file_exist("sorbet/rbi/gems/[email protected]")
end

it "regenerates RBI when a gem version changes" do
setup_git_repo

foo = mock_gem("foo", "0.0.1") do
write!("lib/foo.rb", FOO_RB)
describe "with git" do
before do
@project.bundle_install!
@project.tapioca("configure")
@project.exec("git init")
@project.exec("git config commit.gpgsign false")
@project.exec("git add .")
@project.exec("git commit -m 'Initial commit'")
end
@project.require_mock_gem(foo)
@project.bundle_install!

check = ::RubyLsp::Tapioca::RunGemRbiCheck.new
check.run(@project.absolute_path)
it "creates the RBI for a newly added gem" do
foo = mock_gem("foo", "0.0.1") do
write!("lib/foo.rb", FOO_RB)
end
@project.require_mock_gem(foo)
@project.bundle_install!

assert_project_file_exist("sorbet/rbi/gems/[email protected]")
check = ::RubyLsp::Tapioca::RunGemRbiCheck.new
check.run(@project.absolute_path)

# Modify the gem
foo = mock_gem("foo", "0.0.2") do
write!("lib/foo.rb", FOO_RB)
assert_project_file_exist("sorbet/rbi/gems/[email protected]")
end
@project.require_mock_gem(foo)
@project.bundle_install!

check.run(@project.absolute_path)
it "regenerates RBI when a gem version changes" do
foo = mock_gem("foo", "0.0.1") do
write!("lib/foo.rb", FOO_RB)
end
@project.require_mock_gem(foo)
@project.bundle_install!

assert_project_file_exist("sorbet/rbi/gems/[email protected]")
end
check = ::RubyLsp::Tapioca::RunGemRbiCheck.new
check.run(@project.absolute_path)

it "removes RBI file when a gem is removed" do
setup_git_repo
assert_project_file_exist("sorbet/rbi/gems/[email protected]")

foo = mock_gem("foo", "0.0.1") do
write!("lib/foo.rb", FOO_RB)
end
@project.require_mock_gem(foo)
@project.bundle_install!
# Modify the gem
update_gem foo, "0.0.2"
@project.bundle_install!

check.run(@project.absolute_path)

check = ::RubyLsp::Tapioca::RunGemRbiCheck.new
check.run(@project.absolute_path)
assert_project_file_exist("sorbet/rbi/gems/[email protected]")
end

assert_project_file_exist("sorbet/rbi/gems/[email protected]")
it "removes RBI file when a gem is removed" do
foo = mock_gem("foo", "0.0.1") do
write!("lib/foo.rb", FOO_RB)
end
@project.require_mock_gem(foo)
@project.bundle_install!

@project.exec("git add Gemfile.lock")
@project.exec("git commit -m 'Add foo gem'")
check1 = ::RubyLsp::Tapioca::RunGemRbiCheck.new
check1.run(@project.absolute_path)

@project.write_gemfile!(@project.tapioca_gemfile)
@project.bundle_install!
assert_project_file_exist("sorbet/rbi/gems/[email protected]")

check = ::RubyLsp::Tapioca::RunGemRbiCheck.new
check.run(@project.absolute_path)
@project.exec("git restore Gemfile Gemfile.lock")

refute_project_file_exist("sorbet/rbi/gems/[email protected]")
end
check2 = ::RubyLsp::Tapioca::RunGemRbiCheck.new
check2.run(@project.absolute_path)

it "deletes untracked RBI files" do
setup_git_repo
refute_project_file_exist("sorbet/rbi/gems/[email protected]")
end

# Create an untracked RBI file
FileUtils.touch("#{@project.absolute_path}/sorbet/rbi/gems/[email protected]")
it "deletes untracked RBI files" do
@project.bundle_install!
FileUtils.mkdir_p("#{@project.absolute_path}/sorbet/rbi/gems")
# Create an untracked RBI file
FileUtils.touch("#{@project.absolute_path}/sorbet/rbi/gems/[email protected]")

assert_project_file_exist("/sorbet/rbi/gems/[email protected]")
assert_project_file_exist("/sorbet/rbi/gems/[email protected]")

check = ::RubyLsp::Tapioca::RunGemRbiCheck.new
check.run(@project.absolute_path)
check = ::RubyLsp::Tapioca::RunGemRbiCheck.new
check.run(@project.absolute_path)

refute_project_file_exist("sorbet/rbi/gems/[email protected]")
end
refute_project_file_exist("sorbet/rbi/gems/[email protected]")
end

it "restores deleted RBI files" do
setup_git_repo
it "restores deleted RBI files" do
@project.bundle_install!
FileUtils.mkdir_p("#{@project.absolute_path}/sorbet/rbi/gems")
# Create and delete a tracked RBI file
FileUtils.touch("#{@project.absolute_path}/sorbet/rbi/gems/[email protected]")
@project.exec("git add sorbet/rbi/gems/[email protected]")
@project.exec("git commit -m 'Add foo RBI'")
FileUtils.rm("#{@project.absolute_path}/sorbet/rbi/gems/[email protected]")

# Create and delete a tracked RBI file
FileUtils.touch("#{@project.absolute_path}/sorbet/rbi/gems/[email protected]")
@project.exec("git add sorbet/rbi/gems/[email protected]")
@project.exec("git commit -m 'Add foo RBI'")
FileUtils.rm("#{@project.absolute_path}/sorbet/rbi/gems/[email protected]")
refute_project_file_exist("sorbet/rbi/gems/[email protected]")

refute_project_file_exist("sorbet/rbi/gems/[email protected]")
check = ::RubyLsp::Tapioca::RunGemRbiCheck.new
check.run(@project.absolute_path)

check = ::RubyLsp::Tapioca::RunGemRbiCheck.new
check.run(@project.absolute_path)
assert_project_file_exist("sorbet/rbi/gems/[email protected]")

assert_project_file_exist("sorbet/rbi/gems/[email protected]")
# Clean-up commit
@project.exec("git reset --hard HEAD^")
end
end
end
end
Expand Down

0 comments on commit 6b9f24f

Please sign in to comment.