Skip to main content

Collection of helper utilities for testing.

Project description

cykooz.testing is collection of helper utilities for testing.

Utilities

Dict

A dict object that can be compared with other dict object without regard to keys that did not presents in the Dict instance.

>>> from cykooz.testing import Dict
>>> expected = Dict(a=1, b='foo')
>>> d1 = {'a': 1, 'b': 'foo', 'c': True}
>>> d1 == expected
True
>>> d1 != expected
False
>>> d2 = {'a': 1, 'c': True}
>>> d2 == expected
False
>>> d1 != d2
True
>>> Dict({'a': 1})
Dict({'a': 1})

Short alias:

>>> from cykooz.testing import D
>>> {'a': 1, 'b': 'foo'} == D({'a': 1})
True

List

A list object that can be compared with other list object without regard to extra items contains in the other list object.

>>> from cykooz.testing import List
>>> expected = List([1, 'foo'])
>>> l1 = [1, 'foo', True]
>>> l1 == expected
True
>>> l1 != expected
False
>>> l2 = [1, True]
>>> l2 == expected
False
>>> l2 != expected
True
>>> expected == [1]
False
>>> [{'a': 1}, {'b': 2}] == List([Dict(), Dict()])
True

Also supported comparing without regard of ordering of items.

>>> expected = List([True, 1], ignore_order=True)
>>> l1 = [1, 'foo', True]
>>> l1 == expected
True
>>> l1 != expected
False
>>> [{'a': 1}, {'b': 2}] == List([Dict(), Dict()], ignore_order=True)
Traceback (most recent call last):
...
TypeError: unhashable type: 'Dict'

Short alias:

>>> from cykooz.testing import L
>>> [1, 'foo', True] == L([1, 'foo'])
True

AnyValue

Instance of this class is equal to any other values.

>>> from cykooz.testing import AnyValue
>>> v = AnyValue()
>>> v == 1
True
>>> 1 == v
True
>>> v != 1
False
>>> v == {'a': 1, 'b': 'foo'}
True
>>> v == [1, 2, 3, 'b']
True
>>> v == AnyValue()
True
>>> v
<any value>
>>> {v: 1}
Traceback (most recent call last):
...
TypeError: unhashable type: 'AnyValue'
>>> [v, v, v] == [1, 2, 'foo']
True
>>> [v, v, 1] == [1, 2, 'foo']
False
>>> [v, v] == [1, 2, 'foo']
False
>>> {'a': v, 'b': 2} == {'a': 1, 'b': 2}
True

Short alias:

>>> from cykooz.testing import ANY
>>> 1 == ANY
True

RegExpString

Instance of this class is equal to any other values if it is matched to give regexp pattern.

>>> from cykooz.testing import RegExpString
>>> v = RegExpString('first.*')
>>> v == 1
False
>>> 1 == v
False
>>> v != 1
True
>>> v == 'first class'
True
>>> 'first class' == v
True
>>> v != 'first class'
False
>>> v
<RegExpString: first.*>
>>> {v: 1}
Traceback (most recent call last):
...
TypeError: unhashable type: 'RegExpString'
>>> [v, v, v] == [1, 2, 'first class']
False
>>> [v, v, v] == ['first class', 'first bus', 'first time']
True

Short alias:

>>> from cykooz.testing import R
>>> 'first class' == R('first.*')
True

Url

A url object that can be compared with other url objects without regard to the vagaries of encoding, escaping, and ordering of parameters in query strings.

>>> from cykooz.testing import Url
>>> url1 = Url('https://domain.com/container?limit=6&offset=0')
>>> url2 = Url('https://domain.com/container?offset=0&limit=6')
>>> url1 == url2
True
>>> url2 = Url('https://domain.com/container?limit=6')
>>> url1 == url2
False
>>> url1 == 'https://domain.com/container?offset=0&limit=6'
True
>>> 'https://domain.com/container?offset=0&limit=6' == url1
True
>>> {'key': 'https://domain.com/container?offset=0&limit=6'} == {'key': url1}
True

