
---
# Awesome Java Automation Framework
Tech Stack:
- Java 8 u231
- Gradle 6.7
- TestNg 7.2.0

Dependencies [build.gradle](build.gradle)

Systems levels supported:
- API:
  - all envs are supported, API sensitive to the data, the stage is the best one;
  - [api test suite]()
- SLZ
- L2
- ETL

# GLOSSARY
Framework:
- **SME** - Sony Music Entertainment client;
- **Delphi** - Base Project name of SME;
- **SLZ** - Single Landing Zone project for the data collecting;
- **ETL** - Extract Transform Load project for the data transformation to domain specific abstractions and flows;
- **DSP** - Data Source Providers [DelphiDsps.java enum](./src/main/java/io/delphi/qa/auto/awsmfrw/common_baby/delphi/DelphiDsps.java)
- **Licensor** - Licensors [DelphiLicensors.java enum](./src/main/java/io/delphi/qa/auto/awsmfrw/common_baby/delphi/DelphiLicensors.java)
- **AWS** - Amazon Web Services
- **Sfs** - AWS Step Function service [/sf entry point dir](./src/test/resources/tdata/slz/aws/sfs)
- **Sf** - AWS Step Function > State machine execution [AwsSfStateMachines.java enum](./src/main/java/io/delphi/qa/auto/awsmfrw/common_baby/delphi/aws/AwsSfStateMachines.java)
- **Sm** - AWS Secret Manager
- **S3** - AWS S3 Simple Cloud Storage
- **Cw** - AWS Cloud Watch
- **** -
- **Pg** - PostgreSql data base prefix
  Framework specific:
- **Hl** - Helper prefix for wrapper classes responsible for some specific functionality eg,
  AWS S3 client wrapper for CRUD operations - [HlAwsS3.java](./src/main/java/io/delphi/qa/auto/awsmfrw/managers/helpers/aws/HlAwsS3.java)
- **Bs** - Base prefix for parent class which is often abstract for child generalization eg,
  Base Test class for basic suite setup - [BsTest.java](./src/test/java/io/delphi/qa/auto/awsmfrw/tests/BsTest.java)
- ??**Hb** - Helper Base prefix for parent class which is often abstract for child generalization eg,
  HbAwsSdkV1 abstract parent of all AWS wrapper classes - [BsHlAwsSdkV1.java](./src/main/java/io/delphi/qa/auto/awsmfrw/managers/helpers/aws/BsHlAwsSdkV1.java)
- **Mg** - Manager prefix for classes which is responsible for caching the wrapper classes and provide
  the fluent interface functionality eg, Delphi manager class entry point for any test - [MgDelphi.java](./src/main/java/io/delphi/qa/auto/awsmfrw/managers/MgDelphi.java)
- **Wp** - Wrapper prefix for classes which is responsible for caching the model classes and provide
  the fluent interface functionality eg, WpPgUnitOfWorkContentStatus wrapper of two Postgres model classes of MlPgUnitOfWork and MlPgContentStatus -
  [WpPgUnitOfWorkContentStatus.java](./src/test/java/io/delphi/qa/auto/awsmfrw/models/db/pg/WpPgUnitOfWorkContentStatus.java) of first model
  [MlPgUnitOfWork.java](./src/test/java/io/delphi/qa/auto/awsmfrw/models/db/pg/MlPgUnitOfWork.java) and the second
  [MlPgContentStatus.java](./src/test/java/io/delphi/qa/auto/awsmfrw/models/db/pg/MlPgContentStatus.java).
- **Dd**- Datadog...
- **Sql** Relational data bases block...
- **Dsl** Domain specific language for specific proposes such as building custom Sql queries...
- **** 



AWS - Amazone Web Sercices [console](https://console.aws.amazon.com/console/home?nc2=h_ct&src=header-signin)

# API
generate pairwise tests based on swagger params
- create new file in resources package under the [api pairwise base dir](.src/test/resources/testdata/api/pairwise) by pattern <method_name>_<method_path.snake_case>.txt
- fill the file by the [pict documentation](https://github.com/Microsoft/pict/blob/main/doc/pict.md)
  - example:
    ```
    # https://qa-delphi-api.delphiplatform.io/api-docs/swagger-ui/index.html?configUrl=/v3/api-docs/swagger-config&urls.primaryName=v3#/Data%20Health/ads_data_health.status.get
    # Test factors
    # Required: null
    dsp:                empty,dsp,dsps
    status:             empty,status
    decibel_label_id:   empty,decibelLabelId,decibelLabelIds
    ads_account:        empty,adsAccount,adsAccounts
    ```
- launch the docker engine
- calculate the pairwise output with the pict utility in docker container:
  - open terminal
  - move to the [api pairwise base dir](.src/test/resources/testdata/api/pairwise):
    ```cd ./src/test/resources/testdata/api/pairwise```
  - launch container:
    ```docker run -ti -v $(pwd):/testdata --rm renfis/pict:latest /bin/bash```
  - run pict:
    ```export API_METHOD_UNDER_TEST=get_ads_data_health_dsp_status```
    ```pict ./testdata/$API_METHOD_UNDER_TEST.txt > ./testdata/$API_METHOD_UNDER_TEST_testcases.xls```
- build the test method patterns with [calculated values](.src/test/resources/testdata/api/pairwise/get_ads_data_health_dsp_status_testcases.xls)
  - examples:
    assertSc200_methodGet_pathAdsDataHealthDspStatus_queries
    assertSc200_pathAdsDataHealthDspStatus_queries_dspEqDsps_status_adsAccount
    assertSc200_pathAdsDataHealthDspStatus_queries_dsp_decibelLabelIdEqDecibelLabelIds_adsAccountEqAdsAccounts
  - empty should be skipped
  - or use xls/sheet file for concatenation