From 488f0ea8a38bb0d89c6233c810972f5ebe04b182 Mon Sep 17 00:00:00 2001 From: Nicolas Chaulet Date: Thu, 27 Apr 2023 15:58:41 -0400 Subject: [PATCH 1/6] [Fleet] Add more cypress for the agent list page --- .../cypress/e2e/{ => agents}/agent_list.cy.ts | 205 +++++++++++++----- x-pack/plugins/fleet/cypress/screens/fleet.ts | 9 + x-pack/plugins/fleet/cypress/tasks/agents.ts | 6 +- 3 files changed, 166 insertions(+), 54 deletions(-) rename x-pack/plugins/fleet/cypress/e2e/{ => agents}/agent_list.cy.ts (53%) diff --git a/x-pack/plugins/fleet/cypress/e2e/agent_list.cy.ts b/x-pack/plugins/fleet/cypress/e2e/agents/agent_list.cy.ts similarity index 53% rename from x-pack/plugins/fleet/cypress/e2e/agent_list.cy.ts rename to x-pack/plugins/fleet/cypress/e2e/agents/agent_list.cy.ts index 5c0e6c637eac0..43208af09f161 100644 --- a/x-pack/plugins/fleet/cypress/e2e/agent_list.cy.ts +++ b/x-pack/plugins/fleet/cypress/e2e/agents/agent_list.cy.ts @@ -5,34 +5,97 @@ * 2.0. */ -import { FLEET_AGENT_LIST_PAGE } from '../screens/fleet'; +import { FLEET_AGENT_LIST_PAGE } from '../../screens/fleet'; -import { createAgentDoc } from '../tasks/agents'; -import { setupFleetServer } from '../tasks/fleet_server'; -import { deleteFleetServerDocs, deleteAgentDocs } from '../tasks/cleanup'; +import { createAgentDoc } from '../../tasks/agents'; +import { setupFleetServer } from '../../tasks/fleet_server'; +import { deleteFleetServerDocs, deleteAgentDocs, cleanupAgentPolicies } from '../../tasks/cleanup'; +import type { CreateAgentPolicyRequest } from '../../../common/types'; const createAgentDocs = (kibanaVersion: string) => [ createAgentDoc('agent-1', 'policy-1'), // this agent will have upgrade available createAgentDoc('agent-2', 'policy-2', 'error', kibanaVersion), - ...[...Array(15).keys()].map((_, index) => createAgentDoc(`agent-${index + 2}`, 'policy-3')), + ...[...Array(2).keys()].map((_, index) => + createAgentDoc(`agent-${index + 3}`, 'policy-3', undefined, undefined, { + tags: ['tag1', 'tag2'], + }) + ), + ...[...Array(2).keys()].map((_, index) => + createAgentDoc(`agent-${index + 5}`, 'policy-3', undefined, undefined, { + tags: ['tag2'], + }) + ), + ...[...Array(11).keys()].map((_, index) => createAgentDoc(`agent-${index + 6}`, 'policy-3')), ]; let docs: any[] = []; +const POLICIES: Array = [ + { + id: 'policy-1', + name: 'Agent policy 1', + description: '', + namespace: 'default', + monitoring_enabled: ['logs', 'metrics'], + }, + { + id: 'policy-2', + name: 'Agent policy 2', + description: '', + namespace: 'default', + monitoring_enabled: ['logs', 'metrics'], + }, + { + id: 'policy-3', + name: 'Agent policy 3', + description: '', + namespace: 'default', + monitoring_enabled: ['logs', 'metrics'], + }, + { + id: 'policy-4', + name: 'Agent policy 4', + description: '', + namespace: 'default', + monitoring_enabled: ['logs', 'metrics'], + }, +]; + +function createAgentPolicy(body: CreateAgentPolicyRequest['body']) { + cy.request({ + method: 'POST', + url: '/api/fleet/agent_policies', + headers: { 'kbn-xsrf': 'xx' }, + body, + }); +} + +function assertTableContainsNAgents(n: number) { + cy.getBySel(FLEET_AGENT_LIST_PAGE.TABLE) + .find('tr') + .should('have.length', n + 1); // header +} + describe('View agents list', () => { before(() => { deleteFleetServerDocs(true); deleteAgentDocs(true); + cleanupAgentPolicies(); setupFleetServer(); cy.getKibanaVersion().then((version) => { docs = createAgentDocs(version); cy.task('insertDocs', { index: '.fleet-agents', docs }); }); + + for (const policy of POLICIES) { + createAgentPolicy(policy); + } }); after(() => { deleteFleetServerDocs(); deleteAgentDocs(); + cleanupAgentPolicies(); }); beforeEach(() => { cy.intercept('/api/fleet/agents/setup', { @@ -51,42 +114,6 @@ describe('View agents list', () => { other: 0, events: 0, }); - cy.intercept(/\/api\/fleet\/agent_policies(\?.*)?$/, { - items: [ - { - id: 'policy-1', - name: 'Agent policy 1', - description: '', - namespace: 'default', - monitoring_enabled: ['logs', 'metrics'], - status: 'active', - }, - { - id: 'policy-2', - name: 'Agent policy 2', - description: '', - namespace: 'default', - monitoring_enabled: ['logs', 'metrics'], - status: 'active', - }, - { - id: 'policy-3', - name: 'Agent policy 3', - description: '', - namespace: 'default', - monitoring_enabled: ['logs', 'metrics'], - status: 'active', - }, - { - id: 'policy-4', - name: 'Agent policy 4', - description: '', - namespace: 'default', - monitoring_enabled: ['logs', 'metrics'], - status: 'active', - }, - ], - }); }); describe('Agent filter suggestions', () => { @@ -94,7 +121,7 @@ describe('View agents list', () => { cy.visit('/app/fleet/agents'); cy.getBySel(FLEET_AGENT_LIST_PAGE.QUERY_INPUT).type('agent.id: "agent-1"{enter}'); cy.getBySel(FLEET_AGENT_LIST_PAGE.TABLE); - cy.getBySel(FLEET_AGENT_LIST_PAGE.TABLE).find('tr').should('have.length', 2); + assertTableContainsNAgents(1); cy.getBySel(FLEET_AGENT_LIST_PAGE.TABLE).contains('agent-1'); }); }); @@ -104,7 +131,7 @@ describe('View agents list', () => { cy.visit('/app/fleet/agents'); cy.getBySel(FLEET_AGENT_LIST_PAGE.SHOW_UPGRADEABLE).click(); - cy.getBySel(FLEET_AGENT_LIST_PAGE.TABLE).find('tr').should('have.length', 17); + assertTableContainsNAgents(16); cy.getBySel(FLEET_AGENT_LIST_PAGE.TABLE).contains('agent-1'); }); @@ -113,7 +140,7 @@ describe('View agents list', () => { cy.getBySel(FLEET_AGENT_LIST_PAGE.SHOW_UPGRADEABLE).click(); cy.getBySel(FLEET_AGENT_LIST_PAGE.SHOW_UPGRADEABLE).click(); - cy.getBySel(FLEET_AGENT_LIST_PAGE.TABLE).find('tr').should('have.length', 19); + assertTableContainsNAgents(18); cy.getBySel(FLEET_AGENT_LIST_PAGE.TABLE).contains('agent-1'); cy.getBySel(FLEET_AGENT_LIST_PAGE.TABLE).contains('agent-2'); }); @@ -181,7 +208,7 @@ describe('View agents list', () => { cy.get('button').contains('Healthy').click(); - cy.getBySel(FLEET_AGENT_LIST_PAGE.TABLE).find('tr').should('have.length', 18); + assertTableContainsNAgents(18); cy.getBySel(FLEET_AGENT_LIST_PAGE.TABLE).contains('agent-1'); }); @@ -192,7 +219,7 @@ describe('View agents list', () => { cy.get('button').contains('Unhealthy').click(); - cy.getBySel(FLEET_AGENT_LIST_PAGE.TABLE).find('tr').should('have.length', 2); + assertTableContainsNAgents(2); cy.getBySel(FLEET_AGENT_LIST_PAGE.TABLE).contains('agent-2'); }); @@ -216,29 +243,101 @@ describe('View agents list', () => { cy.get('button').contains('healthy').click(); cy.get('button').contains('Unhealthy').click(); - cy.getBySel(FLEET_AGENT_LIST_PAGE.TABLE).find('tr').should('have.length', 19); + assertTableContainsNAgents(18); cy.getBySel(FLEET_AGENT_LIST_PAGE.TABLE).contains('agent-1'); cy.getBySel(FLEET_AGENT_LIST_PAGE.TABLE).contains('agent-2'); }); }); + describe('Tags filter', () => { + it('should allow to filter on one tag (tag1)', () => { + cy.visit('/app/fleet/agents'); + cy.getBySel(FLEET_AGENT_LIST_PAGE.TAGS_FILTER).click(); + cy.get('button').contains('tag1').click(); + + assertTableContainsNAgents(2); + cy.getBySel(FLEET_AGENT_LIST_PAGE.TABLE).contains('agent-3'); + cy.getBySel(FLEET_AGENT_LIST_PAGE.TABLE).contains('agent-4'); + }); + + it('should allow to filter on multiple tag (tag1, tag2)', () => { + cy.visit('/app/fleet/agents'); + cy.getBySel(FLEET_AGENT_LIST_PAGE.TAGS_FILTER).click(); + cy.get('button').contains('tag1').click(); + cy.get('button').contains('tag2').click(); + + assertTableContainsNAgents(4); + cy.getBySel(FLEET_AGENT_LIST_PAGE.TABLE).contains('agent-3'); + cy.getBySel(FLEET_AGENT_LIST_PAGE.TABLE).contains('agent-4'); + cy.getBySel(FLEET_AGENT_LIST_PAGE.TABLE).contains('agent-5'); + cy.getBySel(FLEET_AGENT_LIST_PAGE.TABLE).contains('agent-6'); + }); + + it('should allow to clear filters', () => { + cy.visit('/app/fleet/agents'); + cy.getBySel(FLEET_AGENT_LIST_PAGE.TAGS_FILTER).click(); + cy.get('button').contains('tag1').click(); + cy.get('button').contains('tag2').click(); + cy.getBySel(FLEET_AGENT_LIST_PAGE.TAGS_FILTER).click(); + + assertTableContainsNAgents(4); + cy.getBySel(FLEET_AGENT_LIST_PAGE.TAGS_FILTER).click(); + cy.get('button').contains('Clear all').click(); + assertTableContainsNAgents(18); + }); + }); + describe('Bulk actions', () => { - it('should allow to bulk upgrade agents', () => { + it('should allow to bulk upgrade agents and cancel that upgrade', () => { cy.visit('/app/fleet/agents'); cy.getBySel(FLEET_AGENT_LIST_PAGE.POLICY_FILTER).click(); cy.get('button').contains('Agent policy 3').click(); - cy.getBySel(FLEET_AGENT_LIST_PAGE.TABLE).find('tr').should('have.length', 16); + assertTableContainsNAgents(16); cy.getBySel(FLEET_AGENT_LIST_PAGE.CHECKBOX_SELECT_ALL).click(); // Trigger a bulk upgrade cy.getBySel(FLEET_AGENT_LIST_PAGE.BULK_ACTIONS_BUTTON).click(); cy.get('button').contains('Upgrade 15 agents').click(); - cy.get('.euiModalFooter button').contains('Upgrade 15 agents').click(); - // Cancel upgrade - this assertion is currently flaky - // cy.getBySel(CURRENT_BULK_UPGRADES_CALLOUT.ABORT_BTN).click(); - // cy.get('button').contains('Confirm').click(); + cy.get('.euiModalFooter button:enabled').contains('Upgrade 15 agents').click(); + + // Expect agent status to be Updating + cy.get('.euiBadge:contains("Updating")').should('have.length', 15); + + // Cancel upgrade + cy.getBySel(FLEET_AGENT_LIST_PAGE.ACTIVITY_BUTTON).click(); + + cy.getBySel(FLEET_AGENT_LIST_PAGE.ACTIVITY_FLYOUT.FLYOUT_ID).contains(/Upgrading 15 agents/); + cy.getBySel(FLEET_AGENT_LIST_PAGE.ACTIVITY_FLYOUT.FLYOUT_ID) + .get('button') + .contains('Cancel') + .click(); + + cy.get('button').contains('Confirm').click(); + + cy.getBySel(FLEET_AGENT_LIST_PAGE.ACTIVITY_FLYOUT.CLOSE_BUTTON).click(); + + // Expect agent status to be Healthy + cy.get('.euiBadge:contains("Healthy")').should('have.length', 15); + }); + + it('should allow to bulk edit agent tags', () => { + cy.visit('/app/fleet/agents'); + + cy.getBySel(FLEET_AGENT_LIST_PAGE.POLICY_FILTER).click(); + + cy.get('button').contains('Agent policy 3').click(); + assertTableContainsNAgents(15); + cy.getBySel(FLEET_AGENT_LIST_PAGE.CHECKBOX_SELECT_ALL).click(); + // Trigger a bulk upgrade + cy.getBySel(FLEET_AGENT_LIST_PAGE.BULK_ACTIONS_BUTTON).click(); + cy.get('button').contains('Add / remove tags').click(); + + cy.getBySel(FLEET_AGENT_LIST_PAGE.BULK_ACTIONS.ADD_REMOVE_TAG_INPUT).focus(); + cy.wait(500); + cy.getBySel(FLEET_AGENT_LIST_PAGE.BULK_ACTIONS.ADD_REMOVE_TAG_INPUT).type('tagtest{enter}'); + cy.get('button').contains('Create a new tag "tagtest"').click(); }); }); }); diff --git a/x-pack/plugins/fleet/cypress/screens/fleet.ts b/x-pack/plugins/fleet/cypress/screens/fleet.ts index f819ceaab301e..2855a2ac87508 100644 --- a/x-pack/plugins/fleet/cypress/screens/fleet.ts +++ b/x-pack/plugins/fleet/cypress/screens/fleet.ts @@ -113,11 +113,20 @@ export const AGENT_POLICY_FORM = { export const FLEET_AGENT_LIST_PAGE = { TABLE: 'fleetAgentListTable', STATUS_FILTER: 'agentList.statusFilter', + TAGS_FILTER: 'agentList.tagsFilter', POLICY_FILTER: 'agentList.policyFilter', QUERY_INPUT: 'agentList.queryInput', SHOW_UPGRADEABLE: 'agentList.showUpgradeable', CHECKBOX_SELECT_ALL: 'checkboxSelectAll', BULK_ACTIONS_BUTTON: 'agentBulkActionsButton', + ACTIVITY_BUTTON: 'agentActivityButton', + ACTIVITY_FLYOUT: { + FLYOUT_ID: 'agentActivityFlyout', + CLOSE_BUTTON: 'euiFlyoutCloseButton', + }, + BULK_ACTIONS: { + ADD_REMOVE_TAG_INPUT: 'addRemoveTags', + }, }; export const FLEET_SERVER_HOST_FLYOUT = { diff --git a/x-pack/plugins/fleet/cypress/tasks/agents.ts b/x-pack/plugins/fleet/cypress/tasks/agents.ts index c8341e5acdc7b..499ed71ee0a26 100644 --- a/x-pack/plugins/fleet/cypress/tasks/agents.ts +++ b/x-pack/plugins/fleet/cypress/tasks/agents.ts @@ -5,11 +5,14 @@ * 2.0. */ +import { type FleetServerAgent } from '../../common/types'; + export const createAgentDoc = ( id: string, policy: string, status = 'online', - version: string = '8.1.0' + version: string = '8.1.0', + data?: Partial ) => ({ access_api_key_id: 'abcdefghijklmn', action_seq_no: [-1], @@ -60,4 +63,5 @@ export const createAgentDoc = ( policy_revision: 1, status, packages: [], + ...data, }); From fa8c826adce8ba62ac2c085a35b174403c5f6052 Mon Sep 17 00:00:00 2001 From: Nicolas Chaulet Date: Fri, 28 Apr 2023 08:59:07 -0400 Subject: [PATCH 2/6] bulk reassign tests --- .../fleet/cypress/e2e/agents/agent_list.cy.ts | 36 ++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/x-pack/plugins/fleet/cypress/e2e/agents/agent_list.cy.ts b/x-pack/plugins/fleet/cypress/e2e/agents/agent_list.cy.ts index 43208af09f161..da3cbfb50460f 100644 --- a/x-pack/plugins/fleet/cypress/e2e/agents/agent_list.cy.ts +++ b/x-pack/plugins/fleet/cypress/e2e/agents/agent_list.cy.ts @@ -76,6 +76,10 @@ function assertTableContainsNAgents(n: number) { .should('have.length', n + 1); // header } +function assertTableIsEmpty() { + cy.getBySel(FLEET_AGENT_LIST_PAGE.TABLE).contains('No agents found'); +} + describe('View agents list', () => { before(() => { deleteFleetServerDocs(true); @@ -164,7 +168,7 @@ describe('View agents list', () => { cy.get('button').contains('Agent policy 4').click(); - cy.getBySel(FLEET_AGENT_LIST_PAGE.TABLE).contains('No agents found'); + assertTableIsEmpty(); }); it('should filter on single policy', () => { @@ -339,5 +343,35 @@ describe('View agents list', () => { cy.getBySel(FLEET_AGENT_LIST_PAGE.BULK_ACTIONS.ADD_REMOVE_TAG_INPUT).type('tagtest{enter}'); cy.get('button').contains('Create a new tag "tagtest"').click(); }); + + it('should allow to bulk reassing agent to another policy', () => { + cy.visit('/app/fleet/agents'); + + cy.getBySel(FLEET_AGENT_LIST_PAGE.POLICY_FILTER).click(); + + cy.get('button').contains('Agent policy 3').click(); + assertTableContainsNAgents(15); + cy.getBySel(FLEET_AGENT_LIST_PAGE.CHECKBOX_SELECT_ALL).click(); + // Trigger a bulk upgrade + cy.getBySel(FLEET_AGENT_LIST_PAGE.BULK_ACTIONS_BUTTON).click(); + cy.get('button').contains('Assign to new policy').click(); + cy.get('.euiModalBody select').select('Agent policy 4'); + cy.get('.euiModalFooter button:enabled').contains('Assign policy').click(); + + assertTableIsEmpty(); + + // Select new policy is filters + cy.getBySel(FLEET_AGENT_LIST_PAGE.POLICY_FILTER).click(); + cy.get('button').contains('Agent policy 4').click(); + assertTableContainsNAgents(15); + + // Change back those agents to Agent policy 3 + cy.getBySel(FLEET_AGENT_LIST_PAGE.CHECKBOX_SELECT_ALL).click(); + // Trigger a bulk upgrade + cy.getBySel(FLEET_AGENT_LIST_PAGE.BULK_ACTIONS_BUTTON).click(); + cy.get('button').contains('Assign to new policy').click(); + cy.get('.euiModalBody select').select('Agent policy 3'); + cy.get('.euiModalFooter button:enabled').contains('Assign policy').click(); + }); }); }); From 91216b68598033a02ec16d9a94393fde3711cf15 Mon Sep 17 00:00:00 2001 From: Nicolas Chaulet Date: Fri, 28 Apr 2023 09:08:59 -0400 Subject: [PATCH 3/6] fix tests --- x-pack/plugins/fleet/cypress/e2e/agents/agent_list.cy.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/x-pack/plugins/fleet/cypress/e2e/agents/agent_list.cy.ts b/x-pack/plugins/fleet/cypress/e2e/agents/agent_list.cy.ts index da3cbfb50460f..d80a4964df2a8 100644 --- a/x-pack/plugins/fleet/cypress/e2e/agents/agent_list.cy.ts +++ b/x-pack/plugins/fleet/cypress/e2e/agents/agent_list.cy.ts @@ -223,7 +223,7 @@ describe('View agents list', () => { cy.get('button').contains('Unhealthy').click(); - assertTableContainsNAgents(2); + assertTableContainsNAgents(1); cy.getBySel(FLEET_AGENT_LIST_PAGE.TABLE).contains('agent-2'); }); @@ -298,7 +298,7 @@ describe('View agents list', () => { cy.getBySel(FLEET_AGENT_LIST_PAGE.POLICY_FILTER).click(); cy.get('button').contains('Agent policy 3').click(); - assertTableContainsNAgents(16); + assertTableContainsNAgents(15); cy.getBySel(FLEET_AGENT_LIST_PAGE.CHECKBOX_SELECT_ALL).click(); // Trigger a bulk upgrade From 4bedae75cac8abeecc51a8dbbcae492ddc0f406b Mon Sep 17 00:00:00 2001 From: Nicolas Chaulet Date: Fri, 28 Apr 2023 09:48:50 -0400 Subject: [PATCH 4/6] Fix type check --- x-pack/plugins/fleet/common/types/models/agent.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/x-pack/plugins/fleet/common/types/models/agent.ts b/x-pack/plugins/fleet/common/types/models/agent.ts index 304da5b3f6514..a286649bb7393 100644 --- a/x-pack/plugins/fleet/common/types/models/agent.ts +++ b/x-pack/plugins/fleet/common/types/models/agent.ts @@ -190,7 +190,7 @@ export interface FleetServerAgentComponentUnit { }; } -interface FleetServerAgentComponent { +export interface FleetServerAgentComponent { id: string; type: string; status: FleetServerAgentComponentStatus; From e79206792dfa8d62530f668f210856a04e94a907 Mon Sep 17 00:00:00 2001 From: Nicolas Chaulet Date: Fri, 28 Apr 2023 12:06:19 -0400 Subject: [PATCH 5/6] fix tests --- .../fleet/cypress/e2e/agents/agent_list.cy.ts | 19 +++++++++++++----- .../fleet/cypress/tasks/ui_settings.ts | 20 +++++++++++++++++++ 2 files changed, 34 insertions(+), 5 deletions(-) create mode 100644 x-pack/plugins/fleet/cypress/tasks/ui_settings.ts diff --git a/x-pack/plugins/fleet/cypress/e2e/agents/agent_list.cy.ts b/x-pack/plugins/fleet/cypress/e2e/agents/agent_list.cy.ts index d80a4964df2a8..fd85e05e51aec 100644 --- a/x-pack/plugins/fleet/cypress/e2e/agents/agent_list.cy.ts +++ b/x-pack/plugins/fleet/cypress/e2e/agents/agent_list.cy.ts @@ -11,6 +11,7 @@ import { createAgentDoc } from '../../tasks/agents'; import { setupFleetServer } from '../../tasks/fleet_server'; import { deleteFleetServerDocs, deleteAgentDocs, cleanupAgentPolicies } from '../../tasks/cleanup'; import type { CreateAgentPolicyRequest } from '../../../common/types'; +import { setUISettings } from '../../tasks/ui_settings'; const createAgentDocs = (kibanaVersion: string) => [ createAgentDoc('agent-1', 'policy-1'), // this agent will have upgrade available @@ -86,6 +87,7 @@ describe('View agents list', () => { deleteAgentDocs(true); cleanupAgentPolicies(); setupFleetServer(); + setUISettings('hideAgentActivityTour', true); cy.getKibanaVersion().then((version) => { docs = createAgentDocs(version); @@ -118,6 +120,7 @@ describe('View agents list', () => { other: 0, events: 0, }); + cy.intercept('GET', /\/api\/fleet\/agents/).as('getAgents'); }); describe('Agent filter suggestions', () => { @@ -204,6 +207,7 @@ describe('View agents list', () => { cy.get('button').contains('Updating').click(); cy.get('button').contains('Offline').click(); cy.getBySel(FLEET_AGENT_LIST_PAGE.STATUS_FILTER).click(); + cy.wait('@getAgents'); }; it('should filter on healthy (16 result)', () => { cy.visit('/app/fleet/agents'); @@ -211,6 +215,7 @@ describe('View agents list', () => { cy.getBySel(FLEET_AGENT_LIST_PAGE.STATUS_FILTER).click(); cy.get('button').contains('Healthy').click(); + cy.wait('@getAgents'); assertTableContainsNAgents(18); cy.getBySel(FLEET_AGENT_LIST_PAGE.TABLE).contains('agent-1'); @@ -222,6 +227,7 @@ describe('View agents list', () => { cy.getBySel(FLEET_AGENT_LIST_PAGE.STATUS_FILTER).click(); cy.get('button').contains('Unhealthy').click(); + cy.wait('@getAgents'); assertTableContainsNAgents(1); cy.getBySel(FLEET_AGENT_LIST_PAGE.TABLE).contains('agent-2'); @@ -244,8 +250,9 @@ describe('View agents list', () => { cy.getBySel(FLEET_AGENT_LIST_PAGE.STATUS_FILTER).click(); - cy.get('button').contains('healthy').click(); + cy.get('button').contains('Healthy').click(); cy.get('button').contains('Unhealthy').click(); + cy.wait('@getAgents'); assertTableContainsNAgents(18); cy.getBySel(FLEET_AGENT_LIST_PAGE.TABLE).contains('agent-1'); @@ -269,6 +276,7 @@ describe('View agents list', () => { cy.getBySel(FLEET_AGENT_LIST_PAGE.TAGS_FILTER).click(); cy.get('button').contains('tag1').click(); cy.get('button').contains('tag2').click(); + cy.wait('@getAgents'); assertTableContainsNAgents(4); cy.getBySel(FLEET_AGENT_LIST_PAGE.TABLE).contains('agent-3'); @@ -344,12 +352,12 @@ describe('View agents list', () => { cy.get('button').contains('Create a new tag "tagtest"').click(); }); - it('should allow to bulk reassing agent to another policy', () => { + it('should allow to bulk reassign agent to another policy', () => { cy.visit('/app/fleet/agents'); cy.getBySel(FLEET_AGENT_LIST_PAGE.POLICY_FILTER).click(); - cy.get('button').contains('Agent policy 3').click(); + cy.wait('@getAgents'); assertTableContainsNAgents(15); cy.getBySel(FLEET_AGENT_LIST_PAGE.CHECKBOX_SELECT_ALL).click(); // Trigger a bulk upgrade @@ -357,12 +365,13 @@ describe('View agents list', () => { cy.get('button').contains('Assign to new policy').click(); cy.get('.euiModalBody select').select('Agent policy 4'); cy.get('.euiModalFooter button:enabled').contains('Assign policy').click(); - + cy.wait('@getAgents'); assertTableIsEmpty(); - + cy.pause(); // Select new policy is filters cy.getBySel(FLEET_AGENT_LIST_PAGE.POLICY_FILTER).click(); cy.get('button').contains('Agent policy 4').click(); + cy.wait('@getAgents'); assertTableContainsNAgents(15); // Change back those agents to Agent policy 3 diff --git a/x-pack/plugins/fleet/cypress/tasks/ui_settings.ts b/x-pack/plugins/fleet/cypress/tasks/ui_settings.ts new file mode 100644 index 0000000000000..4ba239e107f1b --- /dev/null +++ b/x-pack/plugins/fleet/cypress/tasks/ui_settings.ts @@ -0,0 +1,20 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +// Create a Fleet server policy +export function setUISettings(settingsKey: string, settingsValue: any) { + cy.request({ + method: 'POST', + url: '/api/kibana/settings', + headers: { 'kbn-xsrf': 'xx' }, + body: { + changes: { + [settingsKey]: settingsValue, + }, + }, + }); +} From b946b36bf3d5a35a1a35d0cee77f73d319555df7 Mon Sep 17 00:00:00 2001 From: Nicolas Chaulet Date: Mon, 1 May 2023 11:03:49 -0400 Subject: [PATCH 6/6] add comments --- x-pack/plugins/fleet/common/types/models/agent.ts | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/x-pack/plugins/fleet/common/types/models/agent.ts b/x-pack/plugins/fleet/common/types/models/agent.ts index a286649bb7393..34f68fc34c502 100644 --- a/x-pack/plugins/fleet/common/types/models/agent.ts +++ b/x-pack/plugins/fleet/common/types/models/agent.ts @@ -180,6 +180,9 @@ export interface AgentDiagnostics { } // Generated from FleetServer schema.json +/** + * Fleet Server agent component unit + */ export interface FleetServerAgentComponentUnit { id: string; type: 'input' | 'output'; @@ -190,6 +193,9 @@ export interface FleetServerAgentComponentUnit { }; } +/** + * Fleet server agent component + */ export interface FleetServerAgentComponent { id: string; type: string;