Skip to content

Commit

Permalink
feat: migrate edge dns zone creation to api v4 (#2093)
Browse files Browse the repository at this point in the history
  • Loading branch information
aloisio-m-bastian authored Feb 3, 2025
1 parent 8398553 commit eb71aa4
Show file tree
Hide file tree
Showing 16 changed files with 161 additions and 14 deletions.
2 changes: 1 addition & 1 deletion cypress/e2e/edge-dns/create-edge-dns-zone.cy.js
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ describe('Edge DNS spec', { tags: ['@dev4', '@dont_run_prod'] }, () => {
cy.get(selectors.edgeDns.domainInput).clear()
cy.get(selectors.edgeDns.domainInput).type(`${zoneName}.com.az`)
cy.get(selectors.edgeDns.saveButton).click()
cy.verifyToast('success', 'Your Edge DNS has been created')
cy.verifyToast('success', 'Your Edge DNS Zone has been created')
cy.get(selectors.edgeDns.cancelButton).click()

// Assert
Expand Down
2 changes: 1 addition & 1 deletion cypress/e2e/edge-dns/create-record-type-a.cy.js
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ describe('Edge DNS spec', { tags: ['@dev4', '@dont_run_prod'] }, () => {
cy.get(selectors.edgeDns.nameInput).type(zoneName)
cy.get(selectors.edgeDns.domainInput).type(`${zoneName}.com.az`)
cy.get(selectors.edgeDns.saveButton).click()
cy.verifyToast('success', 'Your Edge DNS has been created')
cy.verifyToast('success', 'Your Edge DNS Zone has been created')
cy.get(selectors.edgeDns.cancelButton).click()
cy.get(selectors.edgeDns.searchInput).type(`${zoneName}{enter}`)
cy.get(selectors.edgeDns.nameRow)
Expand Down
2 changes: 1 addition & 1 deletion cypress/e2e/edge-dns/create-record-type-aaaa.cy.js
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ describe('Edge DNS spec', { tags: ['@dev4', '@dont_run_prod'] }, () => {
cy.get(selectors.edgeDns.nameInput).type(zoneName)
cy.get(selectors.edgeDns.domainInput).type(`${zoneName}.com.az`)
cy.get(selectors.edgeDns.saveButton).click()
cy.verifyToast('success', 'Your Edge DNS has been created')
cy.verifyToast('success', 'Your Edge DNS Zone has been created')
cy.get(selectors.edgeDns.cancelButton).click()
cy.get(selectors.edgeDns.searchInput).type(`${zoneName}{enter}`)
cy.get(selectors.edgeDns.nameRow)
Expand Down
2 changes: 1 addition & 1 deletion cypress/e2e/edge-dns/create-record-type-aname.cy.js
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ describe('Edge DNS spec', { tags: ['@dev4', '@dont_run_prod'] }, () => {
cy.get(selectors.edgeDns.nameInput).type(zoneName)
cy.get(selectors.edgeDns.domainInput).type(`${zoneName}.com.az`)
cy.get(selectors.edgeDns.saveButton).click()
cy.verifyToast('success', 'Your Edge DNS has been created')
cy.verifyToast('success', 'Your Edge DNS Zone has been created')
cy.get(selectors.edgeDns.cancelButton).click()
cy.get(selectors.edgeDns.searchInput).type(`${zoneName}{enter}`)
cy.get(selectors.edgeDns.nameRow)
Expand Down
2 changes: 1 addition & 1 deletion cypress/e2e/edge-dns/create-record-type-caa.cy.js
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ describe('Edge DNS spec', { tags: ['@dev5', '@dont_run_prod'] }, () => {
cy.get(selectors.edgeDns.nameInput).type(zoneName)
cy.get(selectors.edgeDns.domainInput).type(`${zoneName}.com.az`)
cy.get(selectors.edgeDns.saveButton).click()
cy.verifyToast('success', 'Your Edge DNS has been created')
cy.verifyToast('success', 'Your Edge DNS Zonehas been created')
cy.get(selectors.edgeDns.cancelButton).click()
cy.get(selectors.edgeDns.searchInput).type(`${zoneName}{enter}`)
cy.get(selectors.edgeDns.nameRow)
Expand Down
2 changes: 1 addition & 1 deletion cypress/e2e/edge-dns/create-record-type-cname.cy.js
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ describe('Edge DNS spec', { tags: ['@dev5', '@dont_run_prod'] }, () => {
cy.get(selectors.edgeDns.nameInput).type(zoneName)
cy.get(selectors.edgeDns.domainInput).type(`${zoneName}.com.az`)
cy.get(selectors.edgeDns.saveButton).click()
cy.verifyToast('success', 'Your Edge DNS has been created')
cy.verifyToast('success', 'Your Edge DNS Zonehas been created')
cy.get(selectors.edgeDns.cancelButton).click()
cy.get(selectors.edgeDns.searchInput).type(`${zoneName}{enter}`)
cy.get(selectors.edgeDns.nameRow)
Expand Down
2 changes: 1 addition & 1 deletion cypress/e2e/edge-dns/create-record-type-ds.cy.js
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ describe('Edge DNS spec', { tags: ['@dev5', '@dont_run_prod'] }, () => {
cy.get(selectors.edgeDns.nameInput).type(zoneName)
cy.get(selectors.edgeDns.domainInput).type(`${zoneName}.com.az`)
cy.get(selectors.edgeDns.saveButton).click()
cy.verifyToast('success', 'Your Edge DNS has been created')
cy.verifyToast('success', 'Your Edge DNS Zone has been created')
cy.get(selectors.edgeDns.cancelButton).click()
cy.get(selectors.edgeDns.searchInput).type(`${zoneName}{enter}`)
cy.get(selectors.edgeDns.nameRow)
Expand Down
2 changes: 1 addition & 1 deletion cypress/e2e/edge-dns/create-record-type-mx.cy.js
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ describe('Edge DNS spec', { tags: ['@dev5', '@dont_run_prod'] }, () => {
cy.get(selectors.edgeDns.nameInput).type(zoneName)
cy.get(selectors.edgeDns.domainInput).type(`${zoneName}.com.az`)
cy.get(selectors.edgeDns.saveButton).click()
cy.verifyToast('success', 'Your Edge DNS has been created')
cy.verifyToast('success', 'Your Edge DNS Zone has been created')
cy.get(selectors.edgeDns.cancelButton).click()
cy.get(selectors.edgeDns.searchInput).type(`${zoneName}{enter}`)
cy.get(selectors.edgeDns.nameRow)
Expand Down
2 changes: 1 addition & 1 deletion cypress/e2e/edge-dns/create-record-type-ns.cy.js
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ describe('Edge DNS spec', { tags: ['@dev5', '@dont_run_prod'] }, () => {
cy.get(selectors.edgeDns.nameInput).type(zoneName)
cy.get(selectors.edgeDns.domainInput).type(`${zoneName}.com.az`)
cy.get(selectors.edgeDns.saveButton).click()
cy.verifyToast('success', 'Your Edge DNS has been created')
cy.verifyToast('success', 'Your Edge DNS Zone has been created')
cy.get(selectors.edgeDns.cancelButton).click()
cy.get(selectors.edgeDns.searchInput).type(`${zoneName}{enter}`)
cy.get(selectors.edgeDns.nameRow)
Expand Down
2 changes: 1 addition & 1 deletion cypress/e2e/edge-dns/create-record-type-ptr.cy.js
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ describe('Edge DNS spec', { tags: ['@dev5', '@dont_run_prod'] }, () => {
cy.get(selectors.edgeDns.nameInput).type(zoneName)
cy.get(selectors.edgeDns.domainInput).type(`${zoneName}.com.az`)
cy.get(selectors.edgeDns.saveButton).click()
cy.verifyToast('success', 'Your Edge DNS has been created')
cy.verifyToast('success', 'Your Edge DNS Zone has been created')
cy.get(selectors.edgeDns.cancelButton).click()
cy.get(selectors.edgeDns.searchInput).type(`${zoneName}{enter}`)
cy.get(selectors.edgeDns.nameRow)
Expand Down
2 changes: 1 addition & 1 deletion cypress/e2e/edge-dns/create-record-type-srv.cy.js
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ describe('Edge DNS spec', { tags: ['@dev5', '@dont_run_prod'] }, () => {
cy.get(selectors.edgeDns.nameInput).type(zoneName)
cy.get(selectors.edgeDns.domainInput).type(`${zoneName}.com.az`)
cy.get(selectors.edgeDns.saveButton).click()
cy.verifyToast('success', 'Your Edge DNS has been created')
cy.verifyToast('success', 'Your Edge DNS Zone has been created')
cy.get(selectors.edgeDns.cancelButton).click()
cy.get(selectors.edgeDns.searchInput).type(`${zoneName}{enter}`)
cy.get(selectors.edgeDns.nameRow)
Expand Down
2 changes: 1 addition & 1 deletion cypress/e2e/edge-dns/create-record-type-txt.cy.js
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ describe('Edge DNS spec', { tags: ['@dev5', '@dont_run_prod'] }, () => {
cy.get(selectors.edgeDns.nameInput).type(zoneName)
cy.get(selectors.edgeDns.domainInput).type(`${zoneName}.com.az`)
cy.get(selectors.edgeDns.saveButton).click()
cy.verifyToast('success', 'Your Edge DNS has been created')
cy.verifyToast('success', 'Your Edge DNS Zone has been created')
cy.get(selectors.edgeDns.cancelButton).click()
cy.get(selectors.edgeDns.searchInput).type(`${zoneName}{enter}`)
cy.get(selectors.edgeDns.nameRow)
Expand Down
2 changes: 1 addition & 1 deletion src/router/routes/edge-dns-routes/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ export const edgeDnsRoutes = {
name: 'create-edge-dns',
component: () => import('@views/EdgeDNS/CreateView.vue'),
props: {
createEdgeDNSService: EdgeDNSService.createEdgeDNSService,
createEdgeDNSService: EdgeDNSServiceV4.createEdgeDNSZonesService,
clipboardWrite: Helpers.clipboardWrite
},
meta: {
Expand Down
43 changes: 43 additions & 0 deletions src/services/edge-dns-services/v4/create-edge-dns-zones-service.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
import { AxiosHttpClientAdapter } from '@/services/axios/AxiosHttpClientAdapter'
import * as Errors from '@/services/axios/errors'
import { makeEdgeDNSBaseUrl } from './make-edge-dns-base-url'
import { extractApiError } from '@/helpers/extract-api-error'

export const createEdgeDNSZonesService = async (payload) => {
const adaptPayload = adapt(payload)

let httpResponse = await AxiosHttpClientAdapter.request({
url: `${makeEdgeDNSBaseUrl()}/zones`,
method: 'POST',
body: adaptPayload
})

return parseHttpResponse(httpResponse)
}

const adapt = (payload) => {
return {
name: payload.name,
domain: payload.domain,
active: payload.isActive
}
}

/**
* @param {Object} httpResponse - The HTTP response object.
* @param {Object} httpResponse.body - The response body.
* @returns {string} The formatted error message.
*/
const parseHttpResponse = (httpResponse) => {
switch (httpResponse.statusCode) {
case 202:
return {
feedback: 'Your Edge DNS Zone has been created',
urlToEditView: `/edge-dns/edit/${httpResponse.body.data.id}`
}
case 500:
throw new Errors.InternalServerError().message
default:
throw new Error(extractApiError(httpResponse)).message
}
}
9 changes: 8 additions & 1 deletion src/services/edge-dns-services/v4/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,12 @@ import { listEdgeDNSService } from './list-edge-dns-service'
import { loadEdgeDNSService } from './load-edge-dns-zone-service'
import { editEdgeDNSService } from './edit-edge-dn-zone-service'
import { deleteEdgeDnsZoneService } from './delete-edge-dns-zone-service'
import { createEdgeDNSZonesService } from './create-edge-dns-zones-service'

export { listEdgeDNSService, loadEdgeDNSService, editEdgeDNSService, deleteEdgeDnsZoneService }
export {
listEdgeDNSService,
loadEdgeDNSService,
editEdgeDNSService,
deleteEdgeDnsZoneService,
createEdgeDNSZonesService
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
import { AxiosHttpClientAdapter } from '@/services/axios/AxiosHttpClientAdapter'
import * as Errors from '@/services/axios/errors'
import { createEdgeDNSZonesService } from '@/services/edge-dns-services/v4/create-edge-dns-zones-service'
import { describe, expect, it, vi } from 'vitest'

const fixtures = {
edgeDNSZoneMock: {
name: 'mockName',
domain: 'example.com',
isActive: true
}
}

const makeSut = () => {
const sut = createEdgeDNSZonesService

return { sut }
}

describe('EdgeDNSZonesService', () => {
it('should call API with correct params', async () => {
const requestSpy = vi.spyOn(AxiosHttpClientAdapter, 'request').mockResolvedValueOnce({
statusCode: 202,
body: {
data: {
id: '123456'
}
}
})
const { sut } = makeSut()

await sut(fixtures.edgeDNSZoneMock)

expect(requestSpy).toHaveBeenCalledWith({
url: 'v4/edge_dns/zones',
method: 'POST',
body: {
name: fixtures.edgeDNSZoneMock.name,
domain: fixtures.edgeDNSZoneMock.domain,
active: fixtures.edgeDNSZoneMock.isActive
}
})
})

it('should return feedback and urlToEditView when successfully create an Edge DNS Zone', async () => {
const zoneId = '123456'
vi.spyOn(AxiosHttpClientAdapter, 'request').mockResolvedValueOnce({
statusCode: 202,
body: {
data: {
id: zoneId
}
}
})
const { sut } = makeSut()

const result = await sut(fixtures.edgeDNSZoneMock)

expect(result).toEqual({
feedback: 'Your Edge DNS Zone has been created',
urlToEditView: `/edge-dns/edit/${zoneId}`
})
})

it('should throw internal server error when request fails with 500 status code', async () => {
vi.spyOn(AxiosHttpClientAdapter, 'request').mockResolvedValueOnce({
statusCode: 500,
body: {
detail: 'Internal Server Error'
}
})

const { sut } = makeSut()

const apiErrorResponse = sut(fixtures.edgeDNSZoneMock)
const expectedError = new Errors.InternalServerError().message

expect(apiErrorResponse).rejects.toBe(expectedError)
})

it('should throw parsing api error when request fails with non-500 status code', async () => {
const apiErrorMock = {
detail: 'api error message'
}

vi.spyOn(AxiosHttpClientAdapter, 'request').mockResolvedValueOnce({
statusCode: 400,
body: apiErrorMock
})

const { sut } = makeSut()

const apiErrorResponse = sut(fixtures.edgeDNSZoneMock)

expect(apiErrorResponse).rejects.toBe('api error message')
})
})

0 comments on commit eb71aa4

Please sign in to comment.