Skip to content

Commit

Permalink
feature #3 - Update dto and method name in interface
Browse files Browse the repository at this point in the history
  • Loading branch information
Eugeniosales committed Oct 15, 2022
1 parent 0349b7f commit 59e2f9c
Show file tree
Hide file tree
Showing 5 changed files with 30 additions and 20 deletions.
8 changes: 8 additions & 0 deletions src/2-business/dto/output.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
export interface Output<T> {
status?: 'success' | 'fail' | 'error' | string
message?: string
code?: string
httpCode?: number
data?: T
headers?: any
}
2 changes: 1 addition & 1 deletion src/2-business/repositories/iExchangeRateRepository.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { ExchangeRate } from '../../1-domain/entities/exchangeRate'

export interface IExchangeRateRepository {
create (entity: ExchangeRate): Promise<void>
upsert (entity: ExchangeRate): Promise<ExchangeRate>
}
4 changes: 2 additions & 2 deletions src/2-business/services/iExchangeRateService.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { IExchangeRateResponse } from '../../1-domain/models/iExchangeRateResponse'
import { ILatestRatesResponse } from '../../1-domain/models/iExchangeRateResponse'
import { CurrencyEnum } from '../../2-business/enums/currencyEnum'

export interface IExchangeRateService {
get (base: CurrencyEnum): Promise<IExchangeRateResponse>
getLatestRates (base: CurrencyEnum): Promise<ILatestRatesResponse>
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,29 +2,31 @@ import { IExchangeRateRepository } from '../../repositories/iExchangeRateReposit
import { IExchangeRateService } from '../../services/iExchangeRateService'
import { ExchangeRate } from '../../../1-domain/entities/exchangeRate'
import { CurrencyEnum } from '../../enums/currencyEnum'
import { IExchangeRateResponse } from '../../../1-domain/models/iExchangeRateResponse'
import { ILatestRatesResponse } from '../../../1-domain/models/iExchangeRateResponse'

export class UpdateExchangeRateUseCase {

constructor (
private exchangeRateRepository: IExchangeRateRepository,
private exchangeRateService: IExchangeRateService
private readonly exchangeRateRepository: IExchangeRateRepository,
private readonly exchangeRateService: IExchangeRateService
) {}

private logPrefix: string = 'UpdateExchangeRateUseCase'

async execute (): Promise<void> {
console.log(`${this.logPrefix} :: start`)
try {
const exchangeRatesResponse: IExchangeRateResponse = await this.exchangeRateService.get(CurrencyEnum.BRL)
const exchangeRatesResponse: ILatestRatesResponse = await this.exchangeRateService.getLatestRates(CurrencyEnum.BRL)
const exchangeRates: ExchangeRate = {
baseCurrency: exchangeRatesResponse.base,
rates: exchangeRatesResponse.rates
}
await this.exchangeRateRepository.create(exchangeRates)
await this.exchangeRateRepository.upsert(exchangeRates)
console.log(`${this.logPrefix} :: end`)
} catch (error) {
throw error
}
}
}

export default UpdateExchangeRateUseCase
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import { ExchangeRate } from '../../../src/1-domain/entities/exchangeRate'
import { IExchangeRateResponse } from '../../../src/1-domain/models/iExchangeRateResponse'
import { UpdateExchangeRateUseCase } from '../../../src/2-business/useCases/exchangeRate/updateExchangeRateUseCase'
import { IExchangeRateRepository } from '../../../src/2-business/repositories/iExchangeRateRepository'
import { IExchangeRateService } from '../../../src/2-business/services/iExchangeRateService'
import { CurrencyEnum } from '../../../src/2-business/enums/currencyEnum'
import { ExchangeRate } from '../../../../src/1-domain/entities/exchangeRate'
import { ILatestRatesResponse } from '../../../../src/1-domain/models/iExchangeRateResponse'
import { UpdateExchangeRateUseCase } from '../../../../src/2-business/useCases/exchangeRate/updateExchangeRateUseCase'
import { IExchangeRateRepository } from '../../../../src/2-business/repositories/iExchangeRateRepository'
import { IExchangeRateService } from '../../../../src/2-business/services/iExchangeRateService'
import { CurrencyEnum } from '../../../../src/2-business/enums/currencyEnum'

describe('UpdateExchangeRateUseCase', () => {
const exchangeRateMock: ExchangeRate = {
Expand All @@ -19,7 +19,7 @@ describe('UpdateExchangeRateUseCase', () => {
}
}

const exchangeRateResponseMock: IExchangeRateResponse = {
const exchangeRateResponseMock: ILatestRatesResponse = {
success: true,
timestamp: 1519296206,
base: 'BRL',
Expand All @@ -40,10 +40,10 @@ describe('UpdateExchangeRateUseCase', () => {

const setMocks = () => {
exchangeRateRepository = {
create: jest.fn().mockResolvedValue(null)
upsert: jest.fn().mockResolvedValue(null)
}
exchangeRateService = {
get: jest.fn().mockResolvedValue(exchangeRateResponseMock)
getLatestRates: jest.fn().mockResolvedValue(exchangeRateResponseMock)
}
}

Expand All @@ -58,13 +58,13 @@ describe('UpdateExchangeRateUseCase', () => {
)

await expect(useCase.execute()).resolves.not.toThrow()
expect(exchangeRateService.get).toHaveBeenCalledWith(CurrencyEnum.BRL)
expect(exchangeRateRepository.create).toHaveBeenCalledWith(exchangeRateMock)
expect(exchangeRateService.getLatestRates).toHaveBeenCalledWith(CurrencyEnum.BRL)
expect(exchangeRateRepository.upsert).toHaveBeenCalledWith(exchangeRateMock)
})

test('Failure::should throw error when exchange rate service fails', async () => {
exchangeRateService = {
get: jest.fn().mockRejectedValue(new Error())
getLatestRates: jest.fn().mockRejectedValue(new Error())
}

const useCase = new UpdateExchangeRateUseCase(
Expand Down

0 comments on commit 59e2f9c

Please sign in to comment.