pact_testgen package

Subpackages

Submodules

pact_testgen.broker module

class pact_testgen.broker.BrokerBaseSettings(_env_file: Optional[Union[str, os.PathLike]] = '<object object>', _env_file_encoding: Optional[str] = None, _env_nested_delimiter: Optional[str] = None, _secrets_dir: Optional[Union[str, os.PathLike]] = None)[source]

Bases: pydantic.env_settings.BaseSettings

class Config[source]

Bases: object

classmethod customise_sources(init_settings: Callable[[pydantic.env_settings.BaseSettings], Dict[str, Any]], env_settings: Callable[[pydantic.env_settings.BaseSettings], Dict[str, Any]], file_secret_settings: Callable[[pydantic.env_settings.BaseSettings], Dict[str, Any]]) Tuple[Callable[[pydantic.env_settings.BaseSettings], Dict[str, Any]], ...][source]
env_prefix = 'pact_broker_'
class pact_testgen.broker.BrokerBasicAuthConfig(_env_file: Optional[Union[str, os.PathLike]] = '<object object>', _env_file_encoding: Optional[str] = None, _env_nested_delimiter: Optional[str] = None, _secrets_dir: Optional[Union[str, os.PathLike]] = None, *, username: str, password: str)[source]

Bases: pact_testgen.broker.BrokerBaseSettings

password: str
username: str
class pact_testgen.broker.BrokerConfig(_env_file: Optional[Union[str, os.PathLike]] = '<object object>', _env_file_encoding: Optional[str] = None, _env_nested_delimiter: Optional[str] = None, _secrets_dir: Optional[Union[str, os.PathLike]] = None, *, base_url: str, auth: pact_testgen.broker.BrokerBasicAuthConfig = None)[source]

Bases: pact_testgen.broker.BrokerBaseSettings

auth: Optional[pact_testgen.broker.BrokerBasicAuthConfig]
property auth_tuple: Optional[Tuple[str, str]]

Returns auth value suitable for passing to requests.

If username or password are present, will be Tuple[str,str], else None.

base_url: str
pact_testgen.broker.get_pact_from_broker(broker_config: pact_testgen.broker.BrokerConfig, provider_name: str, consumer_name: str, version=None) pact_testgen.models.Pact[source]

Make an HTTP request to the Pact Broker to retrieve the desired contract.

pact_testgen.cli module

Console script for pact_testgen.

pact_testgen.cli.directory(path: str) pathlib.Path[source]
pact_testgen.cli.main()[source]

Console script for pact_testgen.

pact_testgen.files module

class pact_testgen.files.ProviderStateFileOutcome(value)[source]

Bases: enum.Enum

An enumeration.

LEFT_EXISTING = 3
MERGED = 2
NO_CHANGES_REQUIRED = 4
WROTE_NEW = 1
pact_testgen.files.get_functions(mod: _ast.Module) Generator[_ast.FunctionDef, None, None][source]
pact_testgen.files.load_pact_file(path: str) pact_testgen.models.Pact[source]

Loads the file at the supplied path into a Pact model

pact_testgen.files.merge(target: str, src: str) Tuple[str, int][source]

Merge “src” code into “target”.

Only add functions from src that aren’t already present in target.

Returns the merged file as a string, and the number of functions that were added.

pact_testgen.files.merge_is_available()[source]
pact_testgen.files.write_provider_state_file(provider_state_file: str, path: pathlib.Path, merge_file=False) pact_testgen.files.ProviderStateFileOutcome[source]
pact_testgen.files.write_test_file(testfile: str, path: pathlib.Path)[source]

pact_testgen.generator module

pact_testgen.generator.generate_tests(test_file: pact_testgen.models.TestFile, dialect: pact_testgen.dialects.base.BaseDialect) Tuple[str, str][source]

pact_testgen.models module

class pact_testgen.models.Headers(**extra_data: Any)[source]

Bases: pydantic.main.BaseModel

class Config[source]

Bases: object

extra = 'allow'
class pact_testgen.models.Interaction(*, description: str, providerStates: List[pact_testgen.models.ProviderState] = None, request: pact_testgen.models.PactRequest, response: pact_testgen.models.PactResponse)[source]

Bases: pydantic.main.BaseModel

description: str
providerStates: Optional[List[pact_testgen.models.ProviderState]]
request: pact_testgen.models.PactRequest
response: pact_testgen.models.PactResponse
class pact_testgen.models.Matcher(*, match: typing_extensions.Literal[equality, regex, type], max: int = None, min: int = None, regex: str = None)[source]

Bases: pydantic.main.BaseModel

match: typing_extensions.Literal[equality, regex, type]
max: Optional[int]
min: Optional[int]
regex: Optional[str]
class pact_testgen.models.MatchingBodyRule(*, matchers: List[pact_testgen.models.Matcher])[source]

Bases: pydantic.main.BaseModel

matchers: List[pact_testgen.models.Matcher]
class pact_testgen.models.MatchingRule(*, body: Dict[str, pact_testgen.models.MatchingBodyRule])[source]

Bases: pydantic.main.BaseModel

body: Dict[str, pact_testgen.models.MatchingBodyRule]
class pact_testgen.models.Metadata(*, pactSpecification: pact_testgen.models.PactSpecification = None)[source]

Bases: pydantic.main.BaseModel

pactSpecification: Optional[pact_testgen.models.PactSpecification]
class pact_testgen.models.Method(value)[source]

Bases: enum.Enum

An enumeration.

