You've already forked Promocode-API
mirror of
https://github.com/devitq/Promocode-API.git
synced 2026-05-22 19:47:11 +00:00
feat: added tests
This commit is contained in:
@@ -0,0 +1,170 @@
|
||||
# Byte-compiled / optimized / DLL files
|
||||
__pycache__/
|
||||
*.py[cod]
|
||||
*$py.class
|
||||
|
||||
# C extensions
|
||||
*.so
|
||||
|
||||
# Distribution / packaging
|
||||
.Python
|
||||
build/
|
||||
develop-eggs/
|
||||
dist/
|
||||
downloads/
|
||||
eggs/
|
||||
.eggs/
|
||||
lib/
|
||||
lib64/
|
||||
parts/
|
||||
sdist/
|
||||
var/
|
||||
wheels/
|
||||
share/python-wheels/
|
||||
*.egg-info/
|
||||
.installed.cfg
|
||||
*.egg
|
||||
MANIFEST
|
||||
|
||||
# PyInstaller
|
||||
# Usually these files are written by a python script from a template
|
||||
# before PyInstaller builds the exe, so as to inject date/other infos into it.
|
||||
*.manifest
|
||||
*.spec
|
||||
|
||||
# Installer logs
|
||||
pip-log.txt
|
||||
pip-delete-this-directory.txt
|
||||
|
||||
# Unit test / coverage reports
|
||||
htmlcov/
|
||||
.tox/
|
||||
.nox/
|
||||
.coverage
|
||||
.coverage.*
|
||||
.cache
|
||||
nosetests.xml
|
||||
coverage.xml
|
||||
*.cover
|
||||
*.py,cover
|
||||
.hypothesis/
|
||||
.pytest_cache/
|
||||
cover/
|
||||
|
||||
# Translations
|
||||
*.mo
|
||||
*.pot
|
||||
|
||||
# Django stuff:
|
||||
*.log
|
||||
local_settings.py
|
||||
db.sqlite3
|
||||
db.sqlite3-journal
|
||||
|
||||
# Scrapy stuff:
|
||||
.scrapy
|
||||
|
||||
# Sphinx documentation
|
||||
docs/_build/
|
||||
|
||||
# PyBuilder
|
||||
.pybuilder/
|
||||
target/
|
||||
|
||||
# Jupyter Notebook
|
||||
.ipynb_checkpoints
|
||||
|
||||
# IPython
|
||||
profile_default/
|
||||
ipython_config.py
|
||||
|
||||
# pyenv
|
||||
# For a library or package, you might want to ignore these files since the code is
|
||||
# intended to run in multiple environments; otherwise, check them in:
|
||||
.python-version
|
||||
|
||||
# pipenv
|
||||
# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
|
||||
# However, in case of collaboration, if having platform-specific dependencies or dependencies
|
||||
# having no cross-platform support, pipenv may install dependencies that don't work, or not
|
||||
# install all needed dependencies.
|
||||
Pipfile.lock
|
||||
|
||||
# UV
|
||||
# Similar to Pipfile.lock, it is generally recommended to include uv.lock in version control.
|
||||
# This is especially recommended for binary packages to ensure reproducibility, and is more
|
||||
# commonly ignored for libraries.
|
||||
uv.lock
|
||||
|
||||
# poetry
|
||||
# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
|
||||
# This is especially recommended for binary packages to ensure reproducibility, and is more
|
||||
# commonly ignored for libraries.
|
||||
# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
|
||||
poetry.lock
|
||||
|
||||
# pdm
|
||||
# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
|
||||
#pdm.lock
|
||||
# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it
|
||||
# in version control.
|
||||
# https://pdm.fming.dev/latest/usage/project/#working-with-version-control
|
||||
.pdm.toml
|
||||
.pdm-python
|
||||
.pdm-build/
|
||||
|
||||
# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
|
||||
__pypackages__/
|
||||
|
||||
# Celery stuff
|
||||
celerybeat-schedule
|
||||
celerybeat.pid
|
||||
|
||||
# SageMath parsed files
|
||||
*.sage.py
|
||||
|
||||
# Environments
|
||||
.env
|
||||
.venv
|
||||
env/
|
||||
venv/
|
||||
ENV/
|
||||
env.bak/
|
||||
venv.bak/
|
||||
|
||||
# Spyder project settings
|
||||
.spyderproject
|
||||
.spyproject
|
||||
|
||||
# Rope project settings
|
||||
.ropeproject
|
||||
|
||||
# mkdocs documentation
|
||||
/site
|
||||
|
||||
# mypy
|
||||
.mypy_cache/
|
||||
.dmypy.json
|
||||
dmypy.json
|
||||
|
||||
# Pyre type checker
|
||||
.pyre/
|
||||
|
||||
# pytype static type analyzer
|
||||
.pytype/
|
||||
|
||||
# Cython debug symbols
|
||||
cython_debug/
|
||||
|
||||
# PyCharm
|
||||
# JetBrains specific template is maintained in a separate JetBrains.gitignore that can
|
||||
# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
|
||||
# and can be added to the global gitignore or merged into this file. For a more nuclear
|
||||
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
|
||||
.idea/
|
||||
|
||||
# PyPI configuration file
|
||||
.pypirc
|
||||
|
||||
# Ruff files
|
||||
.ruff_cache
|
||||
@@ -0,0 +1,71 @@
|
||||
name: Базовый stage для регистрации компаний
|
||||
description: Этот документ переиспользуется в других тестах для уменьшения дублирования YAML.
|
||||
|
||||
variables:
|
||||
company1:
|
||||
name: "Рекламное агенство Малинки-Вечеринки"
|
||||
email: raspberryprod@mail.com
|
||||
password: SuperStrongPassword2000!
|
||||
company2:
|
||||
name: "Рекламное агенство Вишенки-Вечеринки"
|
||||
email: cherryprod@mail.com
|
||||
password: HARDpassword@10101010!
|
||||
|
||||
stages:
|
||||
- name: "Регистрация компании [1]"
|
||||
id: basic_auth_reg1
|
||||
request:
|
||||
url: "{BASE_URL}/business/auth/sign-up"
|
||||
method: POST
|
||||
json:
|
||||
name: "{company1.name:s}"
|
||||
email: "{company1.email:s}"
|
||||
password: "{company1.password:s}"
|
||||
response:
|
||||
status_code: 200
|
||||
save:
|
||||
json:
|
||||
company1_token: token
|
||||
|
||||
- name: "Аутентификация [1]"
|
||||
id: basic_auth_auth1
|
||||
request:
|
||||
url: "{BASE_URL}/business/auth/sign-in"
|
||||
method: POST
|
||||
json:
|
||||
email: "{company1.email:s}"
|
||||
password: "{company1.password:s}"
|
||||
response:
|
||||
status_code: 200
|
||||
save:
|
||||
json:
|
||||
company1_token: token
|
||||
|
||||
- name: "Регистрация компании [2]"
|
||||
id: basic_auth_reg2
|
||||
request:
|
||||
url: "{BASE_URL}/business/auth/sign-up"
|
||||
method: POST
|
||||
json:
|
||||
name: "{company2.name:s}"
|
||||
email: "{company2.email:s}"
|
||||
password: "{company2.password:s}"
|
||||
response:
|
||||
status_code: 200
|
||||
save:
|
||||
json:
|
||||
company2_token: token
|
||||
|
||||
- name: "Аутентификация [2]"
|
||||
id: basic_auth_auth2
|
||||
request:
|
||||
url: "{BASE_URL}/business/auth/sign-in"
|
||||
method: POST
|
||||
json:
|
||||
email: "{company2.email:s}"
|
||||
password: "{company2.password:s}"
|
||||
response:
|
||||
status_code: 200
|
||||
save:
|
||||
json:
|
||||
company2_token: token
|
||||
@@ -0,0 +1,51 @@
|
||||
name: Базовый набор корректных структур с промокодами
|
||||
description: Этот документ переиспользуется в других тестах для уменьшения дублирования YAML.
|
||||
|
||||
variables:
|
||||
basic_promo1:
|
||||
description: "Повышенный кэшбек 10% для новых клиентов банка!"
|
||||
image_url: "https://cdn2.thecatapi.com/images/3lo.jpg"
|
||||
target: {}
|
||||
max_count: 10
|
||||
active_from: "2025-01-10"
|
||||
mode: "COMMON"
|
||||
promo_common: "sale-10"
|
||||
|
||||
basic_promo2:
|
||||
description: "Повышенный кэшбек 40% для новых клиентов банка!"
|
||||
image_url: "https://cdn2.thecatapi.com/images/3lo.jpg"
|
||||
target:
|
||||
age_from: 15
|
||||
country: fr
|
||||
max_count: 100
|
||||
active_from: "2028-12-20"
|
||||
mode: "COMMON"
|
||||
promo_common: "sale-40"
|
||||
|
||||
basic_promo3:
|
||||
description: "Подарочная маска для сна при оформлении кредита на машину"
|
||||
target:
|
||||
age_from: 28
|
||||
age_until: 50
|
||||
country: ru
|
||||
max_count: 1
|
||||
active_from: "2025-01-01"
|
||||
active_until: "2028-12-30"
|
||||
mode: "UNIQUE"
|
||||
promo_unique:
|
||||
- uniq1
|
||||
- uniq2
|
||||
- uniq3
|
||||
|
||||
basic_promo4:
|
||||
description: "Дарим глобус при оформлении заказа на 30000!"
|
||||
target:
|
||||
age_from: 28
|
||||
age_until: 50
|
||||
country: us
|
||||
max_count: 1
|
||||
active_until: "2025-01-10"
|
||||
mode: "UNIQUE"
|
||||
promo_unique:
|
||||
- only_youuuu
|
||||
- not_only_you
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"description": "Повышенный кэшбек 10% для новых клиентов банка!",
|
||||
"image_url": "https://cdn2.thecatapi.com/images/3lo.jpg",
|
||||
"target": {},
|
||||
"max_count": 10,
|
||||
"active_from": "2025-01-10",
|
||||
"mode": "COMMON",
|
||||
"promo_common": "sale-10"
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"description": "Повышенный кэшбек 40% для новых клиентов банка!",
|
||||
"image_url": "https://cdn2.thecatapi.com/images/3lo.jpg",
|
||||
"target": {
|
||||
"age_from": 15,
|
||||
"country": "fr"
|
||||
},
|
||||
"max_count": 100,
|
||||
"active_from": "2028-12-20",
|
||||
"mode": "COMMON",
|
||||
"promo_common": "sale-40"
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"description": "Подарочная маска для сна при оформлении кредита на машину",
|
||||
"target": {
|
||||
"age_from": 28,
|
||||
"age_until": 50,
|
||||
"country": "ru"
|
||||
},
|
||||
"max_count": 1,
|
||||
"active_from": "2025-01-01",
|
||||
"active_until": "2028-12-30",
|
||||
"mode": "UNIQUE",
|
||||
"promo_unique": ["uniq1", "uniq2", "uniq3"]
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"description": "Дарим глобус при оформлении заказа на 30000!",
|
||||
"target": {
|
||||
"age_from": 28,
|
||||
"age_until": 50,
|
||||
"country": "us"
|
||||
},
|
||||
"max_count": 1,
|
||||
"active_until": "2025-01-10",
|
||||
"mode": "UNIQUE",
|
||||
"promo_unique": ["only_youuuu", "not_only_you"]
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"description": "Повышенный кэшбек 10000% для новых клиентов банка!",
|
||||
"target": {
|
||||
"country": "kz",
|
||||
"age_from": 20,
|
||||
"age_until": 100,
|
||||
"categories": ["tbankvpered", "KOTEkote", "dogseverywhere"]
|
||||
},
|
||||
"active_until": "2040-01-02",
|
||||
"max_count": 10,
|
||||
"mode": "COMMON",
|
||||
"promo_common": "sale-1000"
|
||||
}
|
||||
@@ -0,0 +1,52 @@
|
||||
name: promocode
|
||||
|
||||
services:
|
||||
app:
|
||||
build: ../solution
|
||||
ports:
|
||||
- 12320:8080
|
||||
environment:
|
||||
- SERVER_ADDRESS=0.0.0.0:8080
|
||||
- SERVER_PORT=8080
|
||||
- POSTGRES_CONN=postgres://postgres:postgres@postgres:5432/postgres
|
||||
- POSTGRES_JDBC_URL=jdbc:postgresql://postgres:5432/postgres
|
||||
- POSTGRES_USERNAME=postgres
|
||||
- POSTGRES_PASSWORD=postgres
|
||||
- POSTGRES_HOST=postgres
|
||||
- POSTGRES_PORT=5432
|
||||
- POSTGRES_DATABASE=postgres
|
||||
- REDIS_HOST=redis
|
||||
- REDIS_PORT=6379
|
||||
- ANTIFRAUD_ADDRESS=antifraud:9090
|
||||
- RANDOM_SECRET=yourRandomSecret128charsHere1234567890abcdef
|
||||
depends_on:
|
||||
- postgres
|
||||
- redis
|
||||
- antifraud
|
||||
|
||||
postgres:
|
||||
image: postgres:16.6-alpine3.21
|
||||
environment:
|
||||
- POSTGRES_USER=postgres
|
||||
- POSTGRES_PASSWORD=postgres
|
||||
- POSTGRES_DB=postgres
|
||||
volumes:
|
||||
- postgres_data:/var/lib/postgresql/data
|
||||
shm_size: 128mb
|
||||
|
||||
redis:
|
||||
image: redis:7.4-alpine3.21
|
||||
|
||||
antifraud:
|
||||
image: docker.io/lodthe/prod-backend-antifraud:latest
|
||||
ports:
|
||||
- 12321:9090
|
||||
environment:
|
||||
- SERVER_PORT=9090
|
||||
- NUMBER_KILLER_REQUEST=4
|
||||
- CACHE_DURATION_MS=3000
|
||||
- BLOCKED_EMAILS=blocked@antifraud.com
|
||||
- SLOWDOWN_AFTER=slowdown@antifraud.ru
|
||||
|
||||
volumes:
|
||||
postgres_data:
|
||||
@@ -0,0 +1,3 @@
|
||||
variables:
|
||||
BASE_URL: "http://127.0.0.1:12320/api"
|
||||
ANTIFRAUD_URL: "http://127.0.0.1:12321/internal"
|
||||
@@ -0,0 +1,21 @@
|
||||
import logging
|
||||
from collections.abc import MutableMapping
|
||||
from typing import Any
|
||||
|
||||
|
||||
def pytest_tavern_beta_before_every_request(request_args: MutableMapping):
|
||||
message = f"Request: {request_args['method']} {request_args['url']}"
|
||||
|
||||
params = request_args.get("params", None)
|
||||
if params:
|
||||
message += f"\nQuery parameters: {params}"
|
||||
|
||||
message += f"\nRequest body: {request_args.get('json', '<no body>')}"
|
||||
|
||||
logging.info(message)
|
||||
|
||||
|
||||
def pytest_tavern_beta_after_every_response(
|
||||
expected: Any, response: Any
|
||||
) -> None:
|
||||
logging.info(f"Response: {response.status_code} {response.text}")
|
||||
@@ -0,0 +1,10 @@
|
||||
[project]
|
||||
name = "tests-final"
|
||||
version = "0.1.0"
|
||||
description = "Final tests for the second stage of the PROD olympiad."
|
||||
requires-python = ">=3.11"
|
||||
dependencies = [
|
||||
"google-api-python-client>=2.160.0",
|
||||
"pytest>=7.2.2",
|
||||
"tavern>=2.11.0",
|
||||
]
|
||||
@@ -0,0 +1,9 @@
|
||||
[pytest]
|
||||
tavern-global-cfg = config.yml
|
||||
tavern-strict = json:off headers:off
|
||||
|
||||
log_cli = true
|
||||
log_cli_level = ERROR
|
||||
|
||||
filterwarnings =
|
||||
ignore::DeprecationWarning
|
||||
@@ -0,0 +1,62 @@
|
||||
#!/bin/bash
|
||||
|
||||
restart_stack() {
|
||||
docker compose -f compose.testing.yaml down -v 2>/dev/null
|
||||
docker compose -f compose.testing.yaml up -d 2>/dev/null
|
||||
sleep 5
|
||||
}
|
||||
|
||||
tests=(
|
||||
reload
|
||||
test_01_ping.tavern.yml
|
||||
test_02_business_signup.tavern.yml
|
||||
test_02_business_signup_invalid_password.tavern.yml
|
||||
reload
|
||||
test_03_business_signin.tavern.yml
|
||||
reload
|
||||
test_04_business_promo_create_valid.tavern.yml
|
||||
test_04_business_promo_create_valid_tricky.tavern.yml
|
||||
test_04_business_promo_create_invalid.tavern.yml
|
||||
reload
|
||||
test_04_business_promo_create_valid.tavern.yml
|
||||
test_05_business_promo_list.tavern.yml
|
||||
test_05_business_promo_list_invalid.tavern.yml
|
||||
reload
|
||||
test_06_business_promo_id_valid.tavern.yml
|
||||
test_06_business_promo_id_invalid.tavern.yml
|
||||
reload
|
||||
test_07_user_signup.tavern.yml
|
||||
test_07_user_signup_invalid.tavern.yml
|
||||
reload
|
||||
test_08_user_signin.tavern.yml
|
||||
reload
|
||||
test_09_user_profile.tavern.yml
|
||||
test_09_user_profile_invalid.tavern.yml
|
||||
reload
|
||||
test_10_user_feed.tavern.yml
|
||||
test_10_user_promo.tavern.yml
|
||||
reload
|
||||
test_11_user_like.tavern.yml
|
||||
reload
|
||||
test_12_user_comments.tavern.yml
|
||||
reload
|
||||
test_13_user_promo_activate.tavern.yml
|
||||
test_13_user_promo_activate_validate_cache.tavern.yml
|
||||
reload
|
||||
test_14_business_activate_promo.tavern.yml
|
||||
test_14_business_get_stat.tavern.yml
|
||||
reload
|
||||
)
|
||||
|
||||
docker compose -f compose.testing.yaml up -d --build --force-recreate --remove-orphans 2>/dev/null
|
||||
|
||||
for test in "${tests[@]}"; do
|
||||
if [[ "$test" == "reload" ]]; then
|
||||
restart_stack
|
||||
continue
|
||||
fi
|
||||
|
||||
uv run pytest "$test"
|
||||
done
|
||||
|
||||
docker compose -f compose.testing.yaml down -v --remove-orphans 2>/dev/null
|
||||
@@ -0,0 +1,9 @@
|
||||
test_name: Базовая проверка работоспособности
|
||||
|
||||
stages:
|
||||
- name: "Проверить PING"
|
||||
request:
|
||||
url: "{BASE_URL}/ping"
|
||||
method: GET
|
||||
response:
|
||||
status_code: 200
|
||||
@@ -0,0 +1,24 @@
|
||||
test_name: Регистрация на уже зарегистрированный e-mail
|
||||
|
||||
stages:
|
||||
- name: "Регистрация нового бизнес аккаунта"
|
||||
request:
|
||||
url: "{BASE_URL}/business/auth/sign-up"
|
||||
method: POST
|
||||
json:
|
||||
name: "Рекламное агенство Малинки-Вечеринки"
|
||||
email: raspberryprod@mail.com
|
||||
password: SuperStrongPassword2000!
|
||||
response:
|
||||
status_code: 200
|
||||
|
||||
- name: "Повторная регистрация на тот же email"
|
||||
request:
|
||||
url: "{BASE_URL}/business/auth/sign-up"
|
||||
method: POST
|
||||
json:
|
||||
name: "Рекламное агенство Малинки-Вечеринки КОПИЯ"
|
||||
email: raspberryprod@mail.com
|
||||
password: SuperStrongPassword2000!
|
||||
response:
|
||||
status_code: 409
|
||||
@@ -0,0 +1,101 @@
|
||||
test_name: Проверка некорректного пароля при регистрации
|
||||
|
||||
stages:
|
||||
- name: "Регистрация нового бизнес аккаунта: слишком короткий пароль [1]"
|
||||
request:
|
||||
url: "{BASE_URL}/business/auth/sign-up"
|
||||
method: POST
|
||||
json:
|
||||
name: "Рекламное агенство Вишенки-Вечеринки"
|
||||
email: cherryprod@mail.com
|
||||
password: easypwd
|
||||
response:
|
||||
status_code: 400
|
||||
|
||||
- name: "Регистрация нового бизнес аккаунта: слишком короткий пароль [2]"
|
||||
request:
|
||||
url: "{BASE_URL}/business/auth/sign-up"
|
||||
method: POST
|
||||
json:
|
||||
name: "Рекламное агенство Вишенки-Вечеринки"
|
||||
email: cherryprod@mail.com
|
||||
password: Ar1@!$
|
||||
response:
|
||||
status_code: 400
|
||||
|
||||
- name: "Регистрация нового бизнес аккаунта: пароль без цифр"
|
||||
request:
|
||||
url: "{BASE_URL}/business/auth/sign-up"
|
||||
method: POST
|
||||
json:
|
||||
name: "Рекламное агенство Вишенки-Вечеринки"
|
||||
email: cherryprod@mail.com
|
||||
password: easypwdddddddd
|
||||
response:
|
||||
status_code: 400
|
||||
|
||||
- name: "Регистрация нового бизнес аккаунта: пароль без спец символов"
|
||||
request:
|
||||
url: "{BASE_URL}/business/auth/sign-up"
|
||||
method: POST
|
||||
json:
|
||||
name: "Рекламное агенство Вишенки-Вечеринки"
|
||||
email: cherryprod@mail.com
|
||||
password: easypwd111111111
|
||||
response:
|
||||
status_code: 400
|
||||
|
||||
- name: "Регистрация нового бизнес аккаунта: слишком короткое название"
|
||||
request:
|
||||
url: "{BASE_URL}/business/auth/sign-up"
|
||||
method: POST
|
||||
json:
|
||||
name: "к"
|
||||
email: cherryprod@mail.com
|
||||
password: HARDpassword@10101010!
|
||||
response:
|
||||
status_code: 400
|
||||
|
||||
- name: "Регистрация нового бизнес аккаунта: некорректный e-mail [1]"
|
||||
request:
|
||||
url: "{BASE_URL}/business/auth/sign-up"
|
||||
method: POST
|
||||
json:
|
||||
name: "Рекламное агенство Вишенки-Вечеринки"
|
||||
email: a@b
|
||||
password: HARDpassword@10101010!
|
||||
response:
|
||||
status_code: 400
|
||||
|
||||
- name: "Регистрация нового бизнес аккаунта: некорректный e-mail [2]"
|
||||
request:
|
||||
url: "{BASE_URL}/business/auth/sign-up"
|
||||
method: POST
|
||||
json:
|
||||
name: "Рекламное агенство Вишенки-Вечеринки"
|
||||
email: "привет@к"
|
||||
password: HARDpassword@10101010!
|
||||
response:
|
||||
status_code: 400
|
||||
|
||||
- name: "Регистрация нового бизнес аккаунта: некорректный e-mail [3]"
|
||||
request:
|
||||
url: "{BASE_URL}/business/auth/sign-up"
|
||||
method: POST
|
||||
json:
|
||||
name: "Рекламное агенство Вишенки-Вечеринки"
|
||||
email: "@edu.gmail.com"
|
||||
password: HARDpassword@10101010!
|
||||
response:
|
||||
status_code: 400
|
||||
|
||||
- name: "Регистрация нового бизнес аккаунта: корректно"
|
||||
request:
|
||||
url: "{BASE_URL}/business/auth/sign-up"
|
||||
method: POST
|
||||
json:
|
||||
name: "Рекламное агенство Вишенки-Вечеринки"
|
||||
email: cherryprod@mail.com
|
||||
password: HARDpassword@10101010!
|
||||
response:
|
||||
status_code: 200
|
||||
@@ -0,0 +1,23 @@
|
||||
test_name: Базовая регистрация и аутентификация
|
||||
|
||||
stages:
|
||||
- name: "Регистрация нового бизнес аккаунта"
|
||||
request:
|
||||
url: "{BASE_URL}/business/auth/sign-up"
|
||||
method: POST
|
||||
json:
|
||||
name: "Рекламное агенство Малинки-Вечеринки"
|
||||
email: raspberryprod@mail.com
|
||||
password: SuperStrongPassword2000!
|
||||
response:
|
||||
status_code: 200
|
||||
|
||||
- name: "Аутентификация"
|
||||
request:
|
||||
url: "{BASE_URL}/business/auth/sign-in"
|
||||
method: POST
|
||||
json:
|
||||
email: raspberryprod@mail.com
|
||||
password: SuperStrongPassword2000!
|
||||
response:
|
||||
status_code: 200
|
||||
@@ -0,0 +1,380 @@
|
||||
test_name: Создание промокода с ошибкой
|
||||
|
||||
stages:
|
||||
- name: "Регистрация компании"
|
||||
request:
|
||||
url: "{BASE_URL}/business/auth/sign-up"
|
||||
method: POST
|
||||
json:
|
||||
name: "Кто-то"
|
||||
email: pochta@mail.com
|
||||
password: SuperStrongPassword2000!
|
||||
response:
|
||||
status_code: 200
|
||||
save:
|
||||
json:
|
||||
company100_token_old: token
|
||||
|
||||
- name: "Аутентификация"
|
||||
request:
|
||||
url: "{BASE_URL}/business/auth/sign-in"
|
||||
method: POST
|
||||
json:
|
||||
email: pochta@mail.com
|
||||
password: SuperStrongPassword2000!
|
||||
response:
|
||||
status_code: 200
|
||||
save:
|
||||
json:
|
||||
company100_token: token
|
||||
|
||||
- name: "Попытка создать промокод со старым токеном"
|
||||
id: 04_create1
|
||||
request:
|
||||
url: "{BASE_URL}/business/promo"
|
||||
method: POST
|
||||
headers:
|
||||
Authorization: "Bearer {company100_token_old}"
|
||||
json: !include components/json/promo1.json
|
||||
response:
|
||||
status_code: 401
|
||||
|
||||
- name: "Создание некорректного промокода (пропущено описание)"
|
||||
request:
|
||||
url: "{BASE_URL}/business/promo"
|
||||
method: POST
|
||||
headers:
|
||||
Authorization: "Bearer {company100_token}"
|
||||
json:
|
||||
target: {}
|
||||
max_count: 10
|
||||
active_from: "2025-01-10"
|
||||
mode: "COMMON"
|
||||
promo_common: "sale-10"
|
||||
response:
|
||||
status_code: 400
|
||||
|
||||
- name: "Создание некорректного промокода (пропущен таргет)"
|
||||
request:
|
||||
url: "{BASE_URL}/business/promo"
|
||||
method: POST
|
||||
headers:
|
||||
Authorization: "Bearer {company100_token}"
|
||||
json:
|
||||
description: "Повышенный кэшбек 40% для новых клиентов банка!"
|
||||
max_count: 100
|
||||
active_from: "2028-12-20"
|
||||
mode: "COMMON"
|
||||
promo_common: "sale-40"
|
||||
response:
|
||||
status_code: 400
|
||||
|
||||
- name: "Создание некорректного промокода (некорректный mode)"
|
||||
request:
|
||||
url: "{BASE_URL}/business/promo"
|
||||
method: POST
|
||||
headers:
|
||||
Authorization: "Bearer {company100_token}"
|
||||
json:
|
||||
description: "Подарочная маска для сна при оформлении кредита на машину"
|
||||
target:
|
||||
age_from: 28
|
||||
age_until: 50
|
||||
country: ru
|
||||
max_count: 1
|
||||
active_from: "2025-01-01"
|
||||
active_until: "2028-12-30"
|
||||
mode: "EMINEM"
|
||||
promo_unique:
|
||||
- uniq1
|
||||
- uniq2
|
||||
- uniq3
|
||||
response:
|
||||
status_code: 400
|
||||
|
||||
- name: "Создание некорректного промокода (некорректный max_count)"
|
||||
request:
|
||||
url: "{BASE_URL}/business/promo"
|
||||
method: POST
|
||||
headers:
|
||||
Authorization: "Bearer {company100_token}"
|
||||
json:
|
||||
description: "Подарочная маска для сна при оформлении кредита на машину"
|
||||
target:
|
||||
age_from: 28
|
||||
age_until: 50
|
||||
country: ru
|
||||
max_count: 3
|
||||
active_from: "2025-01-01"
|
||||
active_until: "2028-12-30"
|
||||
mode: "UNIQUE"
|
||||
promo_unique:
|
||||
- uniq1
|
||||
- uniq2
|
||||
- uniq3
|
||||
response:
|
||||
status_code: 400
|
||||
|
||||
- name: "Создание некорректного промокода (некорректная страна и маленькое описание)"
|
||||
request:
|
||||
url: "{BASE_URL}/business/promo"
|
||||
method: POST
|
||||
headers:
|
||||
Authorization: "Bearer {company100_token}"
|
||||
json:
|
||||
description: "small"
|
||||
target:
|
||||
age_from: 28
|
||||
age_until: 50
|
||||
country: Vietnam
|
||||
max_count: 1
|
||||
active_until: "2025-01-10"
|
||||
mode: "UNIQUE"
|
||||
promo_unique:
|
||||
- only_youuuu
|
||||
- not_only_you
|
||||
response:
|
||||
status_code: 400
|
||||
|
||||
- name: "Создание некорректного промокода (несуществующая страна)"
|
||||
request:
|
||||
url: "{BASE_URL}/business/promo"
|
||||
method: POST
|
||||
headers:
|
||||
Authorization: "Bearer {company100_token}"
|
||||
json:
|
||||
description: "Повышенный кэшбек 40% для новых клиентов банка!"
|
||||
max_count: 100
|
||||
target:
|
||||
country: aa
|
||||
active_from: "2028-12-20"
|
||||
mode: "COMMON"
|
||||
promo_common: "sale-40"
|
||||
response:
|
||||
status_code: 400
|
||||
|
||||
- name: "Создание некорректного промокода (age_from > age_until)"
|
||||
request:
|
||||
url: "{BASE_URL}/business/promo"
|
||||
method: POST
|
||||
headers:
|
||||
Authorization: "Bearer {company100_token}"
|
||||
json:
|
||||
description: "Повышенный кэшбек 40% для новых клиентов банка!"
|
||||
max_count: 100
|
||||
target:
|
||||
age_from: 50
|
||||
age_until: 49
|
||||
active_from: "2028-12-20"
|
||||
mode: "COMMON"
|
||||
promo_common: "sale-40"
|
||||
response:
|
||||
status_code: 400
|
||||
|
||||
- name: "Создание некорректного промокода (пропущенное promo_common)"
|
||||
request:
|
||||
url: "{BASE_URL}/business/promo"
|
||||
method: POST
|
||||
headers:
|
||||
Authorization: "Bearer {company100_token}"
|
||||
json:
|
||||
description: "Повышенный кэшбек 40% для новых клиентов банка!"
|
||||
max_count: 100
|
||||
target: {}
|
||||
active_from: "2028-12-20"
|
||||
mode: "COMMON"
|
||||
response:
|
||||
status_code: 400
|
||||
|
||||
- name: "Создание некорректного промокода (common и promo_unique)"
|
||||
request:
|
||||
url: "{BASE_URL}/business/promo"
|
||||
method: POST
|
||||
headers:
|
||||
Authorization: "Bearer {company100_token}"
|
||||
json:
|
||||
description: "Повышенный кэшбек 40% для новых клиентов банка!"
|
||||
max_count: 100
|
||||
target: {}
|
||||
active_from: "2028-12-20"
|
||||
mode: "COMMON"
|
||||
promo_unique:
|
||||
- "sale-40"
|
||||
response:
|
||||
status_code: 400
|
||||
|
||||
- name: "Создание некорректного промокода (unique и promo_common)"
|
||||
request:
|
||||
url: "{BASE_URL}/business/promo"
|
||||
method: POST
|
||||
headers:
|
||||
Authorization: "Bearer {company100_token}"
|
||||
json:
|
||||
description: "Повышенный кэшбек 40% для новых клиентов банка!"
|
||||
max_count: 1
|
||||
target: {}
|
||||
active_from: "2028-12-20"
|
||||
mode: "UNIQUE"
|
||||
promo_common: "sale-40"
|
||||
response:
|
||||
status_code: 400
|
||||
|
||||
- name: "Создание некорректного промокода (promo_common и promo_unique)"
|
||||
request:
|
||||
url: "{BASE_URL}/business/promo"
|
||||
method: POST
|
||||
headers:
|
||||
Authorization: "Bearer {company100_token}"
|
||||
json:
|
||||
description: "Повышенный кэшбек 40% для новых клиентов банка!"
|
||||
max_count: 1
|
||||
target: {}
|
||||
active_from: "2028-12-20"
|
||||
mode: "UNIQUE"
|
||||
promo_common: "sale-40"
|
||||
promo_unique:
|
||||
- "opa"
|
||||
response:
|
||||
status_code: 400
|
||||
|
||||
- name: "Создание некорректного промокода (слишком короткое promo_common)"
|
||||
request:
|
||||
url: "{BASE_URL}/business/promo"
|
||||
method: POST
|
||||
headers:
|
||||
Authorization: "Bearer {company100_token}"
|
||||
json:
|
||||
description: "Повышенный кэшбек 40% для новых клиентов банка!"
|
||||
max_count: 100
|
||||
target: {}
|
||||
active_from: "2028-12-20"
|
||||
mode: "COMMON"
|
||||
promo_common: "str"
|
||||
response:
|
||||
status_code: 400
|
||||
|
||||
- name: "Создание некорректного промокода (некорректный тип promo_unique)"
|
||||
request:
|
||||
url: "{BASE_URL}/business/promo"
|
||||
method: POST
|
||||
headers:
|
||||
Authorization: "Bearer {company100_token}"
|
||||
json:
|
||||
description: "Повышенный кэшбек 40% для новых клиентов банка!"
|
||||
max_count: 1
|
||||
target: {}
|
||||
active_from: "2028-12-20"
|
||||
mode: "UNIQUE"
|
||||
promo_unique: 123
|
||||
response:
|
||||
status_code: 400
|
||||
|
||||
- name: "Создание некорректного промокода (некорректный тип max_count)"
|
||||
request:
|
||||
url: "{BASE_URL}/business/promo"
|
||||
method: POST
|
||||
headers:
|
||||
Authorization: "Bearer {company100_token}"
|
||||
json:
|
||||
description: "Повышенный кэшбек 40% для новых клиентов банка!"
|
||||
max_count: "fifty"
|
||||
target: {}
|
||||
active_from: "2028-12-20"
|
||||
mode: "COMMON"
|
||||
promo_common: "sale-40"
|
||||
response:
|
||||
status_code: 400
|
||||
|
||||
- name: "Создание некорректного промокода (некорректный тип target)"
|
||||
request:
|
||||
url: "{BASE_URL}/business/promo"
|
||||
method: POST
|
||||
headers:
|
||||
Authorization: "Bearer {company100_token}"
|
||||
json:
|
||||
description: "Повышенный кэшбек 40% для новых клиентов банка!"
|
||||
max_count: 1
|
||||
target: 123
|
||||
active_from: "2028-12-20"
|
||||
mode: "UNIQUE"
|
||||
promo_unique:
|
||||
- "opa"
|
||||
response:
|
||||
status_code: 400
|
||||
|
||||
- name: "Создание некорректного промокода (отрицательный max_count)"
|
||||
request:
|
||||
url: "{BASE_URL}/business/promo"
|
||||
method: POST
|
||||
headers:
|
||||
Authorization: "Bearer {company100_token}"
|
||||
json:
|
||||
description: "Повышенный кэшбек 40% для новых клиентов банка!"
|
||||
max_count: -1
|
||||
target: {}
|
||||
mode: "COMMON"
|
||||
promo_common: "something-here"
|
||||
response:
|
||||
status_code: 400
|
||||
|
||||
- name: "Создание некорректного промокода (слишком большой max_count)"
|
||||
request:
|
||||
url: "{BASE_URL}/business/promo"
|
||||
method: POST
|
||||
headers:
|
||||
Authorization: "Bearer {company100_token}"
|
||||
json:
|
||||
description: "Повышенный кэшбек 40% для новых клиентов банка!"
|
||||
max_count: 100000001
|
||||
target: {}
|
||||
mode: "COMMON"
|
||||
promo_common: "something-here"
|
||||
response:
|
||||
status_code: 400
|
||||
|
||||
- name: "Создание некорректного промокода (огромный max_count)"
|
||||
request:
|
||||
url: "{BASE_URL}/business/promo"
|
||||
method: POST
|
||||
headers:
|
||||
Authorization: "Bearer {company100_token}"
|
||||
json:
|
||||
description: "Повышенный кэшбек 40% для новых клиентов банка!"
|
||||
max_count: 1000000000001
|
||||
target: {}
|
||||
mode: "COMMON"
|
||||
promo_common: "something-here"
|
||||
response:
|
||||
status_code: 400
|
||||
|
||||
- name: "Создание некорректного промокода (некорректная ссылка)"
|
||||
request:
|
||||
url: "{BASE_URL}/business/promo"
|
||||
method: POST
|
||||
headers:
|
||||
Authorization: "Bearer {company100_token}"
|
||||
json:
|
||||
description: "Повышенный кэшбек 40% для новых клиентов банка!"
|
||||
image_url: itsnotalink
|
||||
max_count: 1000
|
||||
target: {}
|
||||
mode: "COMMON"
|
||||
promo_common: "something-here"
|
||||
response:
|
||||
status_code: 400
|
||||
|
||||
- name: "Создание некорректного промокода (некорректная ссылка)"
|
||||
request:
|
||||
url: "{BASE_URL}/business/promo"
|
||||
method: POST
|
||||
headers:
|
||||
Authorization: "Bearer {company100_token}"
|
||||
json:
|
||||
description: "Повышенный кэшбек 40% для новых клиентов банка!"
|
||||
image_url: "privet@com"
|
||||
max_count: 1000
|
||||
target: {}
|
||||
mode: "COMMON"
|
||||
promo_common: "something-here"
|
||||
response:
|
||||
status_code: 400
|
||||
@@ -0,0 +1,83 @@
|
||||
test_name: Корректное создание промокода
|
||||
|
||||
# Подключение файлов из директории components для переиспользования в тестах
|
||||
includes:
|
||||
- !include components/basic_auth.yml
|
||||
- !include components/basic_promo.yml
|
||||
|
||||
stages:
|
||||
- type: ref
|
||||
id: basic_auth_reg1
|
||||
# Переиспользование шага из файла components/basic_auth.yml
|
||||
|
||||
- type: ref
|
||||
id: basic_auth_auth1
|
||||
# Переиспользование шага из файла components/basic_auth.yml
|
||||
|
||||
- type: ref
|
||||
id: basic_auth_reg2
|
||||
# Переиспользование шага из файла components/basic_auth.yml
|
||||
|
||||
- type: ref
|
||||
id: basic_auth_auth2
|
||||
# Переиспользование шага из файла components/basic_auth.yml
|
||||
|
||||
- name: "Успешное создание промокода [1]"
|
||||
id: 04_create1
|
||||
request:
|
||||
url: "{BASE_URL}/business/promo"
|
||||
method: POST
|
||||
headers:
|
||||
Authorization: "Bearer {company1_token}"
|
||||
# Чтобы посмотреть на структуру запроса, смотрите файлы с соответствующим названием в директории components/json
|
||||
json: !include components/json/promo1.json
|
||||
response:
|
||||
status_code: 201
|
||||
save:
|
||||
json:
|
||||
company1_promo1_id: id
|
||||
|
||||
- name: "Успешное создание промокода [2]"
|
||||
id: 04_create2
|
||||
request:
|
||||
url: "{BASE_URL}/business/promo"
|
||||
method: POST
|
||||
headers:
|
||||
Authorization: "Bearer {company1_token}"
|
||||
# Чтобы посмотреть на структуру запроса, смотрите файлы с соответствующим названием в директории components/json
|
||||
json: !include components/json/promo2.json
|
||||
response:
|
||||
status_code: 201
|
||||
save:
|
||||
json:
|
||||
company1_promo2_id: id
|
||||
|
||||
- name: "Успешное создание промокода [3]"
|
||||
id: 04_create3
|
||||
request:
|
||||
url: "{BASE_URL}/business/promo"
|
||||
method: POST
|
||||
headers:
|
||||
Authorization: "Bearer {company1_token}"
|
||||
# Чтобы посмотреть на структуру запроса, смотрите файлы с соответствующим названием в директории components/json
|
||||
json: !include components/json/promo3.json
|
||||
response:
|
||||
status_code: 201
|
||||
save:
|
||||
json:
|
||||
company1_promo3_id: id
|
||||
|
||||
- name: "Успешное создание промокода [4]"
|
||||
id: 04_create4
|
||||
request:
|
||||
url: "{BASE_URL}/business/promo"
|
||||
method: POST
|
||||
headers:
|
||||
Authorization: "Bearer {company2_token}"
|
||||
# Чтобы посмотреть на структуру запроса, смотрите файлы с соответствующим названием в директории components/json
|
||||
json: !include components/json/promo4.json
|
||||
response:
|
||||
status_code: 201
|
||||
save:
|
||||
json:
|
||||
company2_promo1_id: id
|
||||
@@ -0,0 +1,83 @@
|
||||
test_name: Корректное создание промокода [усложненная версия]
|
||||
|
||||
# Подключение файлов из директории components для переиспользования в тестах
|
||||
includes:
|
||||
- !include components/basic_auth.yml
|
||||
|
||||
stages:
|
||||
- type: ref
|
||||
id: basic_auth_auth1
|
||||
# Переиспользование шага из файла components/basic_auth.yml
|
||||
|
||||
- type: ref
|
||||
id: basic_auth_auth2
|
||||
# Переиспользование шага из файла components/basic_auth.yml
|
||||
|
||||
- name: "Успешное создание промокода [5]"
|
||||
request:
|
||||
url: "{BASE_URL}/business/promo"
|
||||
method: POST
|
||||
headers:
|
||||
Authorization: "Bearer {company1_token}"
|
||||
json:
|
||||
description: "Повышенный кэшбек 10% для новых клиентов банка!"
|
||||
image_url: "http://cdn2.thecatapi.com/"
|
||||
target: {}
|
||||
max_count: 10
|
||||
active_from: "1950-01-01"
|
||||
mode: "COMMON"
|
||||
promo_common: "sale-10"
|
||||
response:
|
||||
status_code: 201
|
||||
|
||||
- name: "Успешное создание промокода [6]"
|
||||
request:
|
||||
url: "{BASE_URL}/business/promo"
|
||||
method: POST
|
||||
headers:
|
||||
Authorization: "Bearer {company1_token}"
|
||||
json:
|
||||
description: "Повышенный кэшбек 10% для новых клиентов банка!"
|
||||
image_url: "http://cdn2.thecatapi.com/"
|
||||
target:
|
||||
country: Ru
|
||||
max_count: 10
|
||||
mode: "COMMON"
|
||||
promo_common: "sale-10"
|
||||
response:
|
||||
status_code: 201
|
||||
|
||||
- name: "Успешное создание промокода [6]"
|
||||
request:
|
||||
url: "{BASE_URL}/business/promo"
|
||||
method: POST
|
||||
headers:
|
||||
Authorization: "Bearer {company1_token}"
|
||||
json:
|
||||
description: "Повышенный кэшбек 10% для новых клиентов банка!"
|
||||
image_url: "http://cdn2.thecatapi.com/"
|
||||
target:
|
||||
country: RU
|
||||
max_count: 10
|
||||
mode: "COMMON"
|
||||
promo_common: "sale-10"
|
||||
response:
|
||||
status_code: 201
|
||||
|
||||
- name: "Успешное создание промокода [7]"
|
||||
request:
|
||||
url: "{BASE_URL}/business/promo"
|
||||
method: POST
|
||||
headers:
|
||||
Authorization: "Bearer {company1_token}"
|
||||
json:
|
||||
description: "Повышенный кэшбек 10% для новых клиентов банка!"
|
||||
image_url: "http://cdn2.thecatapi.com/"
|
||||
target:
|
||||
age_from: 100
|
||||
age_until: 100
|
||||
max_count: 10
|
||||
mode: "COMMON"
|
||||
promo_common: "sale-10"
|
||||
response:
|
||||
status_code: 201
|
||||
@@ -0,0 +1,266 @@
|
||||
test_name: Получение промокодов компанией
|
||||
|
||||
# Подключение файлов из директории components для переиспользования в тестах
|
||||
includes:
|
||||
- !include components/basic_auth.yml
|
||||
- !include components/basic_promo.yml
|
||||
|
||||
# Перед этим тестом необходимо создать промокоды с помощью test_04_business_promo_create_valid.tavern.yml
|
||||
|
||||
stages:
|
||||
- type: ref
|
||||
id: basic_auth_auth1
|
||||
|
||||
- type: ref
|
||||
id: basic_auth_auth2
|
||||
|
||||
- name: "Получение всего списка промокодов без токена"
|
||||
request:
|
||||
url: "{BASE_URL}/business/promo"
|
||||
method: GET
|
||||
headers:
|
||||
Authorization: "Bearer invalid"
|
||||
response:
|
||||
status_code: 401
|
||||
|
||||
- name: "Получение всего списка промокодов"
|
||||
request:
|
||||
url: "{BASE_URL}/business/promo"
|
||||
method: GET
|
||||
headers:
|
||||
Authorization: "Bearer {company1_token}"
|
||||
response:
|
||||
status_code: 200
|
||||
json:
|
||||
# Проверяем, что вернулись все промокоды компании, отсортированные в порядке убывания даты создания.
|
||||
- !include components/json/promo3.json
|
||||
- !include components/json/promo2.json
|
||||
- !include components/json/promo1.json
|
||||
headers:
|
||||
X-Total-Count: "3"
|
||||
|
||||
- name: "Получение списка промокодов с пагинацией [1]"
|
||||
request:
|
||||
url: "{BASE_URL}/business/promo"
|
||||
method: GET
|
||||
params:
|
||||
offset: 1
|
||||
headers:
|
||||
Authorization: "Bearer {company1_token}"
|
||||
response:
|
||||
status_code: 200
|
||||
json:
|
||||
- !include components/json/promo2.json
|
||||
- !include components/json/promo1.json
|
||||
headers:
|
||||
X-Total-Count: "3"
|
||||
|
||||
- name: "Получение списка промокодов с пагинацией [2]"
|
||||
request:
|
||||
url: "{BASE_URL}/business/promo"
|
||||
method: GET
|
||||
params:
|
||||
offset: 1
|
||||
limit: 1
|
||||
headers:
|
||||
Authorization: "Bearer {company1_token}"
|
||||
response:
|
||||
status_code: 200
|
||||
json:
|
||||
- !include components/json/promo2.json
|
||||
headers:
|
||||
X-Total-Count: "3"
|
||||
|
||||
- name: "Получение списка промокодов с пагинацией [3]"
|
||||
request:
|
||||
url: "{BASE_URL}/business/promo"
|
||||
method: GET
|
||||
params:
|
||||
offset: 100
|
||||
headers:
|
||||
Authorization: "Bearer {company1_token}"
|
||||
response:
|
||||
status_code: 200
|
||||
json: []
|
||||
headers:
|
||||
X-Total-Count: "3"
|
||||
|
||||
- name: "Получение списка промокодов с фильтрами [1]"
|
||||
request:
|
||||
url: "{BASE_URL}/business/promo"
|
||||
method: GET
|
||||
params:
|
||||
country: ru
|
||||
headers:
|
||||
Authorization: "Bearer {company1_token}"
|
||||
response:
|
||||
status_code: 200
|
||||
json:
|
||||
- !include components/json/promo3.json
|
||||
- !include components/json/promo1.json
|
||||
headers:
|
||||
X-Total-Count: "2"
|
||||
|
||||
- name: "Получение списка промокодов с фильтрами и пагинацией [2]"
|
||||
request:
|
||||
url: "{BASE_URL}/business/promo"
|
||||
method: GET
|
||||
params:
|
||||
country: ru
|
||||
sort_by: active_until
|
||||
headers:
|
||||
Authorization: "Bearer {company1_token}"
|
||||
response:
|
||||
status_code: 200
|
||||
json:
|
||||
- !include components/json/promo1.json
|
||||
- !include components/json/promo3.json
|
||||
headers:
|
||||
X-Total-Count: "2"
|
||||
|
||||
- name: "Получение списка промокодов с фильтрами и пагинацией [3]"
|
||||
request:
|
||||
url: "{BASE_URL}/business/promo"
|
||||
method: GET
|
||||
params:
|
||||
country: ru,FR
|
||||
sort_by: active_from
|
||||
limit: 10
|
||||
headers:
|
||||
Authorization: "Bearer {company1_token}"
|
||||
response:
|
||||
status_code: 200
|
||||
json:
|
||||
- !include components/json/promo2.json
|
||||
- !include components/json/promo1.json
|
||||
- !include components/json/promo3.json
|
||||
headers:
|
||||
X-Total-Count: "3"
|
||||
|
||||
- name: "Получение списка промокодов с фильтрами и пагинацией [4]"
|
||||
request:
|
||||
url: "{BASE_URL}/business/promo"
|
||||
method: GET
|
||||
params:
|
||||
country: ru,FR
|
||||
sort_by: active_from
|
||||
limit: 2
|
||||
offset: 2
|
||||
headers:
|
||||
Authorization: "Bearer {company1_token}"
|
||||
response:
|
||||
status_code: 200
|
||||
json:
|
||||
- !include components/json/promo3.json
|
||||
headers:
|
||||
X-Total-Count: "3"
|
||||
|
||||
- name: "Получение списка промокодов с фильтрами и пагинацией [5]"
|
||||
request:
|
||||
url: "{BASE_URL}/business/promo"
|
||||
method: GET
|
||||
params:
|
||||
country: ru,FR,us
|
||||
sort_by: active_from
|
||||
offset: 0
|
||||
limit: 2
|
||||
headers:
|
||||
Authorization: "Bearer {company1_token}"
|
||||
response:
|
||||
status_code: 200
|
||||
json:
|
||||
- !include components/json/promo2.json
|
||||
- !include components/json/promo1.json
|
||||
headers:
|
||||
X-Total-Count: "3"
|
||||
|
||||
- name: "Получение списка промокодов с фильтрами и пагинацией limit=0"
|
||||
request:
|
||||
url: "{BASE_URL}/business/promo"
|
||||
method: GET
|
||||
params:
|
||||
limit: 0
|
||||
headers:
|
||||
Authorization: "Bearer {company1_token}"
|
||||
response:
|
||||
status_code: 200
|
||||
json: []
|
||||
|
||||
- name: "Успешное создание промокода [5]"
|
||||
request:
|
||||
url: "{BASE_URL}/business/promo"
|
||||
method: POST
|
||||
headers:
|
||||
Authorization: "Bearer {company1_token}"
|
||||
json: !include components/json/promo5.json
|
||||
response:
|
||||
status_code: 201
|
||||
save:
|
||||
json:
|
||||
company1_promo5_id: id
|
||||
|
||||
- name: "Получение списка промокодов с фильтрами и пагинацией"
|
||||
request:
|
||||
url: "{BASE_URL}/business/promo"
|
||||
method: GET
|
||||
params:
|
||||
country: ru,FR
|
||||
sort_by: active_from
|
||||
limit: 10
|
||||
headers:
|
||||
Authorization: "Bearer {company1_token}"
|
||||
response:
|
||||
status_code: 200
|
||||
json:
|
||||
- !include components/json/promo2.json
|
||||
- !include components/json/promo1.json
|
||||
- !include components/json/promo3.json
|
||||
headers:
|
||||
X-Total-Count: "3"
|
||||
|
||||
- name: "Получение промокода по ID"
|
||||
request:
|
||||
url: "{BASE_URL}/business/promo/{company1_promo5_id}"
|
||||
method: GET
|
||||
headers:
|
||||
Authorization: "Bearer {company1_token}"
|
||||
response:
|
||||
status_code: 200
|
||||
|
||||
- name: "Получение списка промокодов с фильтрами и пагинацией"
|
||||
request:
|
||||
url: "{BASE_URL}/business/promo"
|
||||
method: GET
|
||||
params:
|
||||
country: ru,Kz,FR
|
||||
sort_by: active_from
|
||||
limit: 10
|
||||
headers:
|
||||
Authorization: "Bearer {company1_token}"
|
||||
response:
|
||||
status_code: 200
|
||||
json:
|
||||
- !include components/json/promo2.json
|
||||
- !include components/json/promo1.json
|
||||
- !include components/json/promo3.json
|
||||
- !include components/json/promo5.json
|
||||
headers:
|
||||
X-Total-Count: "4"
|
||||
|
||||
- name: "Получение списка промокодов с фильтрами и пагинацией"
|
||||
request:
|
||||
url: "{BASE_URL}/business/promo"
|
||||
method: GET
|
||||
params:
|
||||
country: Kz
|
||||
sort_by: active_until
|
||||
limit: 10
|
||||
headers:
|
||||
Authorization: "Bearer {company1_token}"
|
||||
response:
|
||||
status_code: 200
|
||||
json:
|
||||
- !include components/json/promo1.json
|
||||
- !include components/json/promo5.json
|
||||
headers:
|
||||
X-Total-Count: "2"
|
||||
@@ -0,0 +1,93 @@
|
||||
test_name: Получение промокодов компанией
|
||||
|
||||
# Подключение файлов из директории components для переиспользования в тестах
|
||||
includes:
|
||||
- !include components/basic_auth.yml
|
||||
- !include components/basic_promo.yml
|
||||
|
||||
# Перед этим тестом необходимо создать промокоды с помощью test_04_business_promo_create_valid.tavern.yml
|
||||
|
||||
stages:
|
||||
- type: ref
|
||||
id: basic_auth_auth1
|
||||
|
||||
- type: ref
|
||||
id: basic_auth_auth2
|
||||
|
||||
- name: "Получение списка промокодов: некорректный формат sort_by"
|
||||
request:
|
||||
url: "{BASE_URL}/business/promo"
|
||||
method: GET
|
||||
params:
|
||||
country: ru
|
||||
sort_by: active_untilllll
|
||||
headers:
|
||||
Authorization: "Bearer {company1_token}"
|
||||
response:
|
||||
status_code: 400
|
||||
|
||||
- name: "Получение списка промокодов: некорректный формат country"
|
||||
request:
|
||||
url: "{BASE_URL}/business/promo"
|
||||
method: GET
|
||||
params:
|
||||
country: russia
|
||||
headers:
|
||||
Authorization: "Bearer {company1_token}"
|
||||
response:
|
||||
status_code: 400
|
||||
|
||||
- name: "Получение списка промокодов: некорректный формат country"
|
||||
request:
|
||||
url: "{BASE_URL}/business/promo"
|
||||
method: GET
|
||||
params:
|
||||
country: fr,us,russia
|
||||
headers:
|
||||
Authorization: "Bearer {company1_token}"
|
||||
response:
|
||||
status_code: 400
|
||||
|
||||
- name: "Получение списка промокодов: некорректный формат limit"
|
||||
request:
|
||||
url: "{BASE_URL}/business/promo"
|
||||
method: GET
|
||||
params:
|
||||
limit: russia
|
||||
headers:
|
||||
Authorization: "Bearer {company1_token}"
|
||||
response:
|
||||
status_code: 400
|
||||
|
||||
- name: "Получение списка промокодов: некорректный формат offset"
|
||||
request:
|
||||
url: "{BASE_URL}/business/promo"
|
||||
method: GET
|
||||
params:
|
||||
offset: russia
|
||||
headers:
|
||||
Authorization: "Bearer {company1_token}"
|
||||
response:
|
||||
status_code: 400
|
||||
|
||||
- name: "Получение списка промокодов: отрицательный offset"
|
||||
request:
|
||||
url: "{BASE_URL}/business/promo"
|
||||
method: GET
|
||||
params:
|
||||
offset: -5
|
||||
headers:
|
||||
Authorization: "Bearer {company1_token}"
|
||||
response:
|
||||
status_code: 400
|
||||
|
||||
- name: "Получение списка промокодов: отрицательный limit"
|
||||
request:
|
||||
url: "{BASE_URL}/business/promo"
|
||||
method: GET
|
||||
params:
|
||||
limit: -5
|
||||
headers:
|
||||
Authorization: "Bearer {company1_token}"
|
||||
response:
|
||||
status_code: 400
|
||||
@@ -0,0 +1,260 @@
|
||||
test_name: Корректное получение и изменение промокода по ID
|
||||
|
||||
# Подключение файлов из директории components для переиспользования в тестах
|
||||
includes:
|
||||
- !include components/basic_auth.yml
|
||||
|
||||
# Данный тест должен запускаться после test_06_business_promo_id_valid.tavern.yml
|
||||
|
||||
stages:
|
||||
- type: ref
|
||||
id: basic_auth_auth1
|
||||
|
||||
- type: ref
|
||||
id: basic_auth_auth2
|
||||
|
||||
- name: "Успешное создание промокода [компания 1]"
|
||||
request:
|
||||
url: "{BASE_URL}/business/promo"
|
||||
method: POST
|
||||
headers:
|
||||
Authorization: "Bearer {company1_token}"
|
||||
json:
|
||||
description: "Аааавтомобиль в подарок"
|
||||
target: {}
|
||||
max_count: 10
|
||||
mode: "COMMON"
|
||||
promo_common: "sale-10"
|
||||
response:
|
||||
status_code: 201
|
||||
save:
|
||||
json:
|
||||
company1_promo1_id: id
|
||||
|
||||
- name: "Успешное создание промокода [компания 2]"
|
||||
request:
|
||||
url: "{BASE_URL}/business/promo"
|
||||
method: POST
|
||||
headers:
|
||||
Authorization: "Bearer {company2_token}"
|
||||
json:
|
||||
description: "Бесплатный скин на пуджа при регистрации по промокоду!"
|
||||
target: {}
|
||||
max_count: 1
|
||||
mode: UNIQUE
|
||||
active_from: "2030-08-08"
|
||||
promo_unique:
|
||||
- dota2
|
||||
- doka2
|
||||
- warcraft3
|
||||
response:
|
||||
status_code: 201
|
||||
save:
|
||||
json:
|
||||
company2_promo1_id: id
|
||||
|
||||
- name: "Аутентификация компании 1 (инвалидация старого токена)"
|
||||
request:
|
||||
url: "{BASE_URL}/business/auth/sign-in"
|
||||
method: POST
|
||||
json:
|
||||
email: "{company1.email:s}"
|
||||
password: "{company1.password:s}"
|
||||
response:
|
||||
status_code: 200
|
||||
|
||||
- name: "Получение промокода [1] со старым токеном"
|
||||
request:
|
||||
url: "{BASE_URL}/business/promo/{company1_promo1_id}"
|
||||
method: GET
|
||||
headers:
|
||||
Authorization: "Bearer {company1_token}"
|
||||
response:
|
||||
status_code: 401
|
||||
|
||||
- type: ref
|
||||
id: basic_auth_auth1
|
||||
|
||||
- name: "Редактируем несуществующий промокод (uuid взят из google)"
|
||||
request:
|
||||
url: "{BASE_URL}/business/promo/550e8400-e29b-41d4-a716-446655440000"
|
||||
method: PATCH
|
||||
headers:
|
||||
Authorization: "Bearer {company1_token}"
|
||||
json:
|
||||
description: "Кэшбек 100%"
|
||||
response:
|
||||
status_code: 404
|
||||
|
||||
- name: "Редактируем чужой промокод"
|
||||
request:
|
||||
url: "{BASE_URL}/business/promo/{company2_promo1_id}"
|
||||
method: PATCH
|
||||
headers:
|
||||
Authorization: "Bearer {company1_token}"
|
||||
json:
|
||||
description: "Кэшбек 100%"
|
||||
response:
|
||||
status_code: 403
|
||||
|
||||
- name: "Редактируем промокод без токена"
|
||||
request:
|
||||
url: "{BASE_URL}/business/promo/{company2_promo1_id}"
|
||||
method: PATCH
|
||||
json:
|
||||
description: "Кэшбек 100%"
|
||||
response:
|
||||
# Если пользователь передал некорректный токен (или не передал его вовсе), необходимо возвращать ошибку аутентификации
|
||||
status_code: 401
|
||||
|
||||
- name: "Редактируем промокод, некорректный запрос: короткий description"
|
||||
request:
|
||||
url: "{BASE_URL}/business/promo/{company2_promo1_id}"
|
||||
method: PATCH
|
||||
headers:
|
||||
Authorization: "Bearer {company2_token}"
|
||||
json:
|
||||
description: "qqall"
|
||||
response:
|
||||
status_code: 400
|
||||
|
||||
- name: "Редактируем промокод, некорректный запрос: некорректный image_url"
|
||||
request:
|
||||
url: "{BASE_URL}/business/promo/{company2_promo1_id}"
|
||||
method: PATCH
|
||||
headers:
|
||||
Authorization: "Bearer {company2_token}"
|
||||
json:
|
||||
description: "Бонус 10000%!"
|
||||
image_url: no
|
||||
response:
|
||||
status_code: 400
|
||||
|
||||
- name: "Редактируем промокод, некорректный запрос: некорректный image_url"
|
||||
request:
|
||||
url: "{BASE_URL}/business/promo/{company2_promo1_id}"
|
||||
method: PATCH
|
||||
headers:
|
||||
Authorization: "Bearer {company2_token}"
|
||||
json:
|
||||
description: "Бонус 10000%!"
|
||||
image_url: "https://"
|
||||
response:
|
||||
status_code: 400
|
||||
|
||||
- name: "Редактируем промокод, некорректный запрос: некорректный image_url"
|
||||
request:
|
||||
url: "{BASE_URL}/business/promo/{company2_promo1_id}"
|
||||
method: PATCH
|
||||
headers:
|
||||
Authorization: "Bearer {company2_token}"
|
||||
json:
|
||||
description: "Бонус 10000%!"
|
||||
image_url: notalink
|
||||
response:
|
||||
status_code: 400
|
||||
|
||||
- name: "Редактируем промокод, некорректный запрос: некорректный image_url"
|
||||
request:
|
||||
url: "{BASE_URL}/business/promo/{company2_promo1_id}"
|
||||
method: PATCH
|
||||
headers:
|
||||
Authorization: "Bearer {company2_token}"
|
||||
json:
|
||||
image_url: jpeg
|
||||
response:
|
||||
status_code: 400
|
||||
|
||||
- name: "Редактируем промокод, некорректный таргет"
|
||||
request:
|
||||
url: "{BASE_URL}/business/promo/{company2_promo1_id}"
|
||||
method: PATCH
|
||||
headers:
|
||||
Authorization: "Bearer {company2_token}"
|
||||
json:
|
||||
description: "Бонус 10000%!"
|
||||
target:
|
||||
age_from: 19
|
||||
age_until: 17
|
||||
response:
|
||||
status_code: 400
|
||||
|
||||
- name: "Редактируем промокод, некорректный таргет"
|
||||
request:
|
||||
url: "{BASE_URL}/business/promo/{company2_promo1_id}"
|
||||
method: PATCH
|
||||
headers:
|
||||
Authorization: "Bearer {company2_token}"
|
||||
json:
|
||||
description: "Бонус 10000%!"
|
||||
target:
|
||||
country: "USA"
|
||||
response:
|
||||
status_code: 400
|
||||
|
||||
- name: "Редактируем промокод, некорректный таргет"
|
||||
request:
|
||||
url: "{BASE_URL}/business/promo/{company2_promo1_id}"
|
||||
method: PATCH
|
||||
headers:
|
||||
Authorization: "Bearer {company2_token}"
|
||||
json:
|
||||
description: "Бонус 10000%!"
|
||||
target:
|
||||
categories:
|
||||
- ""
|
||||
response:
|
||||
status_code: 400
|
||||
|
||||
- name: "Редактируем промокод, некорректный max_count (для UNIQUE только 1)"
|
||||
request:
|
||||
url: "{BASE_URL}/business/promo/{company2_promo1_id}"
|
||||
method: PATCH
|
||||
headers:
|
||||
Authorization: "Bearer {company2_token}"
|
||||
json:
|
||||
max_count: 10
|
||||
response:
|
||||
status_code: 400
|
||||
|
||||
- name: "Редактируем промокод, отрицательный max_count"
|
||||
request:
|
||||
url: "{BASE_URL}/business/promo/{company1_promo1_id}"
|
||||
method: PATCH
|
||||
headers:
|
||||
Authorization: "Bearer {company1_token}"
|
||||
json:
|
||||
max_count: -10
|
||||
response:
|
||||
status_code: 400
|
||||
|
||||
- name: "Редактируем промокод, некорректный active_from"
|
||||
request:
|
||||
url: "{BASE_URL}/business/promo/{company2_promo1_id}"
|
||||
method: PATCH
|
||||
headers:
|
||||
Authorization: "Bearer {company2_token}"
|
||||
json:
|
||||
active_from: "2024-12-28 12:00:00"
|
||||
response:
|
||||
status_code: 400
|
||||
|
||||
- name: "Получение промокода: проверяем, что поля остались неизменными"
|
||||
request:
|
||||
url: "{BASE_URL}/business/promo/{company2_promo1_id}"
|
||||
method: GET
|
||||
headers:
|
||||
Authorization: "Bearer {company2_token}"
|
||||
response:
|
||||
status_code: 200
|
||||
json:
|
||||
description: "Бесплатный скин на пуджа при регистрации по промокоду!"
|
||||
target: {}
|
||||
max_count: 1
|
||||
mode: UNIQUE
|
||||
active_from: "2030-08-08"
|
||||
promo_unique:
|
||||
- dota2
|
||||
- doka2
|
||||
- warcraft3
|
||||
# В рамках данной группы тестов значение поля active не валидируется
|
||||
@@ -0,0 +1,265 @@
|
||||
test_name: Корректное получение и изменение промокода по ID
|
||||
|
||||
# Подключение файлов из директории components для переиспользования в тестах
|
||||
includes:
|
||||
- !include components/basic_auth.yml
|
||||
|
||||
stages:
|
||||
- type: ref
|
||||
id: basic_auth_reg1
|
||||
# Переиспользование шага из файла components/basic_auth.yml
|
||||
|
||||
- type: ref
|
||||
id: basic_auth_auth1
|
||||
# Переиспользование шага из файла components/basic_auth.yml
|
||||
|
||||
- type: ref
|
||||
id: basic_auth_reg2
|
||||
# Переиспользование шага из файла components/basic_auth.yml
|
||||
|
||||
- type: ref
|
||||
id: basic_auth_auth2
|
||||
# Переиспользование шага из файла components/basic_auth.yml
|
||||
|
||||
- name: "Успешное создание промокода [компания 1]"
|
||||
request:
|
||||
url: "{BASE_URL}/business/promo"
|
||||
method: POST
|
||||
headers:
|
||||
Authorization: "Bearer {company1_token}"
|
||||
json:
|
||||
description: "Повышенный кэшбек 10% для новых клиентов банка!"
|
||||
image_url: "https://cdn2.thecatapi.com/images/3lo.jpg"
|
||||
target: {}
|
||||
max_count: 10
|
||||
active_from: "2025-01-10"
|
||||
mode: "COMMON"
|
||||
promo_common: "sale-10"
|
||||
response:
|
||||
status_code: 201
|
||||
save:
|
||||
json:
|
||||
company1_promo1_id: id
|
||||
|
||||
- name: "Успешное создание промокода [компания 2]"
|
||||
request:
|
||||
url: "{BASE_URL}/business/promo"
|
||||
method: POST
|
||||
headers:
|
||||
Authorization: "Bearer {company2_token}"
|
||||
json:
|
||||
description: Дарим глобус при оформлении заказа на 30000!
|
||||
target:
|
||||
age_from: 28
|
||||
age_until: 50
|
||||
country: us
|
||||
max_count: 1
|
||||
active_until: "2025-01-10"
|
||||
mode: UNIQUE
|
||||
promo_unique:
|
||||
- only_youuuu
|
||||
- not_only_you
|
||||
response:
|
||||
status_code: 201
|
||||
save:
|
||||
json:
|
||||
company2_promo1_id: id
|
||||
|
||||
- name: "Получение промокода [компания 1]"
|
||||
request:
|
||||
url: "{BASE_URL}/business/promo/{company1_promo1_id}"
|
||||
method: GET
|
||||
headers:
|
||||
Authorization: "Bearer {company1_token}"
|
||||
response:
|
||||
status_code: 200
|
||||
json:
|
||||
description: "Повышенный кэшбек 10% для новых клиентов банка!"
|
||||
image_url: "https://cdn2.thecatapi.com/images/3lo.jpg"
|
||||
target: {}
|
||||
max_count: 10
|
||||
active_from: "2025-01-10"
|
||||
mode: "COMMON"
|
||||
promo_common: "sale-10"
|
||||
promo_id: "{company1_promo1_id:s}"
|
||||
company_name: "{company1.name:s}"
|
||||
like_count: 0
|
||||
used_count: 0
|
||||
# В рамках данной группы тестов значение поля active не валидируется
|
||||
|
||||
- name: "Получение промокода [компания 2]"
|
||||
request:
|
||||
url: "{BASE_URL}/business/promo/{company2_promo1_id}"
|
||||
method: GET
|
||||
headers:
|
||||
Authorization: "Bearer {company2_token}"
|
||||
response:
|
||||
status_code: 200
|
||||
json:
|
||||
description: Дарим глобус при оформлении заказа на 30000!
|
||||
target:
|
||||
age_from: 28
|
||||
age_until: 50
|
||||
country: us
|
||||
max_count: 1
|
||||
active_until: "2025-01-10"
|
||||
mode: UNIQUE
|
||||
promo_unique:
|
||||
- only_youuuu
|
||||
- not_only_you
|
||||
promo_id: "{company2_promo1_id}"
|
||||
company_name: "{company2.name}"
|
||||
like_count: 0
|
||||
used_count: 0
|
||||
# В рамках данной группы тестов значение поля active не валидируется
|
||||
|
||||
- name: "Редактируем описание и image [компания 1]"
|
||||
request:
|
||||
url: "{BASE_URL}/business/promo/{company1_promo1_id}"
|
||||
method: PATCH
|
||||
headers:
|
||||
Authorization: "Bearer {company1_token}"
|
||||
json:
|
||||
description: "Кэшбек 100%"
|
||||
image_url: "https://doesitexist.com/"
|
||||
response:
|
||||
status_code: 200
|
||||
json:
|
||||
description: "Кэшбек 100%"
|
||||
image_url: "https://doesitexist.com/"
|
||||
target: {}
|
||||
# Для простоты тестов остальные поля не валидируются
|
||||
|
||||
- name: "Редактируем active_from [компания 1]"
|
||||
request:
|
||||
url: "{BASE_URL}/business/promo/{company1_promo1_id}"
|
||||
method: PATCH
|
||||
headers:
|
||||
Authorization: "Bearer {company1_token}"
|
||||
json:
|
||||
active_from: "2023-12-20"
|
||||
response:
|
||||
status_code: 200
|
||||
json:
|
||||
description: "Кэшбек 100%"
|
||||
target: {}
|
||||
active_from: "2023-12-20"
|
||||
# Для простоты тестов остальные поля не валидируются
|
||||
|
||||
- name: "Редактируем target, заполненный частично [компания 1]"
|
||||
request:
|
||||
url: "{BASE_URL}/business/promo/{company1_promo1_id}"
|
||||
method: PATCH
|
||||
headers:
|
||||
Authorization: "Bearer {company1_token}"
|
||||
json:
|
||||
target:
|
||||
country: fr
|
||||
age_from: 28
|
||||
response:
|
||||
status_code: 200
|
||||
json:
|
||||
target:
|
||||
country: fr
|
||||
age_from: 28
|
||||
# Для простоты тестов остальные поля не валидируются
|
||||
|
||||
- name: "Заменяем target [компания 1]"
|
||||
request:
|
||||
url: "{BASE_URL}/business/promo/{company1_promo1_id}"
|
||||
method: PATCH
|
||||
headers:
|
||||
Authorization: "Bearer {company1_token}"
|
||||
json:
|
||||
target:
|
||||
country: Us
|
||||
categories:
|
||||
- ios
|
||||
- ФУТБОЛЬЧИК
|
||||
response:
|
||||
status_code: 200
|
||||
json:
|
||||
target:
|
||||
country: Us
|
||||
categories:
|
||||
- ios
|
||||
- ФУТБОЛЬЧИК
|
||||
# Для простоты тестов остальные поля не валидируются
|
||||
|
||||
- name: "Редактируем active_until [компания 1]"
|
||||
request:
|
||||
url: "{BASE_URL}/business/promo/{company1_promo1_id}"
|
||||
method: PATCH
|
||||
headers:
|
||||
Authorization: "Bearer {company1_token}"
|
||||
json:
|
||||
active_until: "2050-10-08"
|
||||
response:
|
||||
status_code: 200
|
||||
json:
|
||||
target:
|
||||
country: Us
|
||||
categories:
|
||||
- ios
|
||||
- ФУТБОЛЬЧИК
|
||||
active_until: "2050-10-08"
|
||||
# Для простоты тестов остальные поля не валидируются
|
||||
|
||||
- name: "Зануляем target [компания 1]"
|
||||
request:
|
||||
url: "{BASE_URL}/business/promo/{company1_promo1_id}"
|
||||
method: PATCH
|
||||
headers:
|
||||
Authorization: "Bearer {company1_token}"
|
||||
json:
|
||||
target: {}
|
||||
response:
|
||||
status_code: 200
|
||||
json:
|
||||
target: {}
|
||||
# Для простоты тестов остальные поля не валидируются
|
||||
|
||||
- name: "Редактируем max_count вверх [common промокод]"
|
||||
request:
|
||||
url: "{BASE_URL}/business/promo/{company1_promo1_id}"
|
||||
method: PATCH
|
||||
headers:
|
||||
Authorization: "Bearer {company1_token}"
|
||||
json:
|
||||
max_count: 20
|
||||
response:
|
||||
status_code: 200
|
||||
json:
|
||||
max_count: 20
|
||||
|
||||
- name: "Редактируем max_count вниз [common промокод]"
|
||||
request:
|
||||
url: "{BASE_URL}/business/promo/{company1_promo1_id}"
|
||||
method: PATCH
|
||||
headers:
|
||||
Authorization: "Bearer {company1_token}"
|
||||
json:
|
||||
max_count: 4
|
||||
response:
|
||||
status_code: 200
|
||||
json:
|
||||
max_count: 4
|
||||
|
||||
- name: "Получение промокода [1]"
|
||||
request:
|
||||
url: "{BASE_URL}/business/promo/{company1_promo1_id}"
|
||||
method: GET
|
||||
headers:
|
||||
Authorization: "Bearer {company1_token}"
|
||||
response:
|
||||
status_code: 200
|
||||
json:
|
||||
description: "Кэшбек 100%"
|
||||
image_url: "https://doesitexist.com/"
|
||||
target: {}
|
||||
max_count: 4
|
||||
active_from: "2023-12-20"
|
||||
mode: "COMMON"
|
||||
promo_common: "sale-10"
|
||||
promo_id: "{company1_promo1_id:s}"
|
||||
company_name: "{company1.name:s}"
|
||||
@@ -0,0 +1,35 @@
|
||||
test_name: Корректная регистрация и проверка дублирования e-mail
|
||||
|
||||
stages:
|
||||
- name: "Регистрация нового пользователя"
|
||||
request:
|
||||
url: "{BASE_URL}/user/auth/sign-up"
|
||||
method: POST
|
||||
json:
|
||||
name: Maria
|
||||
surname: Fedotova
|
||||
email: dota.fan@edu.hse.ru
|
||||
password: SuperStrongPassword2000!
|
||||
other:
|
||||
age: 23
|
||||
country: ru
|
||||
response:
|
||||
status_code: 200
|
||||
save:
|
||||
json:
|
||||
user1_token: token
|
||||
|
||||
- name: "Повторная регистрация на тот же email"
|
||||
request:
|
||||
url: "{BASE_URL}/user/auth/sign-up"
|
||||
method: POST
|
||||
json:
|
||||
name: Lui
|
||||
surname: Jomalone
|
||||
email: dota.fan@edu.hse.ru
|
||||
password: SuperStrongPassword2000!
|
||||
other:
|
||||
age: 14
|
||||
country: fr
|
||||
response:
|
||||
status_code: 409
|
||||
@@ -0,0 +1,290 @@
|
||||
test_name: Некорректный запрос на регистрацию пользователя
|
||||
|
||||
stages:
|
||||
- name: "Регистрация нового пользователя: некорректный e-mail"
|
||||
request:
|
||||
url: "{BASE_URL}/user/auth/sign-up"
|
||||
method: POST
|
||||
json:
|
||||
name: Maria
|
||||
surname: Fedotova
|
||||
email: dota.fan
|
||||
password: SuperStrongPassword2000!
|
||||
other:
|
||||
age: 23
|
||||
country: ru
|
||||
response:
|
||||
status_code: 400
|
||||
|
||||
- name: "Регистрация нового пользователя: простой пароль"
|
||||
request:
|
||||
url: "{BASE_URL}/user/auth/sign-up"
|
||||
method: POST
|
||||
json:
|
||||
name: Maria
|
||||
surname: Fedotova
|
||||
email: dota.for.fan@edu.hse.ru
|
||||
password: whereismymoney777
|
||||
other:
|
||||
age: 23
|
||||
country: ru
|
||||
response:
|
||||
status_code: 400
|
||||
|
||||
- name: "Регистрация нового пользователя: простой пароль"
|
||||
request:
|
||||
url: "{BASE_URL}/user/auth/sign-up"
|
||||
method: POST
|
||||
json:
|
||||
name: Maria
|
||||
surname: Fedotova
|
||||
email: dota.for.fan@edu.hse.ru
|
||||
password: fioejifojfieoAAAA9299
|
||||
other:
|
||||
age: 23
|
||||
country: ru
|
||||
response:
|
||||
status_code: 400
|
||||
|
||||
- name: "Регистрация нового пользователя: простой пароль"
|
||||
request:
|
||||
url: "{BASE_URL}/user/auth/sign-up"
|
||||
method: POST
|
||||
json:
|
||||
name: Maria
|
||||
surname: Fedotova
|
||||
email: dota.for.fan@edu.hse.ru
|
||||
password: Aa7$b!
|
||||
other:
|
||||
age: 23
|
||||
country: ru
|
||||
response:
|
||||
status_code: 400
|
||||
|
||||
- name: "Регистрация нового пользователя: некорректная ссылка"
|
||||
request:
|
||||
url: "{BASE_URL}/user/auth/sign-up"
|
||||
method: POST
|
||||
json:
|
||||
name: Maria
|
||||
surname: Fedotova
|
||||
avatar_url: itsnotalink
|
||||
email: dota.for.fan@edu.hse.ru
|
||||
password: SuperStrongPassword2000!
|
||||
other:
|
||||
age: 23
|
||||
country: ru
|
||||
response:
|
||||
status_code: 400
|
||||
|
||||
- name: "Регистрация нового пользователя: некорректная ссылка"
|
||||
request:
|
||||
url: "{BASE_URL}/user/auth/sign-up"
|
||||
method: POST
|
||||
json:
|
||||
name: Maria
|
||||
surname: Fedotova
|
||||
avatar_url: itsnotalinkjpeg
|
||||
email: dota.for.fan@edu.hse.ru
|
||||
password: SuperStrongPassword2000!
|
||||
other:
|
||||
age: 23
|
||||
country: ru
|
||||
response:
|
||||
status_code: 400
|
||||
|
||||
- name: "Регистрация нового пользователя: некорректная ссылка"
|
||||
request:
|
||||
url: "{BASE_URL}/user/auth/sign-up"
|
||||
method: POST
|
||||
json:
|
||||
name: Maria
|
||||
surname: Fedotova
|
||||
avatar_url: "https://"
|
||||
email: dota.for.fan@edu.hse.ru
|
||||
password: SuperStrongPassword2000!
|
||||
other:
|
||||
age: 23
|
||||
country: ru
|
||||
response:
|
||||
status_code: 400
|
||||
|
||||
- name: "Регистрация нового пользователя: некорректная ссылка"
|
||||
request:
|
||||
url: "{BASE_URL}/user/auth/sign-up"
|
||||
method: POST
|
||||
json:
|
||||
name: Maria
|
||||
surname: Fedotova
|
||||
avatar_url: "grpc://"
|
||||
email: dota.for.fan@edu.hse.ru
|
||||
password: SuperStrongPassword2000!
|
||||
other:
|
||||
age: 23
|
||||
country: ru
|
||||
response:
|
||||
status_code: 400
|
||||
|
||||
- name: "Регистрация нового пользователя: пустая ссылка"
|
||||
request:
|
||||
url: "{BASE_URL}/user/auth/sign-up"
|
||||
method: POST
|
||||
json:
|
||||
name: Maria
|
||||
surname: Fedotova
|
||||
avatar_url: "" # Ссылка либо должна отсутствовать, либо быть корректной. Пустая строка - некорректно.
|
||||
email: dota.for.fan@edu.hse.ru
|
||||
password: SuperStrongPassword2000!
|
||||
other:
|
||||
age: 23
|
||||
country: ru
|
||||
response:
|
||||
status_code: 400
|
||||
|
||||
- name: "Регистрация нового пользователя: не указана страна"
|
||||
request:
|
||||
url: "{BASE_URL}/user/auth/sign-up"
|
||||
method: POST
|
||||
json:
|
||||
name: Maria
|
||||
surname: Fedotova
|
||||
email: dota.for.fan@edu.hse.ru
|
||||
password: SuperStrongPassword2000!
|
||||
other:
|
||||
age: 23
|
||||
response:
|
||||
status_code: 400
|
||||
|
||||
- name: "Регистрация нового пользователя: некорректный тип для age"
|
||||
request:
|
||||
url: "{BASE_URL}/user/auth/sign-up"
|
||||
method: POST
|
||||
json:
|
||||
name: Maria
|
||||
surname: Fedotova
|
||||
email: dota.for.fan@edu.hse.ru
|
||||
password: SuperStrongPassword2000!
|
||||
other:
|
||||
age: "23aaaaaa"
|
||||
country: ru
|
||||
response:
|
||||
status_code: 400
|
||||
|
||||
- name: "Регистрация нового пользователя: отсутствует age"
|
||||
request:
|
||||
url: "{BASE_URL}/user/auth/sign-up"
|
||||
method: POST
|
||||
json:
|
||||
name: Maria
|
||||
surname: Fedotova
|
||||
email: dota.for.fan@edu.hse.ru
|
||||
password: SuperStrongPassword2000!
|
||||
other:
|
||||
country: ru
|
||||
response:
|
||||
status_code: 400
|
||||
|
||||
- name: "Регистрация нового пользователя: отрицательный age"
|
||||
request:
|
||||
url: "{BASE_URL}/user/auth/sign-up"
|
||||
method: POST
|
||||
json:
|
||||
name: Maria
|
||||
surname: Fedotova
|
||||
email: dota.for.fan@edu.hse.ru
|
||||
password: SuperStrongPassword2000!
|
||||
other:
|
||||
age: -20
|
||||
country: ru
|
||||
response:
|
||||
status_code: 400
|
||||
|
||||
- name: "Регистрация нового пользователя: некорректный email"
|
||||
request:
|
||||
url: "{BASE_URL}/user/auth/sign-up"
|
||||
method: POST
|
||||
json:
|
||||
name: Maria
|
||||
surname: Fedotova
|
||||
email: "@"
|
||||
password: SuperStrongPassword2000!
|
||||
other:
|
||||
country: ru
|
||||
age: 20
|
||||
response:
|
||||
status_code: 400
|
||||
|
||||
- name: "Регистрация нового пользователя: некорректный email"
|
||||
request:
|
||||
url: "{BASE_URL}/user/auth/sign-up"
|
||||
method: POST
|
||||
json:
|
||||
name: Maria
|
||||
surname: Fedotova
|
||||
email: dota
|
||||
password: SuperStrongPassword2000!
|
||||
other:
|
||||
age: 23
|
||||
country: ru
|
||||
response:
|
||||
status_code: 400
|
||||
|
||||
- name: "Регистрация нового пользователя: некорректный email"
|
||||
request:
|
||||
url: "{BASE_URL}/user/auth/sign-up"
|
||||
method: POST
|
||||
json:
|
||||
name: Maria
|
||||
surname: Fedotova
|
||||
email: "@gmail.com"
|
||||
password: SuperStrongPassword2000!
|
||||
other:
|
||||
age: 23
|
||||
country: ru
|
||||
response:
|
||||
status_code: 400
|
||||
|
||||
- name: "Регистрация нового пользователя: некорректный email"
|
||||
request:
|
||||
url: "{BASE_URL}/user/auth/sign-up"
|
||||
method: POST
|
||||
json:
|
||||
name: Maria
|
||||
surname: Fedotova
|
||||
email: "gmail.com"
|
||||
password: SuperStrongPassword2000!
|
||||
other:
|
||||
age: 23
|
||||
country: ru
|
||||
response:
|
||||
status_code: 400
|
||||
|
||||
- name: "Регистрация нового пользователя: пустое name"
|
||||
request:
|
||||
url: "{BASE_URL}/user/auth/sign-up"
|
||||
method: POST
|
||||
json:
|
||||
name: ""
|
||||
surname: Fedotova
|
||||
email: "gogogonow@gmail.com"
|
||||
password: SuperStrongPassword2000!
|
||||
other:
|
||||
age: 23
|
||||
country: ru
|
||||
response:
|
||||
status_code: 400
|
||||
|
||||
- name: "Регистрация нового пользователя: пустое surname"
|
||||
request:
|
||||
url: "{BASE_URL}/user/auth/sign-up"
|
||||
method: POST
|
||||
json:
|
||||
name: Maria
|
||||
surname: ""
|
||||
email: "gogogonow@gmail.com"
|
||||
password: SuperStrongPassword2000!
|
||||
other:
|
||||
age: 23
|
||||
country: ru
|
||||
response:
|
||||
status_code: 400
|
||||
@@ -0,0 +1,47 @@
|
||||
test_name: Базовая регистрация и аутентификация пользователя
|
||||
|
||||
stages:
|
||||
- name: "Регистрация нового пользователя"
|
||||
request:
|
||||
url: "{BASE_URL}/user/auth/sign-up"
|
||||
method: POST
|
||||
json:
|
||||
name: Steve
|
||||
surname: Jobs
|
||||
email: minecraft.digger@edu.hse.ru
|
||||
password: SuperStrongPassword2000!
|
||||
other:
|
||||
age: 23
|
||||
country: ru
|
||||
response:
|
||||
status_code: 200
|
||||
save:
|
||||
json:
|
||||
user1_token: token
|
||||
|
||||
- name: "Аутентификация: некорректная структура запроса (отсутствующие поля)"
|
||||
request:
|
||||
url: "{BASE_URL}/user/auth/sign-in"
|
||||
method: POST
|
||||
response:
|
||||
status_code: 400
|
||||
|
||||
- name: "Аутентификация: некорректный пароль"
|
||||
request:
|
||||
url: "{BASE_URL}/user/auth/sign-in"
|
||||
method: POST
|
||||
json:
|
||||
email: minecraft.digger@edu.hse.ru
|
||||
password: SuperInvalidPassword2000!
|
||||
response:
|
||||
status_code: 401
|
||||
|
||||
- name: "Аутентификация: успех"
|
||||
request:
|
||||
url: "{BASE_URL}/user/auth/sign-in"
|
||||
method: POST
|
||||
json:
|
||||
email: minecraft.digger@edu.hse.ru
|
||||
password: SuperStrongPassword2000!
|
||||
response:
|
||||
status_code: 200
|
||||
@@ -0,0 +1,118 @@
|
||||
test_name: Получение и редактирование профиля
|
||||
|
||||
stages:
|
||||
- name: "Регистрация нового пользователя"
|
||||
request:
|
||||
url: "{BASE_URL}/user/auth/sign-up"
|
||||
method: POST
|
||||
json:
|
||||
name: Steve
|
||||
surname: Wozniak
|
||||
email: creator@apple.com
|
||||
password: WhoLiveSInCalifornia2000!
|
||||
other:
|
||||
age: 23
|
||||
country: ru
|
||||
response:
|
||||
status_code: 200
|
||||
save:
|
||||
json:
|
||||
user1_token: token
|
||||
|
||||
- name: "Получение профиля"
|
||||
request:
|
||||
url: "{BASE_URL}/user/profile"
|
||||
method: GET
|
||||
headers:
|
||||
Authorization: "Bearer {user1_token}"
|
||||
response:
|
||||
status_code: 200
|
||||
json:
|
||||
name: Steve
|
||||
surname: Wozniak
|
||||
email: creator@apple.com
|
||||
other:
|
||||
age: 23
|
||||
country: ru
|
||||
|
||||
- name: "Изменение имени и фамилии"
|
||||
request:
|
||||
url: "{BASE_URL}/user/profile"
|
||||
method: PATCH
|
||||
headers:
|
||||
Authorization: "Bearer {user1_token}"
|
||||
json:
|
||||
name: Valeriy
|
||||
surname: Tsal
|
||||
response:
|
||||
status_code: 200
|
||||
json:
|
||||
name: Valeriy
|
||||
surname: Tsal
|
||||
# Для компактности проверяем только те поля, которые должны были измениться.
|
||||
|
||||
- name: "Изменение имени и фамилии"
|
||||
request:
|
||||
url: "{BASE_URL}/user/profile"
|
||||
method: PATCH
|
||||
headers:
|
||||
Authorization: "Bearer {user1_token}"
|
||||
json:
|
||||
avatar_url: http://nodomain.com/kitten.jpeg
|
||||
response:
|
||||
status_code: 200
|
||||
json:
|
||||
avatar_url: http://nodomain.com/kitten.jpeg
|
||||
# Для компактности проверяем только те поля, которые должны были измениться.
|
||||
|
||||
- name: "Изменение пароля"
|
||||
request:
|
||||
url: "{BASE_URL}/user/profile"
|
||||
method: PATCH
|
||||
headers:
|
||||
Authorization: "Bearer {user1_token}"
|
||||
json:
|
||||
password: MegaGiant88888@dooRuveS
|
||||
response:
|
||||
status_code: 200
|
||||
json:
|
||||
name: Valeriy
|
||||
surname: Tsal
|
||||
email: creator@apple.com
|
||||
other:
|
||||
age: 23
|
||||
country: ru
|
||||
avatar_url: http://nodomain.com/kitten.jpeg
|
||||
|
||||
- name: "Получение профиля со старым токеном"
|
||||
request:
|
||||
url: "{BASE_URL}/user/profile"
|
||||
method: GET
|
||||
headers:
|
||||
Authorization: "Bearer {user1_token}"
|
||||
response:
|
||||
status_code: 200
|
||||
json:
|
||||
name: Valeriy
|
||||
surname: Tsal
|
||||
email: creator@apple.com
|
||||
|
||||
- name: "Аутентификация: старый пароль не должен подходить"
|
||||
request:
|
||||
url: "{BASE_URL}/user/auth/sign-in"
|
||||
method: POST
|
||||
json:
|
||||
email: creator@apple.com
|
||||
password: WhoLiveSInCalifornia2000!
|
||||
response:
|
||||
status_code: 401
|
||||
|
||||
- name: "Аутентификация: с новым паролем"
|
||||
request:
|
||||
url: "{BASE_URL}/user/auth/sign-in"
|
||||
method: POST
|
||||
json:
|
||||
email: creator@apple.com
|
||||
password: MegaGiant88888@dooRuveS
|
||||
response:
|
||||
status_code: 200
|
||||
@@ -0,0 +1,125 @@
|
||||
test_name: Некорректные запросы на редактирование профиля
|
||||
|
||||
stages:
|
||||
- name: "Регистрация нового пользователя"
|
||||
request:
|
||||
url: "{BASE_URL}/user/auth/sign-up"
|
||||
method: POST
|
||||
json:
|
||||
name: Jack
|
||||
surname: TheSparrow
|
||||
email: sparrow@movie.com
|
||||
password: WhoLiveSInTheOcean100500!
|
||||
other:
|
||||
age: 48
|
||||
country: gb
|
||||
response:
|
||||
status_code: 200
|
||||
save:
|
||||
json:
|
||||
user1_token: token
|
||||
|
||||
- name: "Редактирование профиля: пустое имя и фамилия"
|
||||
request:
|
||||
url: "{BASE_URL}/user/profile"
|
||||
method: PATCH
|
||||
headers:
|
||||
Authorization: "Bearer {user1_token}"
|
||||
json:
|
||||
name: ""
|
||||
surname: ""
|
||||
response:
|
||||
status_code: 400
|
||||
|
||||
- name: "Редактирование профиля: некорректный url"
|
||||
request:
|
||||
url: "{BASE_URL}/user/profile"
|
||||
method: PATCH
|
||||
headers:
|
||||
Authorization: "Bearer {user1_token}"
|
||||
json:
|
||||
avatar_url: notURLcom
|
||||
response:
|
||||
status_code: 400
|
||||
|
||||
- name: "Редактирование профиля: некорректный url"
|
||||
request:
|
||||
url: "{BASE_URL}/user/profile"
|
||||
method: PATCH
|
||||
headers:
|
||||
Authorization: "Bearer {user1_token}"
|
||||
json:
|
||||
avatar_url: "https://"
|
||||
response:
|
||||
status_code: 400
|
||||
|
||||
- name: "Редактирование профиля: простой пароль"
|
||||
request:
|
||||
url: "{BASE_URL}/user/profile"
|
||||
method: PATCH
|
||||
headers:
|
||||
Authorization: "Bearer {user1_token}"
|
||||
json:
|
||||
password: pro100
|
||||
response:
|
||||
status_code: 400
|
||||
|
||||
- name: "Редактирование профиля: простой пароль"
|
||||
request:
|
||||
url: "{BASE_URL}/user/profile"
|
||||
method: PATCH
|
||||
headers:
|
||||
Authorization: "Bearer {user1_token}"
|
||||
json:
|
||||
password: "!!!!!"
|
||||
response:
|
||||
status_code: 400
|
||||
|
||||
- name: "Редактирование профиля: простой пароль"
|
||||
request:
|
||||
url: "{BASE_URL}/user/profile"
|
||||
method: PATCH
|
||||
headers:
|
||||
Authorization: "Bearer {user1_token}"
|
||||
json:
|
||||
password: "onlyYOUOOOO!"
|
||||
response:
|
||||
status_code: 400
|
||||
|
||||
- name: "Редактирование профиля: простой пароль"
|
||||
request:
|
||||
url: "{BASE_URL}/user/profile"
|
||||
method: PATCH
|
||||
headers:
|
||||
Authorization: "Bearer {user1_token}"
|
||||
json:
|
||||
password: "yOu!@1"
|
||||
response:
|
||||
status_code: 400
|
||||
|
||||
- name: "Редактирование профиля: простой пароль"
|
||||
request:
|
||||
url: "{BASE_URL}/user/profile"
|
||||
method: PATCH
|
||||
headers:
|
||||
Authorization: "Bearer {user1_token}"
|
||||
json:
|
||||
password: "11111@@@@@aaaaa"
|
||||
response:
|
||||
status_code: 400
|
||||
|
||||
- name: "Получение профиля"
|
||||
request:
|
||||
url: "{BASE_URL}/user/profile"
|
||||
method: GET
|
||||
headers:
|
||||
Authorization: "Bearer {user1_token}"
|
||||
response:
|
||||
status_code: 200
|
||||
json:
|
||||
name: Jack
|
||||
surname: TheSparrow
|
||||
email: sparrow@movie.com
|
||||
other:
|
||||
age: 48
|
||||
country: gb
|
||||
@@ -0,0 +1,481 @@
|
||||
test_name: Получение промокодов компанией
|
||||
|
||||
# Подключение файлов из директории components для переиспользования в тестах
|
||||
includes:
|
||||
- !include components/basic_auth.yml
|
||||
|
||||
stages:
|
||||
- type: ref
|
||||
id: basic_auth_reg1
|
||||
|
||||
- type: ref
|
||||
id: basic_auth_reg2
|
||||
|
||||
- name: "Регистрация нового пользователя [1]: gb, 60"
|
||||
request:
|
||||
url: "{BASE_URL}/user/auth/sign-up"
|
||||
method: POST
|
||||
json:
|
||||
name: Steve
|
||||
surname: Wozniak
|
||||
email: creator1@apple.com
|
||||
password: WhoLiveSInCalifornia2000!
|
||||
other:
|
||||
age: 60
|
||||
country: gb
|
||||
response:
|
||||
status_code: 200
|
||||
save:
|
||||
json:
|
||||
user1_token: token
|
||||
|
||||
- name: "Регистрация нового пользователя [2]: us, 15"
|
||||
request:
|
||||
url: "{BASE_URL}/user/auth/sign-up"
|
||||
method: POST
|
||||
json:
|
||||
name: Mike
|
||||
surname: Bloomberg
|
||||
email: mike@bloomberg.com
|
||||
password: WhoLiveSInCalifornia2000!
|
||||
other:
|
||||
age: 15
|
||||
country: us
|
||||
response:
|
||||
status_code: 200
|
||||
save:
|
||||
json:
|
||||
user2_token: token
|
||||
|
||||
- name: "Регистрация нового пользователя [3]: ru, 40"
|
||||
request:
|
||||
url: "{BASE_URL}/user/auth/sign-up"
|
||||
method: POST
|
||||
json:
|
||||
name: Yefim
|
||||
surname: Dinitz
|
||||
email: algo@prog.ru
|
||||
password: HardPASSword1!
|
||||
other:
|
||||
age: 40
|
||||
country: ru
|
||||
response:
|
||||
status_code: 200
|
||||
save:
|
||||
json:
|
||||
user3_token: token
|
||||
|
||||
- name: "Создание промокода [1]: active, <all>"
|
||||
request:
|
||||
url: "{BASE_URL}/business/promo"
|
||||
method: POST
|
||||
headers:
|
||||
Authorization: "Bearer {company1_token}"
|
||||
json:
|
||||
description: "[1] Активный COMMON промокод без таргета"
|
||||
target: {}
|
||||
max_count: 10
|
||||
active_from: "2025-01-10"
|
||||
mode: "COMMON"
|
||||
promo_common: "sale-10"
|
||||
response:
|
||||
status_code: 201
|
||||
save:
|
||||
json:
|
||||
promo1_id: id
|
||||
|
||||
- name: "Создание промокода [2]: active, <fr>"
|
||||
request:
|
||||
url: "{BASE_URL}/business/promo"
|
||||
method: POST
|
||||
headers:
|
||||
Authorization: "Bearer {company1_token}"
|
||||
json:
|
||||
description: "[2] Активный COMMON промокод для fr"
|
||||
target:
|
||||
country: fr
|
||||
categories:
|
||||
- ios
|
||||
- tbank
|
||||
- КОТЫ
|
||||
max_count: 6
|
||||
active_from: "2023-01-10"
|
||||
mode: "COMMON"
|
||||
promo_common: "sale-10"
|
||||
response:
|
||||
status_code: 201
|
||||
save:
|
||||
json:
|
||||
promo2_id: id
|
||||
|
||||
- name: "Создание промокода [3]: inactive, <us>, 13.."
|
||||
request:
|
||||
url: "{BASE_URL}/business/promo"
|
||||
method: POST
|
||||
headers:
|
||||
Authorization: "Bearer {company1_token}"
|
||||
json:
|
||||
description: "[3] Неактивный COMMON промокод для us, 13.."
|
||||
target:
|
||||
country: us
|
||||
age_from: 13
|
||||
categories:
|
||||
- ios
|
||||
max_count: 100000
|
||||
active_until: "2025-01-10"
|
||||
mode: "COMMON"
|
||||
promo_common: "sale-30"
|
||||
response:
|
||||
status_code: 201
|
||||
save:
|
||||
json:
|
||||
promo3_id: id
|
||||
|
||||
- name: "Создание промокода [4]: active, <ru>"
|
||||
request:
|
||||
url: "{BASE_URL}/business/promo"
|
||||
method: POST
|
||||
headers:
|
||||
Authorization: "Bearer {company1_token}"
|
||||
json:
|
||||
description: "[4] Активный UNIQUE промокод для ru, 20..60"
|
||||
target:
|
||||
country: ru
|
||||
age_from: 20
|
||||
age_until: 60
|
||||
categories:
|
||||
- телевизор
|
||||
max_count: 1
|
||||
active_until: "2055-01-10"
|
||||
mode: "UNIQUE"
|
||||
promo_unique:
|
||||
- dream
|
||||
- "of:"
|
||||
- californication
|
||||
response:
|
||||
status_code: 201
|
||||
save:
|
||||
json:
|
||||
promo4_id: id
|
||||
|
||||
- name: "Создание промокода [5]: active, <ru>, ..50"
|
||||
request:
|
||||
url: "{BASE_URL}/business/promo"
|
||||
method: POST
|
||||
headers:
|
||||
Authorization: "Bearer {company1_token}"
|
||||
json:
|
||||
description: "[5] Активный COMMON промокод для ru, ..50"
|
||||
target:
|
||||
country: ru
|
||||
age_until: 50
|
||||
max_count: 1000
|
||||
active_from: "2023-01-10"
|
||||
active_until: "2080-05-30"
|
||||
mode: "COMMON"
|
||||
promo_common: "sale-10"
|
||||
response:
|
||||
status_code: 201
|
||||
save:
|
||||
json:
|
||||
promo5_id: id
|
||||
|
||||
- name: "Создание промокода [6]: inactive, <fr>, 5..90"
|
||||
request:
|
||||
url: "{BASE_URL}/business/promo"
|
||||
method: POST
|
||||
headers:
|
||||
Authorization: "Bearer {company2_token}"
|
||||
json:
|
||||
description: "[6] Неактивный COMMON промокод для fr, 5..90"
|
||||
target:
|
||||
country: fr
|
||||
age_until: 90
|
||||
age_from: 5
|
||||
categories:
|
||||
- Телевизор
|
||||
max_count: 1
|
||||
active_from: "2040-12-08"
|
||||
mode: "COMMON"
|
||||
promo_common: "sale-10"
|
||||
response:
|
||||
status_code: 201
|
||||
save:
|
||||
json:
|
||||
promo6_id: id
|
||||
|
||||
- name: "Создание промокода [7]: active, <ru>, 16.."
|
||||
request:
|
||||
url: "{BASE_URL}/business/promo"
|
||||
method: POST
|
||||
headers:
|
||||
Authorization: "Bearer {company2_token}"
|
||||
json:
|
||||
description: "[7] Активный COMMON промокод для ru, 16.."
|
||||
target:
|
||||
country: ru
|
||||
age_from: 16
|
||||
categories:
|
||||
- Телевизор
|
||||
max_count: 1
|
||||
mode: "COMMON"
|
||||
promo_common: "sale-10"
|
||||
response:
|
||||
status_code: 201
|
||||
save:
|
||||
json:
|
||||
promo7_id: id
|
||||
|
||||
- name: "Создание промокода [8]: inactive, <all>"
|
||||
request:
|
||||
url: "{BASE_URL}/business/promo"
|
||||
method: POST
|
||||
headers:
|
||||
Authorization: "Bearer {company2_token}"
|
||||
json:
|
||||
description: "[8] Неактивный COMMON промокод для всех"
|
||||
target:
|
||||
categories:
|
||||
- ТЕЛЕВИЗОР
|
||||
max_count: 0 # Разрешено по спецификации, ведет к active=false
|
||||
mode: "COMMON"
|
||||
promo_common: "sale-10"
|
||||
response:
|
||||
status_code: 201
|
||||
save:
|
||||
json:
|
||||
promo8_id: id
|
||||
|
||||
- name: "Создание промокода [9]: active, <ru>, ..70"
|
||||
request:
|
||||
url: "{BASE_URL}/business/promo"
|
||||
method: POST
|
||||
headers:
|
||||
Authorization: "Bearer {company2_token}"
|
||||
json:
|
||||
description: "[9] Активный COMMON промокод для ru, ..70"
|
||||
target:
|
||||
country: ru
|
||||
age_until: 70
|
||||
max_count: 1
|
||||
active_until: "2099-08-10"
|
||||
mode: "COMMON"
|
||||
promo_common: "sale-10"
|
||||
response:
|
||||
status_code: 201
|
||||
save:
|
||||
json:
|
||||
promo9_id: id
|
||||
|
||||
- name: "Получение всех промокодов пользователем 1 [gb, 60]"
|
||||
request:
|
||||
url: "{BASE_URL}/user/feed"
|
||||
method: GET
|
||||
headers:
|
||||
Authorization: "Bearer {user1_token}"
|
||||
response:
|
||||
status_code: 200
|
||||
json: # Для компактности тестов валидируются только некоторые из полей (при этом сервер должен возвращать все обязательные поля)
|
||||
- promo_id: "{promo8_id}"
|
||||
company_name: "{company2.name}"
|
||||
active: false
|
||||
- promo_id: "{promo1_id}"
|
||||
company_name: "{company1.name}"
|
||||
active: true
|
||||
headers:
|
||||
X-Total-Count: "2"
|
||||
|
||||
- name: "Получение всех промокодов пользователем 2 [us, 15]"
|
||||
request:
|
||||
url: "{BASE_URL}/user/feed"
|
||||
method: GET
|
||||
headers:
|
||||
Authorization: "Bearer {user2_token}"
|
||||
response:
|
||||
status_code: 200
|
||||
json: # Для компактности тестов валидируются только некоторые из полей (при этом сервер должен возвращать все обязательные поля)
|
||||
- promo_id: "{promo8_id}"
|
||||
- promo_id: "{promo3_id}"
|
||||
company_name: "{company1.name}"
|
||||
active: false
|
||||
- promo_id: "{promo1_id}"
|
||||
headers:
|
||||
X-Total-Count: "3"
|
||||
|
||||
- name: "Получение всех промокодов пользователем 3 [ru, 40]"
|
||||
request:
|
||||
url: "{BASE_URL}/user/feed"
|
||||
method: GET
|
||||
headers:
|
||||
Authorization: "Bearer {user3_token}"
|
||||
response:
|
||||
status_code: 200
|
||||
json:
|
||||
# Для компактности тестов валидируются только некоторые из полей (при этом сервер должен возвращать все обязательные поля)
|
||||
- promo_id: "{promo9_id}"
|
||||
company_name: "{company2.name}"
|
||||
active: true
|
||||
- promo_id: "{promo8_id}"
|
||||
- promo_id: "{promo7_id}"
|
||||
company_name: "{company2.name}"
|
||||
active: true
|
||||
- promo_id: "{promo5_id}"
|
||||
company_name: "{company1.name}"
|
||||
active: true
|
||||
- promo_id: "{promo4_id}"
|
||||
company_name: "{company1.name}"
|
||||
active: true
|
||||
- promo_id: "{promo1_id}"
|
||||
company_name: "{company1.name}"
|
||||
active: true
|
||||
headers:
|
||||
X-Total-Count: "6"
|
||||
|
||||
- name: "Получение всех промокодов пользователем 3 [ru, 40], пагинация (2-3)"
|
||||
request:
|
||||
url: "{BASE_URL}/user/feed"
|
||||
method: GET
|
||||
params:
|
||||
offset: 2
|
||||
limit: 3
|
||||
headers:
|
||||
Authorization: "Bearer {user3_token}"
|
||||
response:
|
||||
status_code: 200
|
||||
json:
|
||||
- promo_id: "{promo7_id}"
|
||||
- promo_id: "{promo5_id}"
|
||||
- promo_id: "{promo4_id}"
|
||||
headers:
|
||||
X-Total-Count: "6"
|
||||
|
||||
- name: "Получение всех промокодов пользователем 3 [ru, 40], пагинация (10-2)"
|
||||
request:
|
||||
url: "{BASE_URL}/user/feed"
|
||||
method: GET
|
||||
params:
|
||||
offset: 10
|
||||
limit: 2
|
||||
headers:
|
||||
Authorization: "Bearer {user3_token}"
|
||||
response:
|
||||
status_code: 200
|
||||
json: []
|
||||
headers:
|
||||
X-Total-Count: "6"
|
||||
|
||||
- name: "Получение всех промокодов пользователем 3 [ru, 40], пагинация (3, 1)"
|
||||
request:
|
||||
url: "{BASE_URL}/user/feed"
|
||||
method: GET
|
||||
params:
|
||||
offset: 3
|
||||
limit: 1
|
||||
headers:
|
||||
Authorization: "Bearer {user3_token}"
|
||||
response:
|
||||
status_code: 200
|
||||
json:
|
||||
- promo_id: "{promo5_id}"
|
||||
headers:
|
||||
X-Total-Count: "6"
|
||||
|
||||
- name: "Получение active=true промокодов пользователем 3 [ru, 40]"
|
||||
request:
|
||||
url: "{BASE_URL}/user/feed"
|
||||
method: GET
|
||||
params:
|
||||
active: "true"
|
||||
headers:
|
||||
Authorization: "Bearer {user3_token}"
|
||||
response:
|
||||
status_code: 200
|
||||
json:
|
||||
- promo_id: "{promo9_id}"
|
||||
- promo_id: "{promo7_id}"
|
||||
- promo_id: "{promo5_id}"
|
||||
- promo_id: "{promo4_id}"
|
||||
- promo_id: "{promo1_id}"
|
||||
headers:
|
||||
X-Total-Count: "5"
|
||||
|
||||
- name: "Получение active=true промокодов пользователем 3 [ru, 40], пагинация (2, 2)"
|
||||
request:
|
||||
url: "{BASE_URL}/user/feed"
|
||||
method: GET
|
||||
params:
|
||||
active: "true"
|
||||
limit: 2
|
||||
offset: 2
|
||||
headers:
|
||||
Authorization: "Bearer {user3_token}"
|
||||
response:
|
||||
status_code: 200
|
||||
json:
|
||||
- promo_id: "{promo5_id}"
|
||||
- promo_id: "{promo4_id}"
|
||||
headers:
|
||||
X-Total-Count: "5"
|
||||
|
||||
- name: "Получение active=false промокодов пользователем 3 [ru, 40]"
|
||||
request:
|
||||
url: "{BASE_URL}/user/feed"
|
||||
method: GET
|
||||
params:
|
||||
active: "false"
|
||||
headers:
|
||||
Authorization: "Bearer {user3_token}"
|
||||
response:
|
||||
status_code: 200
|
||||
json:
|
||||
- promo_id: "{promo8_id}"
|
||||
headers:
|
||||
X-Total-Count: "1"
|
||||
|
||||
- name: "Получение промокодов пользователем 3 [ru, 40] по категории 'телевизор' (другой регистр)"
|
||||
request:
|
||||
url: "{BASE_URL}/user/feed"
|
||||
method: GET
|
||||
params:
|
||||
category: "телевиЗОР"
|
||||
headers:
|
||||
Authorization: "Bearer {user3_token}"
|
||||
response:
|
||||
status_code: 200
|
||||
json:
|
||||
- promo_id: "{promo8_id}"
|
||||
- promo_id: "{promo7_id}"
|
||||
- promo_id: "{promo4_id}"
|
||||
headers:
|
||||
X-Total-Count: "3"
|
||||
|
||||
- name: "Получение active=true промокодов пользователем 3 [ru, 40] по категории 'телевизор'"
|
||||
request:
|
||||
url: "{BASE_URL}/user/feed"
|
||||
method: GET
|
||||
params:
|
||||
category: "телевизор"
|
||||
active: "true"
|
||||
headers:
|
||||
Authorization: "Bearer {user3_token}"
|
||||
response:
|
||||
status_code: 200
|
||||
json:
|
||||
- promo_id: "{promo7_id}"
|
||||
- promo_id: "{promo4_id}"
|
||||
headers:
|
||||
X-Total-Count: "2"
|
||||
|
||||
- name: "Получение промокодов пользователем 3 [ru, 40] по несуществующей категории 'не существует'"
|
||||
request:
|
||||
url: "{BASE_URL}/user/feed"
|
||||
method: GET
|
||||
params:
|
||||
category: "не существует"
|
||||
headers:
|
||||
Authorization: "Bearer {user3_token}"
|
||||
response:
|
||||
status_code: 200
|
||||
json: []
|
||||
headers:
|
||||
X-Total-Count: "0"
|
||||
@@ -0,0 +1,156 @@
|
||||
test_name: Получение промокода по ID со стороны пользователя
|
||||
|
||||
# Подключение файлов из директории components для переиспользования в тестах
|
||||
includes:
|
||||
- !include components/basic_auth.yml
|
||||
|
||||
# Перед этим тестом необходимо создать промокоды с помощью test_10_user_feed.tavern.yml
|
||||
|
||||
stages:
|
||||
- type: ref
|
||||
id: basic_auth_auth1
|
||||
|
||||
- type: ref
|
||||
id: basic_auth_auth2
|
||||
|
||||
- name: "Регистрация нового пользователя [4]: sg, 83"
|
||||
request:
|
||||
url: "{BASE_URL}/user/auth/sign-up"
|
||||
method: POST
|
||||
json:
|
||||
name: Leslie
|
||||
surname: Lamport
|
||||
email: leslie@lamport.com
|
||||
password: Everyth1ngIsDistributed!
|
||||
other:
|
||||
age: 80
|
||||
country: sg
|
||||
response:
|
||||
status_code: 200
|
||||
save:
|
||||
json:
|
||||
user4_token: token
|
||||
|
||||
- name: "Создание промокода [10]: active, <kz>"
|
||||
request:
|
||||
url: "{BASE_URL}/business/promo"
|
||||
method: POST
|
||||
headers:
|
||||
Authorization: "Bearer {company1_token}"
|
||||
json:
|
||||
description: "[10] Активный COMMON промокод для kz"
|
||||
target:
|
||||
country: kz
|
||||
max_count: 10
|
||||
active_from: "2025-01-10"
|
||||
mode: "COMMON"
|
||||
promo_common: "sale-10"
|
||||
response:
|
||||
status_code: 201
|
||||
save:
|
||||
json:
|
||||
promo10_id: id
|
||||
|
||||
- name: "Создание промокода [11]: active, <sg>"
|
||||
request:
|
||||
url: "{BASE_URL}/business/promo"
|
||||
method: POST
|
||||
headers:
|
||||
Authorization: "Bearer {company1_token}"
|
||||
json:
|
||||
description: "[11] Активный COMMON промокод для sg"
|
||||
target:
|
||||
country: sg
|
||||
max_count: 1000
|
||||
active_from: "2023-01-10"
|
||||
mode: "COMMON"
|
||||
promo_common: "sale-10"
|
||||
response:
|
||||
status_code: 201
|
||||
save:
|
||||
json:
|
||||
promo11_id: id
|
||||
|
||||
- name: "Получение промокода по ID [1]: промокод, проходящий по настройкам таргетинга"
|
||||
request:
|
||||
url: "{BASE_URL}/user/promo/{promo11_id}"
|
||||
method: GET
|
||||
headers:
|
||||
Authorization: "Bearer {user4_token}"
|
||||
response:
|
||||
status_code: 200
|
||||
json:
|
||||
promo_id: "{promo11_id}"
|
||||
|
||||
- name: "Получение промокода по ID [2]: промокод, не проходящий по настройкам таргетинга"
|
||||
request:
|
||||
url: "{BASE_URL}/user/promo/{promo10_id}"
|
||||
method: GET
|
||||
headers:
|
||||
Authorization: "Bearer {user4_token}"
|
||||
response:
|
||||
status_code: 200
|
||||
json:
|
||||
promo_id: "{promo10_id}"
|
||||
description: "[10] Активный COMMON промокод для kz"
|
||||
|
||||
- name: "Получение промокода по ID: неправильный токен"
|
||||
request:
|
||||
url: "{BASE_URL}/user/promo/{promo10_id}"
|
||||
method: GET
|
||||
headers:
|
||||
Authorization: "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJtZXRhIjoi0K3RgtC-INC_0LDRgdGF0LDQu9C60LAhIn0.r-XAwfQPWGo_Z8GFbDOvixXfUl63Sf_fFirQPFcGoMg"
|
||||
response:
|
||||
status_code: 401
|
||||
|
||||
- name: "Получение промокода по ID: несуществующий промокод (uuid из google)"
|
||||
request:
|
||||
url: "{BASE_URL}/user/promo/550e8400-e29b-41d4-a716-446655440000"
|
||||
method: GET
|
||||
headers:
|
||||
Authorization: "Bearer {user4_token}"
|
||||
response:
|
||||
status_code: 404
|
||||
|
||||
- name: "Получение всех промокодов пользователем 4"
|
||||
request:
|
||||
url: "{BASE_URL}/user/feed"
|
||||
method: GET
|
||||
headers:
|
||||
Authorization: "Bearer {user4_token}"
|
||||
response:
|
||||
status_code: 200
|
||||
json:
|
||||
- promo_id: "{promo11_id}"
|
||||
active: true
|
||||
- description: "[8] Неактивный COMMON промокод для всех"
|
||||
- description: "[1] Активный COMMON промокод без таргета"
|
||||
headers:
|
||||
X-Total-Count: "3"
|
||||
|
||||
- name: "Редактирование промокода [11], он должен стать active=false"
|
||||
request:
|
||||
url: "{BASE_URL}/business/promo/{promo11_id}"
|
||||
method: PATCH
|
||||
headers:
|
||||
Authorization: "Bearer {company1_token}"
|
||||
json:
|
||||
active_until: "2024-08-10"
|
||||
response:
|
||||
status_code: 200
|
||||
|
||||
- name: "Получение всех промокодов пользователем 4 (после редактирования)"
|
||||
request:
|
||||
url: "{BASE_URL}/user/feed"
|
||||
method: GET
|
||||
headers:
|
||||
Authorization: "Bearer {user4_token}"
|
||||
response:
|
||||
status_code: 200
|
||||
json:
|
||||
- promo_id: "{promo11_id}"
|
||||
active: false
|
||||
- description: "[8] Неактивный COMMON промокод для всех"
|
||||
- description: "[1] Активный COMMON промокод без таргета"
|
||||
headers:
|
||||
X-Total-Count: "3"
|
||||
@@ -0,0 +1,260 @@
|
||||
test_name: Получение промокода по ID со стороны пользователя
|
||||
|
||||
# Подключение файлов из директории components для переиспользования в тестах
|
||||
includes:
|
||||
- !include components/basic_auth.yml
|
||||
|
||||
stages:
|
||||
- type: ref
|
||||
id: basic_auth_reg1
|
||||
|
||||
- type: ref
|
||||
id: basic_auth_reg2
|
||||
|
||||
- name: "Регистрация нового пользователя [1]: gb, 60"
|
||||
request:
|
||||
url: "{BASE_URL}/user/auth/sign-up"
|
||||
method: POST
|
||||
json:
|
||||
name: Steve
|
||||
surname: Wozniak
|
||||
email: creator1@apple.com
|
||||
password: WhoLiveSInCalifornia2000!
|
||||
other:
|
||||
age: 60
|
||||
country: gb
|
||||
response:
|
||||
status_code: 200
|
||||
save:
|
||||
json:
|
||||
user1_token: token
|
||||
|
||||
- name: "Регистрация нового пользователя [2]: us, 15"
|
||||
request:
|
||||
url: "{BASE_URL}/user/auth/sign-up"
|
||||
method: POST
|
||||
json:
|
||||
name: Mike
|
||||
surname: Bloomberg
|
||||
email: mike@bloomberg.com
|
||||
password: WhoLiveSInCalifornia2000!
|
||||
other:
|
||||
age: 15
|
||||
country: us
|
||||
response:
|
||||
status_code: 200
|
||||
save:
|
||||
json:
|
||||
user2_token: token
|
||||
|
||||
- name: "Регистрация нового пользователя [3]: ru, 40"
|
||||
request:
|
||||
url: "{BASE_URL}/user/auth/sign-up"
|
||||
method: POST
|
||||
json:
|
||||
name: Yefim
|
||||
surname: Dinitz
|
||||
email: algo@prog.ru
|
||||
password: HardPASSword1!
|
||||
other:
|
||||
age: 40
|
||||
country: ru
|
||||
response:
|
||||
status_code: 200
|
||||
save:
|
||||
json:
|
||||
user3_token: token
|
||||
|
||||
- name: "Создание промокода [1]: active, <all>"
|
||||
request:
|
||||
url: "{BASE_URL}/business/promo"
|
||||
method: POST
|
||||
headers:
|
||||
Authorization: "Bearer {company1_token}"
|
||||
json:
|
||||
description: "[1] Активный COMMON промокод для всех"
|
||||
target: {}
|
||||
max_count: 10
|
||||
active_from: "2025-01-10"
|
||||
mode: "COMMON"
|
||||
promo_common: "sale-10"
|
||||
response:
|
||||
status_code: 201
|
||||
save:
|
||||
json:
|
||||
promo1_id: id
|
||||
|
||||
- name: "Получение промокода [1] со стороны пользователя 1"
|
||||
request:
|
||||
url: "{BASE_URL}/user/promo/{promo1_id}"
|
||||
method: GET
|
||||
headers:
|
||||
Authorization: "Bearer {user1_token}"
|
||||
response:
|
||||
status_code: 200
|
||||
json:
|
||||
promo_id: "{promo1_id}"
|
||||
like_count: 0
|
||||
is_liked_by_user: false
|
||||
|
||||
- name: "Получение промокода [1] со стороны компании"
|
||||
request:
|
||||
url: "{BASE_URL}/business/promo/{promo1_id}"
|
||||
method: GET
|
||||
headers:
|
||||
Authorization: "Bearer {company1_token}"
|
||||
response:
|
||||
status_code: 200
|
||||
json:
|
||||
promo_id: "{promo1_id}"
|
||||
like_count: 0
|
||||
|
||||
- name: "Лайк промокода [1] пользователем 1"
|
||||
request:
|
||||
url: "{BASE_URL}/user/promo/{promo1_id}/like"
|
||||
method: POST
|
||||
headers:
|
||||
Authorization: "Bearer {user1_token}"
|
||||
response:
|
||||
status_code: 200
|
||||
json:
|
||||
status: ok
|
||||
|
||||
- name: "Повторный лайк промокода [1] пользователем 1"
|
||||
request:
|
||||
url: "{BASE_URL}/user/promo/{promo1_id}/like"
|
||||
method: POST
|
||||
headers:
|
||||
Authorization: "Bearer {user1_token}"
|
||||
response:
|
||||
status_code: 200
|
||||
json:
|
||||
status: ok
|
||||
|
||||
- name: "Получение промокода [1] со стороны пользователя 1"
|
||||
request:
|
||||
url: "{BASE_URL}/user/promo/{promo1_id}"
|
||||
method: GET
|
||||
headers:
|
||||
Authorization: "Bearer {user1_token}"
|
||||
response:
|
||||
status_code: 200
|
||||
json:
|
||||
promo_id: "{promo1_id}"
|
||||
like_count: 1
|
||||
is_liked_by_user: true
|
||||
|
||||
- name: "Получение промокода [1] со стороны пользователя 2"
|
||||
request:
|
||||
url: "{BASE_URL}/user/promo/{promo1_id}"
|
||||
method: GET
|
||||
headers:
|
||||
Authorization: "Bearer {user2_token}"
|
||||
response:
|
||||
status_code: 200
|
||||
json:
|
||||
like_count: 1
|
||||
is_liked_by_user: false
|
||||
|
||||
- name: "Лайк промокода [1] пользователем 2"
|
||||
request:
|
||||
url: "{BASE_URL}/user/promo/{promo1_id}/like"
|
||||
method: POST
|
||||
headers:
|
||||
Authorization: "Bearer {user2_token}"
|
||||
response:
|
||||
status_code: 200
|
||||
json:
|
||||
status: ok
|
||||
|
||||
- name: "Получение промокода [1] со стороны пользователя 2"
|
||||
request:
|
||||
url: "{BASE_URL}/user/promo/{promo1_id}"
|
||||
method: GET
|
||||
headers:
|
||||
Authorization: "Bearer {user2_token}"
|
||||
response:
|
||||
status_code: 200
|
||||
json:
|
||||
like_count: 2
|
||||
is_liked_by_user: true
|
||||
|
||||
- name: "Удаление несуществующего лайка промокода [1] пользователем 3"
|
||||
request:
|
||||
url: "{BASE_URL}/user/promo/{promo1_id}/like"
|
||||
method: DELETE
|
||||
headers:
|
||||
Authorization: "Bearer {user3_token}"
|
||||
response:
|
||||
status_code: 200
|
||||
json:
|
||||
status: ok
|
||||
|
||||
- name: "Получение промокода [1] со стороны пользователя 3"
|
||||
request:
|
||||
url: "{BASE_URL}/user/promo/{promo1_id}"
|
||||
method: GET
|
||||
headers:
|
||||
Authorization: "Bearer {user3_token}"
|
||||
response:
|
||||
status_code: 200
|
||||
json:
|
||||
like_count: 2
|
||||
is_liked_by_user: false
|
||||
|
||||
- name: "Получение промокода [1] со стороны компании"
|
||||
request:
|
||||
url: "{BASE_URL}/business/promo/{promo1_id}"
|
||||
method: GET
|
||||
headers:
|
||||
Authorization: "Bearer {company1_token}"
|
||||
response:
|
||||
status_code: 200
|
||||
json:
|
||||
like_count: 2
|
||||
|
||||
- name: "Удаление лайка промокода [1] пользователем 1"
|
||||
request:
|
||||
url: "{BASE_URL}/user/promo/{promo1_id}/like"
|
||||
method: DELETE
|
||||
headers:
|
||||
Authorization: "Bearer {user1_token}"
|
||||
response:
|
||||
status_code: 200
|
||||
json:
|
||||
status: ok
|
||||
|
||||
- name: "Получение промокода [1] со стороны пользователя 1"
|
||||
request:
|
||||
url: "{BASE_URL}/user/promo/{promo1_id}"
|
||||
method: GET
|
||||
headers:
|
||||
Authorization: "Bearer {user1_token}"
|
||||
response:
|
||||
status_code: 200
|
||||
json:
|
||||
like_count: 1
|
||||
is_liked_by_user: false
|
||||
|
||||
- name: "Повторное удаление лайка промокода [1] пользователем 1"
|
||||
request:
|
||||
url: "{BASE_URL}/user/promo/{promo1_id}/like"
|
||||
method: DELETE
|
||||
headers:
|
||||
Authorization: "Bearer {user1_token}"
|
||||
response:
|
||||
status_code: 200
|
||||
json:
|
||||
status: ok
|
||||
|
||||
- name: "Получение промокода [1] со стороны пользователя 1"
|
||||
request:
|
||||
url: "{BASE_URL}/user/promo/{promo1_id}"
|
||||
method: GET
|
||||
headers:
|
||||
Authorization: "Bearer {user1_token}"
|
||||
response:
|
||||
status_code: 200
|
||||
json:
|
||||
like_count: 1
|
||||
is_liked_by_user: false
|
||||
@@ -0,0 +1,424 @@
|
||||
test_name: Комментарии к промокодам
|
||||
|
||||
# Подключение файлов из директории components для переиспользования в тестах
|
||||
includes:
|
||||
- !include components/basic_auth.yml
|
||||
|
||||
stages:
|
||||
- type: ref
|
||||
id: basic_auth_reg1
|
||||
|
||||
- type: ref
|
||||
id: basic_auth_reg2
|
||||
|
||||
- name: "Регистрация нового пользователя [1]: gb, 60"
|
||||
request:
|
||||
url: "{BASE_URL}/user/auth/sign-up"
|
||||
method: POST
|
||||
json:
|
||||
name: Steve
|
||||
surname: Wozniak
|
||||
email: creator2@apple.com
|
||||
password: WhoLiveSInCalifornia2000!
|
||||
other:
|
||||
age: 60
|
||||
country: gb
|
||||
response:
|
||||
status_code: 200
|
||||
save:
|
||||
json:
|
||||
user1_token: token
|
||||
|
||||
- name: "Регистрация нового пользователя [2]: us, 15"
|
||||
request:
|
||||
url: "{BASE_URL}/user/auth/sign-up"
|
||||
method: POST
|
||||
json:
|
||||
name: Mike
|
||||
surname: Bloomberg
|
||||
email: mike2@bloomberg.com
|
||||
password: WhoLiveSInCalifornia2000!
|
||||
other:
|
||||
age: 15
|
||||
country: us
|
||||
response:
|
||||
status_code: 200
|
||||
save:
|
||||
json:
|
||||
user2_token: token
|
||||
|
||||
- name: "Регистрация нового пользователя [3]: kz, 40"
|
||||
request:
|
||||
url: "{BASE_URL}/user/auth/sign-up"
|
||||
method: POST
|
||||
json:
|
||||
name: Yefim
|
||||
surname: Dinitz
|
||||
email: algo3@prog.ru
|
||||
password: HardPASSword1!
|
||||
other:
|
||||
age: 40
|
||||
country: kz
|
||||
response:
|
||||
status_code: 200
|
||||
save:
|
||||
json:
|
||||
user3_token: token
|
||||
|
||||
- name: "Создание промокода [1]: active, <all>"
|
||||
request:
|
||||
url: "{BASE_URL}/business/promo"
|
||||
method: POST
|
||||
headers:
|
||||
Authorization: "Bearer {company1_token}"
|
||||
json:
|
||||
description: "[1] Активный COMMON промокод для всех"
|
||||
target: {}
|
||||
max_count: 10
|
||||
active_from: "2025-01-10"
|
||||
mode: "COMMON"
|
||||
promo_common: "sale-10"
|
||||
response:
|
||||
status_code: 201
|
||||
save:
|
||||
json:
|
||||
promo1_id: id
|
||||
|
||||
- name: "Создание промокода [2]: inactive, <kz>, 28.."
|
||||
request:
|
||||
url: "{BASE_URL}/business/promo"
|
||||
method: POST
|
||||
headers:
|
||||
Authorization: "Bearer {company2_token}"
|
||||
json:
|
||||
description: "[1] Активный COMMON промокод для kz, 28.."
|
||||
target:
|
||||
country: kz
|
||||
age_from: 28
|
||||
max_count: 10
|
||||
active_from: "2025-02-10"
|
||||
mode: "COMMON"
|
||||
promo_common: "sale-10"
|
||||
response:
|
||||
status_code: 201
|
||||
save:
|
||||
json:
|
||||
promo2_id: id
|
||||
|
||||
- name: "Получение промокода [1] со стороны пользователя 1"
|
||||
request:
|
||||
url: "{BASE_URL}/user/promo/{promo1_id}"
|
||||
method: GET
|
||||
headers:
|
||||
Authorization: "Bearer {user1_token}"
|
||||
response:
|
||||
status_code: 200
|
||||
json:
|
||||
promo_id: "{promo1_id}"
|
||||
comment_count: 0
|
||||
|
||||
- name: "Написать комментарий к промокоду 1 [1]"
|
||||
request:
|
||||
url: "{BASE_URL}/user/promo/{promo1_id}/comments"
|
||||
method: POST
|
||||
headers:
|
||||
Authorization: "Bearer {user1_token}"
|
||||
json:
|
||||
text: "[1] Комментарий к промокоду 1 от пользователя 1"
|
||||
response:
|
||||
status_code: 201
|
||||
json:
|
||||
text: "[1] Комментарий к промокоду 1 от пользователя 1"
|
||||
author:
|
||||
name: Steve
|
||||
surname: Wozniak
|
||||
save:
|
||||
json:
|
||||
comment1_id: id
|
||||
comment1_date: date
|
||||
|
||||
- name: "Написать комментарий к промокоду 1 [2]"
|
||||
request:
|
||||
url: "{BASE_URL}/user/promo/{promo1_id}/comments"
|
||||
method: POST
|
||||
headers:
|
||||
Authorization: "Bearer {user1_token}"
|
||||
json:
|
||||
text: "[2] Комментарий к промокоду 1 от пользователя 1"
|
||||
response:
|
||||
status_code: 201
|
||||
save:
|
||||
json:
|
||||
comment2_id: id
|
||||
|
||||
- name: "Написать комментарий к промокоду 2 [3]"
|
||||
request:
|
||||
url: "{BASE_URL}/user/promo/{promo2_id}/comments"
|
||||
method: POST
|
||||
headers:
|
||||
Authorization: "Bearer {user2_token}"
|
||||
json:
|
||||
text: "[3] Комментарий к промокоду 2 от пользователя 2"
|
||||
response:
|
||||
status_code: 201
|
||||
save:
|
||||
json:
|
||||
comment3_id: id
|
||||
|
||||
- name: "Написать комментарий к промокоду 2 [4]"
|
||||
request:
|
||||
url: "{BASE_URL}/user/promo/{promo2_id}/comments"
|
||||
method: POST
|
||||
headers:
|
||||
Authorization: "Bearer {user2_token}"
|
||||
json:
|
||||
text: "[4] Комментарий к промокоду 2 от пользователя 3"
|
||||
response:
|
||||
status_code: 201
|
||||
save:
|
||||
json:
|
||||
comment4_id: id
|
||||
|
||||
- name: "Написать комментарий к промокоду 1 [5]"
|
||||
request:
|
||||
url: "{BASE_URL}/user/promo/{promo1_id}/comments"
|
||||
method: POST
|
||||
headers:
|
||||
Authorization: "Bearer {user3_token}"
|
||||
json:
|
||||
text: "[5] Комментарий к промокоду 1 от пользователя 3"
|
||||
response:
|
||||
status_code: 201
|
||||
save:
|
||||
json:
|
||||
comment5_id: id
|
||||
|
||||
- name: "Получение промокода [1]"
|
||||
request:
|
||||
url: "{BASE_URL}/user/promo/{promo1_id}"
|
||||
method: GET
|
||||
headers:
|
||||
Authorization: "Bearer {user1_token}"
|
||||
response:
|
||||
status_code: 200
|
||||
json:
|
||||
promo_id: "{promo1_id}"
|
||||
comment_count: 3
|
||||
|
||||
- name: "Получение промокода [2]"
|
||||
request:
|
||||
url: "{BASE_URL}/user/promo/{promo2_id}"
|
||||
method: GET
|
||||
headers:
|
||||
Authorization: "Bearer {user3_token}"
|
||||
response:
|
||||
status_code: 200
|
||||
json:
|
||||
promo_id: "{promo2_id}"
|
||||
comment_count: 2
|
||||
|
||||
- name: "Получить комментарии к промокоду 1"
|
||||
request:
|
||||
url: "{BASE_URL}/user/promo/{promo1_id}/comments"
|
||||
method: GET
|
||||
headers:
|
||||
Authorization: "Bearer {user1_token}"
|
||||
response:
|
||||
status_code: 200
|
||||
json:
|
||||
- id: "{comment5_id}"
|
||||
- id: "{comment2_id}"
|
||||
- id: "{comment1_id}"
|
||||
|
||||
- name: "Получить комментарии к промокоду 1 (пагинация 1-5)"
|
||||
request:
|
||||
url: "{BASE_URL}/user/promo/{promo1_id}/comments"
|
||||
method: GET
|
||||
params:
|
||||
limit: 5
|
||||
offset: 1
|
||||
headers:
|
||||
Authorization: "Bearer {user1_token}"
|
||||
response:
|
||||
status_code: 200
|
||||
json:
|
||||
- id: "{comment2_id}"
|
||||
- id: "{comment1_id}"
|
||||
headers:
|
||||
X-Total-Count: "3"
|
||||
|
||||
- name: "Получить комментарий по ID"
|
||||
request:
|
||||
url: "{BASE_URL}/user/promo/{promo1_id}/comments/{comment1_id}"
|
||||
method: GET
|
||||
headers:
|
||||
Authorization: "Bearer {user3_token}"
|
||||
response:
|
||||
status_code: 200
|
||||
json:
|
||||
text: "[1] Комментарий к промокоду 1 от пользователя 1"
|
||||
|
||||
- name: "Получить комментарий по ID: некорректная связка id промокода - id комментария [1]"
|
||||
request:
|
||||
url: "{BASE_URL}/user/promo/{promo2_id}/comments/{comment1_id}"
|
||||
method: GET
|
||||
headers:
|
||||
Authorization: "Bearer {user3_token}"
|
||||
response:
|
||||
status_code: 404
|
||||
|
||||
- name: "Получить комментарий по ID: некорректная связка id промокода - id комментария [2]"
|
||||
request:
|
||||
url: "{BASE_URL}/user/promo/{promo1_id}/comments/{comment4_id}"
|
||||
method: GET
|
||||
headers:
|
||||
Authorization: "Bearer {user3_token}"
|
||||
response:
|
||||
status_code: 404
|
||||
|
||||
- name: "Редактирование комментария 1: корректно"
|
||||
request:
|
||||
url: "{BASE_URL}/user/promo/{promo1_id}/comments/{comment1_id}"
|
||||
method: PUT
|
||||
headers:
|
||||
Authorization: "Bearer {user1_token}"
|
||||
json:
|
||||
text: "[1] Отредактированная версия комментария к промокоду 1 от пользователя 1"
|
||||
response:
|
||||
status_code: 200
|
||||
json:
|
||||
id: "{comment1_id}"
|
||||
text: "[1] Отредактированная версия комментария к промокоду 1 от пользователя 1"
|
||||
date: "{comment1_date}"
|
||||
|
||||
- name: "Редактирование комментария 1: некорректная связка с promo_id"
|
||||
request:
|
||||
url: "{BASE_URL}/user/promo/{promo2_id}/comments/{comment1_id}"
|
||||
method: PUT
|
||||
headers:
|
||||
Authorization: "Bearer {user1_token}"
|
||||
json:
|
||||
text: "Что-то не так, не тот promo_id"
|
||||
response:
|
||||
status_code: 404
|
||||
|
||||
- name: "Редактирование комментария 1: попытка не от владельца"
|
||||
request:
|
||||
url: "{BASE_URL}/user/promo/{promo1_id}/comments/{comment1_id}"
|
||||
method: PUT
|
||||
headers:
|
||||
Authorization: "Bearer {user3_token}"
|
||||
json:
|
||||
text: "Это не должно сработать! Редактировать содержимое может только владелец..."
|
||||
response:
|
||||
status_code: 403
|
||||
|
||||
- name: "Получить комментарий по ID"
|
||||
request:
|
||||
url: "{BASE_URL}/user/promo/{promo1_id}/comments/{comment1_id}"
|
||||
method: GET
|
||||
headers:
|
||||
Authorization: "Bearer {user3_token}"
|
||||
response:
|
||||
status_code: 200
|
||||
json:
|
||||
id: "{comment1_id}"
|
||||
text: "[1] Отредактированная версия комментария к промокоду 1 от пользователя 1"
|
||||
date: "{comment1_date}"
|
||||
|
||||
- name: "Получение промокода [1]"
|
||||
request:
|
||||
url: "{BASE_URL}/user/promo/{promo1_id}"
|
||||
method: GET
|
||||
headers:
|
||||
Authorization: "Bearer {user1_token}"
|
||||
response:
|
||||
status_code: 200
|
||||
json:
|
||||
comment_count: 3
|
||||
|
||||
- name: "Получить комментарии к промокоду 1"
|
||||
request:
|
||||
url: "{BASE_URL}/user/promo/{promo1_id}/comments"
|
||||
method: GET
|
||||
headers:
|
||||
Authorization: "Bearer {user1_token}"
|
||||
response:
|
||||
status_code: 200
|
||||
json:
|
||||
- id: "{comment5_id}"
|
||||
- id: "{comment2_id}"
|
||||
- id: "{comment1_id}"
|
||||
|
||||
- name: "Удаление комментария 1: некорректная связка с promo_id"
|
||||
request:
|
||||
url: "{BASE_URL}/user/promo/{promo2_id}/comments/{comment1_id}"
|
||||
method: DELETE
|
||||
headers:
|
||||
Authorization: "Bearer {user1_token}"
|
||||
response:
|
||||
status_code: 404
|
||||
|
||||
- name: "Удаление комментария 1: попытка не от владельца"
|
||||
request:
|
||||
url: "{BASE_URL}/user/promo/{promo1_id}/comments/{comment1_id}"
|
||||
method: DELETE
|
||||
headers:
|
||||
Authorization: "Bearer {user3_token}"
|
||||
response:
|
||||
status_code: 403
|
||||
|
||||
- name: "Получить комментарий [1] по ID"
|
||||
request:
|
||||
url: "{BASE_URL}/user/promo/{promo1_id}/comments/{comment1_id}"
|
||||
method: GET
|
||||
headers:
|
||||
Authorization: "Bearer {user3_token}"
|
||||
response:
|
||||
status_code: 200
|
||||
|
||||
- name: "Удаление комментария 1: успешное удаление"
|
||||
request:
|
||||
url: "{BASE_URL}/user/promo/{promo1_id}/comments/{comment1_id}"
|
||||
method: DELETE
|
||||
headers:
|
||||
Authorization: "Bearer {user1_token}"
|
||||
response:
|
||||
status_code: 200
|
||||
json:
|
||||
status: ok
|
||||
|
||||
- name: "Удаление комментария 1: повторное удаление, комментарий не найден"
|
||||
request:
|
||||
url: "{BASE_URL}/user/promo/{promo1_id}/comments/{comment1_id}"
|
||||
method: DELETE
|
||||
headers:
|
||||
Authorization: "Bearer {user1_token}"
|
||||
response:
|
||||
status_code: 404
|
||||
|
||||
- name: "Получение промокода [1]"
|
||||
request:
|
||||
url: "{BASE_URL}/user/promo/{promo1_id}"
|
||||
method: GET
|
||||
headers:
|
||||
Authorization: "Bearer {user1_token}"
|
||||
response:
|
||||
status_code: 200
|
||||
json:
|
||||
promo_id: "{promo1_id}"
|
||||
comment_count: 2
|
||||
|
||||
- name: "Получить комментарии к промокоду 1"
|
||||
request:
|
||||
url: "{BASE_URL}/user/promo/{promo1_id}/comments"
|
||||
method: GET
|
||||
headers:
|
||||
Authorization: "Bearer {user1_token}"
|
||||
response:
|
||||
status_code: 200
|
||||
json:
|
||||
- id: "{comment5_id}"
|
||||
- id: "{comment2_id}"
|
||||
headers:
|
||||
X-Total-Count: "2"
|
||||
@@ -0,0 +1,326 @@
|
||||
test_name: Активация промокода
|
||||
|
||||
# Подключение файлов из директории components для переиспользования в тестах
|
||||
includes:
|
||||
- !include components/basic_auth.yml
|
||||
|
||||
stages:
|
||||
- type: ref
|
||||
id: basic_auth_reg1
|
||||
|
||||
- type: ref
|
||||
id: basic_auth_reg2
|
||||
|
||||
- name: "Регистрация нового пользователя [1]: gb, 60"
|
||||
request:
|
||||
url: "{BASE_URL}/user/auth/sign-up"
|
||||
method: POST
|
||||
json:
|
||||
name: Steve
|
||||
surname: Wozniak
|
||||
email: creator2@apple.com
|
||||
password: WhoLiveSInCalifornia2000!
|
||||
other:
|
||||
age: 60
|
||||
country: gb
|
||||
response:
|
||||
status_code: 200
|
||||
save:
|
||||
json:
|
||||
user1_token: token
|
||||
|
||||
- name: "Регистрация нового пользователя [2]: us, 15"
|
||||
request:
|
||||
url: "{BASE_URL}/user/auth/sign-up"
|
||||
method: POST
|
||||
json:
|
||||
name: Mike
|
||||
surname: Bloomberg
|
||||
email: blocked@antifraud.com
|
||||
password: WhoLiveSInCalifornia2000!
|
||||
other:
|
||||
age: 15
|
||||
country: us
|
||||
response:
|
||||
status_code: 200
|
||||
save:
|
||||
json:
|
||||
user2_token: token
|
||||
|
||||
- name: "Регистрация нового пользователя [3]: kz, 40"
|
||||
request:
|
||||
url: "{BASE_URL}/user/auth/sign-up"
|
||||
method: POST
|
||||
json:
|
||||
name: Yefim
|
||||
surname: Dinitz
|
||||
email: algo3@prog.ru
|
||||
password: HardPASSword1!
|
||||
other:
|
||||
age: 40
|
||||
country: kz
|
||||
response:
|
||||
status_code: 200
|
||||
save:
|
||||
json:
|
||||
user3_token: token
|
||||
|
||||
- name: "Создание промокода [1]: active, <all>"
|
||||
request:
|
||||
url: "{BASE_URL}/business/promo"
|
||||
method: POST
|
||||
headers:
|
||||
Authorization: "Bearer {company1_token}"
|
||||
json:
|
||||
description: "[1] Активный COMMON промокод для всех"
|
||||
target: {}
|
||||
max_count: 4
|
||||
active_from: "2025-01-10"
|
||||
mode: "COMMON"
|
||||
promo_common: "sale-10"
|
||||
response:
|
||||
status_code: 201
|
||||
save:
|
||||
json:
|
||||
promo1_id: id
|
||||
|
||||
- name: "Создание промокода [2]: inactive, <kz>, 28.."
|
||||
request:
|
||||
url: "{BASE_URL}/business/promo"
|
||||
method: POST
|
||||
headers:
|
||||
Authorization: "Bearer {company2_token}"
|
||||
json:
|
||||
description: "[1] Активный COMMON промокод для kz, 28.."
|
||||
target:
|
||||
country: kz
|
||||
age_from: 28
|
||||
max_count: 10
|
||||
active_from: "2025-02-10"
|
||||
mode: "COMMON"
|
||||
promo_common: "sale-20"
|
||||
response:
|
||||
status_code: 201
|
||||
save:
|
||||
json:
|
||||
promo2_id: id
|
||||
|
||||
- name: "Создание промокода [3]: active, <gb>, 45.."
|
||||
request:
|
||||
url: "{BASE_URL}/business/promo"
|
||||
method: POST
|
||||
headers:
|
||||
Authorization: "Bearer {company2_token}"
|
||||
json:
|
||||
description: "[3] Активный UNIQUE промокод для gb, 45.."
|
||||
target:
|
||||
country: gb
|
||||
age_from: 45
|
||||
active_until: "2035-02-10"
|
||||
mode: "UNIQUE"
|
||||
max_count: 1
|
||||
promo_unique:
|
||||
- uniq1
|
||||
- uniq2
|
||||
response:
|
||||
status_code: 201
|
||||
save:
|
||||
json:
|
||||
promo3_id: id
|
||||
|
||||
- name: "Активация промокода [2]: отказ, так как промокод inactive"
|
||||
request:
|
||||
url: "{BASE_URL}/user/promo/{promo2_id}/activate"
|
||||
method: POST
|
||||
headers:
|
||||
Authorization: "Bearer {user3_token}"
|
||||
response:
|
||||
status_code: 403
|
||||
|
||||
- name: "Активация промокода [2]: отказ, так как промокод не соответствует настройкам таргетинга"
|
||||
request:
|
||||
url: "{BASE_URL}/user/promo/{promo2_id}/activate"
|
||||
method: POST
|
||||
headers:
|
||||
Authorization: "Bearer {user3_token}"
|
||||
response:
|
||||
status_code: 403
|
||||
|
||||
- name: "Активация промокода [1] пользователем 1: успех"
|
||||
request:
|
||||
url: "{BASE_URL}/user/promo/{promo1_id}/activate"
|
||||
method: POST
|
||||
headers:
|
||||
Authorization: "Bearer {user1_token}"
|
||||
response:
|
||||
status_code: 200
|
||||
json:
|
||||
promo: "sale-10"
|
||||
|
||||
- name: "Активация промокода [1] пользователем 3: успех"
|
||||
request:
|
||||
url: "{BASE_URL}/user/promo/{promo1_id}/activate"
|
||||
method: POST
|
||||
headers:
|
||||
Authorization: "Bearer {user3_token}"
|
||||
response:
|
||||
status_code: 200
|
||||
json:
|
||||
promo: "sale-10"
|
||||
|
||||
- name: "Активация промокода [1] пользователем 1: успех"
|
||||
request:
|
||||
url: "{BASE_URL}/user/promo/{promo1_id}/activate"
|
||||
method: POST
|
||||
headers:
|
||||
Authorization: "Bearer {user1_token}"
|
||||
response:
|
||||
status_code: 200
|
||||
json:
|
||||
promo: "sale-10"
|
||||
|
||||
# - name: "Внутренний запрос в Antifraud: заблокировать пользователя 2 (переменная ANTIFRAUD_URL, см. config.yml)"
|
||||
# max_retries: 3
|
||||
# request:
|
||||
# url: "{ANTIFRAUD_URL}/update_user_verdict"
|
||||
# method: POST
|
||||
# json:
|
||||
# user_email: mike2@bloomberg.com
|
||||
# ok: false
|
||||
# response:
|
||||
# status_code: 200
|
||||
|
||||
- name: "Активация промокода [1] пользователем 2: пользователь заблокирован"
|
||||
request:
|
||||
url: "{BASE_URL}/user/promo/{promo1_id}/activate"
|
||||
method: POST
|
||||
headers:
|
||||
Authorization: "Bearer {user2_token}"
|
||||
response:
|
||||
status_code: 403
|
||||
|
||||
- name: "Активация промокода [1] пользователем 3: успех"
|
||||
request:
|
||||
url: "{BASE_URL}/user/promo/{promo1_id}/activate"
|
||||
method: POST
|
||||
headers:
|
||||
Authorization: "Bearer {user3_token}"
|
||||
response:
|
||||
status_code: 200
|
||||
json:
|
||||
promo: "sale-10"
|
||||
|
||||
- name: "Активация промокода [1] пользователем 1: исчерпан лимит max_count"
|
||||
request:
|
||||
url: "{BASE_URL}/user/promo/{promo1_id}/activate"
|
||||
method: POST
|
||||
headers:
|
||||
Authorization: "Bearer {user1_token}"
|
||||
response:
|
||||
status_code: 403
|
||||
|
||||
- name: "Попытка уменьшить max_count: сделать меньше used_count"
|
||||
request:
|
||||
url: "{BASE_URL}/business/promo/{promo1_id}"
|
||||
method: PATCH
|
||||
headers:
|
||||
Authorization: "Bearer {company1_token}"
|
||||
json:
|
||||
max_count: 3
|
||||
response:
|
||||
status_code: 400
|
||||
|
||||
- name: "Активация промокода [3] пользователем 1: корректный запрос [1]"
|
||||
request:
|
||||
url: "{BASE_URL}/user/promo/{promo3_id}/activate"
|
||||
method: POST
|
||||
headers:
|
||||
Authorization: "Bearer {user1_token}"
|
||||
response:
|
||||
status_code: 200
|
||||
|
||||
- name: "Активация промокода [3] пользователем 1: корректный запрос [2]"
|
||||
request:
|
||||
url: "{BASE_URL}/user/promo/{promo3_id}/activate"
|
||||
method: POST
|
||||
headers:
|
||||
Authorization: "Bearer {user1_token}"
|
||||
response:
|
||||
status_code: 200
|
||||
|
||||
- name: "Активация промокода [3] пользователем 1: исчерпан лимит по числу активаций"
|
||||
request:
|
||||
url: "{BASE_URL}/user/promo/{promo3_id}/activate"
|
||||
method: POST
|
||||
headers:
|
||||
Authorization: "Bearer {user1_token}"
|
||||
response:
|
||||
status_code: 403
|
||||
|
||||
- name: "Получение промокода [1] со стороны пользователя 1"
|
||||
request:
|
||||
url: "{BASE_URL}/user/promo/{promo1_id}"
|
||||
method: GET
|
||||
headers:
|
||||
Authorization: "Bearer {user1_token}"
|
||||
response:
|
||||
status_code: 200
|
||||
json:
|
||||
promo_id: "{promo1_id}"
|
||||
active: false
|
||||
is_activated_by_user: true
|
||||
|
||||
- name: "Получение истории активаций пользователем 1"
|
||||
request:
|
||||
url: "{BASE_URL}/user/promo/history"
|
||||
method: GET
|
||||
headers:
|
||||
Authorization: "Bearer {user1_token}"
|
||||
response:
|
||||
status_code: 200
|
||||
json:
|
||||
- promo_id: "{promo3_id}"
|
||||
active: false
|
||||
is_activated_by_user: true
|
||||
- promo_id: "{promo3_id}"
|
||||
active: false
|
||||
is_activated_by_user: true
|
||||
- promo_id: "{promo1_id}"
|
||||
active: false
|
||||
is_activated_by_user: true
|
||||
- promo_id: "{promo1_id}"
|
||||
active: false
|
||||
is_activated_by_user: true
|
||||
|
||||
- name: "Получение истории активаций пользователем 1 (пагинация 2-3)"
|
||||
request:
|
||||
url: "{BASE_URL}/user/promo/history"
|
||||
method: GET
|
||||
params:
|
||||
offset: 2
|
||||
limit: 3
|
||||
headers:
|
||||
Authorization: "Bearer {user1_token}"
|
||||
response:
|
||||
status_code: 200
|
||||
json:
|
||||
- promo_id: "{promo1_id}"
|
||||
active: false
|
||||
is_activated_by_user: true
|
||||
- promo_id: "{promo1_id}"
|
||||
active: false
|
||||
is_activated_by_user: true
|
||||
headers:
|
||||
X-Total-Count: "4"
|
||||
|
||||
- name: "Получение истории активаций пользователем 1 (пагинация -0)"
|
||||
request:
|
||||
url: "{BASE_URL}/user/promo/history"
|
||||
method: GET
|
||||
params:
|
||||
limit: 0
|
||||
headers:
|
||||
Authorization: "Bearer {user1_token}"
|
||||
response:
|
||||
status_code: 200
|
||||
json: []
|
||||
@@ -0,0 +1,149 @@
|
||||
test_name: Активация промокода
|
||||
|
||||
# Подключение файлов из директории components для переиспользования в тестах
|
||||
includes:
|
||||
- !include components/basic_auth.yml
|
||||
|
||||
stages:
|
||||
- type: ref
|
||||
id: basic_auth_auth1
|
||||
|
||||
- type: ref
|
||||
id: basic_auth_auth2
|
||||
|
||||
- name: "Получение списка промокодов для сохранения Promo ID"
|
||||
request:
|
||||
url: "{BASE_URL}/business/promo"
|
||||
method: GET
|
||||
headers:
|
||||
Authorization: "Bearer {company1_token}"
|
||||
response:
|
||||
status_code: 200
|
||||
save:
|
||||
json:
|
||||
promo1_id: "[0].promo_id"
|
||||
|
||||
- name: "Регистрация нового пользователя [4]: by, 23"
|
||||
request:
|
||||
url: "{BASE_URL}/user/auth/sign-up"
|
||||
method: POST
|
||||
json:
|
||||
name: Igor
|
||||
surname: Baliuk
|
||||
email: dontstopthemusic@gmail.com
|
||||
password: CalifornicationIsNear2024!
|
||||
other:
|
||||
age: 23
|
||||
country: by
|
||||
response:
|
||||
status_code: 200
|
||||
save:
|
||||
json:
|
||||
user4_token: token
|
||||
|
||||
- name: "Регистрация нового пользователя [5]: by, 23"
|
||||
request:
|
||||
url: "{BASE_URL}/user/auth/sign-up"
|
||||
method: POST
|
||||
json:
|
||||
name: Aleksandr
|
||||
surname: Shakhov
|
||||
email: slowdown@antifraud.ru
|
||||
password: IHaveADog!Love1t
|
||||
other:
|
||||
age: 28
|
||||
country: ru
|
||||
response:
|
||||
status_code: 200
|
||||
save:
|
||||
json:
|
||||
user5_token: token
|
||||
|
||||
- name: "Редактирование промокода [1], он должен стать active=true"
|
||||
request:
|
||||
url: "{BASE_URL}/business/promo/{promo1_id}"
|
||||
method: PATCH
|
||||
headers:
|
||||
Authorization: "Bearer {company1_token}"
|
||||
json:
|
||||
max_count: 100
|
||||
response:
|
||||
status_code: 200
|
||||
|
||||
- name: "Активация промокода [1] пользователем 4: корректный запрос [1]"
|
||||
request:
|
||||
url: "{BASE_URL}/user/promo/{promo1_id}/activate"
|
||||
method: POST
|
||||
headers:
|
||||
Authorization: "Bearer {user4_token}"
|
||||
response:
|
||||
status_code: 200
|
||||
|
||||
- name: "Внутренний запрос в Antifraud: заблокировать пользователя 4"
|
||||
max_retries: 3
|
||||
request:
|
||||
url: "{ANTIFRAUD_URL}/update_user_verdict"
|
||||
method: POST
|
||||
json:
|
||||
user_email: dontstopthemusic@gmail.com
|
||||
ok: false
|
||||
response:
|
||||
status_code: 200
|
||||
|
||||
- name: "Активация промокода [1] пользователем 4: корректный запрос [1]"
|
||||
request:
|
||||
url: "{BASE_URL}/user/promo/{promo1_id}/activate"
|
||||
method: POST
|
||||
headers:
|
||||
Authorization: "Bearer {user4_token}"
|
||||
response:
|
||||
status_code: 200
|
||||
|
||||
- name: "Активация промокода [1] пользователем 4: отказ из-за сервиса антифрода (делаем искусственную задержку на 3 секунды)"
|
||||
delay_before: 3
|
||||
request:
|
||||
url: "{BASE_URL}/user/promo/{promo1_id}/activate"
|
||||
method: POST
|
||||
headers:
|
||||
Authorization: "Bearer {user4_token}"
|
||||
response:
|
||||
status_code: 403
|
||||
|
||||
- name: "Активация промокода [1] пользователем 5: корректный запрос [1]"
|
||||
request:
|
||||
url: "{BASE_URL}/user/promo/{promo1_id}/activate"
|
||||
method: POST
|
||||
headers:
|
||||
Authorization: "Bearer {user5_token}"
|
||||
response:
|
||||
status_code: 200
|
||||
|
||||
# - name: "Внутренний запрос в Antifraud: установить искусственную задержку 2500-3000 мс, приложение должно кешировать предыдущий ответ"
|
||||
# request:
|
||||
# url: "{ANTIFRAUD_URL}/set_delay"
|
||||
# method: POST
|
||||
# json:
|
||||
# min: 2500
|
||||
# max: 3000
|
||||
# response:
|
||||
# status_code: 200
|
||||
|
||||
- name: "Активация промокода [1] пользователем 5: корректный запрос [1]"
|
||||
request:
|
||||
timeout: 1.0 # 1 секунда
|
||||
url: "{BASE_URL}/user/promo/{promo1_id}/activate"
|
||||
method: POST
|
||||
headers:
|
||||
Authorization: "Bearer {user5_token}"
|
||||
response:
|
||||
status_code: 200
|
||||
|
||||
- name: "Активация промокода [1] пользователем 5: корректный запрос [1]"
|
||||
request:
|
||||
timeout: 1.0 # 1 секунда
|
||||
url: "{BASE_URL}/user/promo/{promo1_id}/activate"
|
||||
method: POST
|
||||
headers:
|
||||
Authorization: "Bearer {user5_token}"
|
||||
response:
|
||||
status_code: 200
|
||||
@@ -0,0 +1,184 @@
|
||||
test_name: Создать и активировать промокоды
|
||||
|
||||
# Подключение файлов из директории components для переиспользования в тестах
|
||||
includes:
|
||||
- !include components/basic_auth.yml
|
||||
|
||||
stages:
|
||||
- type: ref
|
||||
id: basic_auth_reg1
|
||||
|
||||
- type: ref
|
||||
id: basic_auth_reg2
|
||||
|
||||
- name: "Регистрация нового пользователя [1]: gb, 60"
|
||||
request:
|
||||
url: "{BASE_URL}/user/auth/sign-up"
|
||||
method: POST
|
||||
json:
|
||||
name: Steve
|
||||
surname: Wozniak
|
||||
email: creator2@apple.com
|
||||
password: WhoLiveSInCalifornia2000!
|
||||
other:
|
||||
age: 60
|
||||
country: gb
|
||||
response:
|
||||
status_code: 200
|
||||
save:
|
||||
json:
|
||||
user1_token: token
|
||||
|
||||
- name: "Регистрация нового пользователя [2]: us, 15"
|
||||
request:
|
||||
url: "{BASE_URL}/user/auth/sign-up"
|
||||
method: POST
|
||||
json:
|
||||
name: Mike
|
||||
surname: Bloomberg
|
||||
email: mike3@bloomberg.com
|
||||
password: WhoLiveSInCalifornia2000!
|
||||
other:
|
||||
age: 15
|
||||
country: us
|
||||
response:
|
||||
status_code: 200
|
||||
save:
|
||||
json:
|
||||
user2_token: token
|
||||
|
||||
- name: "Регистрация нового пользователя [3]: kz, 40"
|
||||
request:
|
||||
url: "{BASE_URL}/user/auth/sign-up"
|
||||
method: POST
|
||||
json:
|
||||
name: Yefim
|
||||
surname: Dinitz
|
||||
email: algo3@prog.ru
|
||||
password: HardPASSword1!
|
||||
other:
|
||||
age: 40
|
||||
country: kz
|
||||
response:
|
||||
status_code: 200
|
||||
save:
|
||||
json:
|
||||
user3_token: token
|
||||
|
||||
- name: "Создание промокода [1]: active, <all>"
|
||||
request:
|
||||
url: "{BASE_URL}/business/promo"
|
||||
method: POST
|
||||
headers:
|
||||
Authorization: "Bearer {company1_token}"
|
||||
json:
|
||||
description: "[1] Активный COMMON промокод для всех"
|
||||
target: {}
|
||||
max_count: 10
|
||||
active_from: "2025-01-10"
|
||||
mode: "COMMON"
|
||||
promo_common: "sale-10"
|
||||
response:
|
||||
status_code: 201
|
||||
save:
|
||||
json:
|
||||
promo1_id: id
|
||||
|
||||
- name: "Активация промокода [1] пользователем 1: успех"
|
||||
request:
|
||||
url: "{BASE_URL}/user/promo/{promo1_id}/activate"
|
||||
method: POST
|
||||
headers:
|
||||
Authorization: "Bearer {user1_token}"
|
||||
response:
|
||||
status_code: 200
|
||||
json:
|
||||
promo: "sale-10"
|
||||
|
||||
- name: "Активация промокода [1] пользователем 2: успех"
|
||||
request:
|
||||
url: "{BASE_URL}/user/promo/{promo1_id}/activate"
|
||||
method: POST
|
||||
headers:
|
||||
Authorization: "Bearer {user2_token}"
|
||||
response:
|
||||
status_code: 200
|
||||
json:
|
||||
promo: "sale-10"
|
||||
|
||||
- name: "Активация промокода [1] пользователем 1: успех"
|
||||
request:
|
||||
url: "{BASE_URL}/user/promo/{promo1_id}/activate"
|
||||
method: POST
|
||||
headers:
|
||||
Authorization: "Bearer {user1_token}"
|
||||
response:
|
||||
status_code: 200
|
||||
json:
|
||||
promo: "sale-10"
|
||||
|
||||
- name: "Активация промокода [1] пользователем 3: успех"
|
||||
request:
|
||||
url: "{BASE_URL}/user/promo/{promo1_id}/activate"
|
||||
method: POST
|
||||
headers:
|
||||
Authorization: "Bearer {user3_token}"
|
||||
response:
|
||||
status_code: 200
|
||||
json:
|
||||
promo: "sale-10"
|
||||
|
||||
- name: "Активация промокода [1] пользователем 3: успех"
|
||||
request:
|
||||
url: "{BASE_URL}/user/promo/{promo1_id}/activate"
|
||||
method: POST
|
||||
headers:
|
||||
Authorization: "Bearer {user3_token}"
|
||||
response:
|
||||
status_code: 200
|
||||
json:
|
||||
promo: "sale-10"
|
||||
|
||||
- name: "Активация промокода [1] пользователем 1: успех"
|
||||
request:
|
||||
url: "{BASE_URL}/user/promo/{promo1_id}/activate"
|
||||
method: POST
|
||||
headers:
|
||||
Authorization: "Bearer {user1_token}"
|
||||
response:
|
||||
status_code: 200
|
||||
json:
|
||||
promo: "sale-10"
|
||||
|
||||
- name: "Активация промокода [1] пользователем 2: успех"
|
||||
request:
|
||||
url: "{BASE_URL}/user/promo/{promo1_id}/activate"
|
||||
method: POST
|
||||
headers:
|
||||
Authorization: "Bearer {user2_token}"
|
||||
response:
|
||||
status_code: 200
|
||||
json:
|
||||
promo: "sale-10"
|
||||
|
||||
- name: "Активация промокода [1] пользователем 2: успех"
|
||||
request:
|
||||
url: "{BASE_URL}/user/promo/{promo1_id}/activate"
|
||||
method: POST
|
||||
headers:
|
||||
Authorization: "Bearer {user2_token}"
|
||||
response:
|
||||
status_code: 200
|
||||
json:
|
||||
promo: "sale-10"
|
||||
|
||||
- name: "Активация промокода [1] пользователем 2: успех"
|
||||
request:
|
||||
url: "{BASE_URL}/user/promo/{promo1_id}/activate"
|
||||
method: POST
|
||||
headers:
|
||||
Authorization: "Bearer {user2_token}"
|
||||
response:
|
||||
status_code: 200
|
||||
json:
|
||||
promo: "sale-10"
|
||||
@@ -0,0 +1,53 @@
|
||||
test_name: Получение статистики активаций
|
||||
|
||||
# Подключение файлов из директории components для переиспользования в тестах
|
||||
includes:
|
||||
- !include components/basic_auth.yml
|
||||
|
||||
# Предварительно необходимо запустить тест test_14_business_activate_promo.tavern.yml
|
||||
|
||||
stages:
|
||||
- type: ref
|
||||
id: basic_auth_auth1
|
||||
|
||||
- type: ref
|
||||
id: basic_auth_auth2
|
||||
|
||||
- name: "Получение списка промокодов для сохранения Promo ID"
|
||||
request:
|
||||
url: "{BASE_URL}/business/promo"
|
||||
method: GET
|
||||
headers:
|
||||
Authorization: "Bearer {company1_token}"
|
||||
response:
|
||||
status_code: 200
|
||||
json:
|
||||
- used_count: 9
|
||||
active: true
|
||||
save:
|
||||
json:
|
||||
promo1_id: "[0].promo_id"
|
||||
|
||||
- name: "Получение статистики активаций по промокоду [1]: нет доступа (другая компания)"
|
||||
request:
|
||||
url: "{BASE_URL}/business/promo/{promo1_id}/stat"
|
||||
method: GET
|
||||
headers:
|
||||
Authorization: "Bearer {company2_token}"
|
||||
response:
|
||||
status_code: 403
|
||||
|
||||
- name: "Получение статистики активаций по промокоду [1]: получение промокода"
|
||||
request:
|
||||
url: "{BASE_URL}/business/promo/{promo1_id}/stat"
|
||||
method: GET
|
||||
headers:
|
||||
Authorization: "Bearer {company1_token}"
|
||||
response:
|
||||
status_code: 200
|
||||
json:
|
||||
activations_count: 9
|
||||
countries:
|
||||
- activations_count: 3
|
||||
- activations_count: 2
|
||||
- activations_count: 4
|
||||
Reference in New Issue
Block a user