diff --git a/static/gsAdmin/components/customers/updateRetentionSettingsModal.spec.tsx b/static/gsAdmin/components/customers/updateRetentionSettingsModal.spec.tsx index 762e3d1815d5d5..7acfc33a7f653c 100644 --- a/static/gsAdmin/components/customers/updateRetentionSettingsModal.spec.tsx +++ b/static/gsAdmin/components/customers/updateRetentionSettingsModal.spec.tsx @@ -48,6 +48,7 @@ describe('UpdateRetentionSettingsModal', () => { }), }, planDetails: PlanDetailsLookupFixture('am3_f'), + orgRetention: {standard: 1234567, downsampled: null}, }); openUpdateRetentionSettingsModal({ @@ -62,6 +63,7 @@ describe('UpdateRetentionSettingsModal', () => { expect(getSpinbutton('Spans Downsampled')).toHaveValue(30); expect(getSpinbutton('Logs Standard')).toHaveValue(45); expect(getSpinbutton('Logs Downsampled')).toHaveValue(15); + expect(getSpinbutton('Org Retention')).toHaveValue(1234567); expect(screen.getByRole('button', {name: 'Cancel'})).toBeInTheDocument(); expect(screen.getByRole('button', {name: 'Update Settings'})).toBeInTheDocument(); @@ -122,6 +124,7 @@ describe('UpdateRetentionSettingsModal', () => { }), }, planDetails: PlanDetailsLookupFixture('am3_f'), + orgRetention: {standard: null, downsampled: null}, }); openUpdateRetentionSettingsModal({ @@ -132,6 +135,7 @@ describe('UpdateRetentionSettingsModal', () => { await loadModal(); + expect(getSpinbutton('Org Retention')).toHaveValue(null); expect(getSpinbutton('Spans Standard')).toHaveValue(90); expect(getSpinbutton('Spans Downsampled')).toHaveValue(null); expect(getSpinbutton('Logs Standard')).toHaveValue(30); @@ -156,6 +160,7 @@ describe('UpdateRetentionSettingsModal', () => { }), }, planDetails: PlanDetailsLookupFixture('am3_f'), + orgRetention: {standard: 123, downsampled: null}, }); const updateMock = MockApiClient.addMockResponse({ @@ -172,6 +177,9 @@ describe('UpdateRetentionSettingsModal', () => { await loadModal(); + await userEvent.clear(getSpinbutton('Org Retention')); + await userEvent.type(getSpinbutton('Org Retention'), '456'); + await userEvent.clear(getSpinbutton('Spans Standard')); await userEvent.type(getSpinbutton('Spans Standard'), '120'); @@ -192,6 +200,10 @@ describe('UpdateRetentionSettingsModal', () => { expect.objectContaining({ method: 'POST', data: { + orgRetention: { + standard: 456, + downsampled: null, + }, retentions: { spans: { standard: 120, @@ -228,6 +240,7 @@ describe('UpdateRetentionSettingsModal', () => { }), }, planDetails: PlanDetailsLookupFixture('am2_f'), + orgRetention: {standard: null, downsampled: null}, }); const updateMock = MockApiClient.addMockResponse({ @@ -244,6 +257,8 @@ describe('UpdateRetentionSettingsModal', () => { await loadModal(); + await userEvent.clear(getSpinbutton('Org Retention')); + await userEvent.clear(getSpinbutton('Transactions Standard')); await userEvent.type(getSpinbutton('Transactions Standard'), '120'); @@ -264,6 +279,10 @@ describe('UpdateRetentionSettingsModal', () => { expect.objectContaining({ method: 'POST', data: { + orgRetention: { + standard: null, + downsampled: null, + }, retentions: { transactions: { standard: 120, @@ -300,6 +319,7 @@ describe('UpdateRetentionSettingsModal', () => { }), }, planDetails: PlanDetailsLookupFixture('am3_f'), + orgRetention: {standard: 123, downsampled: null}, }); const updateMock = MockApiClient.addMockResponse({ @@ -316,6 +336,8 @@ describe('UpdateRetentionSettingsModal', () => { await loadModal(); + await userEvent.clear(getSpinbutton('Org Retention')); + await userEvent.clear(getSpinbutton('Spans Standard')); await userEvent.type(getSpinbutton('Spans Standard'), '90'); @@ -334,6 +356,10 @@ describe('UpdateRetentionSettingsModal', () => { expect.objectContaining({ method: 'POST', data: { + orgRetention: { + standard: null, + downsampled: null, + }, retentions: { spans: { standard: 90, @@ -370,6 +396,7 @@ describe('UpdateRetentionSettingsModal', () => { }), }, planDetails: PlanDetailsLookupFixture('am3_f'), + orgRetention: {standard: null, downsampled: null}, }); const updateMock = MockApiClient.addMockResponse({ @@ -386,6 +413,8 @@ describe('UpdateRetentionSettingsModal', () => { await loadModal(); + await userEvent.clear(getSpinbutton('Org Retention')); + await userEvent.clear(getSpinbutton('Spans Standard')); await userEvent.type(getSpinbutton('Spans Standard'), '90'); @@ -406,6 +435,10 @@ describe('UpdateRetentionSettingsModal', () => { expect.objectContaining({ method: 'POST', data: { + orgRetention: { + standard: null, + downsampled: null, + }, retentions: { spans: { standard: 90, @@ -442,6 +475,7 @@ describe('UpdateRetentionSettingsModal', () => { }), }, planDetails: PlanDetailsLookupFixture('am3_f'), + orgRetention: {standard: null, downsampled: null}, }); const updateMock = MockApiClient.addMockResponse({ @@ -458,6 +492,8 @@ describe('UpdateRetentionSettingsModal', () => { await loadModal(); + await userEvent.clear(getSpinbutton('Org Retention')); + await userEvent.clear(getSpinbutton('Spans Standard')); await userEvent.type(getSpinbutton('Spans Standard'), '180'); @@ -472,6 +508,10 @@ describe('UpdateRetentionSettingsModal', () => { expect.objectContaining({ method: 'POST', data: { + orgRetention: { + standard: null, + downsampled: null, + }, retentions: { spans: { standard: 180, @@ -506,6 +546,7 @@ describe('UpdateRetentionSettingsModal', () => { }), }, planDetails: PlanDetailsLookupFixture('am3_f'), + orgRetention: {standard: null, downsampled: null}, }); const updateMock = MockApiClient.addMockResponse({ @@ -522,6 +563,8 @@ describe('UpdateRetentionSettingsModal', () => { await loadModal(); + await userEvent.clear(getSpinbutton('Org Retention')); + await userEvent.clear(getSpinbutton('Logs Standard')); await userEvent.type(getSpinbutton('Logs Standard'), '60'); @@ -536,6 +579,10 @@ describe('UpdateRetentionSettingsModal', () => { expect.objectContaining({ method: 'POST', data: { + orgRetention: { + standard: null, + downsampled: null, + }, retentions: { spans: { standard: 90, diff --git a/static/gsAdmin/components/customers/updateRetentionSettingsModal.tsx b/static/gsAdmin/components/customers/updateRetentionSettingsModal.tsx index 980d24eaaa973e..cc89fd170217cc 100644 --- a/static/gsAdmin/components/customers/updateRetentionSettingsModal.tsx +++ b/static/gsAdmin/components/customers/updateRetentionSettingsModal.tsx @@ -30,6 +30,10 @@ function UpdateRetentionSettingsModal({ }: ModalProps) { const api = useApi(); + const [orgStandard, setOrgStandard] = useState( + subscription.orgRetention?.standard ?? null + ); + const [logBytesStandard, setLogBytesStandard] = useState( subscription.categories.logBytes?.retention?.standard ?? null ); @@ -78,7 +82,12 @@ function UpdateRetentionSettingsModal({ }; } - const data = {retentions}; + const orgRetention = { + standard: orgStandard === null || orgStandard === '' ? null : Number(orgStandard), + downsampled: null, + }; + + const data = {retentions, orgRetention}; api.request(`/_admin/${organization.slug}/retention-settings/`, { method: 'POST', @@ -110,6 +119,12 @@ function UpdateRetentionSettingsModal({
+ {hasCategoryFeature(DataCategory.LOG_BYTE, subscription, organization) && (