mirror of
https://github.com/kennethreitz/heroku-buildpack-python.git
synced 2026-06-05 23:10:16 +00:00
a06b536109
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.
73 lines
2.9 KiB
Ruby
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
|