Add failing test for travis.yml

I see three options to test travis.yml :

1. Testing that the YAML contains relevant value. Least useful and least
reliable, but simplest to implement.

2. Testing that the YAML is valid TravisCI YAML. Unfortunately this is
difficult / impossible. Doing 'travis lint' would succeed, this command
does not check for 'script' key presence and wouldn't be useful for us.

We could use 'travis-build' to verify that the YAML can be converted to
a worker config, but as of now 'travis-build' doesn't work out of the
box.

There is a new tool for validating travis YAML files 'travis-yml', but
as of now it's a ruby-only library and it's still a work in progress.

3. Running Travis CI task based on the generated YAML. This seems the
best approach, however since cookiecutter-django itself uses Travis CI,
that would require running Travis CI from within Travis CI.

Scheduling Travis CI job without a github push still requires a public
github repo, which is something that we can't generate on demand.

Given that I'm opting to use approach 1.
This commit is contained in:
bartek 2019-03-06 00:12:19 +01:00
parent aea5c807f6
commit f500435c76
2 changed files with 18 additions and 0 deletions

View File

@ -11,3 +11,4 @@ flake8==3.7.6
tox==3.6.1
pytest==4.3.0
pytest-cookies==0.3.0
pyyaml==3.13

View File

@ -1,6 +1,7 @@
import os
import re
import sh
import yaml
import pytest
from binaryornot.check import is_binary
@ -85,3 +86,19 @@ def test_flake8_compliance(cookies):
sh.flake8(str(result.project))
except sh.ErrorReturnCode as e:
pytest.fail(e)
def test_travis_invokes_pytest(cookies, context):
context.update({"use_travisci": "y"})
result = cookies.bake(extra_context=context)
assert result.exit_code == 0
assert result.exception is None
assert result.project.basename == context["project_slug"]
assert result.project.isdir()
with open(f'{result.project}/.travis.yml', 'r') as travis_yml:
try:
assert yaml.load(travis_yml)['script'] == ['pytest']
except yaml.YAMLError as e:
pytest.fail(e)