Skip to content

Commit

Permalink
Tenant change related integration tests - allow tenant change and ret…
Browse files Browse the repository at this point in the history
…ain tenant in shortlink (#736)

* Test to ensure when a shortlink is copied, tenant is changed and short link is visited. The tenant from the link is visited.

Signed-off-by: leanneeliatra <leanne.laceybyrne@eliatra.com>
Signed-off-by: leanne.laceybyrne@eliatra.com <leanne.laceybyrne@eliatra.com>

* After link copy, allow tenant change

Signed-off-by: leanneeliatra <leanne.laceybyrne@eliatra.com>
Signed-off-by: leanne.laceybyrne@eliatra.com <leanne.laceybyrne@eliatra.com>

* Addressing comments, removing function to it's own file and removing unneeded code in before.

Signed-off-by: leanneeliatra <leanne.laceybyrne@eliatra.com>
Signed-off-by: leanne.laceybyrne@eliatra.com <leanne.laceybyrne@eliatra.com>

* Spelling error rectified
Signed-off-by: leanneeliatra <leanne.laceybyrne@eliatra.com>

Signed-off-by: leanneeliatra <leanne.laceybyrne@eliatra.com>
Signed-off-by: leanne.laceybyrne@eliatra.com <leanne.laceybyrne@eliatra.com>

* Linting errors resolved

Signed-off-by: leanneeliatra <leanne.laceybyrne@eliatra.com>
Signed-off-by: leanne.laceybyrne@eliatra.com <leanne.laceybyrne@eliatra.com>

* Update cypress/utils/commands.js

Co-authored-by: Yulong Ruan <ruanyu1@gmail.com>
Signed-off-by: leanneeliatra <131779422+leanneeliatra@users.noreply.github.com>
Signed-off-by: leanneeliatra <leanne.laceybyrne@eliatra.com>
Signed-off-by: leanne.laceybyrne@eliatra.com <leanne.laceybyrne@eliatra.com>

* Changed data-test-subj to getElementByTestId for consitency

Signed-off-by: leanneeliatra <leanne.laceybyrne@eliatra.com>
Signed-off-by: leanne.laceybyrne@eliatra.com <leanne.laceybyrne@eliatra.com>

* Switch tenant updated to use interceps and should() for improved test performance

Signed-off-by: leanneeliatra <leanne.laceybyrne@eliatra.com>
Signed-off-by: leanne.laceybyrne@eliatra.com <leanne.laceybyrne@eliatra.com>

* switch tenant changed to use intercepts and should() for increaced test performance.

Signed-off-by: leanneeliatra <leanne.laceybyrne@eliatra.com>
Signed-off-by: leanne.laceybyrne@eliatra.com <leanne.laceybyrne@eliatra.com>

* Adding commen to explain how the addtion of the should() helps

Signed-off-by: leanneeliatra <leanne.laceybyrne@eliatra.com>
Signed-off-by: leanne.laceybyrne@eliatra.com <leanne.laceybyrne@eliatra.com>

* Global declaration of the tenant removed. The clearing of session storage is not needed actually, cy.visit() does this for us

Signed-off-by: leanneeliatra <leanne.laceybyrne@eliatra.com>
Signed-off-by: leanne.laceybyrne@eliatra.com <leanne.laceybyrne@eliatra.com>

* Additition of 'createDashboard' method to allow programatic dashboard creation. Also improvements to the test.

Signed-off-by: leanneeliatra <leanne.laceybyrne@eliatra.com>
Signed-off-by: leanne.laceybyrne@eliatra.com <leanne.laceybyrne@eliatra.com>

* When testing we are looking for the private tenant.

Signed-off-by: leanneeliatra <leanne.laceybyrne@eliatra.com>
Signed-off-by: leanne.laceybyrne@eliatra.com <leanne.laceybyrne@eliatra.com>

* check changed to allow for both 'private' and __user__

Signed-off-by: leanneeliatra <leanne.laceybyrne@eliatra.com>
Signed-off-by: leanne.laceybyrne@eliatra.com <leanne.laceybyrne@eliatra.com>

* linting errors resolved Signed-off-by: leanneeliatra <leanne.laceybyrne@eliatra.com>

Signed-off-by: leanneeliatra <leanne.laceybyrne@eliatra.com>
Signed-off-by: leanne.laceybyrne@eliatra.com <leanne.laceybyrne@eliatra.com>

* merging in changes on remote

Signed-off-by: leanneeliatra <leanne.laceybyrne@eliatra.com>
Signed-off-by: leanne.laceybyrne@eliatra.com <leanne.laceybyrne@eliatra.com>

* Adding back --headless parameter.

Signed-off-by: leanneeliatra <leanne.laceybyrne@eliatra.com>
Signed-off-by: leanne.laceybyrne@eliatra.com <leanne.laceybyrne@eliatra.com>

* undoing package-lock changes.

Signed-off-by: leanneeliatra <leanne.laceybyrne@eliatra.com>
Signed-off-by: leanne.laceybyrne@eliatra.com <leanne.laceybyrne@eliatra.com>

* Use library from release tag instead of git reference (#706)

The module installed from the OSD test library seems to update
or not based on caching issues.

Related proposal:
opensearch-project/opensearch-dashboards-test-library#36

Signed-off-by: Kawika Avilla <kavilla414@gmail.com>
Signed-off-by: leanne.laceybyrne@eliatra.com <leanne.laceybyrne@eliatra.com>

* update testSplitTables test (#731)

Signed-off-by: Sirazh Gabdullin <sirazh.gabdullin@nu.edu.kz>
Signed-off-by: leanne.laceybyrne@eliatra.com <leanne.laceybyrne@eliatra.com>

* [Vis Augmenter / Feature Anywhere] Add tests in core OSD and AD plugin (#739)

* [Vis Augmenter / Feature Anywhere] Add test suite for vanilla OSD + helper fns for plugins (#725)

* feature anywhere initial tests

Signed-off-by: Jovan Cvetkovic <jovanca.cvetkovic@gmail.com>

* Add test suite

Signed-off-by: Tyler Ohlsen <ohltyler@amazon.com>

* Remove unnecessary test case

Signed-off-by: Tyler Ohlsen <ohltyler@amazon.com>

* Optimize getters

Signed-off-by: Tyler Ohlsen <ohltyler@amazon.com>

---------

Signed-off-by: Jovan Cvetkovic <jovanca.cvetkovic@gmail.com>
Signed-off-by: Tyler Ohlsen <ohltyler@amazon.com>
Co-authored-by: Jovan Cvetkovic <jovanca.cvetkovic@gmail.com>

* [Feature Anywhere / Vis Augmenter] Add test flows for integration with AD plugin (#727)

* feature anywhere initial tests

Signed-off-by: Jovan Cvetkovic <jovanca.cvetkovic@gmail.com>

* Add test suite

Signed-off-by: Tyler Ohlsen <ohltyler@amazon.com>

* Add AD vis augmenter tests

Signed-off-by: Tyler Ohlsen <ohltyler@amazon.com>

* More refactoring

Signed-off-by: Tyler Ohlsen <ohltyler@amazon.com>

* More tests

Signed-off-by: Tyler Ohlsen <ohltyler@amazon.com>

* Add test for AD cleanup scenario

Signed-off-by: Tyler Ohlsen <ohltyler@amazon.com>

* Set up saved obj test suite

Signed-off-by: Tyler Ohlsen <ohltyler@amazon.com>

* Add reminder TODO

Signed-off-by: Tyler Ohlsen <ohltyler@amazon.com>

* Add tests regarding saved obj visibility

Signed-off-by: Tyler Ohlsen <ohltyler@amazon.com>

* Add view events tests

Signed-off-by: Tyler Ohlsen <ohltyler@amazon.com>

* cleanup

Signed-off-by: Tyler Ohlsen <ohltyler@amazon.com>

* remove import

Signed-off-by: Tyler Ohlsen <ohltyler@amazon.com>

---------

Signed-off-by: Jovan Cvetkovic <jovanca.cvetkovic@gmail.com>
Signed-off-by: Tyler Ohlsen <ohltyler@amazon.com>
Co-authored-by: Jovan Cvetkovic <jovanca.cvetkovic@gmail.com>

---------

Signed-off-by: Jovan Cvetkovic <jovanca.cvetkovic@gmail.com>
Signed-off-by: Tyler Ohlsen <ohltyler@amazon.com>
Co-authored-by: Jovan Cvetkovic <jovanca.cvetkovic@gmail.com>
Signed-off-by: leanne.laceybyrne@eliatra.com <leanne.laceybyrne@eliatra.com>

* Revert "[Vis Augmenter / Feature Anywhere] Add tests in core OSD and AD plugin (#739)" (#748)

This reverts commit 07a67d7.

Signed-off-by: manasvinibs <manasvis@amazon.com>
Signed-off-by: leanne.laceybyrne@eliatra.com <leanne.laceybyrne@eliatra.com>

* Test sample data with multiple data source enabled on local cluster (#756)

Signed-off-by: Kristen Tian <tyarong@amazon.com>
Signed-off-by: leanne.laceybyrne@eliatra.com <leanne.laceybyrne@eliatra.com>

* [Vis Augmenter] Add tests in OSD & AD plugin (#752)

* [Vis Augmenter / Feature Anywhere] Add test suite for vanilla OSD + helper fns for plugins (#725)

* feature anywhere initial tests

Signed-off-by: Jovan Cvetkovic <jovanca.cvetkovic@gmail.com>

* Add test suite

Signed-off-by: Tyler Ohlsen <ohltyler@amazon.com>

* Remove unnecessary test case

Signed-off-by: Tyler Ohlsen <ohltyler@amazon.com>

* Optimize getters

Signed-off-by: Tyler Ohlsen <ohltyler@amazon.com>

---------

Signed-off-by: Jovan Cvetkovic <jovanca.cvetkovic@gmail.com>
Signed-off-by: Tyler Ohlsen <ohltyler@amazon.com>
Co-authored-by: Jovan Cvetkovic <jovanca.cvetkovic@gmail.com>

* [Feature Anywhere / Vis Augmenter] Add test flows for integration with AD plugin (#727)

* feature anywhere initial tests

Signed-off-by: Jovan Cvetkovic <jovanca.cvetkovic@gmail.com>

* Add test suite

Signed-off-by: Tyler Ohlsen <ohltyler@amazon.com>

* Add AD vis augmenter tests

Signed-off-by: Tyler Ohlsen <ohltyler@amazon.com>

* More refactoring

Signed-off-by: Tyler Ohlsen <ohltyler@amazon.com>

* More tests

Signed-off-by: Tyler Ohlsen <ohltyler@amazon.com>

* Add test for AD cleanup scenario

Signed-off-by: Tyler Ohlsen <ohltyler@amazon.com>

* Set up saved obj test suite

Signed-off-by: Tyler Ohlsen <ohltyler@amazon.com>

* Add reminder TODO

Signed-off-by: Tyler Ohlsen <ohltyler@amazon.com>

* Add tests regarding saved obj visibility

Signed-off-by: Tyler Ohlsen <ohltyler@amazon.com>

* Add view events tests

Signed-off-by: Tyler Ohlsen <ohltyler@amazon.com>

* cleanup

Signed-off-by: Tyler Ohlsen <ohltyler@amazon.com>

* remove import

Signed-off-by: Tyler Ohlsen <ohltyler@amazon.com>

---------

Signed-off-by: Jovan Cvetkovic <jovanca.cvetkovic@gmail.com>
Signed-off-by: Tyler Ohlsen <ohltyler@amazon.com>
Co-authored-by: Jovan Cvetkovic <jovanca.cvetkovic@gmail.com>

* Fix NPE

Signed-off-by: Tyler Ohlsen <ohltyler@amazon.com>

* Fix bug of non-empty dashboard; remove unnecessary test

Signed-off-by: Tyler Ohlsen <ohltyler@amazon.com>

* Simplify dashboard creation

Signed-off-by: Tyler Ohlsen <ohltyler@amazon.com>

* Update undefined check

Signed-off-by: Tyler Ohlsen <ohltyler@amazon.com>

---------

Signed-off-by: Jovan Cvetkovic <jovanca.cvetkovic@gmail.com>
Signed-off-by: Tyler Ohlsen <ohltyler@amazon.com>
Co-authored-by: Jovan Cvetkovic <jovanca.cvetkovic@gmail.com>
Signed-off-by: leanne.laceybyrne@eliatra.com <leanne.laceybyrne@eliatra.com>

* fix: CVE of tough-cookie and word-wrap (#763)

Signed-off-by: SuZhou-Joe <suzhou@amazon.com>
Signed-off-by: leanne.laceybyrne@eliatra.com <leanne.laceybyrne@eliatra.com>

* feat: use "overrides" to install desired version of tough-cookie and word-wrap. (#772)

* feat: use npm v8 to install and initialize package-lock

Signed-off-by: SuZhou-Joe <suzhou@amazon.com>

* feat: add Node version requirement in DEVELOPER_GUIDE

Signed-off-by: SuZhou-Joe <suzhou@amazon.com>

---------

Signed-off-by: SuZhou-Joe <suzhou@amazon.com>
Signed-off-by: leanne.laceybyrne@eliatra.com <leanne.laceybyrne@eliatra.com>

* Improve date selection across versions of OUI (#778)

Signed-off-by: Miki <miki@amazon.com>
Signed-off-by: leanne.laceybyrne@eliatra.com <leanne.laceybyrne@eliatra.com>

* feat: sync cypress test from notifications-dashboards (#776) (#784)

* feat: sync cypress test from notifications-dashboards

Signed-off-by: SuZhou-Joe <suzhou@amazon.com>

* feat: rename commands

Signed-off-by: SuZhou-Joe <suzhou@amazon.com>

* feat: update

Signed-off-by: SuZhou-Joe <suzhou@amazon.com>

* feat: add larger wait time

Signed-off-by: SuZhou-Joe <suzhou@amazon.com>

* feat: update

Signed-off-by: SuZhou-Joe <suzhou@amazon.com>

* feat: update

Signed-off-by: SuZhou-Joe <suzhou@amazon.com>

* feat: update

Signed-off-by: SuZhou-Joe <suzhou@amazon.com>

* feat: add refresh before delete all notifications configs

Signed-off-by: SuZhou-Joe <suzhou@amazon.com>

---------

Signed-off-by: SuZhou-Joe <suzhou@amazon.com>
(cherry picked from commit 81f70c3)
Signed-off-by: leanne.laceybyrne@eliatra.com <leanne.laceybyrne@eliatra.com>

* [Table Visualizations] Tests cleanup (#785)

Signed-off-by: Sirazh Gabdullin <sirazh.gabdullin@nu.edu.kz>
Signed-off-by: leanne.laceybyrne@eliatra.com <leanne.laceybyrne@eliatra.com>

* Bump dependency on opensearch-dashboards-test-library (#790)

Signed-off-by: Miki <miki@amazon.com>
Signed-off-by: leanne.laceybyrne@eliatra.com <leanne.laceybyrne@eliatra.com>

* [Table Visualizations] Test Update (#787)

* fix-test
* simplify selector

---------

Signed-off-by: Sirazh Gabdullin <sirazh.gabdullin@nu.edu.kz>
Signed-off-by: leanne.laceybyrne@eliatra.com <leanne.laceybyrne@eliatra.com>

* fix discover (#803)

Signed-off-by: abbyhu2000 <abigailhu2000@gmail.com>
Signed-off-by: leanne.laceybyrne@eliatra.com <leanne.laceybyrne@eliatra.com>

* Change to toast message in Reports (#578)

* Change to toast message in Reports download spec

Signed-off-by: Kavitha Conjeevaram Mohan <mohakavi@amazon.com>

* Update test

Signed-off-by: Kavitha Conjeevaram Mohan <mohakavi@amazon.com>

* Fix lint

Signed-off-by: Kavitha Conjeevaram Mohan <mohakavi@amazon.com>

---------

Signed-off-by: Kavitha Conjeevaram Mohan <mohakavi@amazon.com>
Signed-off-by: leanne.laceybyrne@eliatra.com <leanne.laceybyrne@eliatra.com>

* fix discover (#807)

Signed-off-by: Qingyang(Abby) Hu <abigailhu2000@gmail.com>
Signed-off-by: leanne.laceybyrne@eliatra.com <leanne.laceybyrne@eliatra.com>

* feat: add test cases for remote models (#813)

Signed-off-by: Lin Wang <wonglam@amazon.com>
Signed-off-by: leanne.laceybyrne@eliatra.com <leanne.laceybyrne@eliatra.com>

* fix workbench download text and csv schema (#814) (#817)

Signed-off-by: Joshua Li <joshuali925@gmail.com>
(cherry picked from commit 46c0882)

Co-authored-by: Joshua Li <joshuali925@gmail.com>
Signed-off-by: leanne.laceybyrne@eliatra.com <leanne.laceybyrne@eliatra.com>

* update trace analytics cypress tests according to observability changes (#775)

* update ftr

Signed-off-by: Derek Ho <dxho@amazon.com>

* revert file

Signed-off-by: Derek Ho <dxho@amazon.com>

* update with trace analytics accordian changes

Signed-off-by: Derek Ho <dxho@amazon.com>

---------

Signed-off-by: Derek Ho <dxho@amazon.com>
Signed-off-by: leanne.laceybyrne@eliatra.com <leanne.laceybyrne@eliatra.com>

* Bump semver from 7.3.7 to 7.5.4 (#822)

Bumps [semver](https://github.com/npm/node-semver) from 7.3.7 to 7.5.4.
- [Release notes](https://github.com/npm/node-semver/releases)
- [Changelog](https://github.com/npm/node-semver/blob/main/CHANGELOG.md)
- [Commits](npm/node-semver@v7.3.7...v7.5.4)

---
updated-dependencies:
- dependency-name: semver
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Signed-off-by: leanne.laceybyrne@eliatra.com <leanne.laceybyrne@eliatra.com>

* [Dashboard] Retry visbuilder dashboard test (#823)

Seeing it pass in video replays but occassionally doesn't pass.
However, it doesn't pass with security enabled so I'd imagine it
could be related to the refreshing of the session.

Issue:
opensearch-project/OpenSearch-Dashboards#4947

Signed-off-by: Kawika Avilla <kavilla414@gmail.com>
Signed-off-by: leanne.laceybyrne@eliatra.com <leanne.laceybyrne@eliatra.com>

* Add new tests for alerting dashboards (#832)

Signed-off-by: Ashish Agrawal <ashisagr@amazon.com>
Signed-off-by: leanne.laceybyrne@eliatra.com <leanne.laceybyrne@eliatra.com>

* Update source element in import_vector_map_tab.spec.js (#844)

* Update source element in import_vector_map_tab.spec.js

Signed-off-by: Junqiu Lei <junqiu@amazon.com>

* Update source element in import_vector_map_tab.spec.js

Signed-off-by: Junqiu Lei <junqiu@amazon.com>

---------

Signed-off-by: Junqiu Lei <junqiu@amazon.com>
Signed-off-by: leanne.laceybyrne@eliatra.com <leanne.laceybyrne@eliatra.com>

* Use index pattern id to find page in import_vector_map_tab.spec.js (#847)

Signed-off-by: Junqiu Lei <junqiu@amazon.com>
Signed-off-by: leanne.laceybyrne@eliatra.com <leanne.laceybyrne@eliatra.com>

* Buffer `waitForLoader` before checking for icon (#857) (#859)

Some async calls occur after navigating and sometimes navigating too quickly
prevents the calls from having correct data and therefore the homeIcon is in
a bad state.

This adds the ability to buffer before checking for the homeIcon.

Defaulted to 0 ms, but for `yarn cypress:run-with-security` configures
WAIT_FOR_LOADER_BUFFER_MS to be 500 ms

Issue resolved:
opensearch-project/OpenSearch-Dashboards#5028

Signed-off-by: Kawika Avilla <kavilla414@gmail.com>
(cherry picked from commit e7c7e59)

Co-authored-by: Kawika Avilla <kavilla414@gmail.com>
Signed-off-by: leanne.laceybyrne@eliatra.com <leanne.laceybyrne@eliatra.com>

* Overwrite removed and moved to after in unit test

Signed-off-by: leanneeliatra <leanne.laceybyrne@eliatra.com>
Signed-off-by: leanne.laceybyrne@eliatra.com <leanne.laceybyrne@eliatra.com>

* Update dashboard.spec.js

Signed-off-by: leanneeliatra <131779422+leanneeliatra@users.noreply.github.com>

* Update dashboard_sample_data_spec.js

remove unneeded change

Signed-off-by: leanneeliatra <131779422+leanneeliatra@users.noreply.github.com>

---------

Signed-off-by: leanneeliatra <leanne.laceybyrne@eliatra.com>
Signed-off-by: leanne.laceybyrne@eliatra.com <leanne.laceybyrne@eliatra.com>
Signed-off-by: leanneeliatra <131779422+leanneeliatra@users.noreply.github.com>
Signed-off-by: Kawika Avilla <kavilla414@gmail.com>
Signed-off-by: Sirazh Gabdullin <sirazh.gabdullin@nu.edu.kz>
Signed-off-by: Jovan Cvetkovic <jovanca.cvetkovic@gmail.com>
Signed-off-by: Tyler Ohlsen <ohltyler@amazon.com>
Signed-off-by: manasvinibs <manasvis@amazon.com>
Signed-off-by: Kristen Tian <tyarong@amazon.com>
Signed-off-by: SuZhou-Joe <suzhou@amazon.com>
Signed-off-by: Miki <miki@amazon.com>
Signed-off-by: abbyhu2000 <abigailhu2000@gmail.com>
Signed-off-by: Kavitha Conjeevaram Mohan <mohakavi@amazon.com>
Signed-off-by: Qingyang(Abby) Hu <abigailhu2000@gmail.com>
Signed-off-by: Lin Wang <wonglam@amazon.com>
Signed-off-by: Derek Ho <dxho@amazon.com>
Signed-off-by: dependabot[bot] <support@github.com>
Signed-off-by: Ashish Agrawal <ashisagr@amazon.com>
Signed-off-by: Junqiu Lei <junqiu@amazon.com>
Co-authored-by: Yulong Ruan <ruanyu1@gmail.com>
Co-authored-by: Kawika Avilla <kavilla414@gmail.com>
Co-authored-by: Sirazh Gabdullin <sirazh.gabdullin@nu.edu.kz>
Co-authored-by: Tyler Ohlsen <ohltyler@amazon.com>
Co-authored-by: Jovan Cvetkovic <jovanca.cvetkovic@gmail.com>
Co-authored-by: Manasvini B Suryanarayana <manasvis@amazon.com>
Co-authored-by: Kristen Tian <105667444+kristenTian@users.noreply.github.com>
Co-authored-by: SuZhou-Joe <suzhou@amazon.com>
Co-authored-by: Miki <amoo_miki@yahoo.com>
Co-authored-by: Miki <miki@amazon.com>
Co-authored-by: Qingyang(Abby) Hu <abigailhu2000@gmail.com>
Co-authored-by: Kavitha Conjeevaram Mohan <mohakavi@amazon.com>
Co-authored-by: Lin Wang <wonglam@amazon.com>
Co-authored-by: opensearch-trigger-bot[bot] <98922864+opensearch-trigger-bot[bot]@users.noreply.github.com>
Co-authored-by: Joshua Li <joshuali925@gmail.com>
Co-authored-by: Derek Ho <derek01778@gmail.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Ashish Agrawal <ashish81394@gmail.com>
Co-authored-by: Junqiu Lei <junqiu@amazon.com>
  • Loading branch information
20 people committed Oct 10, 2023
1 parent 1dd1c26 commit 21bf25f
Show file tree
Hide file tree
Showing 5 changed files with 253 additions and 1 deletion.
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
/*
* Copyright OpenSearch Contributors
* SPDX-License-Identifier: Apache-2.0
*/

import { CURRENT_TENANT } from '../../../utils/commands';
import { switchTenantTo } from './switch_tenant';

if (Cypress.env('SECURITY_ENABLED')) {
describe('Switch tenants when visiting copied links: ', () => {
const tenantName = 'private';

before(() => {
cy.server();
});
it('Checks that the tenant switcher can switch tenants despite a different tenant being present in the tenant query parameter.', function () {
CURRENT_TENANT.newTenant = tenantName;

cy.visit('/app/home').then(() => {
cy.waitForLoader();
switchTenantTo('global');
cy.waitForLoader();
cy.getElementByTestId('account-popover').click();
cy.get('#tenantName').should('contain.text', 'Global');
});
});
});
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
/*
* Copyright OpenSearch Contributors
* SPDX-License-Identifier: Apache-2.0
*/

export function switchTenantTo(newTenant) {
cy.getElementByTestId('account-popover').click();
cy.intercept({
method: 'GET',
url: '/api/v1/auth/dashboardsinfo',
}).as('waitForDashboardsInfo');

cy.intercept({
method: 'GET',
url: '/api/v1/configuration/account',
}).as('waitForAccountInfo');

cy.getElementByTestId('switch-tenants').click();
//should ensures the dialog window is fully loaded and the radios can be selected.
cy.get('[id="' + newTenant + '"][name="tenantSwitchRadios"]').should(
'be.enabled'
);
cy.get('.euiRadio__label[for="' + newTenant + '"]').click();

cy.intercept({
method: 'POST',
url: '/api/v1/multitenancy/tenant',
}).as('waitForUpdatingTenants');
cy.getElementByTestId('tenant-switch-modal')
.find('[data-test-subj="confirm"]')
.click();

cy.wait('@waitForUpdatingTenants');

// Make sure dashboards has really reloaded.
// @waitForReloadAfterTenantSwitch should be triggered twice
cy.wait('@waitForDashboardsInfo');
cy.wait('@waitForDashboardsInfo');
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,148 @@
/*
* Copyright OpenSearch Contributors
* SPDX-License-Identifier: Apache-2.0
*/

import { CURRENT_TENANT } from '../../../utils/commands';
import { switchTenantTo } from './switch_tenant';
import indexPatternGlobalTenantHeaderSetUp from '../../../fixtures/plugins/security-dashboards-plugin/indexpatterns/indexPatternGlobalTenantHeader.json';
import indexPatternPrivateTenantHeaderSetUp from '../../../fixtures/plugins/security-dashboards-plugin/indexpatterns/indexPatternPrivateTenantHeader.json';

if (Cypress.env('SECURITY_ENABLED')) {
describe('Multi Tenancy Tests: ', () => {
before(() => {
cy.server();

cy.createIndexPattern(
'index-pattern1',
{
title: 's*',
timeFieldName: 'timestamp',
},
indexPatternGlobalTenantHeaderSetUp
);

cy.createIndexPattern(
'index-pattern2',
{
title: 'se*',
timeFieldName: 'timestamp',
},
indexPatternPrivateTenantHeaderSetUp
);
});

it('Tests that when the short URL is copied and pasted, it will route correctly with the right tenant', function () {
const randomNumber = Cypress._.random(0, 1e6);
const dashboardName = 'Cypress dashboard - ' + randomNumber;
// We are programmatically creating a dashboard so that the test
// always have the same view. An empty list would show the empty prompt.
// Also, this saves us some typing, clicking and waiting in the test.
cy.createDashboard(
{
title: dashboardName,
},
{
security_tenant: 'private',
}
);

// When creating the shortUrl, we don't want to have the security_tenant
// parameter in the url - otherwise it will be stored in the shortUrl
// itself, which would make this test obsolete.
// But it is also hard to get the tests running reliably when opening
// Dashboards without the parameter (tenant selector popup etc.).
// Hence, we do some navigation to "lose" the query parameter.
CURRENT_TENANT.newTenant = 'private';
cy.visit('/app/home', {
waitForGetTenant: true,
onBeforeLoad(window) {
// set up session storage as we would expect to emulate browser
window.sessionStorage.setItem(
'opendistro::security::tenant::show_popup',
false
);

window.localStorage.setItem(
'opendistro::security::tenant::saved',
'__user__'
);
},
});
// Navigate to the Dashboards app
cy.getElementByTestId('toggleNavButton').should('be.visible').click();
// After clicking the navigation, the security_tenant parameter should be gone
cy.get('[href$="/app/dashboards#/list"]').should('be.visible').click();

// The test subj seems to replace spaces with a dash, so we convert the dashboard name here too.
// Go to the dashboard we have created
const selectorDashboardName = dashboardName.split(' ').join('-');
cy.getElementByTestId(
'dashboardListingTitleLink-' + selectorDashboardName
)
.should('be.visible')
.click();

cy.getElementByTestId('savedObjectTitle').type(dashboardName);

cy.intercept({
method: 'POST',
url: '/api/saved_objects/_bulk_get',
}).as('waitForReloadingDashboard');
cy.getElementByTestId('confirmSaveSavedObjectButton').click();
cy.wait('@waitForReloadingDashboard');
cy.wait(2000);

// 2. Open top share navigation to access copy short url
cy.getElementByTestId('shareTopNavButton').click();
cy.getElementByTestId('sharePanel-Permalinks').click();

// 3. Create the short url, wait for response
cy.intercept('POST', '/api/shorten_url').as('getShortUrl');
// If the url already contains the tenant parameter, it will be stored in the short url. That will work in the app
// but would render this test useless. We're testing that resolved short urls without the tenant parameter work as well.
cy.url().should('not.contain', 'security_tenant');
cy.getElementByTestId('createShortUrl').click();
cy.wait('@getShortUrl');

//4. Switch tenant & visit shortURL link to ensure tenant from short URL is retained
cy.getElementByTestId('copyShareUrlButton')
.invoke('attr', 'data-share-url')
.should('contain', '/goto/')
.then((shortUrl) => {
cy.log('Short url is ' + shortUrl);
// Navigate away to avoid the non existing dashboard in the next tenant.
switchTenantTo('global');

// Since we can't reliably read the clipboard data, we have to append the tenant parameter manually
cy.visit(shortUrl + '?security_tenant=private', {
excludeTenant: true, // We are passing the tenant as a query parameter. Mainly because of readability.
onBeforeLoad(window) {
// Here we are simulating the new tab scenario which isn't supported by Cypress
window.sessionStorage.clear();
},
});

cy.url({ timeout: 10000 }).should('contain', 'security_tenant=');
cy.getElementByTestId('breadcrumb last').should(
'contain.text',
dashboardName
);
});
});
after(() => {
cy.deleteIndexPattern('index-pattern1', {
headers: {
securitytenant: ['global'],
'osd-xsrf': true,
},
});
cy.deleteIndexPattern('index-pattern2', {
headers: {
securitytenant: ['private'],
'osd-xsrf': true,
},
});
});
});
}
25 changes: 24 additions & 1 deletion cypress/utils/commands.js
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,13 @@ Cypress.Commands.overwrite('visit', (orig, url, options) => {
auth: ADMIN_AUTH,
};
}
newOptions.qs = { security_tenant: CURRENT_TENANT.defaultTenant };
if (!newOptions.excludeTenant) {
newOptions.qs = {
...newOptions.qs,
security_tenant: CURRENT_TENANT.defaultTenant,
};
}

if (waitForGetTenant) {
cy.intercept('GET', '/api/v1/multitenancy/tenant').as('getTenant');
orig(url, newOptions);
Expand Down Expand Up @@ -367,6 +373,23 @@ Cypress.Commands.add('createIndexPattern', (id, attributes, header = {}) => {
});
});

Cypress.Commands.add('createDashboard', (attributes = {}, headers = {}) => {
const url = `${Cypress.config().baseUrl}/api/saved_objects/dashboard`;

cy.request({
method: 'POST',
url,
headers: {
'content-type': 'application/json;charset=UTF-8',
'osd-xsrf': true,
...headers,
},
body: JSON.stringify({
attributes,
}),
});
});

Cypress.Commands.add('changeDefaultTenant', (attributes, header = {}) => {
const url =
Cypress.env('openSearchUrl') + '/_plugins/_security/api/tenancy/config';
Expand Down
14 changes: 14 additions & 0 deletions cypress/utils/index.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,20 @@ declare namespace Cypress {
header: string,
): Chainable<S>;

/**
* Adds a dashboard
* @example
* cy.createDashboard({ title: 'My dashboard'})
*/
createDashboard<S = any>(
attributes: {
title: string;
[key: string]: any;
},
headers?: {
[key: string]: any;
}
): Chainable<S>;

/**
* Changes the Default tenant for the domain.
Expand Down

0 comments on commit 21bf25f

Please sign in to comment.