-
Notifications
You must be signed in to change notification settings - Fork 14
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #2154 from aziontech/dev
DEPLOY 2025-02-11
- Loading branch information
Showing
18 changed files
with
754 additions
and
25 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
50 changes: 50 additions & 0 deletions
50
src/services/edge-dns-records-services/v4/create-records-service.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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
30
src/services/edge-dns-records-services/v4/delete-record-service.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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
46
src/services/edge-dns-records-services/v4/edit-records-service.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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
43
src/services/edge-dns-records-services/v4/list-records-service.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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
33
src/services/edge-dns-records-services/v4/load-record-service.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 | ||
} | ||
} |
3 changes: 3 additions & 0 deletions
3
src/services/edge-dns-records-services/v4/make-edge-dns-records-base-url.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
export const makeEdgeDNSRecordsBaseUrl = () => { | ||
return `v4/edge_dns/zones` | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
106 changes: 106 additions & 0 deletions
106
src/tests/services/edge-dns-records-services/v4/create-records-service.test.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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') | ||
}) | ||
}) |
Oops, something went wrong.