Skip to content

Commit d0a7292

Browse files
committed
rewrite tests to avoid using returnValues which for some reason fails
1 parent bc8352b commit d0a7292

File tree

6 files changed

+215
-127
lines changed

6 files changed

+215
-127
lines changed

tensorboard/webapp/app_routing/location.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ const utils = {
5050
},
5151
getSearch() {
5252
return window.location.search;
53-
}
53+
},
5454
};
5555

5656
@Injectable()

tensorboard/webapp/routes/dashboard_deeplink_provider.ts

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ limitations under the License.
1414
==============================================================================*/
1515
import {Injectable} from '@angular/core';
1616
import {Store} from '@ngrx/store';
17-
import {combineLatest, of, Observable} from 'rxjs';
17+
import {combineLatest, Observable, of} from 'rxjs';
1818
import {map} from 'rxjs/operators';
1919
import {DeepLinkProvider} from '../app_routing/deep_link_provider';
2020
import {SerializableQueryParams} from '../app_routing/types';
@@ -97,12 +97,14 @@ export class DashboardDeepLinkProvider extends DeepLinkProvider {
9797
return [{key: TAG_FILTER_KEY, value: filterText}];
9898
})
9999
),
100-
of(getOverriddenFeatureFlagStates(
101-
FeatureFlagMetadataMap as Record<
102-
string,
103-
FeatureFlagMetadata<FeatureFlagType>
104-
>
105-
)),
100+
of(
101+
getOverriddenFeatureFlagStates(
102+
FeatureFlagMetadataMap as Record<
103+
string,
104+
FeatureFlagMetadata<FeatureFlagType>
105+
>
106+
)
107+
),
106108
store.select(selectors.getMetricsSettingOverrides).pipe(
107109
map((settingOverrides) => {
108110
if (Number.isFinite(settingOverrides.scalarSmoothing)) {

tensorboard/webapp/routes/feature_flag_serializer.ts

Lines changed: 35 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -16,31 +16,48 @@ import {Location} from '../app_routing/location';
1616
import {SerializableQueryParams} from '../app_routing/types';
1717
import {FeatureFlagMetadata} from '../feature_flag/store/feature_flag_metadata';
1818

19+
/**
20+
* Finds all FeatureFlags from the provided FeatureFlagMetadata that are present in the
21+
* query params and returns their overridden values.
22+
* Note: If a flag has multiple values in the query params it will be returned multiple
23+
* times.
24+
*
25+
* i.e. The query params '?experimentalPlugin=0&experimentalPlugin=1&experimentalPlugin=2'
26+
* will result in a return value of
27+
* [
28+
* { key: 'experimentalPlugin', value: '0' },
29+
* { key: 'experimentalPlugin', value: '1' },
30+
* { key: 'experimentalPlugin', value: '2' },
31+
* ]
32+
*/
1933
export function getOverriddenFeatureFlagStates<T>(
20-
featureFlagQueryParameters: Record<string, FeatureFlagMetadata<T>>
34+
featureFlagMetadataMap: Record<string, FeatureFlagMetadata<T>>
2135
): SerializableQueryParams {
22-
const currentQueryParams = Object.fromEntries(
23-
serializableQueryParamsToEntries(new Location().getSearch() || [])
36+
// Converting the array to a map allows for a more efficient filter function below.
37+
const currentQueryParams = (new Location().getSearch() || []).reduce(
38+
(map, {key, value}) => {
39+
if (!map[key]) {
40+
map[key] = [];
41+
}
42+
map[key].push(value);
43+
44+
return map;
45+
},
46+
{} as Record<string, string[]>
2447
);
2548

26-
const currentlyOverriddenQueryParams = Object.values(
27-
featureFlagQueryParameters
28-
)
49+
const currentlyOverriddenQueryParams = Object.values(featureFlagMetadataMap)
2950
.map(({queryParamOverride}: FeatureFlagMetadata<T>) => queryParamOverride)
3051
.filter(
3152
(queryParamOverride) =>
3253
queryParamOverride && queryParamOverride in currentQueryParams
3354
) as string[];
34-
return currentlyOverriddenQueryParams.map((queryParamOverride) => {
35-
return {
36-
key: queryParamOverride,
37-
value: currentQueryParams[queryParamOverride],
38-
};
39-
});
40-
41-
function serializableQueryParamsToEntries(
42-
params: SerializableQueryParams
43-
): [string, string][] {
44-
return params.map(({key, value}) => [key, value]);
45-
}
55+
return currentlyOverriddenQueryParams
56+
.map((queryParamOverride) => {
57+
return currentQueryParams[queryParamOverride].map((value) => ({
58+
key: queryParamOverride,
59+
value,
60+
}));
61+
})
62+
.flat();
4663
}

tensorboard/webapp/routes/feature_flag_serializer_test.ts

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -59,9 +59,7 @@ describe('feature flag serializer', () => {
5959
});
6060

6161
it('persists flag states overridden by query params', async () => {
62-
spyOn(TEST_ONLY.utils, 'getSearch').and.returnValue(
63-
'?darkMode=true'
64-
);
62+
spyOn(TEST_ONLY.utils, 'getSearch').and.returnValue('?darkMode=true');
6563
console.log(location.getSearch());
6664
const queryParams = getOverriddenFeatureFlagStates(
6765
FeatureFlagMetadataMap as Record<

tensorboard/webapp/webapp_data_source/tb_feature_flag_data_source.ts

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -59,20 +59,17 @@ export class QueryParamsFeatureFlagDataSource
5959
if (!queryParamOverride || !params.has(queryParamOverride)) {
6060
return null;
6161
}
62-
const paramValues: T[] = this.queryParams
63-
.getParams()
64-
.getAll(queryParamOverride)
65-
.map((value) => {
66-
if (value === '' && flagMetadata.defaultValue !== undefined) {
67-
return flagMetadata.defaultValue;
68-
}
69-
return flagMetadata.parseValue(value);
70-
});
62+
const paramValues: T[] = params.getAll(queryParamOverride).map((value) => {
63+
if (value === '' && flagMetadata.defaultValue !== undefined) {
64+
return flagMetadata.defaultValue;
65+
}
66+
return flagMetadata.parseValue(value);
67+
});
7168
if (!paramValues.length) {
7269
return null;
7370
}
7471

75-
return flagMetadata.isArray ? paramValues : paramValues[0];
72+
return flagMetadata.isArray ? paramValues.flat() : paramValues[0];
7673
}
7774

7875
protected getPartialFeaturesFromMediaQuery(): {

0 commit comments

Comments
 (0)