Files
deb-python-gabbi/gabbi/tests/test_intercept.py
Chris Dent e3fb2cfa39 Manage numerals more effectively in replacers
Change the handling in response_replacer and jsonhandler.replace so
that numerals are preserved. The primary change here is that replace
does not always return a str: it returns the found data. The
remaining changes cascade from this fix.

* If the 'message' being replaced is fully the regex, don't do
  regex-based replacement (which requires a string). Instead return
  the new value.

* Do template replacing on test data _before_ dumping it to a string.
  This allows the small 'message' replacements described in the previous
  point.

* Assure we can recurse through lists, not just dicts, when
  replacing in data structures.

In the pull request at #206 there is a different mode of coercing
and preserving data types operates by adding a coerce method to
content handlers. While inspecting this it seemed like it might be
too complex, so this alternate option has been explored. This might
work, or perhaps a hybrid of the two.

The coerce.yaml file from #206 was copied here and adapted to fit
the different assumptions that are made in this change. Some of the
assumptions in 206 don't map well to YAML handling of literal data
formats.
2017-04-23 17:52:33 +01:00

78 lines
2.3 KiB
Python

#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
"""A sample test module to exercise the code.
For the sake of exploratory development.
"""
import os
import sys
from gabbi import driver
from gabbi import fixture
from gabbi.handlers import base
from gabbi.tests import simple_wsgi
from gabbi.tests import util
TESTS_DIR = 'gabbits_intercept'
class TestFixtureOne(fixture.GabbiFixture):
"""Drive the fixture testing weakly."""
pass
class TestFixtureTwo(fixture.GabbiFixture):
"""Drive the fixture testing weakly."""
pass
class TestResponseHandler(base.ResponseHandler):
"""A sample response handler just to test."""
test_key_suffix = 'test'
test_key_value = []
def preprocess(self, test):
"""Add some data if the data is a string."""
try:
test.output = test.output + '\nAnother line'
except TypeError:
pass
def action(self, test, expected, value=None):
expected = expected.replace('COW', '', 1)
test.assertIn(expected, test.output)
# Incorporate the SkipAllFixture into this namespace so it can be used
# by tests (cf. skipall.yaml).
SkipAllFixture = fixture.SkipAllFixture
def load_tests(loader, tests, pattern):
"""Provide a TestSuite to the discovery process."""
# Set and environment variable for one of the tests.
util.set_test_environ()
prefix = os.environ.get('GABBI_PREFIX')
test_dir = os.path.join(os.path.dirname(__file__), TESTS_DIR)
return driver.build_tests(test_dir, loader, host=None,
intercept=simple_wsgi.SimpleWsgi,
test_loader_name=__name__,
prefix=prefix,
fixture_module=sys.modules[__name__],
response_handlers=[TestResponseHandler])