Skip to content

[Question] API requests returns same response #14246

@ghost

Description

Hello all,

I try to create API base test function. Like this

import { OnboardingApiObjects } from '@constants/api/Digital_Securities/OnboardingApiObjects'
import { expect } from '@playwright/test'
import { APIRequestContext } from 'playwright'

export class DigitalSecuritiesApi {
  readonly request: APIRequestContext

  constructor (request) {
    this.request = request
  }

  OnboardingApiObjects = new OnboardingApiObjects()

  async newOnboardingCompany (apiUrl: any, onboardingURL: any): Promise<string> {
    const _response = await this.request.post(
        `${apiUrl}${onboardingURL}/companies`,
        {
          data: {
            name: OnboardingApiObjects.companyName,
            incorporation_date: OnboardingApiObjects.incorporationDate,
            registration_number: OnboardingApiObjects.registrationNumber,
            legal_entity_type: OnboardingApiObjects.legalEntityType,
            place_of_incorporation: OnboardingApiObjects.placeOfIncorporation,
            business_activity_description: OnboardingApiObjects.businessActivityDescription,
            source_of_funds: OnboardingApiObjects.sourceOfFunds,
            annual_operating_income: OnboardingApiObjects.annualOperatingIncome,
            phone: OnboardingApiObjects.phone,
            website: OnboardingApiObjects.website,
            myinfo: OnboardingApiObjects.myinfo,
            address: {
              address_line_1: OnboardingApiObjects.addressLine1,
              address_line_2: OnboardingApiObjects.addressLine2,
              city: OnboardingApiObjects.city,
              country_code: OnboardingApiObjects.countryCode,
              postal_code: OnboardingApiObjects.postalCode
            }
          }
        }
    )
    // Assertions
    expect(_response.status()).toBe(200)
    expect(_response.ok()).toBeTruthy()
    // Check response parameters
    const res = await _response.json()
    expect(res).toHaveProperty('id')
    return res.id
  }

  async newOnboardingIndividual (apiUrl: any, onboardingURL: any): Promise<string> {
    const _response = await this.request.post(
        `${apiUrl}${onboardingURL}/individuals`,
        {
          data: {
            title: OnboardingApiObjects.title,
            first_name: OnboardingApiObjects.firstname,
            last_name: OnboardingApiObjects.lastname,
            identification_number: OnboardingApiObjects.identificationNumber,
            date_of_birth: OnboardingApiObjects.dateOfBirth,
            gender: OnboardingApiObjects.gender,
            nationality: OnboardingApiObjects.nationality,
            phone: OnboardingApiObjects.phone,
            mobile: OnboardingApiObjects.mobile,
            email: OnboardingApiObjects.email,
            annual_income: OnboardingApiObjects.annualIncome,
            liquid_assets: OnboardingApiObjects.liquidAssets,
            net_worth: OnboardingApiObjects.netWorth,
            myinfo: OnboardingApiObjects.myinfo,
            accredited: OnboardingApiObjects.accredited,
            identification_document_type: OnboardingApiObjects.identificationDocumentType,
            country_code_in_identification_document: OnboardingApiObjects.countryCodeInIdentificationDocument,
            address: {
              address_line_1: OnboardingApiObjects.addressLine1,
              address_line_2: OnboardingApiObjects.addressLine2,
              city: OnboardingApiObjects.city,
              country_code: OnboardingApiObjects.countryCode,
              postal_code: OnboardingApiObjects.postalCode
            }
          }
        }
    )
    // Assertions
    // Assertions
    expect(_response.status()).toBe(200)
    expect(_response.ok()).toBeTruthy()
    // Check response parameters
    const res = await _response.json()
    expect(res).toHaveProperty('id')
    return res.id
  }

  async newCustomer (apiUrl: any, customersURL: any, companyId: any): Promise<string> {
    const _response = await this.request.post(
      `${apiUrl}${customersURL}`,
      {
        data: [
          {
            onboarding_id: companyId,
            custody_agreement_acknowledgement: true,
            properties: {
              testing: 'Automation testing',
              Deletable: 'Yes'
            }
          }
        ]
      }
    )
    // Assertions
    expect(_response.status()).toBe(200)
    expect(_response.ok()).toBeTruthy()
    // Check response parameters
    const res = await _response.json()
    expect(res[0]).toHaveProperty('customer_id')
    expect(res[0]).toHaveProperty('onboarding_id', companyId)
    expect(res[0].properties).toHaveProperty('testing', 'Automation testing')
    expect(res[0].properties).toHaveProperty('Deletable', 'Yes')
    return res[0].customer_id
  }
}

And also add these functions into the baseTest

import { DigitalSecuritiesApi } from '@apis/DigitalSecuritiesApi'
import { MidOfficerPage } from '@pages/MidOfficerPage'
import { SignInPage } from '@pages/SignInPage'
import { test as baseTest } from '@playwright/test'

const test = baseTest.extend<{
    signInPage: SignInPage;
    midOfficerPage: MidOfficerPage;
    digitalSecuritiesApi: DigitalSecuritiesApi;

}>({
  signInPage: async ({ page }, use) => {
    await use(new SignInPage(page))
  },
  midOfficerPage: async ({ page }, use) => {
    await use(new MidOfficerPage(page))
  },
  digitalSecuritiesApi: async ({ request }, use) => {
    await use(new DigitalSecuritiesApi(request))
  }
})

export default test

After that I call this functions BeforeAll.

import { testConfig } from '@config/envConfig'
import { OnboardingApiObjects } from '@constants/api/Digital_Securities/OnboardingApiObjects'
import test from '@lib/TestBase'
import { expect } from '@playwright/test'

// ENV variables
const apiUrl = testConfig.apiUrl
const onboardingURL = testConfig.onboardingApiUrl
let companyId : string
let linkedCompanyId : string
let linkedIndividualId : string

test.describe('Update Company Functional Tests @func @onboarding', () => {
  test.beforeAll(async ({ digitalSecuritiesApi }) => {
    companyId = await digitalSecuritiesApi.newOnboardingCompany(apiUrl, onboardingURL)
    linkedCompanyId = await digitalSecuritiesApi.newOnboardingCompany(apiUrl, onboardingURL)
    linkedIndividualId = await digitalSecuritiesApi.newOnboardingIndividual(apiUrl, onboardingURL)
  })

  test('Update Company - Valid JSON', async ({ request }) => {
  // Send request
    const _response = await request.put(
    `${apiUrl}${onboardingURL}/companies/${companyId}`,
    {
      data: {
        linked_companies: [
          {
            company_id: linkedCompanyId,
            name: OnboardingApiObjects.name,
            description: OnboardingApiObjects.description
          }
        ],
        linked_individuals: [
          {
            individual_id: linkedIndividualId,
            name: OnboardingApiObjects.name,
            role: 'director'
          }
        ]
      }
    })
    // Assertions
    expect(_response.status()).toBe(200)
    expect(_response.ok()).toBeTruthy()
  })

The problem is these 2 lines returns same id, it seems when I call the same function return the same response. Doesnt create new one.

companyId = await digitalSecuritiesApi.newOnboardingCompany(apiUrl, onboardingURL)
linkedIndividualId = await digitalSecuritiesApi.newOnboardingIndividual(apiUrl, onboardingURL)`

How can I handle this issue?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions