summaryrefslogtreecommitdiff
path: root/spec/frontend/environments/environments_app_spec.js
diff options
context:
space:
mode:
Diffstat (limited to 'spec/frontend/environments/environments_app_spec.js')
-rw-r--r--spec/frontend/environments/environments_app_spec.js53
1 files changed, 50 insertions, 3 deletions
diff --git a/spec/frontend/environments/environments_app_spec.js b/spec/frontend/environments/environments_app_spec.js
index aff54107d6b..65a9f2907d2 100644
--- a/spec/frontend/environments/environments_app_spec.js
+++ b/spec/frontend/environments/environments_app_spec.js
@@ -71,7 +71,7 @@ describe('~/environments/components/environments_app.vue', () => {
previousPage: 1,
__typename: 'LocalPageInfo',
},
- location = '?scope=available&page=2',
+ location = '?scope=available&page=2&search=prod',
}) => {
setWindowLocation(location);
environmentAppMock.mockReturnValue(environmentsApp);
@@ -104,7 +104,7 @@ describe('~/environments/components/environments_app.vue', () => {
await createWrapperWithMocked({
environmentsApp: resolvedEnvironmentsApp,
folder: resolvedFolder,
- location: '?scope=bad&page=2',
+ location: '?scope=bad&page=2&search=prod',
});
expect(environmentAppMock).toHaveBeenCalledWith(
@@ -350,7 +350,54 @@ describe('~/environments/components/environments_app.vue', () => {
next.trigger('click');
await nextTick();
- expect(window.location.search).toBe('?scope=available&page=3');
+ expect(window.location.search).toBe('?scope=available&page=3&search=prod');
+ });
+ });
+
+ describe('search', () => {
+ let searchBox;
+
+ const waitForDebounce = async () => {
+ await nextTick();
+ jest.runOnlyPendingTimers();
+ };
+
+ beforeEach(async () => {
+ await createWrapperWithMocked({
+ environmentsApp: resolvedEnvironmentsApp,
+ folder: resolvedFolder,
+ });
+ searchBox = wrapper.findByRole('searchbox', {
+ name: s__('Environments|Search by environment name'),
+ });
+ });
+
+ it('should sync the query params to the new search', async () => {
+ searchBox.setValue('hello');
+
+ await waitForDebounce();
+
+ expect(window.location.search).toBe('?scope=available&page=1&search=hello');
+ });
+
+ it('should query for the entered parameter', async () => {
+ const search = 'hello';
+
+ searchBox.setValue(search);
+
+ await waitForDebounce();
+ await waitForPromises();
+
+ expect(environmentAppMock).toHaveBeenCalledWith(
+ expect.anything(),
+ expect.objectContaining({ search }),
+ expect.anything(),
+ expect.anything(),
+ );
+ });
+
+ it('should sync search term from query params on load', async () => {
+ expect(searchBox.element.value).toBe('prod');
});
});
});