From 9735dab7a7543f431d557f6c4ac75fcd42a071c4 Mon Sep 17 00:00:00 2001 From: Igor Gentil Date: Mon, 11 Sep 2023 19:27:21 +1000 Subject: [PATCH 1/4] chore: update Python dependency versions --- unicorn_contracts/poetry.lock | 39 ++++------- unicorn_contracts/pyproject.toml | 6 +- unicorn_properties/poetry.lock | 41 ++++-------- unicorn_properties/pyproject.toml | 6 +- unicorn_web/poetry.lock | 106 ++++-------------------------- unicorn_web/pyproject.toml | 6 +- 6 files changed, 44 insertions(+), 160 deletions(-) diff --git a/unicorn_contracts/poetry.lock b/unicorn_contracts/poetry.lock index 4d84f14..984c94e 100644 --- a/unicorn_contracts/poetry.lock +++ b/unicorn_contracts/poetry.lock @@ -13,13 +13,13 @@ files = [ [[package]] name = "aws-lambda-powertools" -version = "2.23.1" +version = "2.24.0" description = "Powertools for AWS Lambda (Python) is a developer toolkit to implement Serverless best practices and increase developer velocity." optional = false python-versions = ">=3.7.4,<4.0.0" files = [ - {file = "aws_lambda_powertools-2.23.1-py3-none-any.whl", hash = "sha256:daa42b1060bc42bf473c984257345bef17e5bded18ec1d6680ce97ca25c1dfbb"}, - {file = "aws_lambda_powertools-2.23.1.tar.gz", hash = "sha256:1dc08eddd04520cb400085c13db162cf84020d4803192d88c0d2742d77ce3758"}, + {file = "aws_lambda_powertools-2.24.0-py3-none-any.whl", hash = "sha256:68da8646b6d2c661615e99841200dd6fa62235c99a07b0e8b04c1ca9cb1de714"}, + {file = "aws_lambda_powertools-2.24.0.tar.gz", hash = "sha256:365daef655d10346ff6c601676feef8399fed127686be3eef2b6282dd97fe88e"}, ] [package.dependencies] @@ -51,17 +51,17 @@ wrapt = "*" [[package]] name = "boto3" -version = "1.28.43" +version = "1.28.44" description = "The AWS SDK for Python" optional = false python-versions = ">= 3.7" files = [ - {file = "boto3-1.28.43-py3-none-any.whl", hash = "sha256:4cd3e96900fb50bddc9f48007176c80d15396d08c5248b25a41220f3570e014f"}, - {file = "boto3-1.28.43.tar.gz", hash = "sha256:c0211a3e830432851c73fa1e136b14dbb6d02b5c9a5e1272c557e63538620b88"}, + {file = "boto3-1.28.44-py3-none-any.whl", hash = "sha256:c53c92dfe22489ba31e918c2e7b59ff43e2e778bd3d3559e62351a739382bb5c"}, + {file = "boto3-1.28.44.tar.gz", hash = "sha256:eea3b07e0f28c9f92bccab972af24a3b0dd951c69d93da75227b8ecd3e18f6c4"}, ] [package.dependencies] -botocore = ">=1.31.43,<1.32.0" +botocore = ">=1.31.44,<1.32.0" jmespath = ">=0.7.1,<2.0.0" s3transfer = ">=0.6.0,<0.7.0" @@ -70,13 +70,13 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"] [[package]] name = "botocore" -version = "1.31.43" +version = "1.31.44" description = "Low-level, data-driven core of boto 3." optional = false python-versions = ">= 3.7" files = [ - {file = "botocore-1.31.43-py3-none-any.whl", hash = "sha256:d8b0c41c8c75d82f15fee57f7d54a852a99810faacbeb9d6f3f022558a2c330e"}, - {file = "botocore-1.31.43.tar.gz", hash = "sha256:b4a3a1fcf75011351e2b0d3eb991f51f8d44a375d3e065f907dac67db232fc97"}, + {file = "botocore-1.31.44-py3-none-any.whl", hash = "sha256:83d61c1ca781e6ede19fcc4d5dd73004eee3825a2b220f0d7727e32069209d98"}, + {file = "botocore-1.31.44.tar.gz", hash = "sha256:84f90919fecb4a4f417fd10145c8a87ff2c4b14d6381cd34d9babf02110b3315"}, ] [package.dependencies] @@ -547,23 +547,6 @@ pluggy = ">=0.12,<2.0" [package.extras] testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"] -[[package]] -name = "pytest-mock" -version = "3.11.1" -description = "Thin-wrapper around the mock package for easier use with pytest" -optional = false -python-versions = ">=3.7" -files = [ - {file = "pytest-mock-3.11.1.tar.gz", hash = "sha256:7f6b125602ac6d743e523ae0bfa71e1a697a2f5534064528c6ff84c2f7c2fc7f"}, - {file = "pytest_mock-3.11.1-py3-none-any.whl", hash = "sha256:21c279fff83d70763b05f8874cc9cfb3fcacd6d354247a976f9529d19f9acf39"}, -] - -[package.dependencies] -pytest = ">=5.0" - -[package.extras] -dev = ["pre-commit", "pytest-asyncio", "tox"] - [[package]] name = "python-dateutil" version = "2.8.2" @@ -874,4 +857,4 @@ testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "p [metadata] lock-version = "2.0" python-versions = "^3.11" -content-hash = "d98f5abd0cb97c5ab987c900089d8161e28d85067d8e3f04ba17adb06b14d871" +content-hash = "f8c69342f40c94c598c2daddf757266f294161628cb65e66646faee3acfc6be1" diff --git a/unicorn_contracts/pyproject.toml b/unicorn_contracts/pyproject.toml index d618de8..6d65037 100644 --- a/unicorn_contracts/pyproject.toml +++ b/unicorn_contracts/pyproject.toml @@ -9,13 +9,13 @@ packages = [ [tool.poetry.dependencies] python = "^3.11" -boto3 = "^1.28.32" -aws-lambda-powertools = {extras = ["aws-sdk"], version = "^2.23.0"} +boto3 = "^1.28" +aws-lambda-powertools = { extras = ["aws-sdk"], version = "^2.23.0" } aws-xray-sdk = "^2.12.0" [tool.poetry.group.dev.dependencies] pytest = "^7.4.0" -pytest-mock = "^3.11.1" +# pytest-mock = "^3.11.1" requests = "^2.31.0" moto = "^4.1.13" importlib-metadata = "^6.8.0" diff --git a/unicorn_properties/poetry.lock b/unicorn_properties/poetry.lock index e6b3c98..984c94e 100644 --- a/unicorn_properties/poetry.lock +++ b/unicorn_properties/poetry.lock @@ -13,17 +13,17 @@ files = [ [[package]] name = "aws-lambda-powertools" -version = "2.23.1" +version = "2.24.0" description = "Powertools for AWS Lambda (Python) is a developer toolkit to implement Serverless best practices and increase developer velocity." optional = false python-versions = ">=3.7.4,<4.0.0" files = [ - {file = "aws_lambda_powertools-2.23.1-py3-none-any.whl", hash = "sha256:daa42b1060bc42bf473c984257345bef17e5bded18ec1d6680ce97ca25c1dfbb"}, - {file = "aws_lambda_powertools-2.23.1.tar.gz", hash = "sha256:1dc08eddd04520cb400085c13db162cf84020d4803192d88c0d2742d77ce3758"}, + {file = "aws_lambda_powertools-2.24.0-py3-none-any.whl", hash = "sha256:68da8646b6d2c661615e99841200dd6fa62235c99a07b0e8b04c1ca9cb1de714"}, + {file = "aws_lambda_powertools-2.24.0.tar.gz", hash = "sha256:365daef655d10346ff6c601676feef8399fed127686be3eef2b6282dd97fe88e"}, ] [package.dependencies] -aws-xray-sdk = {version = ">=2.8.0,<3.0.0", optional = true, markers = "extra == \"tracer\" or extra == \"all\""} +boto3 = {version = ">=1.20.32,<2.0.0", optional = true, markers = "extra == \"aws-sdk\""} typing-extensions = ">=4.6.2,<5.0.0" [package.extras] @@ -51,17 +51,17 @@ wrapt = "*" [[package]] name = "boto3" -version = "1.28.43" +version = "1.28.44" description = "The AWS SDK for Python" optional = false python-versions = ">= 3.7" files = [ - {file = "boto3-1.28.43-py3-none-any.whl", hash = "sha256:4cd3e96900fb50bddc9f48007176c80d15396d08c5248b25a41220f3570e014f"}, - {file = "boto3-1.28.43.tar.gz", hash = "sha256:c0211a3e830432851c73fa1e136b14dbb6d02b5c9a5e1272c557e63538620b88"}, + {file = "boto3-1.28.44-py3-none-any.whl", hash = "sha256:c53c92dfe22489ba31e918c2e7b59ff43e2e778bd3d3559e62351a739382bb5c"}, + {file = "boto3-1.28.44.tar.gz", hash = "sha256:eea3b07e0f28c9f92bccab972af24a3b0dd951c69d93da75227b8ecd3e18f6c4"}, ] [package.dependencies] -botocore = ">=1.31.43,<1.32.0" +botocore = ">=1.31.44,<1.32.0" jmespath = ">=0.7.1,<2.0.0" s3transfer = ">=0.6.0,<0.7.0" @@ -70,13 +70,13 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"] [[package]] name = "botocore" -version = "1.31.43" +version = "1.31.44" description = "Low-level, data-driven core of boto 3." optional = false python-versions = ">= 3.7" files = [ - {file = "botocore-1.31.43-py3-none-any.whl", hash = "sha256:d8b0c41c8c75d82f15fee57f7d54a852a99810faacbeb9d6f3f022558a2c330e"}, - {file = "botocore-1.31.43.tar.gz", hash = "sha256:b4a3a1fcf75011351e2b0d3eb991f51f8d44a375d3e065f907dac67db232fc97"}, + {file = "botocore-1.31.44-py3-none-any.whl", hash = "sha256:83d61c1ca781e6ede19fcc4d5dd73004eee3825a2b220f0d7727e32069209d98"}, + {file = "botocore-1.31.44.tar.gz", hash = "sha256:84f90919fecb4a4f417fd10145c8a87ff2c4b14d6381cd34d9babf02110b3315"}, ] [package.dependencies] @@ -547,23 +547,6 @@ pluggy = ">=0.12,<2.0" [package.extras] testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"] -[[package]] -name = "pytest-mock" -version = "3.11.1" -description = "Thin-wrapper around the mock package for easier use with pytest" -optional = false -python-versions = ">=3.7" -files = [ - {file = "pytest-mock-3.11.1.tar.gz", hash = "sha256:7f6b125602ac6d743e523ae0bfa71e1a697a2f5534064528c6ff84c2f7c2fc7f"}, - {file = "pytest_mock-3.11.1-py3-none-any.whl", hash = "sha256:21c279fff83d70763b05f8874cc9cfb3fcacd6d354247a976f9529d19f9acf39"}, -] - -[package.dependencies] -pytest = ">=5.0" - -[package.extras] -dev = ["pre-commit", "pytest-asyncio", "tox"] - [[package]] name = "python-dateutil" version = "2.8.2" @@ -874,4 +857,4 @@ testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "p [metadata] lock-version = "2.0" python-versions = "^3.11" -content-hash = "345f217fecab7cc0c0bf492f2a3648386663ca363636a462579dba5c1fa55ca6" +content-hash = "f8c69342f40c94c598c2daddf757266f294161628cb65e66646faee3acfc6be1" diff --git a/unicorn_properties/pyproject.toml b/unicorn_properties/pyproject.toml index d35e76f..a698970 100644 --- a/unicorn_properties/pyproject.toml +++ b/unicorn_properties/pyproject.toml @@ -10,13 +10,13 @@ packages = [ [tool.poetry.dependencies] python = "^3.11" -boto3 = "^1.28.32" -aws-lambda-powertools = {extras = ["tracer"], version = "^2.23.0"} +boto3 = "^1.28" +aws-lambda-powertools = { extras = ["aws-sdk"], version = "^2.23.0" } aws-xray-sdk = "^2.12.0" [tool.poetry.group.dev.dependencies] pytest = "^7.4.0" -pytest-mock = "^3.11.1" +# pytest-mock = "^3.11.1" requests = "^2.31.0" moto = "^4.1.13" importlib-metadata = "^6.8.0" diff --git a/unicorn_web/poetry.lock b/unicorn_web/poetry.lock index f0b5dc0..0713cf8 100644 --- a/unicorn_web/poetry.lock +++ b/unicorn_web/poetry.lock @@ -13,17 +13,17 @@ files = [ [[package]] name = "aws-lambda-powertools" -version = "2.23.1" +version = "2.24.0" description = "Powertools for AWS Lambda (Python) is a developer toolkit to implement Serverless best practices and increase developer velocity." optional = false python-versions = ">=3.7.4,<4.0.0" files = [ - {file = "aws_lambda_powertools-2.23.1-py3-none-any.whl", hash = "sha256:daa42b1060bc42bf473c984257345bef17e5bded18ec1d6680ce97ca25c1dfbb"}, - {file = "aws_lambda_powertools-2.23.1.tar.gz", hash = "sha256:1dc08eddd04520cb400085c13db162cf84020d4803192d88c0d2742d77ce3758"}, + {file = "aws_lambda_powertools-2.24.0-py3-none-any.whl", hash = "sha256:68da8646b6d2c661615e99841200dd6fa62235c99a07b0e8b04c1ca9cb1de714"}, + {file = "aws_lambda_powertools-2.24.0.tar.gz", hash = "sha256:365daef655d10346ff6c601676feef8399fed127686be3eef2b6282dd97fe88e"}, ] [package.dependencies] -aws-xray-sdk = {version = ">=2.8.0,<3.0.0", optional = true, markers = "extra == \"tracer\" or extra == \"all\""} +boto3 = {version = ">=1.20.32,<2.0.0", optional = true, markers = "extra == \"aws-sdk\""} typing-extensions = ">=4.6.2,<5.0.0" [package.extras] @@ -51,17 +51,17 @@ wrapt = "*" [[package]] name = "boto3" -version = "1.28.43" +version = "1.28.44" description = "The AWS SDK for Python" optional = false python-versions = ">= 3.7" files = [ - {file = "boto3-1.28.43-py3-none-any.whl", hash = "sha256:4cd3e96900fb50bddc9f48007176c80d15396d08c5248b25a41220f3570e014f"}, - {file = "boto3-1.28.43.tar.gz", hash = "sha256:c0211a3e830432851c73fa1e136b14dbb6d02b5c9a5e1272c557e63538620b88"}, + {file = "boto3-1.28.44-py3-none-any.whl", hash = "sha256:c53c92dfe22489ba31e918c2e7b59ff43e2e778bd3d3559e62351a739382bb5c"}, + {file = "boto3-1.28.44.tar.gz", hash = "sha256:eea3b07e0f28c9f92bccab972af24a3b0dd951c69d93da75227b8ecd3e18f6c4"}, ] [package.dependencies] -botocore = ">=1.31.43,<1.32.0" +botocore = ">=1.31.44,<1.32.0" jmespath = ">=0.7.1,<2.0.0" s3transfer = ">=0.6.0,<0.7.0" @@ -70,13 +70,13 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"] [[package]] name = "botocore" -version = "1.31.43" +version = "1.31.44" description = "Low-level, data-driven core of boto 3." optional = false python-versions = ">= 3.7" files = [ - {file = "botocore-1.31.43-py3-none-any.whl", hash = "sha256:d8b0c41c8c75d82f15fee57f7d54a852a99810faacbeb9d6f3f022558a2c330e"}, - {file = "botocore-1.31.43.tar.gz", hash = "sha256:b4a3a1fcf75011351e2b0d3eb991f51f8d44a375d3e065f907dac67db232fc97"}, + {file = "botocore-1.31.44-py3-none-any.whl", hash = "sha256:83d61c1ca781e6ede19fcc4d5dd73004eee3825a2b220f0d7727e32069209d98"}, + {file = "botocore-1.31.44.tar.gz", hash = "sha256:84f90919fecb4a4f417fd10145c8a87ff2c4b14d6381cd34d9babf02110b3315"}, ] [package.dependencies] @@ -269,70 +269,6 @@ files = [ {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, ] -[[package]] -name = "coverage" -version = "7.3.1" -description = "Code coverage measurement for Python" -optional = false -python-versions = ">=3.8" -files = [ - {file = "coverage-7.3.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:cd0f7429ecfd1ff597389907045ff209c8fdb5b013d38cfa7c60728cb484b6e3"}, - {file = "coverage-7.3.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:966f10df9b2b2115da87f50f6a248e313c72a668248be1b9060ce935c871f276"}, - {file = "coverage-7.3.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0575c37e207bb9b98b6cf72fdaaa18ac909fb3d153083400c2d48e2e6d28bd8e"}, - {file = "coverage-7.3.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:245c5a99254e83875c7fed8b8b2536f040997a9b76ac4c1da5bff398c06e860f"}, - {file = "coverage-7.3.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4c96dd7798d83b960afc6c1feb9e5af537fc4908852ef025600374ff1a017392"}, - {file = "coverage-7.3.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:de30c1aa80f30af0f6b2058a91505ea6e36d6535d437520067f525f7df123887"}, - {file = "coverage-7.3.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:50dd1e2dd13dbbd856ffef69196781edff26c800a74f070d3b3e3389cab2600d"}, - {file = "coverage-7.3.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b9c0c19f70d30219113b18fe07e372b244fb2a773d4afde29d5a2f7930765136"}, - {file = "coverage-7.3.1-cp310-cp310-win32.whl", hash = "sha256:770f143980cc16eb601ccfd571846e89a5fe4c03b4193f2e485268f224ab602f"}, - {file = "coverage-7.3.1-cp310-cp310-win_amd64.whl", hash = "sha256:cdd088c00c39a27cfa5329349cc763a48761fdc785879220d54eb785c8a38520"}, - {file = "coverage-7.3.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:74bb470399dc1989b535cb41f5ca7ab2af561e40def22d7e188e0a445e7639e3"}, - {file = "coverage-7.3.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:025ded371f1ca280c035d91b43252adbb04d2aea4c7105252d3cbc227f03b375"}, - {file = "coverage-7.3.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a6191b3a6ad3e09b6cfd75b45c6aeeffe7e3b0ad46b268345d159b8df8d835f9"}, - {file = "coverage-7.3.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7eb0b188f30e41ddd659a529e385470aa6782f3b412f860ce22b2491c89b8593"}, - {file = "coverage-7.3.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:75c8f0df9dfd8ff745bccff75867d63ef336e57cc22b2908ee725cc552689ec8"}, - {file = "coverage-7.3.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:7eb3cd48d54b9bd0e73026dedce44773214064be93611deab0b6a43158c3d5a0"}, - {file = "coverage-7.3.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:ac3c5b7e75acac31e490b7851595212ed951889918d398b7afa12736c85e13ce"}, - {file = "coverage-7.3.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:5b4ee7080878077af0afa7238df1b967f00dc10763f6e1b66f5cced4abebb0a3"}, - {file = "coverage-7.3.1-cp311-cp311-win32.whl", hash = "sha256:229c0dd2ccf956bf5aeede7e3131ca48b65beacde2029f0361b54bf93d36f45a"}, - {file = "coverage-7.3.1-cp311-cp311-win_amd64.whl", hash = "sha256:c6f55d38818ca9596dc9019eae19a47410d5322408140d9a0076001a3dcb938c"}, - {file = "coverage-7.3.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:5289490dd1c3bb86de4730a92261ae66ea8d44b79ed3cc26464f4c2cde581fbc"}, - {file = "coverage-7.3.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ca833941ec701fda15414be400c3259479bfde7ae6d806b69e63b3dc423b1832"}, - {file = "coverage-7.3.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cd694e19c031733e446c8024dedd12a00cda87e1c10bd7b8539a87963685e969"}, - {file = "coverage-7.3.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:aab8e9464c00da5cb9c536150b7fbcd8850d376d1151741dd0d16dfe1ba4fd26"}, - {file = "coverage-7.3.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:87d38444efffd5b056fcc026c1e8d862191881143c3aa80bb11fcf9dca9ae204"}, - {file = "coverage-7.3.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:8a07b692129b8a14ad7a37941a3029c291254feb7a4237f245cfae2de78de037"}, - {file = "coverage-7.3.1-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:2829c65c8faaf55b868ed7af3c7477b76b1c6ebeee99a28f59a2cb5907a45760"}, - {file = "coverage-7.3.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:1f111a7d85658ea52ffad7084088277135ec5f368457275fc57f11cebb15607f"}, - {file = "coverage-7.3.1-cp312-cp312-win32.whl", hash = "sha256:c397c70cd20f6df7d2a52283857af622d5f23300c4ca8e5bd8c7a543825baa5a"}, - {file = "coverage-7.3.1-cp312-cp312-win_amd64.whl", hash = "sha256:5ae4c6da8b3d123500f9525b50bf0168023313963e0e2e814badf9000dd6ef92"}, - {file = "coverage-7.3.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ca70466ca3a17460e8fc9cea7123c8cbef5ada4be3140a1ef8f7b63f2f37108f"}, - {file = "coverage-7.3.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:f2781fd3cabc28278dc982a352f50c81c09a1a500cc2086dc4249853ea96b981"}, - {file = "coverage-7.3.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6407424621f40205bbe6325686417e5e552f6b2dba3535dd1f90afc88a61d465"}, - {file = "coverage-7.3.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:04312b036580ec505f2b77cbbdfb15137d5efdfade09156961f5277149f5e344"}, - {file = "coverage-7.3.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ac9ad38204887349853d7c313f53a7b1c210ce138c73859e925bc4e5d8fc18e7"}, - {file = "coverage-7.3.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:53669b79f3d599da95a0afbef039ac0fadbb236532feb042c534fbb81b1a4e40"}, - {file = "coverage-7.3.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:614f1f98b84eb256e4f35e726bfe5ca82349f8dfa576faabf8a49ca09e630086"}, - {file = "coverage-7.3.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:f1a317fdf5c122ad642db8a97964733ab7c3cf6009e1a8ae8821089993f175ff"}, - {file = "coverage-7.3.1-cp38-cp38-win32.whl", hash = "sha256:defbbb51121189722420a208957e26e49809feafca6afeef325df66c39c4fdb3"}, - {file = "coverage-7.3.1-cp38-cp38-win_amd64.whl", hash = "sha256:f4f456590eefb6e1b3c9ea6328c1e9fa0f1006e7481179d749b3376fc793478e"}, - {file = "coverage-7.3.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f12d8b11a54f32688b165fd1a788c408f927b0960984b899be7e4c190ae758f1"}, - {file = "coverage-7.3.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f09195dda68d94a53123883de75bb97b0e35f5f6f9f3aa5bf6e496da718f0cb6"}, - {file = "coverage-7.3.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c6601a60318f9c3945be6ea0f2a80571f4299b6801716f8a6e4846892737ebe4"}, - {file = "coverage-7.3.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:07d156269718670d00a3b06db2288b48527fc5f36859425ff7cec07c6b367745"}, - {file = "coverage-7.3.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:636a8ac0b044cfeccae76a36f3b18264edcc810a76a49884b96dd744613ec0b7"}, - {file = "coverage-7.3.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:5d991e13ad2ed3aced177f524e4d670f304c8233edad3210e02c465351f785a0"}, - {file = "coverage-7.3.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:586649ada7cf139445da386ab6f8ef00e6172f11a939fc3b2b7e7c9082052fa0"}, - {file = "coverage-7.3.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:4aba512a15a3e1e4fdbfed2f5392ec221434a614cc68100ca99dcad7af29f3f8"}, - {file = "coverage-7.3.1-cp39-cp39-win32.whl", hash = "sha256:6bc6f3f4692d806831c136c5acad5ccedd0262aa44c087c46b7101c77e139140"}, - {file = "coverage-7.3.1-cp39-cp39-win_amd64.whl", hash = "sha256:553d7094cb27db58ea91332e8b5681bac107e7242c23f7629ab1316ee73c4981"}, - {file = "coverage-7.3.1-pp38.pp39.pp310-none-any.whl", hash = "sha256:220eb51f5fb38dfdb7e5d54284ca4d0cd70ddac047d750111a68ab1798945194"}, - {file = "coverage-7.3.1.tar.gz", hash = "sha256:6cb7fe1581deb67b782c153136541e20901aa312ceedaf1467dcb35255787952"}, -] - -[package.extras] -toml = ["tomli"] - [[package]] name = "crhelper" version = "2.0.11" @@ -622,24 +558,6 @@ pluggy = ">=0.12,<2.0" [package.extras] testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"] -[[package]] -name = "pytest-cov" -version = "4.1.0" -description = "Pytest plugin for measuring coverage." -optional = false -python-versions = ">=3.7" -files = [ - {file = "pytest-cov-4.1.0.tar.gz", hash = "sha256:3904b13dfbfec47f003b8e77fd5b589cd11904a21ddf1ab38a64f204d6a10ef6"}, - {file = "pytest_cov-4.1.0-py3-none-any.whl", hash = "sha256:6ba70b9e97e69fcc3fb45bfeab2d0a138fb65c4d0d6a41ef33983ad114be8c3a"}, -] - -[package.dependencies] -coverage = {version = ">=5.2.1", extras = ["toml"]} -pytest = ">=4.6" - -[package.extras] -testing = ["fields", "hunter", "process-tests", "pytest-xdist", "six", "virtualenv"] - [[package]] name = "python-dateutil" version = "2.8.2" @@ -950,4 +868,4 @@ testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "p [metadata] lock-version = "2.0" python-versions = "^3.11" -content-hash = "9e185582d06d620a83ded07aa755c7c7c8b268abff3ac879567f50aff7b0ec1f" +content-hash = "7906d3815c35a7d13ad02fcc3668a57afecb4bdf555dfa9ae78552391793ee3a" diff --git a/unicorn_web/pyproject.toml b/unicorn_web/pyproject.toml index 07003d2..f831f6d 100644 --- a/unicorn_web/pyproject.toml +++ b/unicorn_web/pyproject.toml @@ -10,18 +10,18 @@ packages = [ [tool.poetry.dependencies] python = "^3.11" -boto3 = "^1.28.32" -aws-lambda-powertools = {extras = ["tracer"], version = "^2.23.0"} +boto3 = "^1.28" +aws-lambda-powertools = { extras = ["aws-sdk"], version = "^2.23.0" } aws-xray-sdk = "^2.12.0" requests = "2.31.0" crhelper = "^2.0.11" [tool.poetry.group.dev.dependencies] pytest = "^7.4.0" -pytest-cov = "^4.1.0" requests = "^2.31.0" moto = "^4.1.13" importlib-metadata = "^6.8.0" +pyyaml = "^6.0.1" arnparse = "^0.0.2" [build-system] From 901ba92f46d32410ddf7ea29de6c424dc3188e1e Mon Sep 17 00:00:00 2001 From: Igor Gentil Date: Mon, 11 Sep 2023 19:28:22 +1000 Subject: [PATCH 2/4] chore: lint pyproject files, fix typo in description --- unicorn_contracts/pyproject.toml | 9 ++------- unicorn_properties/pyproject.toml | 5 +---- unicorn_web/pyproject.toml | 6 ++---- 3 files changed, 5 insertions(+), 15 deletions(-) diff --git a/unicorn_contracts/pyproject.toml b/unicorn_contracts/pyproject.toml index 6d65037..f999011 100644 --- a/unicorn_contracts/pyproject.toml +++ b/unicorn_contracts/pyproject.toml @@ -3,9 +3,7 @@ name = "contracts_service" version = "0.2.0" description = "Unicorn Properties Contact Service" authors = ["Amazon Web Services"] -packages = [ - { include = "contracts_service", from = "src" }, -] +packages = [{ include = "contracts_service", from = "src" }] [tool.poetry.dependencies] python = "^3.11" @@ -29,10 +27,7 @@ build-backend = "poetry.core.masonry.api" [tool.pytest.ini_options] minversion = "7.0" addopts = "-ra -vv -W ignore::UserWarning" -testpaths = [ - "./tests/unit", - "./tests/integration", -] +testpaths = ["tests/unit", "tests/integration"] [tool.ruff] line-length = 150 diff --git a/unicorn_properties/pyproject.toml b/unicorn_properties/pyproject.toml index a698970..c2348b6 100644 --- a/unicorn_properties/pyproject.toml +++ b/unicorn_properties/pyproject.toml @@ -30,10 +30,7 @@ build-backend = "poetry.core.masonry.api" [tool.pytest.ini_options] minversion = "7.0" addopts = "-ra -vv -W ignore::UserWarning" -testpaths = [ - "tests/unit", - "tests/integration", -] +testpaths = ["tests/unit", "tests/integration"] [tool.ruff] line-length = 150 diff --git a/unicorn_web/pyproject.toml b/unicorn_web/pyproject.toml index f831f6d..6066f86 100644 --- a/unicorn_web/pyproject.toml +++ b/unicorn_web/pyproject.toml @@ -1,7 +1,7 @@ [tool.poetry] name = "unicorn_web" version = "0.1.0" -description = "Unicorn Properties Web" +description = "Unicorn Properties Web Service" authors = ["Amazon Web Services"] packages = [ { include = "approvals_service", from = "src" }, @@ -31,9 +31,7 @@ build-backend = "poetry.core.masonry.api" [tool.pytest.ini_options] minversion = "7.0" addopts = "-ra -vv -W ignore::UserWarning" -testpaths = [ - "./tests/unit", -] +testpaths = ["tests/unit", "tests/integration"] [tool.ruff] line-length = 150 From b0f2c7a633b426607f34778393a8cd9c988c86fc Mon Sep 17 00:00:00 2001 From: Igor Gentil Date: Mon, 11 Sep 2023 19:28:44 +1000 Subject: [PATCH 3/4] chore: bump code version in pyproject to match v2 tag --- unicorn_properties/pyproject.toml | 2 +- unicorn_web/pyproject.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/unicorn_properties/pyproject.toml b/unicorn_properties/pyproject.toml index c2348b6..93c4733 100644 --- a/unicorn_properties/pyproject.toml +++ b/unicorn_properties/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "properties_service" -version = "0.1.0" +version = "0.2.0" description = "Unicorn Properties Property Service" authors = ["Amazon Web Services"] packages = [ diff --git a/unicorn_web/pyproject.toml b/unicorn_web/pyproject.toml index 6066f86..3b84396 100644 --- a/unicorn_web/pyproject.toml +++ b/unicorn_web/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "unicorn_web" -version = "0.1.0" +version = "0.2.0" description = "Unicorn Properties Web Service" authors = ["Amazon Web Services"] packages = [ From b70926671ca5d750afe3f21ed09c42288e3b3283 Mon Sep 17 00:00:00 2001 From: Igor Gentil Date: Mon, 11 Sep 2023 19:42:27 +1000 Subject: [PATCH 4/4] test: reorganised test events, refactored unit tests --- unicorn_properties/tests/unit/conftest.py | 16 ++++++++++++ .../contract_status_changed_draft.json | 0 .../ddb_stream_events}/sfn_check_exists.json | 0 .../ddb_stream_events}/sfn_wait_approval.json | 0 .../status_approved_waiting_for_approval.json | 0 .../status_approved_with_no_workflow.json | 0 .../eventbridge}/contract_status_changed.json | 0 ...tus_changed_event_contract_1_approved.json | 0 ...status_changed_event_contract_1_draft.json | 0 ...tus_changed_event_contract_2_approved.json | 0 ...status_changed_event_contract_2_draft.json | 0 ...ion_approval_requested_event_all_good.json | 0 ...ested_event_inappropriate_description.json | 0 ..._requested_event_inappropriate_images.json | 0 ...requested_event_non_existing_contract.json | 0 ...proval_requested_event_pause_workflow.json | 0 .../publication_approval_requested_event.json | 0 ...ublication_evaluation_completed_event.json | 0 ...put_event_property_approval_requested.json | 0 ..._integrity_validator_function_success.json | 0 .../lambda/contract_status_checker.json | 0 .../wait_for_contract_approval_function.json | 0 unicorn_properties/tests/unit/helper.py | 25 ++++++++++++------- .../tests/unit/lambda_context.py | 17 ------------- ...st_content_integrity_validator_function.py | 20 +++++++-------- .../test_contract_exists_checker_function.py | 15 +++++------ ...t_contract_status_changed_event_handler.py | 12 ++++----- .../test_properties_approval_sync_function.py | 14 +++++------ ...est_wait_for_contract_approval_function.py | 8 +++--- 29 files changed, 61 insertions(+), 66 deletions(-) rename unicorn_properties/tests/{events/dbb_stream_events => unit/events/ddb_stream_events}/contract_status_changed_draft.json (100%) rename unicorn_properties/tests/{events/dbb_stream_events => unit/events/ddb_stream_events}/sfn_check_exists.json (100%) rename unicorn_properties/tests/{events/dbb_stream_events => unit/events/ddb_stream_events}/sfn_wait_approval.json (100%) rename unicorn_properties/tests/{events/dbb_stream_events => unit/events/ddb_stream_events}/status_approved_waiting_for_approval.json (100%) rename unicorn_properties/tests/{events/dbb_stream_events => unit/events/ddb_stream_events}/status_approved_with_no_workflow.json (100%) rename unicorn_properties/tests/{events/lambda => unit/events/eventbridge}/contract_status_changed.json (100%) rename unicorn_properties/tests/{ => unit}/events/eventbridge/contract_status_changed_event_contract_1_approved.json (100%) rename unicorn_properties/tests/{ => unit}/events/eventbridge/contract_status_changed_event_contract_1_draft.json (100%) rename unicorn_properties/tests/{ => unit}/events/eventbridge/contract_status_changed_event_contract_2_approved.json (100%) rename unicorn_properties/tests/{ => unit}/events/eventbridge/contract_status_changed_event_contract_2_draft.json (100%) rename unicorn_properties/tests/{ => unit}/events/eventbridge/publicaction_approval_requested_event_all_good.json (100%) rename unicorn_properties/tests/{ => unit}/events/eventbridge/publicaction_approval_requested_event_inappropriate_description.json (100%) rename unicorn_properties/tests/{ => unit}/events/eventbridge/publicaction_approval_requested_event_inappropriate_images.json (100%) rename unicorn_properties/tests/{ => unit}/events/eventbridge/publicaction_approval_requested_event_non_existing_contract.json (100%) rename unicorn_properties/tests/{ => unit}/events/eventbridge/publicaction_approval_requested_event_pause_workflow.json (100%) rename unicorn_properties/tests/{ => unit}/events/eventbridge/publication_approval_requested_event.json (100%) rename unicorn_properties/tests/{ => unit}/events/eventbridge/publication_evaluation_completed_event.json (100%) rename unicorn_properties/tests/{ => unit}/events/eventbridge/put_event_property_approval_requested.json (100%) rename unicorn_properties/tests/{ => unit}/events/lambda/content_integrity_validator_function_success.json (100%) rename unicorn_properties/tests/{ => unit}/events/lambda/contract_status_checker.json (100%) rename unicorn_properties/tests/{ => unit}/events/lambda/wait_for_contract_approval_function.json (100%) delete mode 100644 unicorn_properties/tests/unit/lambda_context.py diff --git a/unicorn_properties/tests/unit/conftest.py b/unicorn_properties/tests/unit/conftest.py index 477e05d..1e09dc4 100644 --- a/unicorn_properties/tests/unit/conftest.py +++ b/unicorn_properties/tests/unit/conftest.py @@ -4,6 +4,7 @@ import os import boto3 +from aws_lambda_powertools.utilities.typing import LambdaContext import pytest from moto import mock_dynamodb, mock_events, mock_stepfunctions @@ -34,3 +35,18 @@ def eventbridge(aws_credentials): def stepfunction(aws_credentials): with mock_stepfunctions(): yield boto3.client("stepfunctions", region_name='ap-southeast-2') + + +@pytest.fixture(scope='function') +def lambda_context(): + context: LambdaContext = LambdaContext() + context._function_name="propertiesService-LambdaFunction-HJsvdah2ubi2" + context._function_version="$LATEST" + context._invoked_function_arn="arn:aws:lambda:ap-southeast-2:424490683636:function:propertiesService-LambdaFunction-HJsvdah2ubi2" + context._memory_limit_in_mb=128 + context._aws_request_id="6f970d26-71d6-4c87-a196-9375f85c7b07" + context._log_group_name="/aws/lambda/propertiesService-LambdaFunction-HJsvdah2ubi2" + context._log_stream_name="2022/07/14/[$LATEST]7c71ca59882b4c569dd007c7e41c81e8" + # context._identity=CognitoIdentity([cognito_identity_id=None,cognito_identity_pool_id=None])]) + # context._client_context=None + return context diff --git a/unicorn_properties/tests/events/dbb_stream_events/contract_status_changed_draft.json b/unicorn_properties/tests/unit/events/ddb_stream_events/contract_status_changed_draft.json similarity index 100% rename from unicorn_properties/tests/events/dbb_stream_events/contract_status_changed_draft.json rename to unicorn_properties/tests/unit/events/ddb_stream_events/contract_status_changed_draft.json diff --git a/unicorn_properties/tests/events/dbb_stream_events/sfn_check_exists.json b/unicorn_properties/tests/unit/events/ddb_stream_events/sfn_check_exists.json similarity index 100% rename from unicorn_properties/tests/events/dbb_stream_events/sfn_check_exists.json rename to unicorn_properties/tests/unit/events/ddb_stream_events/sfn_check_exists.json diff --git a/unicorn_properties/tests/events/dbb_stream_events/sfn_wait_approval.json b/unicorn_properties/tests/unit/events/ddb_stream_events/sfn_wait_approval.json similarity index 100% rename from unicorn_properties/tests/events/dbb_stream_events/sfn_wait_approval.json rename to unicorn_properties/tests/unit/events/ddb_stream_events/sfn_wait_approval.json diff --git a/unicorn_properties/tests/events/dbb_stream_events/status_approved_waiting_for_approval.json b/unicorn_properties/tests/unit/events/ddb_stream_events/status_approved_waiting_for_approval.json similarity index 100% rename from unicorn_properties/tests/events/dbb_stream_events/status_approved_waiting_for_approval.json rename to unicorn_properties/tests/unit/events/ddb_stream_events/status_approved_waiting_for_approval.json diff --git a/unicorn_properties/tests/events/dbb_stream_events/status_approved_with_no_workflow.json b/unicorn_properties/tests/unit/events/ddb_stream_events/status_approved_with_no_workflow.json similarity index 100% rename from unicorn_properties/tests/events/dbb_stream_events/status_approved_with_no_workflow.json rename to unicorn_properties/tests/unit/events/ddb_stream_events/status_approved_with_no_workflow.json diff --git a/unicorn_properties/tests/events/lambda/contract_status_changed.json b/unicorn_properties/tests/unit/events/eventbridge/contract_status_changed.json similarity index 100% rename from unicorn_properties/tests/events/lambda/contract_status_changed.json rename to unicorn_properties/tests/unit/events/eventbridge/contract_status_changed.json diff --git a/unicorn_properties/tests/events/eventbridge/contract_status_changed_event_contract_1_approved.json b/unicorn_properties/tests/unit/events/eventbridge/contract_status_changed_event_contract_1_approved.json similarity index 100% rename from unicorn_properties/tests/events/eventbridge/contract_status_changed_event_contract_1_approved.json rename to unicorn_properties/tests/unit/events/eventbridge/contract_status_changed_event_contract_1_approved.json diff --git a/unicorn_properties/tests/events/eventbridge/contract_status_changed_event_contract_1_draft.json b/unicorn_properties/tests/unit/events/eventbridge/contract_status_changed_event_contract_1_draft.json similarity index 100% rename from unicorn_properties/tests/events/eventbridge/contract_status_changed_event_contract_1_draft.json rename to unicorn_properties/tests/unit/events/eventbridge/contract_status_changed_event_contract_1_draft.json diff --git a/unicorn_properties/tests/events/eventbridge/contract_status_changed_event_contract_2_approved.json b/unicorn_properties/tests/unit/events/eventbridge/contract_status_changed_event_contract_2_approved.json similarity index 100% rename from unicorn_properties/tests/events/eventbridge/contract_status_changed_event_contract_2_approved.json rename to unicorn_properties/tests/unit/events/eventbridge/contract_status_changed_event_contract_2_approved.json diff --git a/unicorn_properties/tests/events/eventbridge/contract_status_changed_event_contract_2_draft.json b/unicorn_properties/tests/unit/events/eventbridge/contract_status_changed_event_contract_2_draft.json similarity index 100% rename from unicorn_properties/tests/events/eventbridge/contract_status_changed_event_contract_2_draft.json rename to unicorn_properties/tests/unit/events/eventbridge/contract_status_changed_event_contract_2_draft.json diff --git a/unicorn_properties/tests/events/eventbridge/publicaction_approval_requested_event_all_good.json b/unicorn_properties/tests/unit/events/eventbridge/publicaction_approval_requested_event_all_good.json similarity index 100% rename from unicorn_properties/tests/events/eventbridge/publicaction_approval_requested_event_all_good.json rename to unicorn_properties/tests/unit/events/eventbridge/publicaction_approval_requested_event_all_good.json diff --git a/unicorn_properties/tests/events/eventbridge/publicaction_approval_requested_event_inappropriate_description.json b/unicorn_properties/tests/unit/events/eventbridge/publicaction_approval_requested_event_inappropriate_description.json similarity index 100% rename from unicorn_properties/tests/events/eventbridge/publicaction_approval_requested_event_inappropriate_description.json rename to unicorn_properties/tests/unit/events/eventbridge/publicaction_approval_requested_event_inappropriate_description.json diff --git a/unicorn_properties/tests/events/eventbridge/publicaction_approval_requested_event_inappropriate_images.json b/unicorn_properties/tests/unit/events/eventbridge/publicaction_approval_requested_event_inappropriate_images.json similarity index 100% rename from unicorn_properties/tests/events/eventbridge/publicaction_approval_requested_event_inappropriate_images.json rename to unicorn_properties/tests/unit/events/eventbridge/publicaction_approval_requested_event_inappropriate_images.json diff --git a/unicorn_properties/tests/events/eventbridge/publicaction_approval_requested_event_non_existing_contract.json b/unicorn_properties/tests/unit/events/eventbridge/publicaction_approval_requested_event_non_existing_contract.json similarity index 100% rename from unicorn_properties/tests/events/eventbridge/publicaction_approval_requested_event_non_existing_contract.json rename to unicorn_properties/tests/unit/events/eventbridge/publicaction_approval_requested_event_non_existing_contract.json diff --git a/unicorn_properties/tests/events/eventbridge/publicaction_approval_requested_event_pause_workflow.json b/unicorn_properties/tests/unit/events/eventbridge/publicaction_approval_requested_event_pause_workflow.json similarity index 100% rename from unicorn_properties/tests/events/eventbridge/publicaction_approval_requested_event_pause_workflow.json rename to unicorn_properties/tests/unit/events/eventbridge/publicaction_approval_requested_event_pause_workflow.json diff --git a/unicorn_properties/tests/events/eventbridge/publication_approval_requested_event.json b/unicorn_properties/tests/unit/events/eventbridge/publication_approval_requested_event.json similarity index 100% rename from unicorn_properties/tests/events/eventbridge/publication_approval_requested_event.json rename to unicorn_properties/tests/unit/events/eventbridge/publication_approval_requested_event.json diff --git a/unicorn_properties/tests/events/eventbridge/publication_evaluation_completed_event.json b/unicorn_properties/tests/unit/events/eventbridge/publication_evaluation_completed_event.json similarity index 100% rename from unicorn_properties/tests/events/eventbridge/publication_evaluation_completed_event.json rename to unicorn_properties/tests/unit/events/eventbridge/publication_evaluation_completed_event.json diff --git a/unicorn_properties/tests/events/eventbridge/put_event_property_approval_requested.json b/unicorn_properties/tests/unit/events/eventbridge/put_event_property_approval_requested.json similarity index 100% rename from unicorn_properties/tests/events/eventbridge/put_event_property_approval_requested.json rename to unicorn_properties/tests/unit/events/eventbridge/put_event_property_approval_requested.json diff --git a/unicorn_properties/tests/events/lambda/content_integrity_validator_function_success.json b/unicorn_properties/tests/unit/events/lambda/content_integrity_validator_function_success.json similarity index 100% rename from unicorn_properties/tests/events/lambda/content_integrity_validator_function_success.json rename to unicorn_properties/tests/unit/events/lambda/content_integrity_validator_function_success.json diff --git a/unicorn_properties/tests/events/lambda/contract_status_checker.json b/unicorn_properties/tests/unit/events/lambda/contract_status_checker.json similarity index 100% rename from unicorn_properties/tests/events/lambda/contract_status_checker.json rename to unicorn_properties/tests/unit/events/lambda/contract_status_checker.json diff --git a/unicorn_properties/tests/events/lambda/wait_for_contract_approval_function.json b/unicorn_properties/tests/unit/events/lambda/wait_for_contract_approval_function.json similarity index 100% rename from unicorn_properties/tests/events/lambda/wait_for_contract_approval_function.json rename to unicorn_properties/tests/unit/events/lambda/wait_for_contract_approval_function.json diff --git a/unicorn_properties/tests/unit/helper.py b/unicorn_properties/tests/unit/helper.py index ab2336b..7188309 100644 --- a/unicorn_properties/tests/unit/helper.py +++ b/unicorn_properties/tests/unit/helper.py @@ -1,28 +1,30 @@ # Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. # SPDX-License-Identifier: MIT-0 - import json +from pathlib import Path + TABLE_NAME = 'table1' +EVENTBUS_NAME = 'test-eventbridge' +EVENTS_DIR = Path(__file__).parent / 'events' def load_event(filename): - with open(filename) as f: - data = json.load(f) - return data + return json.load(open(EVENTS_DIR / f'{filename}.json', 'r')) def return_env_vars_dict(k={}): d = { "AWS_DEFAULT_REGION": "ap-southeast-2", "CONTRACT_STATUS_TABLE": TABLE_NAME, - "EVENT_BUS": "test-eventbridge", + "EVENT_BUS": EVENTBUS_NAME, + "SERVICE_NAMESPACE": "unicorn.properties", + "POWERTOOLS_SERVICE_NAME":"unicorn.properties", + "POWERTOOLS_TRACE_DISABLED":"true", "POWERTOOLS_LOGGER_LOG_EVENT":"true", "POWERTOOLS_LOGGER_SAMPLE_RATE":"0.1", - "POWERTOOLS_METRICS_NAMESPACE":"unicorn.contracts", - "POWERTOOLS_SERVICE_NAME":"unicorn.contracts", - "POWERTOOLS_TRACE_DISABLED":"true", - "SERVICE_NAMESPACE": "unicorn.properties", + "POWERTOOLS_METRICS_NAMESPACE":"unicorn.properties", + "LOG_LEVEL": "INFO", } d.update(k) return d @@ -89,3 +91,8 @@ def create_ddb_table_contracts_with_entry(dynamodb): } table.put_item(Item=contract) return table + + +def create_test_eventbridge_bus(eventbridge): + bus = eventbridge.create_event_bus(Name=EVENTBUS_NAME) + return bus diff --git a/unicorn_properties/tests/unit/lambda_context.py b/unicorn_properties/tests/unit/lambda_context.py deleted file mode 100644 index a260817..0000000 --- a/unicorn_properties/tests/unit/lambda_context.py +++ /dev/null @@ -1,17 +0,0 @@ -# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. -# SPDX-License-Identifier: MIT-0 - -""" -Simple Lambda Context class to be passed to the lambda handler when test is invoked -""" - -class LambdaContext: - aws_request_id="6f970d26-71d6-4c87-a196-9375f85c7b07" - log_group_name="/aws/lambda/propertiesService-ContractStatusChanged-IWaQgsTEtLtX" - log_stream_name="2022/07/14/[$LATEST]7c71ca59882b4c569dd007c7e41c81e8" - function_name="propertiesService-ContractStatusChanged-IWaQgsTEtLtX" - memory_limit_in_mb=128 - function_version="$LATEST" - invoked_function_arn="arn:aws:lambda:ap-southeast-2:424490683636:function:propertiesService-ContractStatusChanged-IWaQgsTEtLtX" - client_context=None - #identity=CognitoIdentity([cognito_identity_id=None,cognito_identity_pool_id=None])]) diff --git a/unicorn_properties/tests/unit/test_content_integrity_validator_function.py b/unicorn_properties/tests/unit/test_content_integrity_validator_function.py index dc8cc00..b87f6e7 100644 --- a/unicorn_properties/tests/unit/test_content_integrity_validator_function.py +++ b/unicorn_properties/tests/unit/test_content_integrity_validator_function.py @@ -1,18 +1,16 @@ # Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. # SPDX-License-Identifier: MIT-0 - import os import pytest from unittest import mock -from .lambda_context import LambdaContext from .helper import load_event, return_env_vars_dict @pytest.fixture def stepfunctions_event(): - return load_event('tests/events/lambda/content_integrity_validator_function_success.json') + return load_event('lambda/content_integrity_validator_function_success') @pytest.fixture @@ -49,9 +47,9 @@ def invalid_content_sentiment(stepfunctions_event): @mock.patch.dict(os.environ, return_env_vars_dict(), clear=True) -def test_valid_image_and_valid_sentiment(stepfunctions_event): +def test_valid_image_and_valid_sentiment(stepfunctions_event, lambda_context): from properties_service import content_integrity_validator_function - ret = content_integrity_validator_function.lambda_handler(stepfunctions_event, LambdaContext()) + ret = content_integrity_validator_function.lambda_handler(stepfunctions_event, lambda_context) assert ret['validation_result'] == "PASS" assert ret['imageModerations'] == stepfunctions_event['imageModerations'] @@ -59,11 +57,11 @@ def test_valid_image_and_valid_sentiment(stepfunctions_event): @mock.patch.dict(os.environ, return_env_vars_dict(), clear=True) -def test_valid_image_and_invalid_sentiment(invalid_content_sentiment): +def test_valid_image_and_invalid_sentiment(invalid_content_sentiment, lambda_context): event = invalid_content_sentiment from properties_service import content_integrity_validator_function - ret = content_integrity_validator_function.lambda_handler(event, LambdaContext()) + ret = content_integrity_validator_function.lambda_handler(event, lambda_context) assert ret['validation_result'] == "FAIL" assert ret['imageModerations'] == event['imageModerations'] @@ -71,11 +69,11 @@ def test_valid_image_and_invalid_sentiment(invalid_content_sentiment): @mock.patch.dict(os.environ, return_env_vars_dict(), clear=True) -def test_invalid_image_and_valid_sentiment(invalid_image_moderation): +def test_invalid_image_and_valid_sentiment(invalid_image_moderation, lambda_context): event = invalid_image_moderation from properties_service import content_integrity_validator_function - ret = content_integrity_validator_function.lambda_handler(event, LambdaContext()) + ret = content_integrity_validator_function.lambda_handler(event, lambda_context) assert ret['validation_result'] == "FAIL" assert ret['imageModerations'] == event['imageModerations'] @@ -83,11 +81,11 @@ def test_invalid_image_and_valid_sentiment(invalid_image_moderation): @mock.patch.dict(os.environ, return_env_vars_dict(), clear=True) -def test_invalid_image_and_invalid_sentiment(invalid_image_moderation, invalid_content_sentiment): +def test_invalid_image_and_invalid_sentiment(invalid_image_moderation, invalid_content_sentiment, lambda_context): event = {**invalid_image_moderation, **invalid_content_sentiment} from properties_service import content_integrity_validator_function - ret = content_integrity_validator_function.lambda_handler(event, LambdaContext()) + ret = content_integrity_validator_function.lambda_handler(event, lambda_context) assert ret['validation_result'] == "FAIL" assert ret['imageModerations'] == event['imageModerations'] diff --git a/unicorn_properties/tests/unit/test_contract_exists_checker_function.py b/unicorn_properties/tests/unit/test_contract_exists_checker_function.py index 277c5f0..ec91718 100644 --- a/unicorn_properties/tests/unit/test_contract_exists_checker_function.py +++ b/unicorn_properties/tests/unit/test_contract_exists_checker_function.py @@ -1,34 +1,31 @@ # Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. # SPDX-License-Identifier: MIT-0 - import os from importlib import reload import pytest from unittest import mock -from .lambda_context import LambdaContext from .helper import load_event, return_env_vars_dict, create_ddb_table_contracts_with_entry @mock.patch.dict(os.environ, return_env_vars_dict(), clear=True) -def test_existing_contract_exists_checker_function(dynamodb, mocker): - stepfunctions_event = load_event('tests/events/lambda/contract_status_checker.json') - +def test_existing_contract_exists_checker_function(dynamodb, lambda_context): + stepfunctions_event = load_event('lambda/contract_status_checker') from properties_service import contract_exists_checker_function reload(contract_exists_checker_function) create_ddb_table_contracts_with_entry(dynamodb) - ret = contract_exists_checker_function.lambda_handler(stepfunctions_event, LambdaContext()) + ret = contract_exists_checker_function.lambda_handler(stepfunctions_event, lambda_context) assert ret['property_id'] == stepfunctions_event['Input']['property_id'] assert ret['address']['country'] == stepfunctions_event['Input']['country'] @mock.patch.dict(os.environ, return_env_vars_dict(), clear=True) -def test_missing_contract_exists_checker_function(dynamodb, mocker): - stepfunctions_event = load_event('tests/events/lambda/contract_status_checker.json') +def test_missing_contract_exists_checker_function(dynamodb, lambda_context): + stepfunctions_event = load_event('lambda/contract_status_checker') stepfunctions_event['Input']['property_id'] = 'NOT/a/valid/CONTRACT' from properties_service import contract_exists_checker_function @@ -38,6 +35,6 @@ def test_missing_contract_exists_checker_function(dynamodb, mocker): create_ddb_table_contracts_with_entry(dynamodb) with pytest.raises(ContractStatusNotFoundException) as errinfo: - contract_exists_checker_function.lambda_handler(stepfunctions_event, LambdaContext()) + contract_exists_checker_function.lambda_handler(stepfunctions_event, lambda_context) assert errinfo.value.message == 'No contract found for specified Property ID' diff --git a/unicorn_properties/tests/unit/test_contract_status_changed_event_handler.py b/unicorn_properties/tests/unit/test_contract_status_changed_event_handler.py index cb13c52..12e5d59 100644 --- a/unicorn_properties/tests/unit/test_contract_status_changed_event_handler.py +++ b/unicorn_properties/tests/unit/test_contract_status_changed_event_handler.py @@ -1,6 +1,5 @@ # Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. # SPDX-License-Identifier: MIT-0 - import os from importlib import reload @@ -8,13 +7,12 @@ from unittest import mock from botocore.exceptions import ClientError -from .lambda_context import LambdaContext from .helper import load_event, return_env_vars_dict, create_ddb_table_properties @mock.patch.dict(os.environ, return_env_vars_dict(), clear=True) -def test_contract_status_changed_event_handler(dynamodb, mocker): - eventbridge_event = load_event('tests/events/lambda/contract_status_changed.json') +def test_contract_status_changed_event_handler(dynamodb, lambda_context): + eventbridge_event = load_event('eventbridge/contract_status_changed') from properties_service import contract_status_changed_event_handler # Reload is required to prevent function setup reuse from another test @@ -22,13 +20,13 @@ def test_contract_status_changed_event_handler(dynamodb, mocker): create_ddb_table_properties(dynamodb) - ret = contract_status_changed_event_handler.lambda_handler(eventbridge_event, LambdaContext()) + ret = contract_status_changed_event_handler.lambda_handler(eventbridge_event, lambda_context) assert ret["statusCode"] == 200 @mock.patch.dict(os.environ, return_env_vars_dict(), clear=True) -def test_missing_property_id(dynamodb, mocker): +def test_missing_property_id(dynamodb, lambda_context): eventbridge_event = {'detail': {}} from properties_service import contract_status_changed_event_handler @@ -38,6 +36,6 @@ def test_missing_property_id(dynamodb, mocker): create_ddb_table_properties(dynamodb) with pytest.raises(ClientError) as e: - contract_status_changed_event_handler.lambda_handler(eventbridge_event, LambdaContext()) + contract_status_changed_event_handler.lambda_handler(eventbridge_event, lambda_context) assert 'ValidationException' in str(e.value) diff --git a/unicorn_properties/tests/unit/test_properties_approval_sync_function.py b/unicorn_properties/tests/unit/test_properties_approval_sync_function.py index 5612809..4af568f 100644 --- a/unicorn_properties/tests/unit/test_properties_approval_sync_function.py +++ b/unicorn_properties/tests/unit/test_properties_approval_sync_function.py @@ -1,37 +1,35 @@ # Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. # SPDX-License-Identifier: MIT-0 - import os from importlib import reload from unittest import mock -from .lambda_context import LambdaContext from .helper import load_event, return_env_vars_dict @mock.patch.dict(os.environ, return_env_vars_dict(), clear=True) -def test_handle_status_changed_draft(stepfunction, mocker): - ddbstream_event = load_event('tests/events/dbb_stream_events/contract_status_changed_draft.json') +def test_handle_status_changed_draft(stepfunction, lambda_context): + ddbstream_event = load_event('ddb_stream_events/contract_status_changed_draft') from properties_service import properties_approval_sync_function reload(properties_approval_sync_function) - ret = properties_approval_sync_function.lambda_handler(ddbstream_event, LambdaContext()) + ret = properties_approval_sync_function.lambda_handler(ddbstream_event, lambda_context) assert ret is None # NOTE: This test cannot be implemented at this time because `moto`` does not yet support mocking `stepfunctions.send_task_success` @mock.patch.dict(os.environ, return_env_vars_dict(), clear=True) -def test_handle_status_changed_approved(caplog, stepfunction, mocker): +def test_handle_status_changed_approved(caplog, stepfunction, lambda_context): pass - # ddbstream_event = load_event('tests/events/dbb_stream_events/status_approved_waiting_for_approval.json') + # ddbstream_event = load_event('ddb_stream_events/status_approved_waiting_for_approval') # from properties_service import properties_approval_sync_function # reload(properties_approval_sync_function) - # ret = properties_approval_sync_function.lambda_handler(ddbstream_event, LambdaContext()) + # ret = properties_approval_sync_function.lambda_handler(ddbstream_event, lambda_context) # assert ret is None # assert 'Contract status for property is APPROVED' in caplog.text diff --git a/unicorn_properties/tests/unit/test_wait_for_contract_approval_function.py b/unicorn_properties/tests/unit/test_wait_for_contract_approval_function.py index c5865d1..1e05d15 100644 --- a/unicorn_properties/tests/unit/test_wait_for_contract_approval_function.py +++ b/unicorn_properties/tests/unit/test_wait_for_contract_approval_function.py @@ -1,18 +1,16 @@ # Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. # SPDX-License-Identifier: MIT-0 - import os from importlib import reload from unittest import mock -from .lambda_context import LambdaContext from .helper import load_event, return_env_vars_dict, create_ddb_table_contracts_with_entry @mock.patch.dict(os.environ, return_env_vars_dict(), clear=True) -def test_handle_wait_for_contract_approval_function(dynamodb, mocker): - stepfunctions_event = load_event('tests/events/lambda/wait_for_contract_approval_function.json') +def test_handle_wait_for_contract_approval_function(dynamodb, lambda_context): + stepfunctions_event = load_event('lambda/wait_for_contract_approval_function') from properties_service import wait_for_contract_approval_function reload(wait_for_contract_approval_function) @@ -22,7 +20,7 @@ def test_handle_wait_for_contract_approval_function(dynamodb, mocker): ddbitem_before = dynamodb.Table('table1').get_item(Key={'property_id': stepfunctions_event['Input']['property_id']}) assert 'sfn_wait_approved_task_token' not in ddbitem_before['Item'] - ret = wait_for_contract_approval_function.lambda_handler(stepfunctions_event, LambdaContext()) + ret = wait_for_contract_approval_function.lambda_handler(stepfunctions_event, lambda_context) ddbitem_after = dynamodb.Table('table1').get_item(Key={'property_id': stepfunctions_event['Input']['property_id']}) assert ret['property_id'] == stepfunctions_event['Input']['property_id']