@rancher/shell 0.3.10 → 0.3.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -170,6 +170,7 @@ export default {
170
170
  <span
171
171
  v-else
172
172
  v-clean-html="bodyHtml"
173
+ data-testid="detail-top_html"
173
174
  :class="{'conceal': concealed, 'monospace': monospace && !isBinary}"
174
175
  />
175
176
 
@@ -8,7 +8,7 @@ import IconMessage from '@shell/components/IconMessage.vue';
8
8
  import { ResourceListComponentName } from './resource-list.config';
9
9
  import { PanelLocation, ExtensionPoint } from '@shell/core/types';
10
10
  import ExtensionPanel from '@shell/components/ExtensionPanel';
11
- import { sameContents } from 'utils/array';
11
+ import { sameContents } from '@shell/utils/array';
12
12
 
13
13
  export default {
14
14
  name: ResourceListComponentName,
@@ -217,6 +217,7 @@ export default {
217
217
  <Checkbox
218
218
  v-model="isAll"
219
219
  class="check"
220
+ data-testid="sortable-table_check_select_all"
220
221
  :indeterminate="isIndeterminate"
221
222
  :disabled="noRows || noResults"
222
223
  />
@@ -342,6 +342,7 @@ export default {
342
342
  <Password
343
343
  v-if="isChange"
344
344
  v-model="passwordCurrent"
345
+ data-testid="account__current_password"
345
346
  class="mt-10"
346
347
  :required="true"
347
348
  :label="t('changePassword.currentPassword.label')"
@@ -368,6 +369,7 @@ export default {
368
369
  <div :class="{'col': isCreateEdit, 'span-4': isCreateEdit}">
369
370
  <Password
370
371
  v-model="passwordNew"
372
+ data-testid="account__new_password"
371
373
  class="mt-10"
372
374
  :label="t('changePassword.userGen.newPassword.label')"
373
375
  :required="userGeneratedPasswordsRequired"
@@ -377,6 +379,7 @@ export default {
377
379
  <div :class="{'col': isCreateEdit, 'span-4': isCreateEdit}">
378
380
  <Password
379
381
  v-model="passwordConfirm"
382
+ data-testid="account__confirm_password"
380
383
  class="mt-10"
381
384
  :label="t('changePassword.userGen.confirmPassword.label')"
382
385
  :required="userGeneratedPasswordsRequired"
@@ -43,8 +43,8 @@ export default {
43
43
  };
44
44
  },
45
45
  monitoringNamespace() {
46
- // arbitrarily picking the alertmanagerURL here, they're all going to be the same.
47
- return this.pullKeyFromUrl(this.relativeDashboardValues.alertmanagerURL, 'namespaces');
46
+ // picking the prometheusURL here, they're all going to be the same, but alertmanager and grafana can be deactivated
47
+ return this.pullKeyFromUrl(this.relativeDashboardValues.prometheusURL, 'namespaces');
48
48
  },
49
49
  alertServiceEndpoint() {
50
50
  return this.pullServiceEndpointFromUrl(this.relativeDashboardValues.alertmanagerURL);
package/edit/token.vue CHANGED
@@ -273,6 +273,7 @@ export default {
273
273
  <div class="right">
274
274
  <button
275
275
  type="button"
276
+ data-testid="token_done_create_button"
276
277
  class="btn role-primary"
277
278
  @click="doneCreate"
278
279
  >
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rancher/shell",
3
- "version": "0.3.10",
3
+ "version": "0.3.11",
4
4
  "description": "Rancher Dashboard Shell",
5
5
  "repository": "https://github.com/rancherlabs/dashboard",
6
6
  "license": "Apache-2.0",
@@ -159,6 +159,7 @@ export default {
159
159
  v-if="canChangePassword"
160
160
  type="button"
161
161
  class="btn role-primary"
162
+ data-testid="account_change_password"
162
163
  @click="$refs.promptChangePassword.show(true)"
163
164
  >
164
165
  {{ t("accountAndKeys.account.change") }}
@@ -179,6 +180,7 @@ export default {
179
180
  <button
180
181
  v-if="apiKeySchema"
181
182
  class="btn role-primary add mb-20"
183
+ data-testid="account_create_api_keys"
182
184
  @click="addKey"
183
185
  >
184
186
  {{ t('accountAndKeys.apiKeys.add.label') }}
@@ -193,6 +195,7 @@ export default {
193
195
  :rows="apiKeys"
194
196
  :headers="apiKeyheaders"
195
197
  key-field="id"
198
+ data-testid="api_keys_list"
196
199
  :search="true"
197
200
  :row-actions="true"
198
201
  :table-actions="true"
@@ -43,12 +43,16 @@ const workerQueues = {};
43
43
 
44
44
  const supportedStores = [STORE.CLUSTER, STORE.RANCHER, STORE.MANAGEMENT];
45
45
 
46
- const waitForSettingsSchema = (store) => {
47
- return waitFor(() => !!store.getters['management/byId'](SCHEMA, MANAGEMENT.SETTING));
46
+ const isWaitingForDestroy = (storeName, store) => {
47
+ return store.$workers[storeName]?.waitingForDestroy && store.$workers[storeName].waitingForDestroy();
48
48
  };
49
49
 
50
- const waitForSettings = (store) => {
51
- return waitFor(() => !!store.getters['management/byId'](MANAGEMENT.SETTING, SETTING.UI_PERFORMANCE));
50
+ const waitForSettingsSchema = (storeName, store) => {
51
+ return waitFor(() => isWaitingForDestroy(storeName, store) || !!store.getters['management/byId'](SCHEMA, MANAGEMENT.SETTING));
52
+ };
53
+
54
+ const waitForSettings = (storeName, store) => {
55
+ return waitFor(() => isWaitingForDestroy(storeName, store) || !!store.getters['management/byId'](MANAGEMENT.SETTING, SETTING.UI_PERFORMANCE));
52
56
  };
53
57
 
54
58
  const isAdvancedWorker = (ctx) => {
@@ -80,18 +84,41 @@ export async function createWorker(store, ctx) {
80
84
  // it will simply queue up any messages for the real worker to process when it loads up
81
85
  store.$workers[storeName] = {
82
86
  postMessage: (msg) => {
87
+ if (Object.keys(msg)?.[0] === 'destroyWorker') {
88
+ // The worker has been destroyed before it's been set up. Flag this so we stop waiting for mgmt settings and then can destroy worker.
89
+ // This can occurr when the user is redirected to the log in page
90
+ // - workers created (but waiting)
91
+ // - logout is called
92
+ // - <store>/unsubscribe is dispatched
93
+ // - wait for worker object to be destroyed <-- requires initial wait to be unblocked
94
+ store.$workers[storeName].mode = WORKER_MODES.DESTROY_MOCK;
95
+
96
+ return;
97
+ }
83
98
  if (workerQueues[storeName]) {
84
99
  workerQueues[storeName].push(msg);
85
100
  } else {
86
101
  workerQueues[storeName] = [msg];
87
102
  }
88
103
  },
89
- mode: WORKER_MODES.WAITING
104
+ mode: WORKER_MODES.WAITING,
105
+ waitingForDestroy: () => {
106
+ return store.$workers[storeName]?.mode === WORKER_MODES.DESTROY_MOCK;
107
+ },
108
+ destroy: () => {
109
+ // Similar to workerActions.destroyWorker
110
+ delete store.$workers[storeName];
111
+ }
90
112
  };
91
113
  }
92
114
 
93
- await waitForSettingsSchema(store);
94
- await waitForSettings(store);
115
+ await waitForSettingsSchema(storeName, store);
116
+ await waitForSettings(storeName, store);
117
+ if (store.$workers[storeName].waitingForDestroy()) {
118
+ store.$workers[storeName].destroy();
119
+
120
+ return;
121
+ }
95
122
  const advancedWorker = isAdvancedWorker(ctx);
96
123
 
97
124
  const workerActions = {
@@ -4,9 +4,10 @@ import basicWorkerConstructor from '@shell/plugins/steve/worker/web-worker.basic
4
4
  import advancedWorkerConstructor from '@shell/plugins/steve/worker/web-worker.advanced.js';
5
5
 
6
6
  export const WORKER_MODES = {
7
- WAITING: 'waiting',
8
- BASIC: 'basic',
9
- ADVANCED: 'advanced'
7
+ WAITING: 'waiting',
8
+ DESTROY_MOCK: 'destroy',
9
+ BASIC: 'basic',
10
+ ADVANCED: 'advanced'
10
11
  };
11
12
 
12
13
  export default function storeWorker(mode, options = {}, closures = {}) {