Files
heroku-buildpack-python/spec/hatchet/python_spec.rb
T
Richard Schneeman a06b536109 Add Hatchet Regression Tests (#969)
I went through all the tests in the Ruby buildpack and cataloged what I think can be generalized between languages to prevent regressions. This PR add tests for these cases:

* Test CI deploys run tests and use the cache [[reference test](https://github.com/heroku/heroku-buildpack-ruby/blob/f488bd53c7ff0b78e17c2405166cbd4a3af75ee2/spec/hatchet/ci_spec.rb#L36)]
* Test cache for regular deploys is used on repeated deploys (This was already tested on the Python buildpack, I moved it) [[reference test](https://github.com/heroku/heroku-buildpack-ruby/blob/e34c583c139911d059f5627bb25125707288f053/spec/hatchet/stack_spec.rb#L21-L25)]
    * Test modifying a requirement clears the cache appropriately (This was already tested on the Python buildpack, I moved it)
* Test deploying the getting started guide works [[reference test](https://github.com/heroku/heroku-buildpack-ruby/blob/424a7245e2da86845a20d58a9482bcf2a00c3a8f/spec/hatchet/getting_started_spec.rb#L5)]
* Test that all paths set by the buildpack are absolute instead of relative [[reference test](https://github.com/heroku/heroku-buildpack-ruby/blob/249d3c1a4e97068f8fd016f10fa0839709d95658/spec/hatchet/rails5_spec.rb#L68])
* Test upgrading stack invalidates the cache [[reference test](https://github.com/heroku/heroku-buildpack-ruby/blob/f488bd53c7ff0b78e17c2405166cbd4a3af75ee2/spec/hatchet/stack_spec.rb#L3)]
* Test that builds fail when a bad version is specified [[reference test](https://github.com/heroku/heroku-buildpack-ruby/blob/249d3c1a4e97068f8fd016f10fa0839709d95658/spec/hatchet/ruby_spec.rb#L5)]


In addition to that I've also got a CNB test with `pack-build` with the getting started app, but since python isn't `cnb` capable yet I didn't add one.
2020-04-27 08:26:42 -05:00

73 lines
2.9 KiB
Ruby

require_relative '../spec_helper'
describe "Python" do
describe "cache" do
it "functions correctly" do
Hatchet::Runner.new("python_default").deploy do |app|
expect(app.output).to match(/Installing pip/)
expect(app.output).to_not match("Requirements file has been changed, clearing cached dependencies")
expect(app.output).to_not match("No change in requirements detected, installing from cache")
expect(app.output).to_not match("No such file or directory")
expect(app.output).to_not match("cp: cannot create regular file")
# Redeploy with changed requirements file
run!(%Q{echo "" >> requirements.txt})
run!(%Q{echo "pygments" >> requirements.txt})
run!(%Q{git add . ; git commit --allow-empty -m next})
app.push!
# Check the cache to have cleared
expect(app.output).to match("Requirements file has been changed, clearing cached dependencies")
expect(app.output).to_not match("No dependencies found, preparing to install")
expect(app.output).to_not match("No change in requirements detected, installing from cache")
# With no changes on redeploy, the cache should be present
run!(%Q{git commit --allow-empty -m next})
app.push!
expect(app.output).to match("No change in requirements detected, installing from cache")
expect(app.output).to_not match("Requirements file has been changed, clearing cached dependencies")
expect(app.output).to_not match("No dependencies found, preparing to install")
end
end
end
describe "python versions" do
let(:stack) { ENV["HEROKU_TEST_STACK"] || DEFAULT_STACK }
it "works with 3.7.6" do
version = "3.7.6"
before_deploy = -> { run!(%Q{echo "python-#{version}" >> runtime.txt}) }
Hatchet::Runner.new("python_default", before_deploy: before_deploy, stack: stack).deploy do |app|
expect(app.run('python -V')).to match(version)
end
end
it "works with 3.8.2" do
version = "3.8.2"
before_deploy = -> { run!(%Q{echo "python-#{version}" >> runtime.txt}) }
Hatchet::Runner.new("python_default", before_deploy: before_deploy, stack: stack).deploy do |app|
expect(app.run('python -V')).to match(version)
end
end
it "fails with a bad version" do
version = "3.8.2.lol"
before_deploy = -> { run!(%Q{echo "python-#{version}" >> runtime.txt}) }
Hatchet::Runner.new("python_default", before_deploy: before_deploy, stack: stack, allow_failure: true).deploy do |app|
expect(app.output).to match("not available for this stack")
end
end
end
it "getting started app has no relative paths" do
buildpacks = [
:default,
"https://github.com/sharpstone/force_absolute_paths_buildpack"
]
Hatchet::Runner.new("python-getting-started", buildpacks: buildpacks).deploy do |app|
# Deploy works
end
end
end