1
0
mirror of https://github.com/Unleash/unleash.git synced 2024-11-01 19:07:38 +01:00
unleash.unleash/frontend/cypress/integration/import/import.spec.ts
Gard Rimestad 623b9b127f
chore: validate import data using api (#5848)
Use the admin api to validate the feature toggle that has been imported.

This hopefully makes the test less fragile as we do not depend on the
frontend to validate the import.
2024-01-11 09:56:43 +01:00

133 lines
4.4 KiB
TypeScript

///<reference path="../../global.d.ts" />
describe('imports', () => {
const baseUrl = Cypress.config().baseUrl;
const randomSeed = String(Math.random()).split('.')[1];
const randomFeatureName = `cypress-features${randomSeed}`;
const userIds: any[] = [];
before(() => {
cy.runBefore();
cy.login_UI();
for (let i = 1; i <= 2; i++) {
cy.request('POST', `${baseUrl}/api/admin/user-admin`, {
name: `unleash-e2e-user${i}-${randomFeatureName}`,
email: `unleash-e2e-user${i}-${randomFeatureName}@test.com`,
sendEmail: false,
rootRole: 3,
}).then((response) => userIds.push(response.body.id));
}
});
after(() => {
userIds.forEach((id) =>
cy.request('DELETE', `${baseUrl}/api/admin/user-admin/${id}`),
);
});
beforeEach(() => {
cy.login_UI();
if (document.querySelector("[data-testid='CLOSE_SPLASH']")) {
cy.get("[data-testid='CLOSE_SPLASH']").click();
}
});
it('can import data', () => {
cy.visit('/projects/default');
cy.get("[data-testid='IMPORT_BUTTON']").click({ force: true });
const exportText = {
features: [
{
name: randomFeatureName,
description: '',
type: 'release',
project: 'default',
stale: false,
impressionData: false,
archived: false,
},
],
featureStrategies: [
{
name: 'flexibleRollout',
id: '14a0d9dd-2b5d-4a21-98fd-ede72bda0328',
featureName: randomFeatureName,
parameters: {
groupId: randomFeatureName,
rollout: '50',
stickiness: 'default',
},
constraints: [],
segments: [],
},
],
featureEnvironments: [
{
enabled: true,
featureName: randomFeatureName,
environment: 'test',
variants: [],
name: randomFeatureName,
},
],
contextFields: [],
featureTags: [
{
featureName: randomFeatureName,
tagType: 'simple',
tagValue: 'best-tag',
},
{
featureName: randomFeatureName,
tagType: 'simple',
tagValue: 'rserw',
},
{
featureName: randomFeatureName,
tagType: 'simple',
tagValue: 'FARO',
},
],
segments: [],
tagTypes: [
{
name: 'simple',
description: 'Used to simplify filtering of features',
icon: '#',
},
],
};
cy.get("[data-testid='VALIDATE_BUTTON']").should('be.disabled');
// cypress can only work with input@file that is visible
cy.get('input[type=file]')
.invoke('attr', 'style', 'display: block')
.selectFile({
contents: Cypress.Buffer.from(JSON.stringify(exportText)),
fileName: 'upload.json',
lastModified: Date.now(),
});
cy.get("[data-testid='VALIDATE_BUTTON']").click();
cy.get("[data-testid='IMPORT_CONFIGURATION_BUTTON']").click();
// cy.contains('Import completed');
cy.wait(1500);
cy.request({
url: `/api/admin/projects/default/features/${randomFeatureName}`,
headers: { 'Content-Type': 'application/json' },
}).then((response) => {
expect(response.body.name).to.equal(randomFeatureName);
const devEnv = response.body.environments.find(
(env: any) => env.name === 'development',
);
expect(devEnv.name).to.equal('development');
expect(devEnv.strategies[0].parameters.rollout).to.equal('50');
expect(devEnv.enabled).to.equal(true);
});
});
});