Skip to content

Commit

Permalink
Merge pull request #2154 from aziontech/dev
Browse files Browse the repository at this point in the history
DEPLOY 2025-02-11
  • Loading branch information
aloisio-m-bastian authored Feb 11, 2025
2 parents c2f069b + b68d0da commit 464efec
Show file tree
Hide file tree
Showing 18 changed files with 754 additions and 25 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/eslint.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ jobs:
- name: Install SO Dependencies
run: apk add --no-cache curl bash git

- uses: actions/cache@v2
- uses: actions/cache@v4
with:
path: '**/node_modules'
key: ${{ runner.os }}-modules-${{ hashFiles('**/yarn.lock') }}
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "azion-console-kit",
"version": "1.31.4",
"version": "1.31.5",
"private": false,
"type": "module",
"repository": {
Expand Down
17 changes: 8 additions & 9 deletions src/router/routes/edge-dns-routes/index.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
import * as EdgeDNSService from '@/services/edge-dns-services'
import * as EdgeDNSServiceV4 from '@/services/edge-dns-services/v4'

import * as EdgeDNSRecordsService from '@/services/edge-dns-records-services'
import * as EdgeDNSRecordsServiceV4 from '@/services/edge-dns-records-services/v4'
import * as Helpers from '@/helpers'

/** @type {import('vue-router').RouteRecordRaw} */
Expand Down Expand Up @@ -56,8 +55,8 @@ export const edgeDnsRoutes = {
props: {
editEdgeDNSService: EdgeDNSServiceV4.editEdgeDNSService,
loadEdgeDNSService: EdgeDNSServiceV4.loadEdgeDNSService,
listRecordsService: EdgeDNSRecordsService.listRecordsService,
deleteRecordsService: EdgeDNSRecordsService.deleteRecordsService,
listRecordsService: EdgeDNSRecordsServiceV4.listRecordsService,
deleteRecordsService: EdgeDNSRecordsServiceV4.deleteRecordsService,
clipboardWrite: Helpers.clipboardWrite,
updatedRedirect: 'list-edge-dns'
},
Expand All @@ -80,11 +79,11 @@ export const edgeDnsRoutes = {
props: {
editEdgeDNSService: EdgeDNSService.editEdgeDNSService,
loadEdgeDNSService: EdgeDNSService.loadEdgeDNSService,
listRecordsService: EdgeDNSRecordsService.listRecordsService,
deleteRecordsService: EdgeDNSRecordsService.deleteRecordsService,
createRecordsService: EdgeDNSRecordsService.createRecordsService,
editRecordsService: EdgeDNSRecordsService.editRecordsService,
loadRecordsService: EdgeDNSRecordsService.loadRecordsService,
listRecordsService: EdgeDNSRecordsServiceV4.listRecordsService,
deleteRecordsService: EdgeDNSRecordsServiceV4.deleteRecordsService,
createRecordsService: EdgeDNSRecordsServiceV4.createRecordsService,
editRecordsService: EdgeDNSRecordsServiceV4.editRecordsService,
loadRecordsService: EdgeDNSRecordsServiceV4.loadRecordsService,
clipboardWrite: Helpers.clipboardWrite,
documentationService: Helpers.documentationCatalog.records
},
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
import { AxiosHttpClientAdapter } from '@/services/axios/AxiosHttpClientAdapter'
import * as Errors from '@/services/axios/errors'
import { makeEdgeDNSRecordsBaseUrl } from './make-edge-dns-records-base-url'
import { extractApiError } from '@/helpers/extract-api-error'

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

let httpResponse = await AxiosHttpClientAdapter.request({
url: `${makeEdgeDNSRecordsBaseUrl()}/${payload.edgeDNSID}/records`,
method: 'POST',
body: adaptPayload
})

return parseHttpResponse(httpResponse, payload.id)
}

const adapt = (payload) => {
return {
record_type: payload.selectedRecordType,
policy: payload.selectedPolicy,
entry: payload.name,
answers_list: [payload.value],
ttl: payload.ttl,
description: payload.description,
weight: payload.weight
}
}

/**
* @param {Object} httpResponse - The HTTP response object.
* @param {Object} httpResponse.body - The response body.
* @param {String} httpResponse.statusCode - The HTTP status code.
* @returns {string} The result message based on the status code.
* @throws {Error} If there is an error with the response.
*/
const parseHttpResponse = (httpResponse, edgeDNSID) => {
switch (httpResponse.statusCode) {
case 201:
return {
feedback: 'Edge DNS Record has been created',
urlToEditView: `/edge-dns/edit/${edgeDNSID}/records/edit/${httpResponse.body.data.id}`
}
case 500:
throw new Errors.InternalServerError().message
default:
const apiError = extractApiError(httpResponse)
throw new Error(apiError).message
}
}
30 changes: 30 additions & 0 deletions src/services/edge-dns-records-services/v4/delete-record-service.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
import * as Errors from '@/services/axios/errors'
import { AxiosHttpClientAdapter } from '@/services/axios/AxiosHttpClientAdapter'
import { makeEdgeDNSRecordsBaseUrl } from './make-edge-dns-records-base-url'
import { extractApiError } from '@/helpers/extract-api-error'

export const deleteRecordsService = async ({ recordID, edgeDNSID }) => {
let httpResponse = await AxiosHttpClientAdapter.request({
url: `${makeEdgeDNSRecordsBaseUrl()}/${edgeDNSID}/records/${recordID}`,
method: 'DELETE'
})

return parseHttpResponse(httpResponse)
}

/**
* @param {Object} httpResponse - The HTTP response object.
* @param {String} httpResponse.statusCode - The HTTP status code.
* @returns {string} The result message based on the status code.
* @throws {Error} If there is an error with the response.
*/
const parseHttpResponse = (httpResponse) => {
switch (httpResponse.statusCode) {
case 200:
return 'Edge DNS Record successfully deleted'
case 500:
throw new Errors.InternalServerError().message
default:
throw new Error(extractApiError(httpResponse)).message
}
}
46 changes: 46 additions & 0 deletions src/services/edge-dns-records-services/v4/edit-records-service.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
import { AxiosHttpClientAdapter } from '@/services/axios/AxiosHttpClientAdapter'
import * as Errors from '@/services/axios/errors'
import { makeEdgeDNSRecordsBaseUrl } from './make-edge-dns-records-base-url'
import { extractApiError } from '@/helpers/extract-api-error'

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

let httpResponse = await AxiosHttpClientAdapter.request({
url: `${makeEdgeDNSRecordsBaseUrl()}/${payload.edgeDNSId}/records/${payload.id}`,
method: 'PUT',
body: adaptPayload
})

return parseHttpResponse(httpResponse)
}

const adapt = (payload) => {
return {
record_type: payload.selectedRecordType,
entry: payload.name,
answers_list: payload.value.split('\n'),
ttl: payload.ttl,
policy: payload.selectedPolicy,
weight: payload.weight,
description: payload.description
}
}

/**
* @param {Object} httpResponse - The HTTP response object.
* @param {Object} httpResponse.body - The response body.
* @param {String} httpResponse.statusCode - The HTTP status code.
* @returns {string} The result message based on the status code.
* @throws {Error} If there is an error with the response.
*/
const parseHttpResponse = (httpResponse) => {
switch (httpResponse.statusCode) {
case 200:
return 'Edge DNS Record has been updated'
case 500:
throw new Errors.InternalServerError().message
default:
throw new Error(extractApiError(httpResponse)).message
}
}
13 changes: 13 additions & 0 deletions src/services/edge-dns-records-services/v4/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
import { createRecordsService } from './create-records-service'
import { listRecordsService } from './list-records-service'
import { loadRecordsService } from './load-record-service'
import { editRecordsService } from './edit-records-service'
import { deleteRecordsService } from './delete-record-service'

export {
listRecordsService,
createRecordsService,
loadRecordsService,
editRecordsService,
deleteRecordsService
}
43 changes: 43 additions & 0 deletions src/services/edge-dns-records-services/v4/list-records-service.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
import { AxiosHttpClientAdapter, parseHttpResponse } from '@/services/axios/AxiosHttpClientAdapter'
import { makeEdgeDNSRecordsBaseUrl } from './make-edge-dns-records-base-url'
import { makeListServiceQueryParams } from '@/helpers/make-list-service-query-params'

export const listRecordsService = async ({
search = '',
fields = '',
ordering = 'entry',
page = 1,
pageSize = 10,
id
}) => {
const searchParams = makeListServiceQueryParams({ ordering, fields, page, pageSize, search })
let httpResponse = await AxiosHttpClientAdapter.request({
url: `${makeEdgeDNSRecordsBaseUrl()}/${id}/records?${searchParams.toString()}`,
method: 'GET'
})

httpResponse = adapt(httpResponse)
return parseHttpResponse(httpResponse)
}

const adapt = (httpResponse) => {
const isArray = Array.isArray(httpResponse.body.results)

const parsedRecords = isArray
? httpResponse.body.results.map((record) => ({
id: record.id,
name: record.entry,
type: record.record_type,
value: record.answers_list,
ttl: record.ttl,
policy: record.policy,
weight: record.weight,
description: record.description ? record.description : '-'
}))
: []
return {
count: httpResponse.body.count,
body: parsedRecords,
statusCode: httpResponse.statusCode
}
}
33 changes: 33 additions & 0 deletions src/services/edge-dns-records-services/v4/load-record-service.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
import { AxiosHttpClientAdapter, parseHttpResponse } from '@/services/axios/AxiosHttpClientAdapter'
import { makeEdgeDNSRecordsBaseUrl } from './make-edge-dns-records-base-url'

export const loadRecordsService = async ({ id, edgeDNSId }) => {
let httpResponse = await AxiosHttpClientAdapter.request({
url: `${makeEdgeDNSRecordsBaseUrl()}/${edgeDNSId}/records/${id}`,
method: 'GET'
})

httpResponse = adapt(httpResponse)

return parseHttpResponse(httpResponse)
}

const adapt = (httpResponse) => {
const record = httpResponse.body.data

const parsedRecord = {
id: record.id,
name: record.entry,
selectedRecordType: record.record_type,
value: record.answers_list.join('\n'),
ttl: record.ttl,
selectedPolicy: record.policy,
weight: record.weight,
description: record.description
}

return {
body: parsedRecord,
statusCode: httpResponse.statusCode
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
export const makeEdgeDNSRecordsBaseUrl = () => {
return `v4/edge_dns/zones`
}
Original file line number Diff line number Diff line change
Expand Up @@ -674,7 +674,6 @@
const firstPage = 1
firstItemIndex.value = firstPage
await reload({ ordering })
savedOrdering.value = ordering
sortFieldValue.value = sortField
sortOrderValue.value = sortOrder
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
import { AxiosHttpClientAdapter } from '@/services/axios/AxiosHttpClientAdapter'
import * as Errors from '@/services/axios/errors'
import { createRecordsService } from '@/services/edge-dns-records-services/v4'
import { describe, expect, it, vi } from 'vitest'

const fixtures = {
recordMock: {
edgeDNSID: '123456',
selectedRecordType: 'A',
selectedPolicy: 'simple',
name: 'test.domain.com',
value: '192.168.0.1',
ttl: 3600,
description: 'Test record',
weight: 10,
id: '789'
}
}

const makeSut = () => {
const sut = createRecordsService
return { sut }
}

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

await sut(fixtures.recordMock)

expect(requestSpy).toHaveBeenCalledWith({
url: `v4/edge_dns/zones/${fixtures.recordMock.edgeDNSID}/records`,
method: 'POST',
body: {
record_type: fixtures.recordMock.selectedRecordType,
policy: fixtures.recordMock.selectedPolicy,
entry: fixtures.recordMock.name,
answers_list: [fixtures.recordMock.value],
ttl: fixtures.recordMock.ttl,
description: fixtures.recordMock.description,
weight: fixtures.recordMock.weight
}
})
})

it('should return feedback and URL when successfully creating a record', async () => {
const createdRecordId = '123'
vi.spyOn(AxiosHttpClientAdapter, 'request').mockResolvedValueOnce({
statusCode: 201,
body: {
data: {
id: createdRecordId
}
}
})
const { sut } = makeSut()

const result = await sut(fixtures.recordMock)

expect(result).toEqual({
feedback: 'Edge DNS Record has been created',
urlToEditView: `/edge-dns/edit/${fixtures.recordMock.id}/records/edit/${createdRecordId}`
})
})

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.recordMock)
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.recordMock)

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

0 comments on commit 464efec

Please sign in to comment.