Json

An instance of this class will be equal to any ‘bytes’ or ‘str’ value if object decoded by JSON-decoder from this value is equal to the first argument of this class.

>>> from cykooz.testing import Json
>>> v = Json({'foo': 1, 'bar': 'hello'})
>>> other = '{"bar": "hello", "foo": 1}'
>>> v == other
True
>>> other == v
True
>>> other != v
False
>>> v == 1
False
>>> 1 == v
False
>>> v != 1
True
>>> v == 'not json'
False
>>> 'not json' == v
False
>>> v != 'not json'
True
>>> v
<Json: {'foo': 1, 'bar': 'hello'}>
>>> {v: 1}
Traceback (most recent call last):
...
TypeError: unhashable type: 'Json'
>>> [v, v, v] == [other, 2, 'first class']
False
>>> [v, v, v] == [other, other, other]
True
>>> '"json str"' == Json('json str')
True

Complex example

>>> from cykooz.testing import D, L, R, J, Url, ANY
>>> some_value = {
...     'created': '2020-04-14T12:34:00.002000+00:00',
...     'is_active': True,
...     'items': [
...         {'key': 'a', 'value': 1},
...         {'key': 'b', 'value': 2},
...         {'key': 'c', 'value': 3},
...     ],
...     'source': 'https://domain.com/item?p=0&t=total',
...     'response': '{"status": 200, "body": "OK"}',
...     'size': 1024,
... }
>>> some_value == D({
...     'created': R('^2020-04.*'),
...     'is_active': True,
...     'items': L([
...         {'key': 'a', 'value': 1},
...         D({'value': ANY}),
...     ]),
...     'source': Url('https://domain.com/item?t=total&p=0'),
...     'response': J({'status': 200, 'body': ANY}),
... })
True

CHANGELOG

1.2 (2021-08-27)

Changes

  • Added argument ignore_order into List helper to comparing of lists without regard of ordering of items.

1.1.2 (2020-04-14)

Bug Fixes

  • Added new helper into __all__.

1.1 (2020-04-14)

Features

  • Added new helper Json.

1.0.3 (2020-03-20)

Bug Fixes

  • Fixed namespace declaration.

1.0.1 (2019-07-12)

Bug Fixes

  • Fixed “Development Status” of package.

1.0 (2019-07-12)

Features

  • Initial release.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

cykooz.testing-1.2.tar.gz (10.8 kB view details)

Uploaded Source

Built Distribution

cykooz.testing-1.2-py2.py3-none-any.whl (6.3 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file cykooz.testing-1.2.tar.gz.

File metadata

  • Download URL: cykooz.testing-1.2.tar.gz
  • Upload date:
  • Size: 10.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.7.1 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.2 CPython/3.9.5

File hashes

Hashes for cykooz.testing-1.2.tar.gz
Algorithm Hash digest
SHA256 30ca4afc49cea29573ea4a18eab8a2ab11b4f5bb3193843cd6cf059cc16cb68f
MD5 cbed3a9234d979bcbef40fcacba5658b
BLAKE2b-256 ea237c4780f6f6e360d8fea57542252bdafeaee9a4edbfabcd1eded93ea37b5f

See more details on using hashes here.

File details

Details for the file cykooz.testing-1.2-py2.py3-none-any.whl.

File metadata

  • Download URL: cykooz.testing-1.2-py2.py3-none-any.whl
  • Upload date:
  • Size: 6.3 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.7.1 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.2 CPython/3.9.5

File hashes

Hashes for cykooz.testing-1.2-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 58e56a74a411e5468cff5b11eb0cc7b6fef6c380af3f7f062f89fd05f47ebc89
MD5 bcae81d09c0e8d1f76238ee37f58d182
BLAKE2b-256 9a3e45e41dafbd5e12738b7e2b1879ad8012cdb2e4e067583f794c806fdbc1f3

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page