Skip to content

Commit faaf997

Browse files
dmitriy-borzenkoDmitriy Borzenko
and
Dmitriy Borzenko
authored
Kamu UI 519 implement new dataset env var api (#520)
* implemented new API * changed unit tests * changed CHANGELOG.md --------- Co-authored-by: Dmitriy Borzenko <[email protected]>
1 parent 15bbde4 commit faaf997

13 files changed

+228
-441
lines changed

CHANGELOG.md

+1
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
1212
- Query explainer: improved `INPUT DATA` section view
1313
- added `Run` and `Copy` buttons for a sql code
1414
- Modified "Scheduled updates" view
15+
- Implemented new API for environment variables
1516
### Fixed
1617
- Flows table: fixed broken filters in pagination
1718

resources/schema.graphql

+19-31
Original file line numberDiff line numberDiff line change
@@ -560,9 +560,8 @@ type DatasetEnvVars {
560560
}
561561

562562
type DatasetEnvVarsMut {
563-
saveEnvVariable(key: String!, value: String!, isSecret: Boolean!): SaveDatasetEnvVarResult!
563+
upsertEnvVariable(key: String!, value: String!, isSecret: Boolean!): UpsertDatasetEnvVarResult!
564564
deleteEnvVariable(id: DatasetEnvVarID!): DeleteDatasetEnvVarResult!
565-
modifyEnvVariable(id: DatasetEnvVarID!, newValue: String!, isSecret: Boolean!): ModifyDatasetEnvVarResult!
566565
}
567566

568567
type DatasetFlowConfigs {
@@ -1454,20 +1453,6 @@ type MetadataManifestUnsupportedVersion implements CommitResult & CreateDatasetF
14541453
message: String!
14551454
}
14561455

1457-
interface ModifyDatasetEnvVarResult {
1458-
message: String!
1459-
}
1460-
1461-
type ModifyDatasetEnvVarResultNotFound implements ModifyDatasetEnvVarResult {
1462-
envVarId: DatasetEnvVarID!
1463-
message: String!
1464-
}
1465-
1466-
type ModifyDatasetEnvVarResultSuccess implements ModifyDatasetEnvVarResult {
1467-
envVarId: DatasetEnvVarID!
1468-
message: String!
1469-
}
1470-
14711456
enum MqttQos {
14721457
AT_MOST_ONCE
14731458
AT_LEAST_ONCE
@@ -1698,21 +1683,6 @@ type RevokeResultSuccess implements RevokeResult {
16981683
message: String!
16991684
}
17001685

1701-
interface SaveDatasetEnvVarResult {
1702-
message: String!
1703-
}
1704-
1705-
type SaveDatasetEnvVarResultDuplicate implements SaveDatasetEnvVarResult {
1706-
datasetEnvVarKey: String!
1707-
datasetName: DatasetName!
1708-
message: String!
1709-
}
1710-
1711-
type SaveDatasetEnvVarResultSuccess implements SaveDatasetEnvVarResult {
1712-
envVar: ViewDatasetEnvVar!
1713-
message: String!
1714-
}
1715-
17161686
input ScheduleInput @oneOf {
17171687
timeDelta: TimeDeltaInput
17181688
"""
@@ -1988,6 +1958,24 @@ interface UpdateReadmeResult {
19881958
message: String!
19891959
}
19901960

1961+
interface UpsertDatasetEnvVarResult {
1962+
message: String!
1963+
}
1964+
1965+
type UpsertDatasetEnvVarResultCreated implements UpsertDatasetEnvVarResult {
1966+
envVar: ViewDatasetEnvVar!
1967+
message: String!
1968+
}
1969+
1970+
type UpsertDatasetEnvVarResultUpdated implements UpsertDatasetEnvVarResult {
1971+
envVar: ViewDatasetEnvVar!
1972+
message: String!
1973+
}
1974+
1975+
type UpsertDatasetEnvVarUpToDate implements UpsertDatasetEnvVarResult {
1976+
message: String!
1977+
}
1978+
19911979
type ViewAccessToken {
19921980
"""
19931981
Unique identifier of the access token

src/app/api/environment-variables.api.spec.ts

+69-45
Original file line numberDiff line numberDiff line change
@@ -10,25 +10,23 @@ import {
1010
ExposedEnvVariableValueQuery,
1111
ListEnvVariablesDocument,
1212
ListEnvVariablesQuery,
13-
ModifyEnvVariableDocument,
14-
ModifyEnvVariableMutation,
15-
SaveEnvVariableDocument,
16-
SaveEnvVariableMutation,
13+
UpsertEnvVariableDocument,
14+
UpsertEnvVariableMutation,
1715
} from "./kamu.graphql.interface";
1816
import { TEST_ACCOUNT_NAME, TEST_DATASET_NAME } from "./mock/dataset.mock";
1917
import {
2018
MOCK_ENV_VAR_ID,
2119
MOCK_IS_SECRET,
2220
MOCK_KEY,
23-
MOCK_NEW_VALUE,
2421
MOCK_PAGE,
2522
MOCK_PER_PAGE,
2623
MOCK_VALUE,
2724
mockDeleteEnvVariableMutation,
2825
mockExposedEnvVariableValueQuery,
2926
mockListEnvVariablesQuery,
30-
mockModifyEnvVariableMutation,
31-
mockSaveEnvVariableMutation,
27+
mockUpsertEnvVariableMutationCreated,
28+
mockUpsertEnvVariableMutationUpdated,
29+
mockUpsertEnvVariableMutationUpToDate,
3230
} from "./mock/environment-variables-and-secrets.mock";
3331
import { TEST_ACCOUNT_ID } from "./mock/auth.mock";
3432

@@ -49,32 +47,87 @@ describe("EnvironmentVariablesApi", () => {
4947
expect(service).toBeTruthy();
5048
});
5149

52-
it("should check save environment variables", () => {
50+
it("should check upsert environment variable with 'Created' message ", () => {
5351
service
54-
.saveEnvironmentVariable({
52+
.upsertEnvironmentVariable({
5553
accountId: TEST_ACCOUNT_ID,
5654
datasetId: TEST_DATASET_ID,
5755
key: MOCK_KEY,
5856
value: MOCK_VALUE,
5957
isSecret: MOCK_IS_SECRET,
6058
})
61-
.subscribe((result: SaveEnvVariableMutation) => {
62-
if (result.datasets.byId?.envVars.saveEnvVariable.__typename === "SaveDatasetEnvVarResultSuccess") {
63-
expect(result.datasets.byId?.envVars.saveEnvVariable.message).toEqual(
64-
mockSaveEnvVariableMutation.datasets.byId?.envVars.saveEnvVariable.message as string,
59+
.subscribe((result: UpsertEnvVariableMutation) => {
60+
if (result.datasets.byId?.envVars.upsertEnvVariable.__typename === "UpsertDatasetEnvVarResultCreated") {
61+
expect(result.datasets.byId?.envVars.upsertEnvVariable.message).toEqual(
62+
mockUpsertEnvVariableMutationCreated.datasets.byId?.envVars.upsertEnvVariable.message as string,
6563
);
6664
}
6765
});
6866

69-
const op = controller.expectOne(SaveEnvVariableDocument);
70-
expect(op.operation.variables.accountId).toEqual(TEST_ACCOUNT_ID);
67+
const op = controller.expectOne(UpsertEnvVariableDocument);
7168
expect(op.operation.variables.datasetId).toEqual(TEST_DATASET_ID);
7269
expect(op.operation.variables.key).toEqual(MOCK_KEY);
7370
expect(op.operation.variables.value).toEqual(MOCK_VALUE);
7471
expect(op.operation.variables.isSecret).toEqual(MOCK_IS_SECRET);
7572

7673
op.flush({
77-
data: mockSaveEnvVariableMutation,
74+
data: mockUpsertEnvVariableMutationCreated,
75+
});
76+
});
77+
78+
it("should check upsert environment variable with 'Updated' message ", () => {
79+
service
80+
.upsertEnvironmentVariable({
81+
accountId: TEST_ACCOUNT_ID,
82+
datasetId: TEST_DATASET_ID,
83+
key: MOCK_KEY,
84+
value: MOCK_VALUE,
85+
isSecret: MOCK_IS_SECRET,
86+
})
87+
.subscribe((result: UpsertEnvVariableMutation) => {
88+
if (result.datasets.byId?.envVars.upsertEnvVariable.__typename === "UpsertDatasetEnvVarResultUpdated") {
89+
expect(result.datasets.byId?.envVars.upsertEnvVariable.message).toEqual(
90+
mockUpsertEnvVariableMutationCreated.datasets.byId?.envVars.upsertEnvVariable.message as string,
91+
);
92+
}
93+
});
94+
95+
const op = controller.expectOne(UpsertEnvVariableDocument);
96+
expect(op.operation.variables.datasetId).toEqual(TEST_DATASET_ID);
97+
expect(op.operation.variables.key).toEqual(MOCK_KEY);
98+
expect(op.operation.variables.value).toEqual(MOCK_VALUE);
99+
expect(op.operation.variables.isSecret).toEqual(MOCK_IS_SECRET);
100+
101+
op.flush({
102+
data: mockUpsertEnvVariableMutationUpdated,
103+
});
104+
});
105+
106+
it("should check upsert environment variable with 'Up to date' message ", () => {
107+
service
108+
.upsertEnvironmentVariable({
109+
accountId: TEST_ACCOUNT_ID,
110+
datasetId: TEST_DATASET_ID,
111+
key: MOCK_KEY,
112+
value: MOCK_VALUE,
113+
isSecret: MOCK_IS_SECRET,
114+
})
115+
.subscribe((result: UpsertEnvVariableMutation) => {
116+
if (result.datasets.byId?.envVars.upsertEnvVariable.__typename === "UpsertDatasetEnvVarResultUpdated") {
117+
expect(result.datasets.byId?.envVars.upsertEnvVariable.message).toEqual(
118+
mockUpsertEnvVariableMutationCreated.datasets.byId?.envVars.upsertEnvVariable.message as string,
119+
);
120+
}
121+
});
122+
123+
const op = controller.expectOne(UpsertEnvVariableDocument);
124+
expect(op.operation.variables.datasetId).toEqual(TEST_DATASET_ID);
125+
expect(op.operation.variables.key).toEqual(MOCK_KEY);
126+
expect(op.operation.variables.value).toEqual(MOCK_VALUE);
127+
expect(op.operation.variables.isSecret).toEqual(MOCK_IS_SECRET);
128+
129+
op.flush({
130+
data: mockUpsertEnvVariableMutationUpToDate,
78131
});
79132
});
80133

@@ -103,35 +156,6 @@ describe("EnvironmentVariablesApi", () => {
103156
});
104157
});
105158

106-
it("should check modify environment variable", () => {
107-
service
108-
.modifyEnvironmentVariable({
109-
accountId: TEST_ACCOUNT_ID,
110-
datasetId: TEST_DATASET_ID,
111-
id: MOCK_ENV_VAR_ID,
112-
newValue: MOCK_NEW_VALUE,
113-
isSecret: MOCK_IS_SECRET,
114-
})
115-
.subscribe((result: ModifyEnvVariableMutation) => {
116-
expect(result.datasets.byId?.envVars.modifyEnvVariable.envVarId).toEqual(
117-
result.datasets.byId?.envVars.modifyEnvVariable.envVarId as string,
118-
);
119-
expect(result.datasets.byId?.envVars.modifyEnvVariable.message).toEqual(
120-
result.datasets.byId?.envVars.modifyEnvVariable.message,
121-
);
122-
});
123-
124-
const op = controller.expectOne(ModifyEnvVariableDocument);
125-
expect(op.operation.variables.datasetId).toEqual(TEST_DATASET_ID);
126-
expect(op.operation.variables.id).toEqual(MOCK_ENV_VAR_ID);
127-
expect(op.operation.variables.newValue).toEqual(MOCK_NEW_VALUE);
128-
expect(op.operation.variables.isSecret).toEqual(MOCK_IS_SECRET);
129-
130-
op.flush({
131-
data: mockModifyEnvVariableMutation,
132-
});
133-
});
134-
135159
it("should check delete environment variable", () => {
136160
service
137161
.deleteEnvironmentVariable({

src/app/api/environment-variables.api.ts

+8-44
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,8 @@ import {
66
ExposedEnvVariableValueQuery,
77
ListEnvVariablesGQL,
88
ListEnvVariablesQuery,
9-
ModifyEnvVariableGQL,
10-
ModifyEnvVariableMutation,
11-
SaveEnvVariableGQL,
12-
SaveEnvVariableMutation,
9+
UpsertEnvVariableGQL,
10+
UpsertEnvVariableMutation,
1311
} from "./kamu.graphql.interface";
1412
import { inject, Injectable } from "@angular/core";
1513
import { noCacheFetchPolicy } from "../common/data.helpers";
@@ -23,8 +21,7 @@ import { updateCacheHelper } from "../apollo-cache.helper";
2321
})
2422
export class EnvironmentVariablesApi {
2523
private listEnvVariablesGQL = inject(ListEnvVariablesGQL);
26-
private saveEnvVariableGQL = inject(SaveEnvVariableGQL);
27-
private modifyEnvVariableGQL = inject(ModifyEnvVariableGQL);
24+
private upsertEnvVariableGQL = inject(UpsertEnvVariableGQL);
2825
private deleteEnvVariableGQL = inject(DeleteEnvVariableGQL);
2926
private exposedEnvVariableValueGQL = inject(ExposedEnvVariableValueGQL);
3027

@@ -42,49 +39,16 @@ export class EnvironmentVariablesApi {
4239
);
4340
}
4441

45-
public saveEnvironmentVariable(params: {
42+
public upsertEnvironmentVariable(params: {
4643
accountId: string;
4744
datasetId: string;
4845
key: string;
4946
value: string;
5047
isSecret: boolean;
51-
}): Observable<SaveEnvVariableMutation> {
52-
return this.saveEnvVariableGQL
48+
}): Observable<UpsertEnvVariableMutation> {
49+
return this.upsertEnvVariableGQL
5350
.mutate(
54-
{ ...params },
55-
{
56-
update: (cache) => {
57-
updateCacheHelper(cache, {
58-
accountId: params.accountId,
59-
datasetId: params.datasetId,
60-
fieldNames: ["envVars"],
61-
});
62-
},
63-
},
64-
)
65-
.pipe(
66-
first(),
67-
map((result: MutationResult<SaveEnvVariableMutation>) => {
68-
/* istanbul ignore else */
69-
if (result.data) {
70-
return result.data;
71-
} else {
72-
throw new DatasetOperationError(result.errors ?? []);
73-
}
74-
}),
75-
);
76-
}
77-
78-
public modifyEnvironmentVariable(params: {
79-
accountId: string;
80-
datasetId: string;
81-
id: string;
82-
newValue: string;
83-
isSecret: boolean;
84-
}): Observable<ModifyEnvVariableMutation> {
85-
return this.modifyEnvVariableGQL
86-
.mutate(
87-
{ ...params },
51+
{ datasetId: params.datasetId, key: params.key, value: params.value, isSecret: params.isSecret },
8852
{
8953
update: (cache) => {
9054
updateCacheHelper(cache, {
@@ -97,7 +61,7 @@ export class EnvironmentVariablesApi {
9761
)
9862
.pipe(
9963
first(),
100-
map((result: MutationResult<ModifyEnvVariableMutation>) => {
64+
map((result: MutationResult<UpsertEnvVariableMutation>) => {
10165
/* istanbul ignore else */
10266
if (result.data) {
10367
return result.data;

src/app/api/gql/environment-variables-and-secrets/modify-env-variable.graphql

-19
This file was deleted.

src/app/api/gql/environment-variables-and-secrets/save-env-variable.graphql

-22
This file was deleted.

0 commit comments

Comments
 (0)