Skip to content

Commit 51fdfb7

Browse files
committed
feat(backend): require wallet address prefix on tenant creation
1 parent d80115a commit 51fdfb7

File tree

2 files changed

+9
-50
lines changed

2 files changed

+9
-50
lines changed

packages/backend/src/open_payments/wallet_address/errors.ts

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@ export enum WalletAddressError {
44
InvalidUrl = 'InvalidUrl',
55
UnknownAsset = 'UnknownAsset',
66
UnknownWalletAddress = 'UnknownWalletAddress',
7-
DuplicateWalletAddress = 'DuplicateWalletAddress'
7+
DuplicateWalletAddress = 'DuplicateWalletAddress',
8+
UnknownTenant = 'UnknownTenant'
89
}
910

1011
// eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types
@@ -17,7 +18,8 @@ export const errorToCode: {
1718
[WalletAddressError.InvalidUrl]: GraphQLErrorCode.BadUserInput,
1819
[WalletAddressError.UnknownAsset]: GraphQLErrorCode.BadUserInput,
1920
[WalletAddressError.UnknownWalletAddress]: GraphQLErrorCode.NotFound,
20-
[WalletAddressError.DuplicateWalletAddress]: GraphQLErrorCode.Duplicate
21+
[WalletAddressError.DuplicateWalletAddress]: GraphQLErrorCode.Duplicate,
22+
[WalletAddressError.UnknownTenant]: GraphQLErrorCode.BadUserInput
2123
}
2224

2325
export const errorToMessage: {
@@ -27,5 +29,6 @@ export const errorToMessage: {
2729
[WalletAddressError.UnknownAsset]: 'unknown asset',
2830
[WalletAddressError.UnknownWalletAddress]: 'unknown wallet address',
2931
[WalletAddressError.DuplicateWalletAddress]:
30-
'Duplicate wallet address found with the same url'
32+
'Duplicate wallet address found with the same url',
33+
[WalletAddressError.UnknownTenant]: 'unknown tenant'
3134
}

packages/backend/src/open_payments/wallet_address/service.test.ts

Lines changed: 3 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -93,57 +93,13 @@ describe('Open Payments Wallet Address Service', (): void => {
9393
}
9494
)
9595

96-
test.each`
97-
isOperator | tenantSettingUrl
98-
${false} | ${undefined}
99-
${true} | ${undefined}
100-
${true} | ${`https://alice.me/${uuid()}`}
101-
`(
102-
'operator - $isOperator with tenantSettingUrl - $tenantSettingUrl',
103-
async ({ isOperator, tenantSettingUrl }): Promise<void> => {
104-
const address = 'test'
105-
const tempTenant = await createTenant(deps, {
106-
walletAddressPrefix: tenantSettingUrl
107-
})
108-
const { id: tempAssetId } = await createAsset(deps, {
109-
tenantId: tempTenant.id
110-
})
111-
112-
let expected: string
113-
if (tenantSettingUrl) {
114-
expected = `${tenantSettingUrl}/${address}`
115-
} else {
116-
if (isOperator) {
117-
expected = `https://op.example/${address}`
118-
}
119-
}
120-
121-
const created = await walletAddressService.create({
122-
...options,
123-
address,
124-
isOperator,
125-
assetId: tempAssetId,
126-
tenantId: tempTenant.id
127-
})
128-
129-
if (isWalletAddressError(expected)) {
130-
expect(created).toEqual(expected)
131-
} else {
132-
assert.ok(!isWalletAddressError(created))
133-
expect(created.address).toEqual(expected)
134-
}
135-
}
136-
)
137-
138-
test('should return error without tenant settings if caller is not an operator', async () => {
139-
const tempTenant = await createTenant(deps)
140-
96+
test('should return error if unknown tenant', async () => {
14197
expect(
14298
await walletAddressService.create({
14399
...options,
144-
tenantId: tempTenant.id
100+
tenantId: uuid()
145101
})
146-
).toEqual(WalletAddressError.WalletAddressPrefixNotFound)
102+
).toEqual(WalletAddressError.UnknownTenant)
147103
})
148104

149105
test('should return InvalidUrl error if wallet address URL does not start with tenant wallet address URL', async (): Promise<void> => {

0 commit comments

Comments
 (0)