Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
e9ce45d
initial commit
dmcintyr-akamai Aug 20, 2025
fd2fab0
Added changeset: Tests for Host & VM Maintenance in Linode create page
dmcintyr-akamai Aug 20, 2025
33260c2
Merge branch 'develop' into M3-9638_tests_vmHostMaint
dmcintyr-akamai Aug 20, 2025
6f10682
Merge branch 'develop' into M3-9638_tests_vmHostMaint
dmcintyr-akamai Aug 20, 2025
d99e6bc
Merge branch 'develop' into M3-9638_tests_vmHostMaint
dmcintyr-akamai Aug 20, 2025
48d83c2
Merge branch 'develop' into M3-9638_tests_vmHostMaint
dmcintyr-akamai Aug 20, 2025
b1b09bf
Merge branch 'develop' into M3-9638_tests_vmHostMaint
dmcintyr-akamai Aug 20, 2025
ee7e8f0
Merge branch 'develop' into M3-9638_tests_vmHostMaint
dmcintyr-akamai Aug 21, 2025
ea12834
Merge branch 'develop' into M3-9638_tests_vmHostMaint
dmcintyr-akamai Aug 22, 2025
9ad9cfa
Merge branch 'develop' into M3-9638_tests_vmHostMaint
dmcintyr-akamai Aug 25, 2025
72afdd5
remove deprecated tooltip
dmcintyr-akamai Aug 25, 2025
d4855c3
Merge branch 'develop' into M3-9638_tests_vmHostMaint
dmcintyr-akamai Aug 27, 2025
43be431
Merge branch 'develop' into M3-9638_tests_vmHostMaint
dmcintyr-akamai Aug 28, 2025
4505579
Merge branch 'develop' into M3-9638_tests_vmHostMaint
dmcintyr-akamai Aug 28, 2025
271d695
Merge branch 'develop' into M3-9638_tests_vmHostMaint
dmcintyr-akamai Sep 2, 2025
0089269
Merge branch 'develop' into M3-9638_tests_vmHostMaint
dmcintyr-akamai Sep 3, 2025
a408aef
Merge branch 'develop' into M3-9638_tests_vmHostMaint
dmcintyr-akamai Sep 3, 2025
494be70
refactoring after review
dmcintyr-akamai Sep 3, 2025
2ed9a69
refactoring after review
dmcintyr-akamai Sep 3, 2025
aea9620
Merge branch 'develop' into M3-9638_tests_vmHostMaint
dmcintyr-akamai Sep 3, 2025
d280c1d
Merge branch 'develop' into M3-9638_tests_vmHostMaint
dmcintyr-akamai Sep 3, 2025
fe15a80
Merge branch 'develop' into M3-9638_tests_vmHostMaint
dmcintyr-akamai Sep 4, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions packages/manager/.changeset/pr-12734-tests-1755697767741.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@linode/manager": Tests
---

