Skip to content

Commit 06cde4e

Browse files
mjac0bscorya-akamai
authored andcommitted
feat: [M3-6965] - Update api-v4 and mocks for DC-specific pricing (linode#9586)
* Update api-v4 and queries * Update factories * Add mock invoice details page * Mock Linode Details Backups tab empty state * Add changesets * Add a mock linode in a price increase region
1 parent 8455fa6 commit 06cde4e

File tree

12 files changed

+106
-10
lines changed

12 files changed

+106
-10
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@linode/api-v4": Upcoming Features
3+
---
4+
5+
Update account and linode types for DC-specific pricing ([#9586](https://github.com/linode/manager/pull/9586))

packages/api-v4/src/account/account.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@ import {
99
AccountSettings,
1010
CancelAccount,
1111
CancelAccountPayload,
12-
NetworkUtilization,
1312
Agreements,
13+
RegionalNetworkUtilization,
1414
} from './types';
1515

1616
/**
@@ -31,7 +31,7 @@ export const getAccountInfo = () => {
3131
*
3232
*/
3333
export const getNetworkUtilization = () =>
34-
Request<NetworkUtilization>(
34+
Request<RegionalNetworkUtilization>(
3535
setURL(`${API_ROOT}/account/transfer`),
3636
setMethod('GET')
3737
);

packages/api-v4/src/account/types.ts

+8
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { APIWarning } from '../types';
22
import { Beta } from '../betas/types';
3+
import { Region } from 'src/regions';
34

45
export interface User {
56
username: string;
@@ -118,6 +119,7 @@ export interface InvoiceItem {
118119
unit_price: null | string;
119120
tax: number;
120121
total: number;
122+
region: Region['id'];
121123
}
122124

123125
export interface Payment {
@@ -173,6 +175,12 @@ export interface NetworkUtilization {
173175
used: number;
174176
quota: number;
175177
}
178+
export interface RegionalNetworkUtilization extends NetworkUtilization {
179+
region_transfers: RegionalTransferObject[];
180+
}
181+
export interface RegionalTransferObject extends NetworkUtilization {
182+
id: Region['id'];
183+
}
176184

177185
export interface NetworkTransfer {
178186
bytes_in: number;

packages/api-v4/src/linodes/types.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -310,7 +310,7 @@ export interface LinodeType extends BaseType {
310310
price: PriceObject;
311311
region_prices: RegionPriceObject[];
312312
addons: {
313-
backups: { price: PriceObject };
313+
backups: { price: PriceObject; region_prices: RegionPriceObject[] };
314314
};
315315
}
316316

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@linode/manager": Upcoming Features
3+
---
4+
5+
Update mocks for DC-specific pricing API responses ([#9586](https://github.com/linode/manager/pull/9586))

packages/manager/src/components/EntityHeader/EntityHeader.stories.tsx

+12
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,18 @@ export const Default: Story = {
8484
hourly: 0.0015,
8585
monthly: 5,
8686
},
87+
region_prices: [
88+
{
89+
hourly: 0.0048,
90+
id: 'id-cgk',
91+
monthly: 3.57,
92+
},
93+
{
94+
hourly: 0.0056,
95+
id: 'br-gru',
96+
monthly: 4.17,
97+
},
98+
],
8799
},
88100
},
89101
class: 'standard',

packages/manager/src/factories/account.ts

+6-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import {
22
Account,
33
ActivePromotion,
4-
NetworkUtilization,
4+
RegionalNetworkUtilization,
55
} from '@linode/api-v4/lib/account/types';
66
import * as Factory from 'factory.ts';
77

@@ -60,10 +60,14 @@ export const accountFactory = Factory.Sync.makeFactory<Account>({
6060
zip: '19106',
6161
});
6262

63-
export const accountTransferFactory = Factory.Sync.makeFactory<NetworkUtilization>(
63+
export const accountTransferFactory = Factory.Sync.makeFactory<RegionalNetworkUtilization>(
6464
{
6565
billable: 0,
6666
quota: 11347,
6767
used: 50,
68+
region_transfers: [
69+
{ id: 'id-cgk', billable: 0, quota: 10000, used: 10 },
70+
{ id: 'br-gru', billable: 0, quota: 15000, used: 20 },
71+
],
6872
}
6973
);

packages/manager/src/factories/billing.ts

+1
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ export const invoiceItemFactory = Factory.Sync.makeFactory<InvoiceItem>({
1212
from: '2020-01-01T12:00:00',
1313
label: Factory.each((i) => `Nanode 1GB - my-linode-${i} (${i})`),
1414
quantity: 730,
15+
region: 'id-cgk',
1516
tax: 0,
1617
to: '2020-01-31T12:00:00',
1718
total: 5,

packages/manager/src/factories/linodes.ts

+30-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { NetworkUtilization } from '@linode/api-v4/lib/account';
1+
import { RegionalNetworkUtilization } from '@linode/api-v4/lib/account';
22
import {
33
CreateLinodeRequest,
44
Linode,
@@ -123,11 +123,15 @@ export const linodeBackupsFactory = Factory.Sync.makeFactory<LinodeBackups>({
123123
},
124124
});
125125

126-
export const linodeTransferFactory = Factory.Sync.makeFactory<NetworkUtilization>(
126+
export const linodeTransferFactory = Factory.Sync.makeFactory<RegionalNetworkUtilization>(
127127
{
128128
billable: 0,
129129
quota: 1950,
130130
used: 13956637,
131+
region_transfers: [
132+
{ id: 'id-cgk', billable: 0, quota: 10000, used: 10 },
133+
{ id: 'br-gru', billable: 0, quota: 15000, used: 20 },
134+
],
131135
}
132136
);
133137

@@ -138,6 +142,18 @@ export const linodeTypeFactory = Factory.Sync.makeFactory<LinodeType>({
138142
hourly: 0.004,
139143
monthly: 2.5,
140144
},
145+
region_prices: [
146+
{
147+
hourly: 0.0048,
148+
id: 'id-cgk',
149+
monthly: 3.57,
150+
},
151+
{
152+
hourly: 0.0056,
153+
id: 'br-gru',
154+
monthly: 4.17,
155+
},
156+
],
141157
},
142158
},
143159
class: 'standard',
@@ -181,6 +197,18 @@ export const proDedicatedTypeFactory = Factory.Sync.makeFactory<LinodeType>({
181197
hourly: null,
182198
monthly: null,
183199
},
200+
region_prices: [
201+
{
202+
hourly: null,
203+
id: null,
204+
monthly: null,
205+
},
206+
{
207+
hourly: null,
208+
id: null,
209+
monthly: null,
210+
},
211+
],
184212
},
185213
},
186214
class: 'prodedicated',

packages/manager/src/factories/types.ts

+12
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,18 @@ export const typeFactory = Factory.Sync.makeFactory<LinodeType>({
88
hourly: 10,
99
monthly: 10,
1010
},
11+
region_prices: [
12+
{
13+
hourly: 0.0048,
14+
id: 'id-cgk',
15+
monthly: 3.57,
16+
},
17+
{
18+
hourly: 0.0056,
19+
id: 'br-gru',
20+
monthly: 4.17,
21+
},
22+
],
1123
},
1224
},
1325
class: 'standard',

packages/manager/src/mocks/serverHandlers.ts

+22-1
Original file line numberDiff line numberDiff line change
@@ -626,14 +626,26 @@ export const handlers = [
626626
label: 'eu-linode',
627627
region: 'eu-west',
628628
}),
629+
linodeFactory.build({
630+
backups: { enabled: false },
631+
label: 'DC-Specific Pricing Linode',
632+
region: 'id-cgk',
633+
}),
629634
eventLinode,
630635
multipleIPLinode,
631636
];
632637
return res(ctx.json(makeResourcePage(linodes)));
633638
}),
634639
rest.get('*/linode/instances/:id', async (req, res, ctx) => {
635640
const id = Number(req.params.id);
636-
return res(ctx.json(linodeFactory.build({ id })));
641+
return res(
642+
ctx.json(
643+
linodeFactory.build({
644+
backups: { enabled: false },
645+
id,
646+
})
647+
)
648+
);
637649
}),
638650
rest.delete('*/instances/*', async (req, res, ctx) => {
639651
return res(ctx.json({}));
@@ -941,6 +953,15 @@ export const handlers = [
941953
});
942954
return res(ctx.json(makeResourcePage([linodeInvoice, akamaiInvoice])));
943955
}),
956+
rest.get('*/account/invoices/:invoiceId', (req, res, ctx) => {
957+
const linodeInvoice = invoiceFactory.build({
958+
date: '2022-12-01T18:04:01',
959+
id: 1234,
960+
label: 'LinodeInvoice',
961+
});
962+
return res(ctx.json(linodeInvoice));
963+
}),
964+
944965
rest.get('*/account/maintenance', (req, res, ctx) => {
945966
accountMaintenanceFactory.resetSequenceNumber();
946967
const page = Number(req.url.searchParams.get('page') || 1);

packages/manager/src/queries/accountTransfer.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import {
2-
NetworkUtilization,
2+
RegionalNetworkUtilization,
33
getNetworkUtilization,
44
} from '@linode/api-v4/lib/account';
55
import { APIError } from '@linode/api-v4/lib/types';
@@ -8,7 +8,7 @@ import { useQuery } from 'react-query';
88
import { queryPresets } from './base';
99

1010
export const useAccountTransfer = () =>
11-
useQuery<NetworkUtilization, APIError[]>(
11+
useQuery<RegionalNetworkUtilization, APIError[]>(
1212
'network-utilization',
1313
getNetworkUtilization,
1414
queryPresets.oneTimeFetch

0 commit comments

Comments
 (0)