CONNECT = 'CONNECT'
DELETE = 'DELETE'
GET = 'GET'
HEAD = 'HEAD'
OPTIONS = 'OPTIONS'
PATCH = 'PATCH'
POST = 'POST'
PUT = 'PUT'
TRACE = 'TRACE'
class pact_testgen.models.Pact(*, consumer: pact_testgen.models.Pacticipant, interactions: List[pact_testgen.models.Interaction], metadata: pact_testgen.models.Metadata = None, provider: pact_testgen.models.Pacticipant)[source]

Bases: pydantic.main.BaseModel

consumer: pact_testgen.models.Pacticipant
interactions: List[pact_testgen.models.Interaction]
metadata: Optional[pact_testgen.models.Metadata]
provider: pact_testgen.models.Pacticipant
property version
class pact_testgen.models.PactRequest(*, body: Any = None, headers: pact_testgen.models.Headers = None, method: pact_testgen.models.Method, path: str, query: Dict[str, List[str]] = None)[source]

Bases: pydantic.main.BaseModel

body: Optional[Any]
headers: Optional[pact_testgen.models.Headers]
method: pact_testgen.models.Method
path: str
query: Optional[Dict[str, List[str]]]
classmethod validate_method(v)[source]
class pact_testgen.models.PactResponse(*, body: Any = None, headers: pact_testgen.models.Headers = None, matchingRules: pact_testgen.models.MatchingRule = None, status: pydantic.types.ConstrainedIntValue)[source]

Bases: pydantic.main.BaseModel

body: Optional[Any]
headers: Optional[pact_testgen.models.Headers]
matchingRules: Optional[pact_testgen.models.MatchingRule]
status: pydantic.types.ConstrainedIntValue
class pact_testgen.models.PactSpecification(*, version: str)[source]

Bases: pydantic.main.BaseModel

version: str
class pact_testgen.models.Pacticipant(*, name: str)[source]

Bases: pydantic.main.BaseModel

name: str
class pact_testgen.models.ProviderState(*, name: str, params: Dict = None)[source]

Bases: pydantic.main.BaseModel

full_name()[source]
name: str
params: Optional[Dict]
class pact_testgen.models.RequestArgs(*, method: str, path: str, data: Dict = None, query_params: Dict = None, content_type: str = 'application/json')[source]

Bases: pydantic.main.BaseModel

content_type: str
data: Optional[Dict]
method: str
path: str
query_params: Optional[Dict]
class pact_testgen.models.TestCase(*, provider_state_names: List[str], test_methods: List[pact_testgen.models.TestMethodArgs])[source]

Bases: pydantic.main.BaseModel

property combined_provider_state_names: str
provider_state_names: List[str]
property requires_provider_state: bool
test_methods: List[pact_testgen.models.TestMethodArgs]
class pact_testgen.models.TestFile(*, pact_version: str, base_class: str, consumer: pact_testgen.models.Pacticipant, import_path: str, provider: pact_testgen.models.Pacticipant, test_cases: List[pact_testgen.models.TestCase])[source]

Bases: pydantic.main.BaseModel

base_class: str
consumer: pact_testgen.models.Pacticipant
import_path: str
pact_version: str
provider: pact_testgen.models.Pacticipant
test_cases: List[pact_testgen.models.TestCase]
class pact_testgen.models.TestMethodArgs(*, description: str, expectation: str, request: pact_testgen.models.RequestArgs)[source]

Bases: pydantic.main.BaseModel

description: str
expectation: str
request: pact_testgen.models.RequestArgs

pact_testgen.pact_testgen module

Main module.

pact_testgen.pact_testgen.convert_to_test_cases(pact: pact_testgen.models.Pact, base_class: str) pact_testgen.models.TestFile[source]

Given a Pact file, create TestFile representations according to the following:

  • One test case per provider state name.

  • Each interaction for a given provider state name becomes a test method.

pact_testgen.pact_testgen.run(base_class: str, output_dir: pathlib.Path, pact_file: Optional[str] = None, broker_config: Optional[pact_testgen.broker.BrokerConfig] = None, provider_name: Optional[str] = None, consumer_name: Optional[str] = None, consumer_version: Optional[str] = None, test_file_name='test_pact.py', provider_state_file_name='provider_states.py', line_length=88, quiet=False, merge_ps_file=False)[source]

Loads the pact file, and writes the generated output files to output_dir

pact_testgen.public module

Public API.

Tokens defined here are imported in generated test code. Any change to the APIs defined here are breaking changes!

class pact_testgen.public.Response(text: str, headers: typing.Dict[str, typing.Any] = <factory>, status_code: int = 200)[source]

Bases: object

Requests-like Response class.

classmethod from_django_response(response)[source]
headers: Dict[str, Any]
json()[source]
status_code: int = 200
text: str
class pact_testgen.public.UnittestResult[source]

Bases: pactman.verifier.result.Result

assert_success()[source]
end()[source]
fail(message, path=None)[source]
warn(message)[source]
pact_testgen.public.verify_response(consumer_name: str, provider_name: str, pact_response: Dict[str, Any], actual_response: pact_testgen.public.Response, version: str = '3.0.0') pact_testgen.public.UnittestResult[source]

Returns whether the actual response received from the API matches the contract specified in the supplied pact

pact_testgen.utils module

pact_testgen.utils.jsondump(data) str[source]
pact_testgen.utils.to_camel_case(value: str) str[source]
pact_testgen.utils.to_query_string(data: Dict[str, List[Any]]) str[source]
pact_testgen.utils.to_snake_case(value: str) str[source]

pact_testgen.verify module

pact_testgen.verify.create_pactman_pact(consumer_name: str, provider_name: str, version: str) pactman.mock.pact.Pact[source]

Creates a real Pactman Pact given the consumer and provider names

Module contents

Top-level package for Pact Test Generator.