Skip to content

Commit b4af746

Browse files
authored
fix(ui): ApplicationSet detail view for non-default namespace (#27928) (#27931)
Signed-off-by: Asif Draxi <asifdraxi@gmail.com>
1 parent 0c6427e commit b4af746

3 files changed

Lines changed: 40 additions & 7 deletions

File tree

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
import {namespaceQuery, namespaceQueryKey} from './applications-service.namespace';
2+
3+
describe('ApplicationSet namespace query params', () => {
4+
it('uses appNamespace for applications', () => {
5+
expect(namespaceQueryKey('application')).toBe('appNamespace');
6+
expect(namespaceQuery('application', 'team-platform')).toEqual({appNamespace: 'team-platform'});
7+
});
8+
9+
it('uses appsetNamespace for ApplicationSet GET/resource-tree', () => {
10+
expect(namespaceQueryKey('applicationset')).toBe('appsetNamespace');
11+
expect(namespaceQuery('applicationset', 'team-platform')).toEqual({appsetNamespace: 'team-platform'});
12+
});
13+
14+
it('uses appSetNamespace for ApplicationSet watch stream', () => {
15+
expect(namespaceQueryKey('applicationset', true)).toBe('appSetNamespace');
16+
expect(namespaceQuery('applicationset', 'team-platform', true)).toEqual({appSetNamespace: 'team-platform'});
17+
});
18+
19+
it('returns empty object when namespace is empty', () => {
20+
expect(namespaceQuery('applicationset', '')).toEqual({});
21+
});
22+
});
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
/** Application API uses appNamespace; ApplicationSet API uses appsetNamespace (appSetNamespace for watch stream). */
2+
export function namespaceQueryKey(objectListKind: string, forWatch = false): string {
3+
return objectListKind === 'application' ? 'appNamespace' : forWatch ? 'appSetNamespace' : 'appsetNamespace';
4+
}
5+
6+
export function namespaceQuery(objectListKind: string, namespace: string, forWatch = false): {[key: string]: string} {
7+
if (!namespace) {
8+
return {};
9+
}
10+
return {[namespaceQueryKey(objectListKind, forWatch)]: namespace};
11+
}

ui/src/app/shared/services/applications-service.ts

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import * as models from '../models';
66
import {isValidURL} from '../utils';
77
import requests from './requests';
88
import {getRootPathByApp, isApp} from '../../applications/components/utils';
9+
import {namespaceQuery, namespaceQueryKey} from './applications-service.namespace';
910

1011
interface QueryOptions {
1112
fields: string[];
@@ -59,15 +60,12 @@ export class ApplicationsService {
5960
}
6061

6162
public get(name: string, appNamespace: string, objectListKind: string, refresh?: 'normal' | 'hard'): Promise<models.AbstractApplication> {
62-
const query: {[key: string]: string} = {};
63+
const query: {[key: string]: string} = {...namespaceQuery(objectListKind, appNamespace)};
6364
const isApplication = objectListKind === 'application';
6465
const endpoint = isApplication ? '/applications' : '/applicationsets';
6566
if (refresh) {
6667
query.refresh = refresh;
6768
}
68-
if (appNamespace) {
69-
query.appNamespace = appNamespace;
70-
}
7169
return requests
7270
.get(`${endpoint}/${name}`)
7371
.query(query)
@@ -119,7 +117,7 @@ export class ApplicationsService {
119117
const endpoint = isApplication ? '/applications' : '/applicationsets';
120118
return requests
121119
.get(`${endpoint}/${name}/resource-tree`)
122-
.query({appNamespace})
120+
.query(namespaceQuery(objectListKind, appNamespace))
123121
.then(res => res.body as models.AbstractApplicationTree);
124122
}
125123

@@ -247,14 +245,16 @@ export class ApplicationsService {
247245
search.set('resourceVersion', query.resourceVersion);
248246
}
249247
if (query.appNamespace) {
250-
search.set('appNamespace', query.appNamespace);
248+
search.set(namespaceQueryKey(objectListKind, true), query.appNamespace);
251249
}
252250
}
253251
if (options) {
254252
const searchOptions = optionsToSearch(options);
255253
search.set('fields', searchOptions.fields);
256254
search.set('selector', searchOptions.selector);
257-
search.set('appNamespace', searchOptions.appNamespace);
255+
if (searchOptions.appNamespace) {
256+
search.set(namespaceQueryKey(objectListKind, true), searchOptions.appNamespace);
257+
}
258258
if (isApplication) {
259259
query?.projects?.forEach(project => search.append('projects', project));
260260
}

0 commit comments

Comments
 (0)