Tests for Host & VM Maintenance in Linode create page ([#12734](https://github.com/linode/manager/pull/12734))
Original file line number Diff line number Diff line change
@@ -0,0 +1,144 @@
import { linodeFactory, regionFactory } from '@linode/utilities';
import { mockGetAccountSettings } from 'support/intercepts/account';
import { mockAppendFeatureFlags } from 'support/intercepts/feature-flags';
import { mockCreateLinode } from 'support/intercepts/linodes';
import { mockGetRegions } from 'support/intercepts/regions';
import { ui } from 'support/ui';
import { linodeCreatePage } from 'support/ui/pages';
import { randomLabel, randomString } from 'support/util/random';

import { accountSettingsFactory } from 'src/factories';
const mockEnabledRegion = regionFactory.build({
capabilities: ['Linodes', 'Maintenance Policy'],

Check warning on line 12 in packages/manager/cypress/e2e/core/linodes/create-linode-vm-host-maintenance.spec.ts

View workflow job for this annotation

GitHub Actions / ESLint Review (manager)

[eslint] reported by reviewdog 🐢 Define a constant instead of duplicating this literal 4 times. Raw Output: {"ruleId":"sonarjs/no-duplicate-string","severity":1,"message":"Define a constant instead of duplicating this literal 4 times.","line":12,"column":29,"nodeType":"Literal","endLine":12,"endColumn":49}
});
const mockDisabledRegion = regionFactory.build({
capabilities: ['Linodes'],
});

describe('vmHostMaintenance feature flag', () => {
beforeEach(() => {
mockGetAccountSettings(
accountSettingsFactory.build({
maintenance_policy: 'linode/power_off_on',
})
).as('getAccountSettings');
mockGetRegions([mockEnabledRegion, mockDisabledRegion]).as('getRegions');
});

it('Create flow when vmHostMaintenance feature flag is enabled', () => {
mockAppendFeatureFlags({
vmHostMaintenance: {
enabled: true,
},
}).as('getFeatureFlags');
const mockLinode = linodeFactory.build({
label: randomLabel(),
region: mockEnabledRegion.id,
});
mockCreateLinode(mockLinode).as('createLinode');

cy.visitWithLogin('/linodes/create');
cy.wait(['@getAccountSettings', '@getFeatureFlags', '@getRegions']);

// "Host Maintenance Policy" section is present under the "Additional Options"
cy.contains('Additional Options').should('be.visible');

Check warning on line 44 in packages/manager/cypress/e2e/core/linodes/create-linode-vm-host-maintenance.spec.ts

View workflow job for this annotation

GitHub Actions / ESLint Review (manager)

[eslint] reported by reviewdog 🐢 Define a constant instead of duplicating this literal 15 times. Raw Output: {"ruleId":"sonarjs/no-duplicate-string","severity":1,"message":"Define a constant instead of duplicating this literal 15 times.","line":44,"column":46,"nodeType":"Literal","endLine":44,"endColumn":58}
cy.get('[data-qa-panel="Host Maintenance Policy"]')
.should('be.visible')
.within(() => {
cy.get('[data-qa-panel-summary="Host Maintenance Policy"]').click();
});
ui.autocomplete
.findByLabel('Maintenance Policy')
.should('be.visible')
.should('be.disabled');
cy.findByText('Select a region to choose a maintenance policy.').should(
'be.visible'
);
// user selects region that does not have the "Maintenance Policy" capability
ui.regionSelect.find().click();
ui.regionSelect.find().type(`${mockDisabledRegion.label}{enter}`);
ui.autocomplete
.findByLabel('Maintenance Policy')
.should('be.visible')
.should('be.disabled');
cy.findByText(
'Maintenance policy is not available in the selected region.'
).should('be.visible');

// user selects region that does have the "Maintenance Policy" capability
ui.regionSelect.find().click();
ui.regionSelect.find().clear();
ui.regionSelect.find().type(`${mockEnabledRegion.label}{enter}`);
ui.autocomplete
.findByLabel('Maintenance Policy')
.should('be.visible')
.should('be.enabled');

Check warning on line 75 in packages/manager/cypress/e2e/core/linodes/create-linode-vm-host-maintenance.spec.ts

View workflow job for this annotation

GitHub Actions / ESLint Review (manager)

[eslint] reported by reviewdog 🐢 Define a constant instead of duplicating this literal 4 times. Raw Output: {"ruleId":"sonarjs/no-duplicate-string","severity":1,"message":"Define a constant instead of duplicating this literal 4 times.","line":75,"column":15,"nodeType":"Literal","endLine":75,"endColumn":27}

// form prerequisites
cy.get('[type="password"]').should('be.visible').scrollIntoView();
cy.get('[id="root-password"]').type(randomString(12));
const mockPlan = {
planType: 'Shared CPU',
planLabel: 'Nanode 1 GB',
};
linodeCreatePage.selectPlan(mockPlan.planType, mockPlan.planLabel);
cy.scrollTo('bottom');
ui.button
.findByTitle('View Code Snippets')
.should('be.visible')
.should('be.enabled')
.click();

// maintenance policy is included in the code snippets
ui.dialog
.findByTitle('Create Linode')
.should('be.visible')
.within(() => {
cy.get('pre code')
.should('be.visible')
.within(() => {
cy.contains('--maintenance_policy linode/migrate');
});
// cURL tab
ui.tabList.findTabByTitle('cURL').should('be.visible').click();
cy.get('pre code')
.should('be.visible')
.within(() => {
cy.contains('"maintenance_policy": "linode/migrate"');
});
ui.button
.findByTitle('Close')
.should('be.visible')
.should('be.enabled')
.click();
});
// submit
ui.button
.findByTitle('Create Linode')
.should('be.visible')
.should('be.enabled')
.click();
// POST payload should include maintenance_policy
cy.wait('@createLinode').then((intercept) => {
expect(intercept.request.body['maintenance_policy']).to.eq(
'linode/migrate'
);
});
});

it('Create flow when vmHostMaintenance feature flag is disabled', () => {
mockAppendFeatureFlags({
vmHostMaintenance: {
enabled: false,
},
}).as('getFeatureFlags');
cy.visitWithLogin('/linodes/create');
cy.wait(['@getAccountSettings', '@getFeatureFlags', '@getRegions']);

ui.regionSelect.find().click();
ui.regionSelect.find().type(`${mockEnabledRegion.label}{enter}`);

// "Host Maintenance Policy" section is not present
cy.get('[data-qa-panel="Host Maintenance Policy"]').should('not.exist');
});
});