cypress-bootstrap
Version:
Cypress Bootstrap is a project scaffolding tool that sets up a Cypress automation framework with a standardized folder structure and Page Object Model (POM) design. It helps teams quickly start testing with built-in best practices and sample specs.
90 lines (84 loc) • 4.35 kB
text/typescript
import { apiEndpoints } from '../../testbase/apiEndpoints';
import { HttpMethod, StatusCodes } from '../../support/Enums';
import { SubscriptionResponses } from '../../testbase/modals/responses/SubscriptionResponses';
import { SubscriptionRequests } from '../../testbase/modals/requests/SubscriptionRequests';
import { SUBSCRIPTION_DETAILS } from '../../testdata/dataObjects/Subscription';
import ProductTypesClient from '../../testbase/apiClients/ProductTypesClient';
import ProductsClient from '../../testbase/apiClients/ProductsClient';
import CustomersClient from '../../testbase/apiClients/CustomersClient';
import { PRODUCT_TYPE_DETAILS } from '../../testdata/dataObjects/ProductTypes';
import { PRODUCT_DETAILS } from '../../testdata/dataObjects/Product';
import { CUSTOMER_DETAILS } from '../../testdata/dataObjects/Customer';
import { ProductRequests } from '../../testbase/modals/requests/ProductRequests';
import { CustomerRequests } from '../../testbase/modals/requests/CustomerRequests';
import { ProductTypeResponses } from '../../testbase/modals/responses/ProductTypeResponses';
import { ProductResponses } from '../../testbase/modals/responses/ProductResponses';
import { CustomerResponses } from '../../testbase/modals/responses/CustomerResponses';
describe('Subscription API Test Suite', () => {
it('Get all subscriptions', { tags: ['@subscriptions', '@smoke'] }, () => {
cy.sendApiRequestDef(apiEndpoints.subscriptions, HttpMethod.GET, null, StatusCodes.OK).then(
response => {
expect(response).to.be.an('array');
expect(response).to.have.length.greaterThan(0);
Cypress.env('subscriptionId', response[0].id);
}
);
});
it('Get subscription by Id', { tags: ['@subscriptions', '@smoke'] }, () => {
cy.sendApiRequestDef(
apiEndpoints.subscriptionById(Cypress.env('subscriptionId')),
HttpMethod.GET,
null,
StatusCodes.OK
).then(response => {
const responseBody = response as SubscriptionResponses.SubscriptionResponse;
expect(responseBody).to.have.property('id');
expect(responseBody.id).to.eq(Cypress.env('subscriptionId'));
expect(responseBody).to.have.property('productId');
expect(responseBody).to.have.property('customerId');
expect(responseBody).to.have.property('startDate');
expect(responseBody).to.have.property('status');
expect(responseBody).to.have.property('createdAt');
});
});
it('Create subscription', { tags: ['@subscriptions', '@smoke'] }, () => {
// Create Product Type → Product → Customer using their clients, then create Subscription via endpoint
ProductTypesClient.createProductType(PRODUCT_TYPE_DETAILS).then(ptRes => {
const pt = ptRes as ProductTypeResponses.ProductTypeResponse;
const productRequest = new ProductRequests.Request();
const productBody = productRequest.createProductRequest({
...PRODUCT_DETAILS,
productTypeId: pt.id,
});
ProductsClient.createProduct(productBody).then(pRes => {
const product = pRes as ProductResponses.ProductResponse;
const customerRequest = new CustomerRequests.Request();
const customerBody = customerRequest.createCustomerRequest(CUSTOMER_DETAILS);
CustomersClient.createCustomer(customerBody).then(cRes => {
const customer = cRes as CustomerResponses.CustomerResponse;
const subscriptionRequest = new SubscriptionRequests.Request();
const subBody = subscriptionRequest.createSubscriptionRequest({
...SUBSCRIPTION_DETAILS,
});
subBody.productId = product.id;
subBody.customerId = customer.id;
cy.sendApiRequestDef(
apiEndpoints.subscriptions,
HttpMethod.POST,
null,
StatusCodes.CREATED,
subBody
).then(resp => {
const created = resp as SubscriptionResponses.SubscriptionResponse;
expect(created).to.have.property('id');
expect(created.productId).to.eq(product.id);
expect(created.customerId).to.eq(customer.id);
expect(created).to.have.property('startDate');
expect(created).to.have.property('status');
Cypress.env('createdSubscriptionId', created.id);
});
});
});
});
});
});