Skip to content

Commit 7a74a01

Browse files
committed
Stash: RecreateApiToken use case WIP
1 parent 42c1ce3 commit 7a74a01

File tree

5 files changed

+56
-26
lines changed

5 files changed

+56
-26
lines changed

src/users/domain/repositories/IUsersRepository.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,5 @@ import { AuthenticatedUser } from '../models/AuthenticatedUser'
22

33
export interface IUsersRepository {
44
getCurrentAuthenticatedUser(): Promise<AuthenticatedUser>
5+
recreateApiToken(): Promise<string>
56
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import { UseCase } from '../../../core/domain/useCases/UseCase'
2+
import { IUsersRepository } from '../repositories/IUsersRepository'
3+
4+
export class RecreateApiToken implements UseCase<string> {
5+
private usersRepository: IUsersRepository
6+
7+
constructor(usersRepository: IUsersRepository) {
8+
this.usersRepository = usersRepository
9+
}
10+
11+
/**
12+
* Reacreates the API token of the current authenticated user and returns the new one.
13+
*
14+
* @returns {Promise<AuthenticatedUser>}
15+
*/
16+
async execute(): Promise<string> {
17+
return await this.usersRepository.recreateApiToken()
18+
}
19+
}

src/users/infra/repositories/UsersRepository.ts

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,24 @@ import { AuthenticatedUser } from '../../domain/models/AuthenticatedUser'
44
import { AxiosResponse } from 'axios'
55

66
export class UsersRepository extends ApiRepository implements IUsersRepository {
7+
private readonly usersResourceName: string = 'users'
8+
79
public async getCurrentAuthenticatedUser(): Promise<AuthenticatedUser> {
8-
return this.doGet('/users/:me', true)
10+
return this.doGet(`/${this.usersResourceName}/:me`, true)
911
.then((response) => this.getAuthenticatedUserFromResponse(response))
1012
.catch((error) => {
1113
throw error
1214
})
1315
}
1416

17+
public async recreateApiToken(): Promise<string> {
18+
return this.doPost(`/${this.usersResourceName}/token/recreate`, {})
19+
.then((response) => response.data.data)
20+
.catch((error) => {
21+
throw error
22+
})
23+
}
24+
1525
private getAuthenticatedUserFromResponse(response: AxiosResponse): AuthenticatedUser {
1626
const responseData = response.data.data
1727
return {

test/integration/users/UsersRepository.test.ts

Lines changed: 18 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -6,24 +6,27 @@ import {
66
import { TestConstants } from '../../testHelpers/TestConstants'
77
import { ReadError } from '../../../src'
88

9-
describe('getCurrentAuthenticatedUser', () => {
9+
describe('UsersRepository', () => {
1010
const sut: UsersRepository = new UsersRepository()
1111

12-
test('should return error when authentication is not valid', async () => {
13-
ApiConfig.init(TestConstants.TEST_API_URL, DataverseApiAuthMechanism.API_KEY, 'invalidApiKey')
12+
describe('getCurrentAuthenticatedUser', () => {
13+
test('should return error when authentication is not valid', async () => {
14+
ApiConfig.init(TestConstants.TEST_API_URL, DataverseApiAuthMechanism.API_KEY, 'invalidApiKey')
1415

15-
const errorExpected: ReadError = new ReadError('[401] Bad API key')
16-
await expect(sut.getCurrentAuthenticatedUser()).rejects.toThrow(errorExpected)
17-
})
18-
19-
test('should return authenticated user when valid authentication is provided', async () => {
20-
ApiConfig.init(
21-
TestConstants.TEST_API_URL,
22-
DataverseApiAuthMechanism.API_KEY,
23-
process.env.TEST_API_KEY
24-
)
16+
const errorExpected: ReadError = new ReadError('[401] Bad API key')
17+
await expect(sut.getCurrentAuthenticatedUser()).rejects.toThrow(errorExpected)
18+
})
2519

26-
const actual = await sut.getCurrentAuthenticatedUser()
27-
expect(actual.firstName).toBe('Dataverse')
20+
test('should return authenticated user when valid authentication is provided', async () => {
21+
ApiConfig.init(
22+
TestConstants.TEST_API_URL,
23+
DataverseApiAuthMechanism.API_KEY,
24+
process.env.TEST_API_KEY
25+
)
26+
const actual = await sut.getCurrentAuthenticatedUser()
27+
expect(actual.firstName).toBe('Dataverse')
28+
})
2829
})
30+
31+
describe('recreateApiToken', () => {})
2932
})

test/unit/users/GetCurrentAuthenticatedUser.test.ts

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,10 @@ import { createAuthenticatedUser } from '../../testHelpers/users/authenticatedUs
66
describe('execute', () => {
77
test('should return successful result with authenticated user on repository success', async () => {
88
const testAuthenticatedUser = createAuthenticatedUser()
9-
const usersRepositoryStub: IUsersRepository = {
10-
getCurrentAuthenticatedUser: jest.fn().mockReturnValue(testAuthenticatedUser)
11-
}
9+
const usersRepositoryStub: IUsersRepository = {} as IUsersRepository
10+
usersRepositoryStub.getCurrentAuthenticatedUser = jest
11+
.fn()
12+
.mockResolvedValue(testAuthenticatedUser)
1213
const sut = new GetCurrentAuthenticatedUser(usersRepositoryStub)
1314

1415
const actual = await sut.execute()
@@ -17,14 +18,10 @@ describe('execute', () => {
1718
})
1819

1920
test('should return error result on repository error', async () => {
20-
const usersRepositoryStub: IUsersRepository = {
21-
getCurrentAuthenticatedUser: jest.fn().mockRejectedValue(new ReadError())
22-
}
21+
const usersRepositoryStub: IUsersRepository = {} as IUsersRepository
22+
usersRepositoryStub.getCurrentAuthenticatedUser = jest.fn().mockRejectedValue(new ReadError())
2323
const sut = new GetCurrentAuthenticatedUser(usersRepositoryStub)
2424

25-
let actualError: ReadError = undefined
26-
await sut.execute().catch((e) => (actualError = e))
27-
28-
expect(actualError).toBeInstanceOf(ReadError)
25+
await expect(sut.execute()).rejects.toThrow(ReadError)
2926
})
3027
})

0 commit comments

Comments
 (0)