@azure/app-configuration 1.3.2-alpha.20220401.1 → 1.4.0-alpha.20220407.2
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.
- package/CHANGELOG.md +11 -7
- package/dist/index.js +153 -374
- package/dist/index.js.map +1 -1
- package/dist-esm/src/appConfigCredential.js +24 -30
- package/dist-esm/src/appConfigCredential.js.map +1 -1
- package/dist-esm/src/appConfigurationClient.js +48 -63
- package/dist-esm/src/appConfigurationClient.js.map +1 -1
- package/dist-esm/src/generated/src/appConfiguration.js +47 -89
- package/dist-esm/src/generated/src/appConfiguration.js.map +1 -1
- package/dist-esm/src/generated/src/index.js +0 -1
- package/dist-esm/src/generated/src/index.js.map +1 -1
- package/dist-esm/src/generated/src/models/index.js +78 -1
- package/dist-esm/src/generated/src/models/index.js.map +1 -1
- package/dist-esm/src/generated/src/models/mappers.js.map +1 -1
- package/dist-esm/src/generated/src/models/parameters.js +7 -8
- package/dist-esm/src/generated/src/models/parameters.js.map +1 -1
- package/dist-esm/src/internal/helpers.js +33 -18
- package/dist-esm/src/internal/helpers.js.map +1 -1
- package/dist-esm/src/internal/synctokenpolicy.js +9 -18
- package/dist-esm/src/internal/synctokenpolicy.js.map +1 -1
- package/dist-esm/src/internal/tracingHelpers.js +1 -1
- package/dist-esm/src/internal/tracingHelpers.js.map +1 -1
- package/dist-esm/src/models.js.map +1 -1
- package/dist-esm/test/internal/helpers.spec.js +3 -12
- package/dist-esm/test/internal/helpers.spec.js.map +1 -1
- package/dist-esm/test/internal/http.spec.js +2 -14
- package/dist-esm/test/internal/http.spec.js.map +1 -1
- package/dist-esm/test/internal/node/throttlingRetryPolicy.spec.js +6 -5
- package/dist-esm/test/internal/node/throttlingRetryPolicy.spec.js.map +1 -1
- package/dist-esm/test/internal/tracingHelpers.spec.js.map +1 -1
- package/dist-esm/test/public/auth.spec.js +1 -1
- package/dist-esm/test/public/auth.spec.js.map +1 -1
- package/dist-esm/test/public/etags.spec.js +1 -2
- package/dist-esm/test/public/etags.spec.js.map +1 -1
- package/dist-esm/test/public/index.readonlytests.spec.js +6 -1
- package/dist-esm/test/public/index.readonlytests.spec.js.map +1 -1
- package/dist-esm/test/public/index.spec.js +23 -8
- package/dist-esm/test/public/index.spec.js.map +1 -1
- package/dist-esm/test/public/secretReference.spec.js.map +1 -1
- package/dist-esm/test/public/throwOrNotThrow.spec.js +1 -1
- package/dist-esm/test/public/throwOrNotThrow.spec.js.map +1 -1
- package/dist-esm/test/public/utils/testHelpers.js.map +1 -1
- package/package.json +10 -2
- package/types/app-configuration.d.ts +5 -13
- package/dist-esm/src/generated/src/appConfigurationContext.js +0 -46
- package/dist-esm/src/generated/src/appConfigurationContext.js.map +0 -1
- package/dist-esm/src/policies/throttlingRetryPolicy.js +0 -126
- package/dist-esm/src/policies/throttlingRetryPolicy.js.map +0 -1
- package/dist-esm/test/internal/throttlingRetryPolicyTests.spec.js +0 -145
- package/dist-esm/test/internal/throttlingRetryPolicyTests.spec.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"etags.spec.js","sourceRoot":"","sources":["../../../test/public/etags.spec.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport { AppConfigurationClient } from \"../../src\";\nimport {\n startRecorder,\n createAppConfigurationClientForTests,\n deleteKeyCompletely,\n assertThrowsRestError,\n} from \"./utils/testHelpers\";\nimport { assert } from \"chai\";\nimport { Recorder } from \"@azure-tools/test-recorder\";\nimport { Context } from \"mocha\";\n\ndescribe(\"etags\", () => {\n let client: AppConfigurationClient;\n let recorder: Recorder;\n let key: string;\n\n beforeEach(async function (this: Context) {\n recorder = startRecorder(this);\n key = recorder.getUniqueName(\"etags\");\n client = createAppConfigurationClientForTests() || this.skip();\n await client.addConfigurationSetting({\n key: key,\n value: \"some value\",\n });\n });\n\n afterEach(async function () {\n await deleteKeyCompletely([key], client);\n await recorder.stop();\n });\n\n // etag usage is 'opt-in' via the onlyIfChanged/onlyIfUnchanged options for certain calls\n // by default no etags are used.\n it(\"Get and set by default doesn't use etags\", async () => {\n const addedSetting = await client.getConfigurationSetting({ key });\n\n // by default - ignores the etag in 'addedSetting.etag' so last one in\n // wins\n addedSetting.value = \"some new value!\";\n await client.setConfigurationSetting(addedSetting);\n });\n\n it(\"Get and set, enabling etag checking using onlyIfUnchanged\", async () => {\n const addedSetting = await client.getConfigurationSetting({ key });\n\n addedSetting.value = \"some new value!\";\n\n // etag of the remote setting matches what we have so we're okay to update\n const newlyUpdatedSetting = await client.setConfigurationSetting(addedSetting, {\n onlyIfUnchanged: true,\n });\n assert.equal(newlyUpdatedSetting.value, addedSetting.value);\n\n const badEtagSetting = {\n ...addedSetting,\n etag: \"bogus\",\n };\n\n // trying to save with a non-matching etag (when we specifically said to only save if\n // nothing has changed) will result in a 412 (precondition failed)\n await assertThrowsRestError(\n () => client.setConfigurationSetting(badEtagSetting, { onlyIfUnchanged: true }),\n 412\n );\n });\n\n it(\"set with an old etag will throw RestError\", async () => {\n const addedSetting = await client.getConfigurationSetting({ key });\n\n addedSetting.value = \"some new value!\";\n\n // sneaky process B comes in and does an update (ie, does NOT\n // enable the etag)\n await client.setConfigurationSetting({\n ...addedSetting,\n value: \"sneaky user updated the field\",\n });\n\n // the value (and thus the etag) was changed behind our backs\n // so now this update (with the original etag) will throw.\n await assertThrowsRestError(\n () =>\n client.setConfigurationSetting(addedSetting, {\n onlyIfUnchanged: true,\n }),\n 412,\n \"Old etag will result in a failed update and error\"\n );\n });\n\n it(\"get using ifNoneMatch to only get the setting if it's changed (ie: safe GET)\", async () => {\n const originalSetting = await client.setConfigurationSetting({\n key: key,\n value: \"world\",\n });\n\n // only get the setting if it changed (it hasn't)\n const response = await client.getConfigurationSetting(originalSetting, {\n onlyIfChanged: true,\n });\n\n // to keep 'key' a required field we fill this out (but set all the other properties to undefined)\n assert.equal(response.key, key);\n assert.equal(response._response.status, 304);\n assert.equal(response.statusCode, 304);\n\n assert.ok(!response.contentType);\n assert.ok(!response.etag);\n assert.ok(!response.label);\n assert.ok(!response.lastModified);\n assert.ok(!response.isReadOnly);\n assert.ok(!response.tags);\n assert.ok(!response.value);\n\n // let's update it and then try again\n await client.setConfigurationSetting({ key: key, value: \"new world\" });\n\n const updatedSetting = await client.getConfigurationSetting({ key });\n\n assert.notEqual(\n originalSetting.etag,\n updatedSetting.etag,\n \"New content, new update, etags shouldn't match\"\n );\n\n assert.equal(200, updatedSetting.statusCode);\n\n // only get the setting if it changed (it has!)\n const configurationSetting = await client.getConfigurationSetting(originalSetting, {\n onlyIfChanged: true,\n });\n\n // now our retrieved setting matches what's on the server\n assert.equal(\"new world\", configurationSetting.value);\n assert.equal(updatedSetting.etag, configurationSetting.etag);\n });\n\n it(\"(set|clear)readonly using etags\", async () => {\n const addedSetting = await client.getConfigurationSetting({ key });\n\n const badEtagSetting = {\n ...addedSetting,\n etag: \"bogus\",\n };\n\n // etag won't match so we get a precondition failed\n await assertThrowsRestError(\n () =>\n client.setReadOnly(badEtagSetting, true, {\n onlyIfUnchanged: true,\n }),\n 412\n );\n\n let actualSetting = await client.getConfigurationSetting(badEtagSetting);\n // should not be read-only since it didn't match\n assert.ok(!actualSetting.isReadOnly);\n\n // and now that the etag matches we should be able to set the\n // key's value to read-onlly\n await client.setReadOnly(addedSetting, true, { onlyIfUnchanged: true });\n actualSetting = await client.getConfigurationSetting(addedSetting);\n assert.ok(actualSetting.isReadOnly);\n\n // now let's try to clear it (using a bogus etag so it won't match)\n await assertThrowsRestError(\n () =>\n client.setReadOnly(badEtagSetting, false, {\n onlyIfUnchanged: true,\n }),\n 412\n );\n\n // ...still readOnly\n actualSetting = await client.getConfigurationSetting(addedSetting);\n assert.ok(actualSetting.isReadOnly);\n\n // now we'll use the right etag (from the setting we just retrieved)\n await client.setReadOnly(actualSetting, false, {\n onlyIfUnchanged: true,\n });\n\n // and now it's no longer readOnly\n actualSetting = await client.getConfigurationSetting(addedSetting);\n assert.ok(!actualSetting.isReadOnly);\n });\n\n it(\"delete using etags\", async () => {\n const addedSetting = await client.getConfigurationSetting({ key });\n\n const badEtagSetting = {\n ...addedSetting,\n etag: \"bogus\",\n };\n\n await assertThrowsRestError(\n () => client.deleteConfigurationSetting(badEtagSetting, { onlyIfUnchanged: true }),\n 412\n );\n\n // obviously the setting is still there (or else this would throw)\n await client.getConfigurationSetting({ key });\n\n // this time we'll pass in the proper setting with the right etag\n await client.deleteConfigurationSetting(addedSetting, { onlyIfUnchanged: true });\n\n // and now the setting isn't found\n await assertThrowsRestError(() => client.getConfigurationSetting({ key }), 404);\n });\n});\n"]}
|
|
1
|
+
{"version":3,"file":"etags.spec.js","sourceRoot":"","sources":["../../../test/public/etags.spec.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport { AppConfigurationClient } from \"../../src\";\nimport {\n assertThrowsRestError,\n createAppConfigurationClientForTests,\n deleteKeyCompletely,\n startRecorder,\n} from \"./utils/testHelpers\";\nimport { assert } from \"chai\";\nimport { Recorder } from \"@azure-tools/test-recorder\";\nimport { Context } from \"mocha\";\n\ndescribe(\"etags\", () => {\n let client: AppConfigurationClient;\n let recorder: Recorder;\n let key: string;\n\n beforeEach(async function (this: Context) {\n recorder = startRecorder(this);\n key = recorder.getUniqueName(\"etags\");\n client = createAppConfigurationClientForTests() || this.skip();\n await client.addConfigurationSetting({\n key: key,\n value: \"some value\",\n });\n });\n\n afterEach(async function () {\n await deleteKeyCompletely([key], client);\n await recorder.stop();\n });\n\n // etag usage is 'opt-in' via the onlyIfChanged/onlyIfUnchanged options for certain calls\n // by default no etags are used.\n it(\"Get and set by default doesn't use etags\", async () => {\n const addedSetting = await client.getConfigurationSetting({ key });\n\n // by default - ignores the etag in 'addedSetting.etag' so last one in\n // wins\n addedSetting.value = \"some new value!\";\n await client.setConfigurationSetting(addedSetting);\n });\n\n it(\"Get and set, enabling etag checking using onlyIfUnchanged\", async () => {\n const addedSetting = await client.getConfigurationSetting({ key });\n\n addedSetting.value = \"some new value!\";\n\n // etag of the remote setting matches what we have so we're okay to update\n const newlyUpdatedSetting = await client.setConfigurationSetting(addedSetting, {\n onlyIfUnchanged: true,\n });\n assert.equal(newlyUpdatedSetting.value, addedSetting.value);\n\n const badEtagSetting = {\n ...addedSetting,\n etag: \"bogus\",\n };\n\n // trying to save with a non-matching etag (when we specifically said to only save if\n // nothing has changed) will result in a 412 (precondition failed)\n await assertThrowsRestError(\n () => client.setConfigurationSetting(badEtagSetting, { onlyIfUnchanged: true }),\n 412\n );\n });\n\n it(\"set with an old etag will throw RestError\", async () => {\n const addedSetting = await client.getConfigurationSetting({ key });\n\n addedSetting.value = \"some new value!\";\n\n // sneaky process B comes in and does an update (ie, does NOT\n // enable the etag)\n await client.setConfigurationSetting({\n ...addedSetting,\n value: \"sneaky user updated the field\",\n });\n\n // the value (and thus the etag) was changed behind our backs\n // so now this update (with the original etag) will throw.\n await assertThrowsRestError(\n () =>\n client.setConfigurationSetting(addedSetting, {\n onlyIfUnchanged: true,\n }),\n 412,\n \"Old etag will result in a failed update and error\"\n );\n });\n\n it(\"get using ifNoneMatch to only get the setting if it's changed (ie: safe GET)\", async () => {\n const originalSetting = await client.setConfigurationSetting({\n key: key,\n value: \"world\",\n });\n\n // only get the setting if it changed (it hasn't)\n const response = await client.getConfigurationSetting(originalSetting, {\n onlyIfChanged: true,\n });\n\n // to keep 'key' a required field we fill this out (but set all the other properties to undefined)\n assert.equal(response.key, key);\n assert.equal(response.statusCode, 304);\n\n assert.ok(!response.contentType);\n assert.ok(!response.etag);\n assert.ok(!response.label);\n assert.ok(!response.lastModified);\n assert.ok(!response.isReadOnly);\n assert.ok(!response.tags);\n assert.ok(!response.value);\n\n // let's update it and then try again\n await client.setConfigurationSetting({ key: key, value: \"new world\" });\n\n const updatedSetting = await client.getConfigurationSetting({ key });\n\n assert.notEqual(\n originalSetting.etag,\n updatedSetting.etag,\n \"New content, new update, etags shouldn't match\"\n );\n\n assert.equal(200, updatedSetting.statusCode);\n\n // only get the setting if it changed (it has!)\n const configurationSetting = await client.getConfigurationSetting(originalSetting, {\n onlyIfChanged: true,\n });\n\n // now our retrieved setting matches what's on the server\n assert.equal(\"new world\", configurationSetting.value);\n assert.equal(updatedSetting.etag, configurationSetting.etag);\n });\n\n it(\"(set|clear)readonly using etags\", async () => {\n const addedSetting = await client.getConfigurationSetting({ key });\n\n const badEtagSetting = {\n ...addedSetting,\n etag: \"bogus\",\n };\n\n // etag won't match so we get a precondition failed\n await assertThrowsRestError(\n () =>\n client.setReadOnly(badEtagSetting, true, {\n onlyIfUnchanged: true,\n }),\n 412\n );\n\n let actualSetting = await client.getConfigurationSetting(badEtagSetting);\n // should not be read-only since it didn't match\n assert.ok(!actualSetting.isReadOnly);\n\n // and now that the etag matches we should be able to set the\n // key's value to read-onlly\n await client.setReadOnly(addedSetting, true, { onlyIfUnchanged: true });\n actualSetting = await client.getConfigurationSetting(addedSetting);\n assert.ok(actualSetting.isReadOnly);\n\n // now let's try to clear it (using a bogus etag so it won't match)\n await assertThrowsRestError(\n () =>\n client.setReadOnly(badEtagSetting, false, {\n onlyIfUnchanged: true,\n }),\n 412\n );\n\n // ...still readOnly\n actualSetting = await client.getConfigurationSetting(addedSetting);\n assert.ok(actualSetting.isReadOnly);\n\n // now we'll use the right etag (from the setting we just retrieved)\n await client.setReadOnly(actualSetting, false, {\n onlyIfUnchanged: true,\n });\n\n // and now it's no longer readOnly\n actualSetting = await client.getConfigurationSetting(addedSetting);\n assert.ok(!actualSetting.isReadOnly);\n });\n\n it(\"delete using etags\", async () => {\n const addedSetting = await client.getConfigurationSetting({ key });\n\n const badEtagSetting = {\n ...addedSetting,\n etag: \"bogus\",\n };\n\n await assertThrowsRestError(\n () => client.deleteConfigurationSetting(badEtagSetting, { onlyIfUnchanged: true }),\n 412\n );\n\n // obviously the setting is still there (or else this would throw)\n await client.getConfigurationSetting({ key });\n\n // this time we'll pass in the proper setting with the right etag\n await client.deleteConfigurationSetting(addedSetting, { onlyIfUnchanged: true });\n\n // and now the setting isn't found\n await assertThrowsRestError(() => client.getConfigurationSetting({ key }), 404);\n });\n});\n"]}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
// Copyright (c) Microsoft Corporation.
|
|
2
2
|
// Licensed under the MIT license.
|
|
3
|
-
import {
|
|
3
|
+
import { assertThrowsAbortError, assertThrowsRestError, createAppConfigurationClientForTests, deleteKeyCompletely, startRecorder, } from "./utils/testHelpers";
|
|
4
4
|
import { assert } from "chai";
|
|
5
|
+
import { isPlaybackMode } from "@azure-tools/test-recorder";
|
|
5
6
|
describe("AppConfigurationClient (set|clear)ReadOnly", () => {
|
|
6
7
|
let client;
|
|
7
8
|
let recorder;
|
|
@@ -41,6 +42,10 @@ describe("AppConfigurationClient (set|clear)ReadOnly", () => {
|
|
|
41
42
|
}), 409, "Delete should fail because the setting is read-only");
|
|
42
43
|
});
|
|
43
44
|
it("accepts operation options", async function () {
|
|
45
|
+
// Recorder checks for the recording and complains before core-rest-pipeline could throw the AbortError (Recorder v2 should help here)
|
|
46
|
+
// eslint-disable-next-line @typescript-eslint/no-invalid-this
|
|
47
|
+
if (isPlaybackMode())
|
|
48
|
+
this.skip();
|
|
44
49
|
await client.getConfigurationSetting({
|
|
45
50
|
key: testConfigSetting.key,
|
|
46
51
|
label: testConfigSetting.label,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.readonlytests.spec.js","sourceRoot":"","sources":["../../../test/public/index.readonlytests.spec.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,OAAO,EACL,
|
|
1
|
+
{"version":3,"file":"index.readonlytests.spec.js","sourceRoot":"","sources":["../../../test/public/index.readonlytests.spec.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport {\n assertThrowsAbortError,\n assertThrowsRestError,\n createAppConfigurationClientForTests,\n deleteKeyCompletely,\n startRecorder,\n} from \"./utils/testHelpers\";\nimport { AppConfigurationClient } from \"../../src\";\nimport { assert } from \"chai\";\nimport { Recorder, isPlaybackMode } from \"@azure-tools/test-recorder\";\nimport { Context } from \"mocha\";\n\ndescribe(\"AppConfigurationClient (set|clear)ReadOnly\", () => {\n let client: AppConfigurationClient;\n let recorder: Recorder;\n const testConfigSetting = {\n key: \"\",\n value: \"world\",\n label: \"some label\",\n };\n\n beforeEach(async function (this: Context) {\n recorder = startRecorder(this);\n testConfigSetting.key = recorder.getUniqueName(\"readOnlyTests\");\n client = createAppConfigurationClientForTests() || this.skip();\n // before it's set to read only we can set it all we want\n await client.setConfigurationSetting(testConfigSetting);\n });\n\n afterEach(async function () {\n await deleteKeyCompletely([testConfigSetting.key], client);\n await recorder.stop();\n });\n\n it(\"basic\", async function () {\n let storedSetting = await client.getConfigurationSetting({\n key: testConfigSetting.key,\n label: testConfigSetting.label,\n });\n assert.ok(!storedSetting.isReadOnly);\n\n await client.setReadOnly(testConfigSetting, true);\n\n storedSetting = await client.getConfigurationSetting({\n key: testConfigSetting.key,\n label: testConfigSetting.label,\n });\n assert.ok(storedSetting.isReadOnly);\n\n // any modification related methods throw exceptions\n await assertThrowsRestError(\n () => client.setConfigurationSetting(testConfigSetting),\n 409,\n \"Set should fail because the setting is read-only\"\n );\n await assertThrowsRestError(\n () =>\n client.deleteConfigurationSetting({\n key: testConfigSetting.key,\n label: testConfigSetting.label,\n }),\n 409,\n \"Delete should fail because the setting is read-only\"\n );\n });\n\n it(\"accepts operation options\", async function () {\n // Recorder checks for the recording and complains before core-rest-pipeline could throw the AbortError (Recorder v2 should help here)\n // eslint-disable-next-line @typescript-eslint/no-invalid-this\n if (isPlaybackMode()) this.skip();\n await client.getConfigurationSetting({\n key: testConfigSetting.key,\n label: testConfigSetting.label,\n });\n\n await assertThrowsAbortError(async () => {\n await client.setReadOnly(testConfigSetting, true, { requestOptions: { timeout: 1 } });\n });\n await assertThrowsAbortError(async () => {\n await client.setReadOnly(testConfigSetting, false, { requestOptions: { timeout: 1 } });\n });\n });\n});\n"]}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
// Copyright (c) Microsoft Corporation.
|
|
2
2
|
// Licensed under the MIT license.
|
|
3
3
|
import { assert } from "chai";
|
|
4
|
-
import {
|
|
5
|
-
import { delay, isLiveMode } from "@azure-tools/test-recorder";
|
|
4
|
+
import { assertEqualSettings, assertThrowsAbortError, assertThrowsRestError, createAppConfigurationClientForTests, deleteKeyCompletely, startRecorder, toSortedArray, } from "./utils/testHelpers";
|
|
5
|
+
import { delay, isLiveMode, isPlaybackMode } from "@azure-tools/test-recorder";
|
|
6
6
|
describe("AppConfigurationClient", () => {
|
|
7
7
|
let client;
|
|
8
8
|
let recorder;
|
|
@@ -112,7 +112,7 @@ describe("AppConfigurationClient", () => {
|
|
|
112
112
|
assert.equal(result.value, value, "Unexpected value in result from addConfigurationSetting().");
|
|
113
113
|
// delete configuration
|
|
114
114
|
const deletedSetting = await client.deleteConfigurationSetting(result);
|
|
115
|
-
assert.equal(200, deletedSetting.
|
|
115
|
+
assert.equal(200, deletedSetting.statusCode);
|
|
116
116
|
// confirm setting no longer exists
|
|
117
117
|
try {
|
|
118
118
|
await client.getConfigurationSetting({ key, label });
|
|
@@ -154,7 +154,6 @@ describe("AppConfigurationClient", () => {
|
|
|
154
154
|
// delete actually happened (status code: 200) or if the setting wasn't
|
|
155
155
|
// found which results in the same state but might matter to
|
|
156
156
|
// the user(status code: 204)
|
|
157
|
-
assert.equal(response._response.status, response.statusCode);
|
|
158
157
|
assert.equal(204, response.statusCode);
|
|
159
158
|
});
|
|
160
159
|
it("throws when deleting a configuration setting (invalid etag)", async () => {
|
|
@@ -170,7 +169,11 @@ describe("AppConfigurationClient", () => {
|
|
|
170
169
|
await assertThrowsRestError(() => client.deleteConfigurationSetting({ key, label, etag: "invalid" }, { onlyIfUnchanged: true }), 412);
|
|
171
170
|
await client.deleteConfigurationSetting({ key, label });
|
|
172
171
|
});
|
|
173
|
-
it("accepts operation options", async ()
|
|
172
|
+
it("accepts operation options", async function () {
|
|
173
|
+
// Recorder checks for the recording and complains before core-rest-pipeline could throw the AbortError (Recorder v2 should help here)
|
|
174
|
+
// eslint-disable-next-line @typescript-eslint/no-invalid-this
|
|
175
|
+
if (isPlaybackMode())
|
|
176
|
+
this.skip();
|
|
174
177
|
const key = recorder.getUniqueName("deleteConfigTest");
|
|
175
178
|
const label = "MyLabel";
|
|
176
179
|
const value = "MyValue";
|
|
@@ -226,7 +229,11 @@ describe("AppConfigurationClient", () => {
|
|
|
226
229
|
assert.notEqual(err.message, "Test failure");
|
|
227
230
|
}
|
|
228
231
|
});
|
|
229
|
-
it("accepts operation options", async ()
|
|
232
|
+
it("accepts operation options", async function () {
|
|
233
|
+
// Recorder checks for the recording and complains before core-rest-pipeline could throw the AbortError (Recorder v2 should help here)
|
|
234
|
+
// eslint-disable-next-line @typescript-eslint/no-invalid-this
|
|
235
|
+
if (isPlaybackMode())
|
|
236
|
+
this.skip();
|
|
230
237
|
const key = recorder.getUniqueName("getConfigTest");
|
|
231
238
|
const label = "test";
|
|
232
239
|
const value = "foo";
|
|
@@ -524,7 +531,11 @@ describe("AppConfigurationClient", () => {
|
|
|
524
531
|
await client.deleteConfigurationSetting({ key, label: i.toString() });
|
|
525
532
|
}
|
|
526
533
|
});
|
|
527
|
-
it("accepts operation options", async ()
|
|
534
|
+
it("accepts operation options", async function () {
|
|
535
|
+
// Recorder checks for the recording and complains before core-rest-pipeline could throw the AbortError (Recorder v2 should help here)
|
|
536
|
+
// eslint-disable-next-line @typescript-eslint/no-invalid-this
|
|
537
|
+
if (isPlaybackMode())
|
|
538
|
+
this.skip();
|
|
528
539
|
await assertThrowsAbortError(async () => {
|
|
529
540
|
const settingsIterator = client.listConfigurationSettings({
|
|
530
541
|
requestOptions: { timeout: 1 },
|
|
@@ -593,7 +604,11 @@ describe("AppConfigurationClient", () => {
|
|
|
593
604
|
{ key, label: labelB, value: "fooB2", isReadOnly: false },
|
|
594
605
|
], revisions);
|
|
595
606
|
});
|
|
596
|
-
it("accepts operation options", async ()
|
|
607
|
+
it("accepts operation options", async function () {
|
|
608
|
+
// Recorder checks for the recording and complains before core-rest-pipeline could throw the AbortError (Recorder v2 should help here)
|
|
609
|
+
// eslint-disable-next-line @typescript-eslint/no-invalid-this
|
|
610
|
+
if (isPlaybackMode())
|
|
611
|
+
this.skip();
|
|
597
612
|
await assertThrowsAbortError(async () => {
|
|
598
613
|
const iter = client.listRevisions({ labelFilter: labelA, requestOptions: { timeout: 1 } });
|
|
599
614
|
await iter.next();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.spec.js","sourceRoot":"","sources":["../../../test/public/index.spec.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport { assert } from \"chai\";\nimport {\n createAppConfigurationClientForTests,\n deleteKeyCompletely,\n toSortedArray,\n assertEqualSettings,\n assertThrowsRestError,\n assertThrowsAbortError,\n startRecorder,\n} from \"./utils/testHelpers\";\nimport { AppConfigurationClient, ConfigurationSetting, ConfigurationSettingParam } from \"../../src\";\nimport { Recorder, delay, isLiveMode } from \"@azure-tools/test-recorder\";\nimport { Context } from \"mocha\";\n\ndescribe(\"AppConfigurationClient\", () => {\n let client: AppConfigurationClient;\n let recorder: Recorder;\n\n beforeEach(function (this: Context) {\n recorder = startRecorder(this);\n client = createAppConfigurationClientForTests() || this.skip();\n });\n\n afterEach(async function (this: Context) {\n await recorder.stop();\n });\n\n describe(\"simple usages\", () => {\n it(\"Add and query a setting without a label\", async () => {\n const key = recorder.getUniqueName(\"noLabelTests\");\n\n await client.addConfigurationSetting({ key, value: \"added\" });\n\n await compare({\n key,\n value: \"added\",\n label: undefined,\n });\n\n await client.deleteConfigurationSetting({ key });\n\n // will recreate the setting\n await client.setConfigurationSetting({ key, value: \"set\" });\n\n await compare({\n key,\n value: \"set\",\n label: undefined,\n });\n\n // and now acts as a wholesale update\n await client.setConfigurationSetting({ key, value: \"set a second time\" });\n\n await compare({\n key,\n value: \"set a second time\",\n label: undefined,\n });\n\n await client.deleteConfigurationSetting({ key });\n });\n\n async function compare(expected: {\n key: string;\n value: string;\n label?: string;\n }): Promise<void> {\n const actualSettings = await client.getConfigurationSetting(expected);\n\n assert.equal(expected.key, actualSettings.key);\n assert.equal(expected.value, actualSettings.value);\n assert.equal(expected.label, actualSettings.label);\n }\n });\n\n describe(\"addConfigurationSetting\", () => {\n it(\"sample works\", async () => {\n const key = recorder.getUniqueName(\"addConfigSample\");\n const result = await client.setConfigurationSetting({\n key,\n value: \"MyValue\",\n });\n\n assert.equal(key, result.key);\n });\n\n it(\"adds a configuration setting\", async () => {\n const key = recorder.getUniqueName(\"addConfigTest\");\n const label = \"MyLabel\";\n const value = \"MyValue\";\n const result = await client.addConfigurationSetting({ key, label, value });\n\n assert.equal(result.key, key, \"Unexpected key in result from addConfigurationSetting().\");\n assert.equal(\n result.label,\n label,\n \"Unexpected label in result from addConfigurationSetting().\"\n );\n assert.equal(\n result.value,\n value,\n \"Unexpected value in result from addConfigurationSetting().\"\n );\n\n // just a sanity check - the 'eTag' field that gets added by the response headers\n // is removed (and is replaced by the 'etag' field in the model)\n assert.ok(!(result as any).eTag);\n assert.ok(result.etag);\n\n await client.deleteConfigurationSetting({ key, label });\n });\n\n it(\"throws an error if the configuration setting already exists\", async () => {\n const key = recorder.getUniqueName(\"addConfigTestTwice\");\n const label = \"test\";\n const value = \"foo\";\n const result = await client.addConfigurationSetting({ key, label, value });\n\n assert.equal(result.key, key, \"Unexpected key in result from addConfigurationSetting().\");\n assert.equal(\n result.label,\n label,\n \"Unexpected label in result from addConfigurationSetting().\"\n );\n assert.equal(\n result.value,\n value,\n \"Unexpected value in result from addConfigurationSetting().\"\n );\n\n // attempt to add the same setting\n try {\n await client.addConfigurationSetting({ key, label, value });\n throw new Error(\"Test failure\");\n } catch (err) {\n assert.notEqual(err.message, \"Test failure\");\n }\n\n await client.deleteConfigurationSetting({ key, label });\n });\n\n it(\"accepts operation options\", async () => {\n const key = recorder.getUniqueName(\"addConfigTestTwice\");\n const label = \"test\";\n const value = \"foo\";\n await assertThrowsAbortError(async () => {\n await client.addConfigurationSetting(\n { key, label, value },\n {\n requestOptions: {\n timeout: 1,\n },\n }\n );\n });\n });\n });\n\n describe(\"deleteConfigurationSetting\", () => {\n it(\"deletes an existing configuration setting\", async () => {\n const key = recorder.getUniqueName(\"deleteConfigTest\");\n const label = \"MyLabel\";\n const value = \"MyValue\";\n\n // create configuration\n const result = await client.addConfigurationSetting({ key, label, value });\n\n assert.equal(result.key, key, \"Unexpected key in result from addConfigurationSetting().\");\n assert.equal(\n result.label,\n label,\n \"Unexpected label in result from addConfigurationSetting().\"\n );\n assert.equal(\n result.value,\n value,\n \"Unexpected value in result from addConfigurationSetting().\"\n );\n\n // delete configuration\n const deletedSetting = await client.deleteConfigurationSetting(result);\n assert.equal(200, deletedSetting._response.status);\n\n // confirm setting no longer exists\n try {\n await client.getConfigurationSetting({ key, label });\n throw new Error(\"Test failure\");\n } catch (err) {\n assert.notEqual(err.message, \"Test failure\");\n }\n });\n\n it(\"deletes an existing configuration setting (valid etag)\", async () => {\n const key = recorder.getUniqueName(\"deleteConfigTestEtag\");\n const label = \"test\";\n const value = \"foo\";\n\n // create configuration\n const result = await client.addConfigurationSetting({ key, label, value });\n\n assert.equal(result.key, key, \"Unexpected key in result from addConfigurationSetting().\");\n assert.equal(\n result.label,\n label,\n \"Unexpected label in result from addConfigurationSetting().\"\n );\n assert.equal(\n result.value,\n value,\n \"Unexpected value in result from addConfigurationSetting().\"\n );\n\n // delete configuration\n await client.deleteConfigurationSetting(\n {\n key,\n label,\n },\n { onlyIfUnchanged: true }\n );\n\n // confirm setting no longer exists\n try {\n await client.getConfigurationSetting({ key, label });\n throw new Error(\"Test failure\");\n } catch (err) {\n assert.notEqual(err.message, \"Test failure\");\n }\n });\n\n it(\"does not throw when deleting a non-existent configuration setting\", async () => {\n const key = recorder.getUniqueName(\"deleteConfigTestNA\");\n const label = \"test\";\n\n // delete configuration\n const response = await client.deleteConfigurationSetting({ key, label });\n\n // we hoist this code up to the top in case users want to check if the\n // delete actually happened (status code: 200) or if the setting wasn't\n // found which results in the same state but might matter to\n // the user(status code: 204)\n assert.equal(response._response.status, response.statusCode);\n assert.equal(204, response.statusCode);\n });\n\n it(\"throws when deleting a configuration setting (invalid etag)\", async () => {\n const key = recorder.getUniqueName(\"deleteConfigTestBadEtag\");\n const label = \"test\";\n const value = \"foo\";\n\n // create configuration\n const result = await client.addConfigurationSetting({ key, label, value });\n\n assert.equal(result.key, key, \"Unexpected key in result from addConfigurationSetting().\");\n assert.equal(\n result.label,\n label,\n \"Unexpected label in result from addConfigurationSetting().\"\n );\n assert.equal(\n result.value,\n value,\n \"Unexpected value in result from addConfigurationSetting().\"\n );\n\n // delete configuration\n await assertThrowsRestError(\n () =>\n client.deleteConfigurationSetting(\n { key, label, etag: \"invalid\" },\n { onlyIfUnchanged: true }\n ),\n 412\n );\n\n await client.deleteConfigurationSetting({ key, label });\n });\n\n it(\"accepts operation options\", async () => {\n const key = recorder.getUniqueName(\"deleteConfigTest\");\n const label = \"MyLabel\";\n const value = \"MyValue\";\n\n // create configuration\n const result = await client.addConfigurationSetting({ key, label, value });\n\n // delete configuration\n await assertThrowsAbortError(async () => {\n await client.deleteConfigurationSetting(result, {\n requestOptions: { timeout: 1 },\n });\n });\n });\n });\n\n describe(\"getConfigurationSetting\", () => {\n it(\"retrieves an existing configuration setting\", async () => {\n const key = recorder.getUniqueName(\"getConfigTest\");\n const label = \"test\";\n const value = \"foo\";\n const tags = {\n bar: \"baz\",\n car: \"caz\",\n };\n const contentType = \"application/json\";\n\n // create configuration\n const result = await client.addConfigurationSetting({ key, label, value, contentType, tags });\n\n assert.equal(result.key, key, \"Unexpected key in result from addConfigurationSetting().\");\n assert.equal(\n result.label,\n label,\n \"Unexpected label in result from addConfigurationSetting().\"\n );\n assert.equal(\n result.value,\n value,\n \"Unexpected value in result from addConfigurationSetting().\"\n );\n assert.equal(\n result.lastModified instanceof Date,\n true,\n \"Unexpected lastModified in result from addConfigurationSetting().\"\n );\n assert.equal(\n result.isReadOnly,\n false,\n \"Unexpected readOnly in result from addConfigurationSetting().\"\n );\n assert.deepEqual(\n result.tags,\n tags,\n \"Unexpected tags in result from addConfigurationSetting().\"\n );\n assert.equal(\n result.contentType,\n contentType,\n \"Unexpected contentType in result from addConfigurationSetting().\"\n );\n\n // retrieve the value from the service\n const remoteResult = await client.getConfigurationSetting({ key, label });\n assert.equal(\n remoteResult.key,\n key,\n \"Unexpected key in result from getConfigurationSetting().\"\n );\n assert.equal(\n remoteResult.label,\n label,\n \"Unexpected label in result from getConfigurationSetting().\"\n );\n assert.equal(\n remoteResult.value,\n value,\n \"Unexpected value in result from getConfigurationSetting().\"\n );\n assert.equal(\n remoteResult.lastModified instanceof Date,\n true,\n \"Unexpected lastModified in result from getConfigurationSetting().\"\n );\n assert.equal(\n remoteResult.isReadOnly,\n false,\n \"Unexpected readOnly in result from getConfigurationSetting().\"\n );\n assert.deepEqual(\n remoteResult.tags,\n tags,\n \"Unexpected tags in result from getConfigurationSetting().\"\n );\n assert.equal(\n remoteResult.contentType,\n contentType,\n \"Unexpected contentType in result from getConfigurationSetting().\"\n );\n\n await client.deleteConfigurationSetting({ key, label });\n });\n\n it(\"throws when retrieving a non-existent configuration setting\", async () => {\n const key = recorder.getUniqueName(\"getConfigTestNA\");\n const label = \"test\";\n\n // retrieve the value from the service\n try {\n await client.getConfigurationSetting({ key, label });\n throw new Error(\"Test failure\");\n } catch (err) {\n assert.notEqual(err.message, \"Test failure\");\n }\n });\n\n it(\"accepts operation options\", async () => {\n const key = recorder.getUniqueName(\"getConfigTest\");\n const label = \"test\";\n const value = \"foo\";\n const tags = {\n bar: \"baz\",\n car: \"caz\",\n };\n const contentType = \"application/json\";\n await client.addConfigurationSetting({ key, label, value, contentType, tags });\n await assertThrowsAbortError(async () => {\n await client.getConfigurationSetting({ key, label }, { requestOptions: { timeout: 1 } });\n });\n });\n\n it(\"by date\", async () => {\n const key = recorder.getUniqueName(\"getConfigurationSettingByDate\");\n\n const initialSetting = await client.setConfigurationSetting({\n key,\n value: \"value1\",\n });\n\n await delay(1000);\n await client.setConfigurationSetting({\n key,\n value: \"value2\",\n });\n\n const settingAtPointInTime = await client.getConfigurationSetting(\n { key },\n {\n acceptDateTime: initialSetting.lastModified,\n }\n );\n\n assert.equal(\"value1\", settingAtPointInTime.value);\n });\n\n it(\"Using `select` via `fields`\", async () => {\n const settingToAdd: ConfigurationSettingParam = {\n key: recorder.getUniqueName(\"getConfigTest\"),\n value: \"value that will not be retrieved\",\n contentType: \"a content type\",\n label: \"a label\",\n };\n\n await client.addConfigurationSetting(settingToAdd);\n await client.setReadOnly(settingToAdd, true);\n\n const retrievedSetting = await client.getConfigurationSetting(settingToAdd, {\n fields: [\"isReadOnly\", \"contentType\", \"lastModified\", \"label\"],\n });\n\n assert.isOk(retrievedSetting.lastModified);\n\n assert.deepEqual(\n {\n key: retrievedSetting.key,\n value: retrievedSetting.value,\n contentType: retrievedSetting.contentType,\n etag: retrievedSetting.etag,\n label: retrievedSetting.label,\n tags: retrievedSetting.tags,\n statusCode: retrievedSetting.statusCode,\n isReadOnly: retrievedSetting.isReadOnly,\n },\n {\n contentType: \"a content type\",\n isReadOnly: true,\n label: \"a label\",\n\n // this is an HTTP response field and is always included.\n statusCode: 200,\n\n // these values were purposefully omitted from my list of fields that I\n // selected above.\n key: undefined,\n value: undefined,\n etag: undefined,\n tags: undefined,\n }\n );\n });\n });\n\n describe(\"listConfigurationSettings\", () => {\n let uniqueLabel: string;\n let listConfigSettingA: ConfigurationSetting;\n let count = 0;\n\n /** Simulating a setting in production that will be made read only */\n const productionASettingId: Pick<\n ConfigurationSetting,\n \"key\" | \"label\" | \"value\" | \"contentType\"\n > = {\n key: \"\",\n label: \"\",\n value: \"[A] production value\",\n contentType: \"a content type\",\n };\n\n const keys: {\n listConfigSettingA: string;\n listConfigSettingB: string;\n } = {\n listConfigSettingA: \"\",\n listConfigSettingB: \"\",\n };\n\n beforeEach(async () => {\n keys.listConfigSettingA = recorder.getUniqueName(`listConfigSetting${count}A`);\n keys.listConfigSettingB = recorder.getUniqueName(`listConfigSetting${count}B`);\n count += 1;\n\n uniqueLabel = recorder.getUniqueName(\"listConfigSettingsLabel\");\n productionASettingId.key = keys.listConfigSettingA;\n productionASettingId.label = uniqueLabel;\n\n await client.addConfigurationSetting(productionASettingId);\n await client.setReadOnly(productionASettingId, true);\n\n listConfigSettingA = await client.addConfigurationSetting({\n key: keys.listConfigSettingA,\n value: \"[A] value\",\n });\n\n await client.addConfigurationSetting({\n key: keys.listConfigSettingB,\n label: uniqueLabel,\n value: \"[B] production value\",\n });\n await client.addConfigurationSetting({\n key: keys.listConfigSettingB,\n value: \"[B] value\",\n });\n });\n\n after(async () => {\n try {\n await deleteKeyCompletely([keys.listConfigSettingA, keys.listConfigSettingB], client);\n } catch (e) {\n /** empty */\n }\n });\n\n it(\"undefined doesn't throw and will just return everything\", async () => {\n const settingsIterator = client.listConfigurationSettings();\n await settingsIterator.next();\n });\n\n it(\"exact match on label\", async () => {\n // query with a direct label match\n const byLabelIterator = client.listConfigurationSettings({ labelFilter: uniqueLabel });\n const byLabelSettings = await toSortedArray(byLabelIterator);\n\n assertEqualSettings(\n [\n {\n key: keys.listConfigSettingA,\n value: \"[A] production value\",\n label: uniqueLabel,\n isReadOnly: true,\n },\n {\n key: keys.listConfigSettingB,\n value: \"[B] production value\",\n label: uniqueLabel,\n isReadOnly: false,\n },\n ],\n byLabelSettings\n );\n });\n\n it(\"label wildcards\", async () => {\n // query with a direct label match\n const byLabelIterator = client.listConfigurationSettings({\n labelFilter: uniqueLabel.substring(0, uniqueLabel.length - 1) + \"*\",\n });\n const byLabelSettings = await toSortedArray(byLabelIterator);\n\n assertEqualSettings(\n [\n {\n key: keys.listConfigSettingA,\n value: \"[A] production value\",\n label: uniqueLabel,\n isReadOnly: true,\n },\n {\n key: keys.listConfigSettingB,\n value: \"[B] production value\",\n label: uniqueLabel,\n isReadOnly: false,\n },\n ],\n byLabelSettings\n );\n });\n\n it(\"exact match on key\", async () => {\n const byKeyIterator = client.listConfigurationSettings({\n keyFilter: keys.listConfigSettingA,\n });\n const byKeySettings = await toSortedArray(byKeyIterator);\n\n assertEqualSettings(\n [\n {\n key: keys.listConfigSettingA,\n value: \"[A] production value\",\n label: uniqueLabel,\n isReadOnly: true,\n },\n {\n key: keys.listConfigSettingA,\n value: \"[A] value\",\n label: undefined,\n isReadOnly: false,\n },\n ],\n byKeySettings\n );\n });\n\n it(\"key wildcards\", async () => {\n // query with a key wildcard\n const keyFilter = keys.listConfigSettingA;\n const byKeyIterator = client.listConfigurationSettings({\n keyFilter: keyFilter.substring(0, keyFilter.length - 1) + \"*\",\n });\n const byKeySettings = await toSortedArray(byKeyIterator);\n\n assertEqualSettings(\n [\n {\n key: keys.listConfigSettingA,\n value: \"[A] production value\",\n label: uniqueLabel,\n isReadOnly: true,\n },\n {\n key: keys.listConfigSettingA,\n value: \"[A] value\",\n label: undefined,\n isReadOnly: false,\n },\n ],\n byKeySettings\n );\n });\n\n it(\"Using `select` via `fields`\", async () => {\n let byKeyIterator = client.listConfigurationSettings({\n keyFilter: productionASettingId.key,\n labelFilter: productionASettingId.label,\n fields: [\"isReadOnly\", \"contentType\", \"lastModified\", \"label\"],\n });\n const [retrievedSetting, ...otherValues] = await toSortedArray(byKeyIterator);\n\n assert.isEmpty(otherValues);\n assert.isOk(retrievedSetting.lastModified);\n\n assert.deepEqual(\n {\n key: retrievedSetting.key,\n value: retrievedSetting.value,\n contentType: retrievedSetting.contentType,\n etag: retrievedSetting.etag,\n label: retrievedSetting.label,\n tags: retrievedSetting.tags,\n isReadOnly: retrievedSetting.isReadOnly,\n },\n {\n contentType: \"a content type\",\n isReadOnly: true,\n label: productionASettingId.label,\n\n // these values were purposefully omitted from my list of fields that I\n // selected above.\n key: undefined,\n value: undefined,\n etag: undefined,\n tags: undefined,\n }\n );\n\n // only fill in the 'readOnly' field (which is really the locked field in the REST model)\n byKeyIterator = client.listConfigurationSettings({\n keyFilter: keys.listConfigSettingA,\n fields: [\"key\", \"label\", \"value\"],\n });\n const settings = await toSortedArray(byKeyIterator);\n\n // the fields we retrieved\n assert.equal(productionASettingId.key, settings[0].key);\n assert.equal(\"[A] production value\", settings[0].value);\n assert.equal(uniqueLabel, settings[0].label);\n\n assert.ok(!settings[0].isReadOnly);\n assert.ok(!settings[0].contentType);\n assert.ok(!settings[0].etag);\n });\n\n it(\"by date\", async () => {\n const byKeyIterator = client.listConfigurationSettings({\n keyFilter: \"listConfigSetting*\",\n acceptDateTime: listConfigSettingA.lastModified,\n });\n\n const settings = await toSortedArray(byKeyIterator);\n let foundMyExactSettingToo = false;\n\n // all settings returned should be the same date or as old as my setting\n for (const setting of settings) {\n assert.ok(setting.lastModified);\n assert.ok(setting.lastModified! <= listConfigSettingA.lastModified!);\n\n if (setting.key === listConfigSettingA.key && setting.label === listConfigSettingA.label) {\n foundMyExactSettingToo = true;\n }\n }\n\n assert.ok(foundMyExactSettingToo);\n });\n\n it(\"list with multiple pages\", async function () {\n // This occasionally hits 429 error (throttling) since we are making 100s of requests in the test to create, get and delete keys.\n // To avoid hitting the service with too many requests, skipping the test in live.\n // More details at https://github.com/Azure/azure-sdk-for-js/issues/16743\n //\n // Remove the following line if you want to hit the live service.\n // eslint-disable-next-line @typescript-eslint/no-invalid-this\n if (isLiveMode()) this.skip();\n\n const key = recorder.getUniqueName(\"listMultiplePagesOfResults\");\n\n // this number is arbitrarily chosen to match the size of a page + 1\n const expectedNumberOfLabels = 200;\n\n let addSettingPromises = [];\n\n for (let i = 0; i < expectedNumberOfLabels; i++) {\n addSettingPromises.push(\n client.addConfigurationSetting({\n key,\n value: `the value for ${i}`,\n label: i.toString(),\n })\n );\n\n if (i !== 0 && i % 10 === 0) {\n await Promise.all(addSettingPromises);\n addSettingPromises = [];\n }\n }\n\n await Promise.all(addSettingPromises);\n\n const listResult = client.listConfigurationSettings({\n keyFilter: key,\n });\n\n const sortedResults = await toSortedArray(listResult);\n assert.equal(sortedResults.length, 200);\n\n // make sure we have 200 unique labels\n const uniqueLabels = new Set(sortedResults.map((res) => res.label));\n assert.equal(uniqueLabels.size, 200);\n\n for (let i = 0; i < 200; ++i) {\n assert.ok(uniqueLabels.has(i.toString()));\n }\n\n for (let i = 0; i < expectedNumberOfLabels; i++) {\n await client.deleteConfigurationSetting({ key, label: i.toString() });\n }\n });\n\n it(\"accepts operation options\", async () => {\n await assertThrowsAbortError(async () => {\n const settingsIterator = client.listConfigurationSettings({\n requestOptions: { timeout: 1 },\n });\n await settingsIterator.next();\n });\n });\n });\n\n describe(\"listRevisions\", () => {\n let key: string;\n let labelA: string;\n let labelB: string;\n let originalSetting: ConfigurationSetting;\n\n beforeEach(async () => {\n key = recorder.getUniqueName(`listRevisions`);\n labelA = recorder.getUniqueName(`list-revisions-A`);\n labelB = recorder.getUniqueName(`list-revisions-B`);\n\n // we'll generate two sets of keys and labels for this selection\n originalSetting = await client.addConfigurationSetting({\n key,\n label: labelA,\n value: \"fooA1\",\n });\n await delay(1000);\n await client.setConfigurationSetting({ key, label: labelA, value: \"fooA2\" });\n\n await client.addConfigurationSetting({ key, label: labelB, value: \"fooB1\" });\n await client.setConfigurationSetting({ key, label: labelB, value: \"fooB2\" });\n });\n\n it(\"exact match on label\", async () => {\n const revisionsWithLabelIterator = client.listRevisions({ labelFilter: labelA });\n const revisions = await toSortedArray(revisionsWithLabelIterator);\n\n assertEqualSettings(\n [\n { key, label: labelA, value: \"fooA1\", isReadOnly: false },\n { key, label: labelA, value: \"fooA2\", isReadOnly: false },\n ],\n revisions\n );\n });\n\n it(\"label wildcards\", async () => {\n const revisionsWithLabelIterator = client.listRevisions({\n labelFilter: labelA.substring(0, labelA.length - 1) + \"*\",\n });\n const revisions = await toSortedArray(revisionsWithLabelIterator);\n\n assertEqualSettings(\n [\n { key, label: labelA, value: \"fooA1\", isReadOnly: false },\n { key, label: labelA, value: \"fooA2\", isReadOnly: false },\n ],\n revisions\n );\n });\n\n it(\"exact match on key\", async () => {\n const revisionsWithKeyIterator = client.listRevisions({ keyFilter: key });\n const revisions = await toSortedArray(revisionsWithKeyIterator);\n\n assertEqualSettings(\n [\n { key, label: labelA, value: \"fooA1\", isReadOnly: false },\n { key, label: labelA, value: \"fooA2\", isReadOnly: false },\n { key, label: labelB, value: \"fooB1\", isReadOnly: false },\n { key, label: labelB, value: \"fooB2\", isReadOnly: false },\n ],\n revisions\n );\n });\n\n it(\"key wildcards\", async () => {\n const revisionsWithKeyIterator = client.listRevisions({\n keyFilter: key.substring(0, key.length - 1) + \"*\",\n });\n const revisions = await toSortedArray(revisionsWithKeyIterator);\n\n assertEqualSettings(\n [\n { key, label: labelA, value: \"fooA1\", isReadOnly: false },\n { key, label: labelA, value: \"fooA2\", isReadOnly: false },\n { key, label: labelB, value: \"fooB1\", isReadOnly: false },\n { key, label: labelB, value: \"fooB2\", isReadOnly: false },\n ],\n revisions\n );\n });\n\n it(\"accepts operation options\", async () => {\n await assertThrowsAbortError(async () => {\n const iter = client.listRevisions({ labelFilter: labelA, requestOptions: { timeout: 1 } });\n await iter.next();\n });\n });\n\n it(\"by date\", async () => {\n const byKeyIterator = client.listRevisions({\n keyFilter: key,\n acceptDateTime: originalSetting.lastModified,\n });\n\n const settings = await toSortedArray(byKeyIterator);\n\n assert.deepEqual(\n {\n key: originalSetting.key,\n label: originalSetting.label,\n value: originalSetting.value,\n isReadOnly: originalSetting.isReadOnly,\n },\n {\n key: settings[0].key,\n label: settings[0].label,\n value: settings[0].value,\n isReadOnly: settings[0].isReadOnly,\n }\n );\n });\n });\n\n describe(\"setConfigurationSetting\", () => {\n it(\"replaces a configuration setting\", async () => {\n const key = recorder.getUniqueName(`setConfigTest`);\n const label = \"test\";\n const contentType = \"application/json\";\n const tags = {\n bar: \"baz\",\n car: \"caz\",\n };\n\n // create configuration\n const result = await client.addConfigurationSetting({\n key,\n label,\n value: \"foo\",\n contentType,\n tags,\n });\n\n assert.equal(result.key, key, \"Unexpected key in result from addConfigurationSetting().\");\n assert.equal(\n result.label,\n label,\n \"Unexpected label in result from addConfigurationSetting().\"\n );\n assert.equal(\n result.value,\n \"foo\",\n \"Unexpected value in result from addConfigurationSetting().\"\n );\n assert.equal(\n result.lastModified instanceof Date,\n true,\n \"Unexpected lastModified in result from addConfigurationSetting().\"\n );\n assert.equal(\n result.isReadOnly,\n false,\n \"Unexpected readOnly in result from addConfigurationSetting().\"\n );\n assert.deepEqual(\n result.tags,\n tags,\n \"Unexpected tags in result from addConfigurationSetting().\"\n );\n assert.equal(\n result.contentType,\n contentType,\n \"Unexpected contentType in result from addConfigurationSetting().\"\n );\n\n const replacedResult = await client.setConfigurationSetting({ key, label, value: \"foo2\" });\n\n assert.equal(\n replacedResult.key,\n key,\n \"Unexpected key in result from setConfigurationSetting().\"\n );\n assert.equal(\n replacedResult.label,\n label,\n \"Unexpected label in result from setConfigurationSetting().\"\n );\n assert.equal(\n replacedResult.value,\n \"foo2\",\n \"Unexpected value in result from setConfigurationSetting().\"\n );\n assert.equal(\n replacedResult.lastModified instanceof Date,\n true,\n \"Unexpected lastModified in result from setConfigurationSetting().\"\n );\n assert.equal(\n replacedResult.isReadOnly,\n false,\n \"Unexpected readOnly in result from setConfigurationSetting().\"\n );\n assert.deepEqual(\n replacedResult.tags,\n {},\n \"Unexpected tags in result from setConfigurationSetting().\"\n );\n assert.strictEqual(\n replacedResult.contentType,\n null,\n \"Unexpected contentType in result from setConfigurationSetting().\"\n );\n\n await client.deleteConfigurationSetting({ key, label });\n });\n\n it(\"replaces a configuration setting (valid etag)\", async () => {\n const key = recorder.getUniqueName(`setConfigTestEtag`);\n const label = \"test\";\n const contentType = \"application/json\";\n const tags = {\n bar: \"baz\",\n car: \"caz\",\n };\n\n // create configuration\n const result = await client.addConfigurationSetting({\n key,\n label,\n value: \"foo\",\n contentType,\n tags,\n });\n\n assert.equal(result.key, key, \"Unexpected key in result from addConfigurationSetting().\");\n assert.equal(\n result.label,\n label,\n \"Unexpected label in result from addConfigurationSetting().\"\n );\n assert.equal(\n result.value,\n \"foo\",\n \"Unexpected value in result from addConfigurationSetting().\"\n );\n assert.equal(\n result.lastModified instanceof Date,\n true,\n \"Unexpected lastModified in result from addConfigurationSetting().\"\n );\n assert.equal(\n result.isReadOnly,\n false,\n \"Unexpected readOnly in result from addConfigurationSetting().\"\n );\n assert.deepEqual(\n result.tags,\n tags,\n \"Unexpected tags in result from addConfigurationSetting().\"\n );\n assert.equal(\n result.contentType,\n contentType,\n \"Unexpected contentType in result from addConfigurationSetting().\"\n );\n\n const replacedResult = await client.setConfigurationSetting(\n {\n key,\n label,\n value: \"foo2\",\n etag: result.etag,\n },\n { onlyIfUnchanged: true }\n );\n\n assert.equal(\n replacedResult.key,\n key,\n \"Unexpected key in result from setConfigurationSetting().\"\n );\n assert.equal(\n replacedResult.label,\n label,\n \"Unexpected label in result from setConfigurationSetting().\"\n );\n assert.equal(\n replacedResult.value,\n \"foo2\",\n \"Unexpected value in result from setConfigurationSetting().\"\n );\n assert.equal(\n replacedResult.lastModified instanceof Date,\n true,\n \"Unexpected lastModified in result from setConfigurationSetting().\"\n );\n assert.equal(\n replacedResult.isReadOnly,\n false,\n \"Unexpected readOnly in result from setConfigurationSetting().\"\n );\n assert.deepEqual(\n replacedResult.tags,\n {},\n \"Unexpected tags in result from setConfigurationSetting().\"\n );\n assert.strictEqual(\n replacedResult.contentType,\n null,\n \"Unexpected contentType in result from setConfigurationSetting().\"\n );\n\n await client.deleteConfigurationSetting({ key, label });\n });\n\n it(\"creates a configuration setting if it doesn't exist\", async () => {\n const key = recorder.getUniqueName(`setConfigTestNA`);\n const label = \"test\";\n const value = \"foo\";\n\n const result = await client.setConfigurationSetting({ key, label, value: \"foo\" });\n assert.equal(result.key, key, \"Unexpected key in result from setConfigurationSetting().\");\n assert.equal(\n result.label,\n label,\n \"Unexpected label in result from setConfigurationSetting().\"\n );\n assert.equal(\n result.value,\n value,\n \"Unexpected value in result from setConfigurationSetting().\"\n );\n assert.equal(\n result.lastModified instanceof Date,\n true,\n \"Unexpected lastModified in result from setConfigurationSetting().\"\n );\n assert.equal(\n result.isReadOnly,\n false,\n \"Unexpected readOnly in result from setConfigurationSetting().\"\n );\n assert.deepEqual(\n result.tags,\n {},\n \"Unexpected tags in result from setConfigurationSetting().\"\n );\n assert.strictEqual(\n result.contentType,\n null,\n \"Unexpected contentType in result from setConfigurationSetting().\"\n );\n });\n\n it(\"accepts operation options\", async () => {\n const key = recorder.getUniqueName(`setConfigTestNA`);\n const label = \"test\";\n const value = \"foo\";\n await assertThrowsAbortError(async () => {\n await client.setConfigurationSetting(\n { key, label, value: value },\n {\n requestOptions: {\n timeout: 1,\n },\n }\n );\n });\n });\n });\n});\n"]}
|
|
1
|
+
{"version":3,"file":"index.spec.js","sourceRoot":"","sources":["../../../test/public/index.spec.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport { assert } from \"chai\";\nimport {\n assertEqualSettings,\n assertThrowsAbortError,\n assertThrowsRestError,\n createAppConfigurationClientForTests,\n deleteKeyCompletely,\n startRecorder,\n toSortedArray,\n} from \"./utils/testHelpers\";\nimport { AppConfigurationClient, ConfigurationSetting, ConfigurationSettingParam } from \"../../src\";\nimport { Recorder, delay, isLiveMode, isPlaybackMode } from \"@azure-tools/test-recorder\";\nimport { Context } from \"mocha\";\n\ndescribe(\"AppConfigurationClient\", () => {\n let client: AppConfigurationClient;\n let recorder: Recorder;\n\n beforeEach(function (this: Context) {\n recorder = startRecorder(this);\n client = createAppConfigurationClientForTests() || this.skip();\n });\n\n afterEach(async function (this: Context) {\n await recorder.stop();\n });\n\n describe(\"simple usages\", () => {\n it(\"Add and query a setting without a label\", async () => {\n const key = recorder.getUniqueName(\"noLabelTests\");\n\n await client.addConfigurationSetting({ key, value: \"added\" });\n\n await compare({\n key,\n value: \"added\",\n label: undefined,\n });\n\n await client.deleteConfigurationSetting({ key });\n\n // will recreate the setting\n await client.setConfigurationSetting({ key, value: \"set\" });\n\n await compare({\n key,\n value: \"set\",\n label: undefined,\n });\n\n // and now acts as a wholesale update\n await client.setConfigurationSetting({ key, value: \"set a second time\" });\n\n await compare({\n key,\n value: \"set a second time\",\n label: undefined,\n });\n\n await client.deleteConfigurationSetting({ key });\n });\n\n async function compare(expected: {\n key: string;\n value: string;\n label?: string;\n }): Promise<void> {\n const actualSettings = await client.getConfigurationSetting(expected);\n\n assert.equal(expected.key, actualSettings.key);\n assert.equal(expected.value, actualSettings.value);\n assert.equal(expected.label, actualSettings.label);\n }\n });\n\n describe(\"addConfigurationSetting\", () => {\n it(\"sample works\", async () => {\n const key = recorder.getUniqueName(\"addConfigSample\");\n const result = await client.setConfigurationSetting({\n key,\n value: \"MyValue\",\n });\n\n assert.equal(key, result.key);\n });\n\n it(\"adds a configuration setting\", async () => {\n const key = recorder.getUniqueName(\"addConfigTest\");\n const label = \"MyLabel\";\n const value = \"MyValue\";\n const result = await client.addConfigurationSetting({ key, label, value });\n\n assert.equal(result.key, key, \"Unexpected key in result from addConfigurationSetting().\");\n assert.equal(\n result.label,\n label,\n \"Unexpected label in result from addConfigurationSetting().\"\n );\n assert.equal(\n result.value,\n value,\n \"Unexpected value in result from addConfigurationSetting().\"\n );\n\n // just a sanity check - the 'eTag' field that gets added by the response headers\n // is removed (and is replaced by the 'etag' field in the model)\n assert.ok(!(result as any).eTag);\n assert.ok(result.etag);\n\n await client.deleteConfigurationSetting({ key, label });\n });\n\n it(\"throws an error if the configuration setting already exists\", async () => {\n const key = recorder.getUniqueName(\"addConfigTestTwice\");\n const label = \"test\";\n const value = \"foo\";\n const result = await client.addConfigurationSetting({ key, label, value });\n\n assert.equal(result.key, key, \"Unexpected key in result from addConfigurationSetting().\");\n assert.equal(\n result.label,\n label,\n \"Unexpected label in result from addConfigurationSetting().\"\n );\n assert.equal(\n result.value,\n value,\n \"Unexpected value in result from addConfigurationSetting().\"\n );\n\n // attempt to add the same setting\n try {\n await client.addConfigurationSetting({ key, label, value });\n throw new Error(\"Test failure\");\n } catch (err) {\n assert.notEqual((err as { message: string }).message, \"Test failure\");\n }\n\n await client.deleteConfigurationSetting({ key, label });\n });\n\n it(\"accepts operation options\", async () => {\n const key = recorder.getUniqueName(\"addConfigTestTwice\");\n const label = \"test\";\n const value = \"foo\";\n await assertThrowsAbortError(async () => {\n await client.addConfigurationSetting(\n { key, label, value },\n {\n requestOptions: {\n timeout: 1,\n },\n }\n );\n });\n });\n });\n\n describe(\"deleteConfigurationSetting\", () => {\n it(\"deletes an existing configuration setting\", async () => {\n const key = recorder.getUniqueName(\"deleteConfigTest\");\n const label = \"MyLabel\";\n const value = \"MyValue\";\n\n // create configuration\n const result = await client.addConfigurationSetting({ key, label, value });\n\n assert.equal(result.key, key, \"Unexpected key in result from addConfigurationSetting().\");\n assert.equal(\n result.label,\n label,\n \"Unexpected label in result from addConfigurationSetting().\"\n );\n assert.equal(\n result.value,\n value,\n \"Unexpected value in result from addConfigurationSetting().\"\n );\n\n // delete configuration\n const deletedSetting = await client.deleteConfigurationSetting(result);\n assert.equal(200, deletedSetting.statusCode);\n\n // confirm setting no longer exists\n try {\n await client.getConfigurationSetting({ key, label });\n throw new Error(\"Test failure\");\n } catch (err) {\n assert.notEqual((err as { message: string }).message, \"Test failure\");\n }\n });\n\n it(\"deletes an existing configuration setting (valid etag)\", async () => {\n const key = recorder.getUniqueName(\"deleteConfigTestEtag\");\n const label = \"test\";\n const value = \"foo\";\n\n // create configuration\n const result = await client.addConfigurationSetting({ key, label, value });\n\n assert.equal(result.key, key, \"Unexpected key in result from addConfigurationSetting().\");\n assert.equal(\n result.label,\n label,\n \"Unexpected label in result from addConfigurationSetting().\"\n );\n assert.equal(\n result.value,\n value,\n \"Unexpected value in result from addConfigurationSetting().\"\n );\n\n // delete configuration\n await client.deleteConfigurationSetting(\n {\n key,\n label,\n },\n { onlyIfUnchanged: true }\n );\n\n // confirm setting no longer exists\n try {\n await client.getConfigurationSetting({ key, label });\n throw new Error(\"Test failure\");\n } catch (err) {\n assert.notEqual((err as { message: string }).message, \"Test failure\");\n }\n });\n\n it(\"does not throw when deleting a non-existent configuration setting\", async () => {\n const key = recorder.getUniqueName(\"deleteConfigTestNA\");\n const label = \"test\";\n\n // delete configuration\n const response = await client.deleteConfigurationSetting({ key, label });\n\n // we hoist this code up to the top in case users want to check if the\n // delete actually happened (status code: 200) or if the setting wasn't\n // found which results in the same state but might matter to\n // the user(status code: 204)\n assert.equal(204, response.statusCode);\n });\n\n it(\"throws when deleting a configuration setting (invalid etag)\", async () => {\n const key = recorder.getUniqueName(\"deleteConfigTestBadEtag\");\n const label = \"test\";\n const value = \"foo\";\n\n // create configuration\n const result = await client.addConfigurationSetting({ key, label, value });\n\n assert.equal(result.key, key, \"Unexpected key in result from addConfigurationSetting().\");\n assert.equal(\n result.label,\n label,\n \"Unexpected label in result from addConfigurationSetting().\"\n );\n assert.equal(\n result.value,\n value,\n \"Unexpected value in result from addConfigurationSetting().\"\n );\n\n // delete configuration\n await assertThrowsRestError(\n () =>\n client.deleteConfigurationSetting(\n { key, label, etag: \"invalid\" },\n { onlyIfUnchanged: true }\n ),\n 412\n );\n\n await client.deleteConfigurationSetting({ key, label });\n });\n\n it(\"accepts operation options\", async function () {\n // Recorder checks for the recording and complains before core-rest-pipeline could throw the AbortError (Recorder v2 should help here)\n // eslint-disable-next-line @typescript-eslint/no-invalid-this\n if (isPlaybackMode()) this.skip();\n const key = recorder.getUniqueName(\"deleteConfigTest\");\n const label = \"MyLabel\";\n const value = \"MyValue\";\n\n // create configuration\n const result = await client.addConfigurationSetting({ key, label, value });\n\n // delete configuration\n await assertThrowsAbortError(async () => {\n await client.deleteConfigurationSetting(result, {\n requestOptions: { timeout: 1 },\n });\n });\n });\n });\n\n describe(\"getConfigurationSetting\", () => {\n it(\"retrieves an existing configuration setting\", async () => {\n const key = recorder.getUniqueName(\"getConfigTest\");\n const label = \"test\";\n const value = \"foo\";\n const tags = {\n bar: \"baz\",\n car: \"caz\",\n };\n const contentType = \"application/json\";\n\n // create configuration\n const result = await client.addConfigurationSetting({ key, label, value, contentType, tags });\n\n assert.equal(result.key, key, \"Unexpected key in result from addConfigurationSetting().\");\n assert.equal(\n result.label,\n label,\n \"Unexpected label in result from addConfigurationSetting().\"\n );\n assert.equal(\n result.value,\n value,\n \"Unexpected value in result from addConfigurationSetting().\"\n );\n assert.equal(\n result.lastModified instanceof Date,\n true,\n \"Unexpected lastModified in result from addConfigurationSetting().\"\n );\n assert.equal(\n result.isReadOnly,\n false,\n \"Unexpected readOnly in result from addConfigurationSetting().\"\n );\n assert.deepEqual(\n result.tags,\n tags,\n \"Unexpected tags in result from addConfigurationSetting().\"\n );\n assert.equal(\n result.contentType,\n contentType,\n \"Unexpected contentType in result from addConfigurationSetting().\"\n );\n\n // retrieve the value from the service\n const remoteResult = await client.getConfigurationSetting({ key, label });\n assert.equal(\n remoteResult.key,\n key,\n \"Unexpected key in result from getConfigurationSetting().\"\n );\n assert.equal(\n remoteResult.label,\n label,\n \"Unexpected label in result from getConfigurationSetting().\"\n );\n assert.equal(\n remoteResult.value,\n value,\n \"Unexpected value in result from getConfigurationSetting().\"\n );\n assert.equal(\n remoteResult.lastModified instanceof Date,\n true,\n \"Unexpected lastModified in result from getConfigurationSetting().\"\n );\n assert.equal(\n remoteResult.isReadOnly,\n false,\n \"Unexpected readOnly in result from getConfigurationSetting().\"\n );\n assert.deepEqual(\n remoteResult.tags,\n tags,\n \"Unexpected tags in result from getConfigurationSetting().\"\n );\n assert.equal(\n remoteResult.contentType,\n contentType,\n \"Unexpected contentType in result from getConfigurationSetting().\"\n );\n\n await client.deleteConfigurationSetting({ key, label });\n });\n\n it(\"throws when retrieving a non-existent configuration setting\", async () => {\n const key = recorder.getUniqueName(\"getConfigTestNA\");\n const label = \"test\";\n\n // retrieve the value from the service\n try {\n await client.getConfigurationSetting({ key, label });\n throw new Error(\"Test failure\");\n } catch (err) {\n assert.notEqual((err as { message: string }).message, \"Test failure\");\n }\n });\n\n it(\"accepts operation options\", async function () {\n // Recorder checks for the recording and complains before core-rest-pipeline could throw the AbortError (Recorder v2 should help here)\n // eslint-disable-next-line @typescript-eslint/no-invalid-this\n if (isPlaybackMode()) this.skip();\n const key = recorder.getUniqueName(\"getConfigTest\");\n const label = \"test\";\n const value = \"foo\";\n const tags = {\n bar: \"baz\",\n car: \"caz\",\n };\n const contentType = \"application/json\";\n await client.addConfigurationSetting({ key, label, value, contentType, tags });\n await assertThrowsAbortError(async () => {\n await client.getConfigurationSetting({ key, label }, { requestOptions: { timeout: 1 } });\n });\n });\n\n it(\"by date\", async () => {\n const key = recorder.getUniqueName(\"getConfigurationSettingByDate\");\n\n const initialSetting = await client.setConfigurationSetting({\n key,\n value: \"value1\",\n });\n\n await delay(1000);\n await client.setConfigurationSetting({\n key,\n value: \"value2\",\n });\n\n const settingAtPointInTime = await client.getConfigurationSetting(\n { key },\n {\n acceptDateTime: initialSetting.lastModified,\n }\n );\n\n assert.equal(\"value1\", settingAtPointInTime.value);\n });\n\n it(\"Using `select` via `fields`\", async () => {\n const settingToAdd: ConfigurationSettingParam = {\n key: recorder.getUniqueName(\"getConfigTest\"),\n value: \"value that will not be retrieved\",\n contentType: \"a content type\",\n label: \"a label\",\n };\n\n await client.addConfigurationSetting(settingToAdd);\n await client.setReadOnly(settingToAdd, true);\n\n const retrievedSetting = await client.getConfigurationSetting(settingToAdd, {\n fields: [\"isReadOnly\", \"contentType\", \"lastModified\", \"label\"],\n });\n\n assert.isOk(retrievedSetting.lastModified);\n\n assert.deepEqual(\n {\n key: retrievedSetting.key,\n value: retrievedSetting.value,\n contentType: retrievedSetting.contentType,\n etag: retrievedSetting.etag,\n label: retrievedSetting.label,\n tags: retrievedSetting.tags,\n statusCode: retrievedSetting.statusCode,\n isReadOnly: retrievedSetting.isReadOnly,\n },\n {\n contentType: \"a content type\",\n isReadOnly: true,\n label: \"a label\",\n\n // this is an HTTP response field and is always included.\n statusCode: 200,\n\n // these values were purposefully omitted from my list of fields that I\n // selected above.\n key: undefined,\n value: undefined,\n etag: undefined,\n tags: undefined,\n }\n );\n });\n });\n\n describe(\"listConfigurationSettings\", () => {\n let uniqueLabel: string;\n let listConfigSettingA: ConfigurationSetting;\n let count = 0;\n\n /** Simulating a setting in production that will be made read only */\n const productionASettingId: Pick<\n ConfigurationSetting,\n \"key\" | \"label\" | \"value\" | \"contentType\"\n > = {\n key: \"\",\n label: \"\",\n value: \"[A] production value\",\n contentType: \"a content type\",\n };\n\n const keys: {\n listConfigSettingA: string;\n listConfigSettingB: string;\n } = {\n listConfigSettingA: \"\",\n listConfigSettingB: \"\",\n };\n\n beforeEach(async () => {\n keys.listConfigSettingA = recorder.getUniqueName(`listConfigSetting${count}A`);\n keys.listConfigSettingB = recorder.getUniqueName(`listConfigSetting${count}B`);\n count += 1;\n\n uniqueLabel = recorder.getUniqueName(\"listConfigSettingsLabel\");\n productionASettingId.key = keys.listConfigSettingA;\n productionASettingId.label = uniqueLabel;\n\n await client.addConfigurationSetting(productionASettingId);\n await client.setReadOnly(productionASettingId, true);\n\n listConfigSettingA = await client.addConfigurationSetting({\n key: keys.listConfigSettingA,\n value: \"[A] value\",\n });\n\n await client.addConfigurationSetting({\n key: keys.listConfigSettingB,\n label: uniqueLabel,\n value: \"[B] production value\",\n });\n await client.addConfigurationSetting({\n key: keys.listConfigSettingB,\n value: \"[B] value\",\n });\n });\n\n after(async () => {\n try {\n await deleteKeyCompletely([keys.listConfigSettingA, keys.listConfigSettingB], client);\n } catch (e) {\n /** empty */\n }\n });\n\n it(\"undefined doesn't throw and will just return everything\", async () => {\n const settingsIterator = client.listConfigurationSettings();\n await settingsIterator.next();\n });\n\n it(\"exact match on label\", async () => {\n // query with a direct label match\n const byLabelIterator = client.listConfigurationSettings({ labelFilter: uniqueLabel });\n const byLabelSettings = await toSortedArray(byLabelIterator);\n\n assertEqualSettings(\n [\n {\n key: keys.listConfigSettingA,\n value: \"[A] production value\",\n label: uniqueLabel,\n isReadOnly: true,\n },\n {\n key: keys.listConfigSettingB,\n value: \"[B] production value\",\n label: uniqueLabel,\n isReadOnly: false,\n },\n ],\n byLabelSettings\n );\n });\n\n it(\"label wildcards\", async () => {\n // query with a direct label match\n const byLabelIterator = client.listConfigurationSettings({\n labelFilter: uniqueLabel.substring(0, uniqueLabel.length - 1) + \"*\",\n });\n const byLabelSettings = await toSortedArray(byLabelIterator);\n\n assertEqualSettings(\n [\n {\n key: keys.listConfigSettingA,\n value: \"[A] production value\",\n label: uniqueLabel,\n isReadOnly: true,\n },\n {\n key: keys.listConfigSettingB,\n value: \"[B] production value\",\n label: uniqueLabel,\n isReadOnly: false,\n },\n ],\n byLabelSettings\n );\n });\n\n it(\"exact match on key\", async () => {\n const byKeyIterator = client.listConfigurationSettings({\n keyFilter: keys.listConfigSettingA,\n });\n const byKeySettings = await toSortedArray(byKeyIterator);\n\n assertEqualSettings(\n [\n {\n key: keys.listConfigSettingA,\n value: \"[A] production value\",\n label: uniqueLabel,\n isReadOnly: true,\n },\n {\n key: keys.listConfigSettingA,\n value: \"[A] value\",\n label: undefined,\n isReadOnly: false,\n },\n ],\n byKeySettings\n );\n });\n\n it(\"key wildcards\", async () => {\n // query with a key wildcard\n const keyFilter = keys.listConfigSettingA;\n const byKeyIterator = client.listConfigurationSettings({\n keyFilter: keyFilter.substring(0, keyFilter.length - 1) + \"*\",\n });\n const byKeySettings = await toSortedArray(byKeyIterator);\n\n assertEqualSettings(\n [\n {\n key: keys.listConfigSettingA,\n value: \"[A] production value\",\n label: uniqueLabel,\n isReadOnly: true,\n },\n {\n key: keys.listConfigSettingA,\n value: \"[A] value\",\n label: undefined,\n isReadOnly: false,\n },\n ],\n byKeySettings\n );\n });\n\n it(\"Using `select` via `fields`\", async () => {\n let byKeyIterator = client.listConfigurationSettings({\n keyFilter: productionASettingId.key,\n labelFilter: productionASettingId.label,\n fields: [\"isReadOnly\", \"contentType\", \"lastModified\", \"label\"],\n });\n const [retrievedSetting, ...otherValues] = await toSortedArray(byKeyIterator);\n\n assert.isEmpty(otherValues);\n assert.isOk(retrievedSetting.lastModified);\n\n assert.deepEqual(\n {\n key: retrievedSetting.key,\n value: retrievedSetting.value,\n contentType: retrievedSetting.contentType,\n etag: retrievedSetting.etag,\n label: retrievedSetting.label,\n tags: retrievedSetting.tags,\n isReadOnly: retrievedSetting.isReadOnly,\n },\n {\n contentType: \"a content type\",\n isReadOnly: true,\n label: productionASettingId.label,\n\n // these values were purposefully omitted from my list of fields that I\n // selected above.\n key: undefined,\n value: undefined,\n etag: undefined,\n tags: undefined,\n }\n );\n\n // only fill in the 'readOnly' field (which is really the locked field in the REST model)\n byKeyIterator = client.listConfigurationSettings({\n keyFilter: keys.listConfigSettingA,\n fields: [\"key\", \"label\", \"value\"],\n });\n const settings = await toSortedArray(byKeyIterator);\n\n // the fields we retrieved\n assert.equal(productionASettingId.key, settings[0].key);\n assert.equal(\"[A] production value\", settings[0].value);\n assert.equal(uniqueLabel, settings[0].label);\n\n assert.ok(!settings[0].isReadOnly);\n assert.ok(!settings[0].contentType);\n assert.ok(!settings[0].etag);\n });\n\n it(\"by date\", async () => {\n const byKeyIterator = client.listConfigurationSettings({\n keyFilter: \"listConfigSetting*\",\n acceptDateTime: listConfigSettingA.lastModified,\n });\n\n const settings = await toSortedArray(byKeyIterator);\n let foundMyExactSettingToo = false;\n\n // all settings returned should be the same date or as old as my setting\n for (const setting of settings) {\n assert.ok(setting.lastModified);\n assert.ok(setting.lastModified! <= listConfigSettingA.lastModified!);\n\n if (setting.key === listConfigSettingA.key && setting.label === listConfigSettingA.label) {\n foundMyExactSettingToo = true;\n }\n }\n\n assert.ok(foundMyExactSettingToo);\n });\n\n it(\"list with multiple pages\", async function () {\n // This occasionally hits 429 error (throttling) since we are making 100s of requests in the test to create, get and delete keys.\n // To avoid hitting the service with too many requests, skipping the test in live.\n // More details at https://github.com/Azure/azure-sdk-for-js/issues/16743\n //\n // Remove the following line if you want to hit the live service.\n // eslint-disable-next-line @typescript-eslint/no-invalid-this\n if (isLiveMode()) this.skip();\n\n const key = recorder.getUniqueName(\"listMultiplePagesOfResults\");\n\n // this number is arbitrarily chosen to match the size of a page + 1\n const expectedNumberOfLabels = 200;\n\n let addSettingPromises = [];\n\n for (let i = 0; i < expectedNumberOfLabels; i++) {\n addSettingPromises.push(\n client.addConfigurationSetting({\n key,\n value: `the value for ${i}`,\n label: i.toString(),\n })\n );\n\n if (i !== 0 && i % 10 === 0) {\n await Promise.all(addSettingPromises);\n addSettingPromises = [];\n }\n }\n\n await Promise.all(addSettingPromises);\n\n const listResult = client.listConfigurationSettings({\n keyFilter: key,\n });\n\n const sortedResults = await toSortedArray(listResult);\n assert.equal(sortedResults.length, 200);\n\n // make sure we have 200 unique labels\n const uniqueLabels = new Set(sortedResults.map((res) => res.label));\n assert.equal(uniqueLabels.size, 200);\n\n for (let i = 0; i < 200; ++i) {\n assert.ok(uniqueLabels.has(i.toString()));\n }\n\n for (let i = 0; i < expectedNumberOfLabels; i++) {\n await client.deleteConfigurationSetting({ key, label: i.toString() });\n }\n });\n\n it(\"accepts operation options\", async function () {\n // Recorder checks for the recording and complains before core-rest-pipeline could throw the AbortError (Recorder v2 should help here)\n // eslint-disable-next-line @typescript-eslint/no-invalid-this\n if (isPlaybackMode()) this.skip();\n await assertThrowsAbortError(async () => {\n const settingsIterator = client.listConfigurationSettings({\n requestOptions: { timeout: 1 },\n });\n await settingsIterator.next();\n });\n });\n });\n\n describe(\"listRevisions\", () => {\n let key: string;\n let labelA: string;\n let labelB: string;\n let originalSetting: ConfigurationSetting;\n\n beforeEach(async () => {\n key = recorder.getUniqueName(`listRevisions`);\n labelA = recorder.getUniqueName(`list-revisions-A`);\n labelB = recorder.getUniqueName(`list-revisions-B`);\n\n // we'll generate two sets of keys and labels for this selection\n originalSetting = await client.addConfigurationSetting({\n key,\n label: labelA,\n value: \"fooA1\",\n });\n await delay(1000);\n await client.setConfigurationSetting({ key, label: labelA, value: \"fooA2\" });\n\n await client.addConfigurationSetting({ key, label: labelB, value: \"fooB1\" });\n await client.setConfigurationSetting({ key, label: labelB, value: \"fooB2\" });\n });\n\n it(\"exact match on label\", async () => {\n const revisionsWithLabelIterator = client.listRevisions({ labelFilter: labelA });\n const revisions = await toSortedArray(revisionsWithLabelIterator);\n\n assertEqualSettings(\n [\n { key, label: labelA, value: \"fooA1\", isReadOnly: false },\n { key, label: labelA, value: \"fooA2\", isReadOnly: false },\n ],\n revisions\n );\n });\n\n it(\"label wildcards\", async () => {\n const revisionsWithLabelIterator = client.listRevisions({\n labelFilter: labelA.substring(0, labelA.length - 1) + \"*\",\n });\n const revisions = await toSortedArray(revisionsWithLabelIterator);\n\n assertEqualSettings(\n [\n { key, label: labelA, value: \"fooA1\", isReadOnly: false },\n { key, label: labelA, value: \"fooA2\", isReadOnly: false },\n ],\n revisions\n );\n });\n\n it(\"exact match on key\", async () => {\n const revisionsWithKeyIterator = client.listRevisions({ keyFilter: key });\n const revisions = await toSortedArray(revisionsWithKeyIterator);\n\n assertEqualSettings(\n [\n { key, label: labelA, value: \"fooA1\", isReadOnly: false },\n { key, label: labelA, value: \"fooA2\", isReadOnly: false },\n { key, label: labelB, value: \"fooB1\", isReadOnly: false },\n { key, label: labelB, value: \"fooB2\", isReadOnly: false },\n ],\n revisions\n );\n });\n\n it(\"key wildcards\", async () => {\n const revisionsWithKeyIterator = client.listRevisions({\n keyFilter: key.substring(0, key.length - 1) + \"*\",\n });\n const revisions = await toSortedArray(revisionsWithKeyIterator);\n\n assertEqualSettings(\n [\n { key, label: labelA, value: \"fooA1\", isReadOnly: false },\n { key, label: labelA, value: \"fooA2\", isReadOnly: false },\n { key, label: labelB, value: \"fooB1\", isReadOnly: false },\n { key, label: labelB, value: \"fooB2\", isReadOnly: false },\n ],\n revisions\n );\n });\n\n it(\"accepts operation options\", async function () {\n // Recorder checks for the recording and complains before core-rest-pipeline could throw the AbortError (Recorder v2 should help here)\n // eslint-disable-next-line @typescript-eslint/no-invalid-this\n if (isPlaybackMode()) this.skip();\n await assertThrowsAbortError(async () => {\n const iter = client.listRevisions({ labelFilter: labelA, requestOptions: { timeout: 1 } });\n await iter.next();\n });\n });\n\n it(\"by date\", async () => {\n const byKeyIterator = client.listRevisions({\n keyFilter: key,\n acceptDateTime: originalSetting.lastModified,\n });\n\n const settings = await toSortedArray(byKeyIterator);\n\n assert.deepEqual(\n {\n key: originalSetting.key,\n label: originalSetting.label,\n value: originalSetting.value,\n isReadOnly: originalSetting.isReadOnly,\n },\n {\n key: settings[0].key,\n label: settings[0].label,\n value: settings[0].value,\n isReadOnly: settings[0].isReadOnly,\n }\n );\n });\n });\n\n describe(\"setConfigurationSetting\", () => {\n it(\"replaces a configuration setting\", async () => {\n const key = recorder.getUniqueName(`setConfigTest`);\n const label = \"test\";\n const contentType = \"application/json\";\n const tags = {\n bar: \"baz\",\n car: \"caz\",\n };\n\n // create configuration\n const result = await client.addConfigurationSetting({\n key,\n label,\n value: \"foo\",\n contentType,\n tags,\n });\n\n assert.equal(result.key, key, \"Unexpected key in result from addConfigurationSetting().\");\n assert.equal(\n result.label,\n label,\n \"Unexpected label in result from addConfigurationSetting().\"\n );\n assert.equal(\n result.value,\n \"foo\",\n \"Unexpected value in result from addConfigurationSetting().\"\n );\n assert.equal(\n result.lastModified instanceof Date,\n true,\n \"Unexpected lastModified in result from addConfigurationSetting().\"\n );\n assert.equal(\n result.isReadOnly,\n false,\n \"Unexpected readOnly in result from addConfigurationSetting().\"\n );\n assert.deepEqual(\n result.tags,\n tags,\n \"Unexpected tags in result from addConfigurationSetting().\"\n );\n assert.equal(\n result.contentType,\n contentType,\n \"Unexpected contentType in result from addConfigurationSetting().\"\n );\n\n const replacedResult = await client.setConfigurationSetting({ key, label, value: \"foo2\" });\n\n assert.equal(\n replacedResult.key,\n key,\n \"Unexpected key in result from setConfigurationSetting().\"\n );\n assert.equal(\n replacedResult.label,\n label,\n \"Unexpected label in result from setConfigurationSetting().\"\n );\n assert.equal(\n replacedResult.value,\n \"foo2\",\n \"Unexpected value in result from setConfigurationSetting().\"\n );\n assert.equal(\n replacedResult.lastModified instanceof Date,\n true,\n \"Unexpected lastModified in result from setConfigurationSetting().\"\n );\n assert.equal(\n replacedResult.isReadOnly,\n false,\n \"Unexpected readOnly in result from setConfigurationSetting().\"\n );\n assert.deepEqual(\n replacedResult.tags,\n {},\n \"Unexpected tags in result from setConfigurationSetting().\"\n );\n assert.strictEqual(\n replacedResult.contentType,\n null,\n \"Unexpected contentType in result from setConfigurationSetting().\"\n );\n\n await client.deleteConfigurationSetting({ key, label });\n });\n\n it(\"replaces a configuration setting (valid etag)\", async () => {\n const key = recorder.getUniqueName(`setConfigTestEtag`);\n const label = \"test\";\n const contentType = \"application/json\";\n const tags = {\n bar: \"baz\",\n car: \"caz\",\n };\n\n // create configuration\n const result = await client.addConfigurationSetting({\n key,\n label,\n value: \"foo\",\n contentType,\n tags,\n });\n\n assert.equal(result.key, key, \"Unexpected key in result from addConfigurationSetting().\");\n assert.equal(\n result.label,\n label,\n \"Unexpected label in result from addConfigurationSetting().\"\n );\n assert.equal(\n result.value,\n \"foo\",\n \"Unexpected value in result from addConfigurationSetting().\"\n );\n assert.equal(\n result.lastModified instanceof Date,\n true,\n \"Unexpected lastModified in result from addConfigurationSetting().\"\n );\n assert.equal(\n result.isReadOnly,\n false,\n \"Unexpected readOnly in result from addConfigurationSetting().\"\n );\n assert.deepEqual(\n result.tags,\n tags,\n \"Unexpected tags in result from addConfigurationSetting().\"\n );\n assert.equal(\n result.contentType,\n contentType,\n \"Unexpected contentType in result from addConfigurationSetting().\"\n );\n\n const replacedResult = await client.setConfigurationSetting(\n {\n key,\n label,\n value: \"foo2\",\n etag: result.etag,\n },\n { onlyIfUnchanged: true }\n );\n\n assert.equal(\n replacedResult.key,\n key,\n \"Unexpected key in result from setConfigurationSetting().\"\n );\n assert.equal(\n replacedResult.label,\n label,\n \"Unexpected label in result from setConfigurationSetting().\"\n );\n assert.equal(\n replacedResult.value,\n \"foo2\",\n \"Unexpected value in result from setConfigurationSetting().\"\n );\n assert.equal(\n replacedResult.lastModified instanceof Date,\n true,\n \"Unexpected lastModified in result from setConfigurationSetting().\"\n );\n assert.equal(\n replacedResult.isReadOnly,\n false,\n \"Unexpected readOnly in result from setConfigurationSetting().\"\n );\n assert.deepEqual(\n replacedResult.tags,\n {},\n \"Unexpected tags in result from setConfigurationSetting().\"\n );\n assert.strictEqual(\n replacedResult.contentType,\n null,\n \"Unexpected contentType in result from setConfigurationSetting().\"\n );\n\n await client.deleteConfigurationSetting({ key, label });\n });\n\n it(\"creates a configuration setting if it doesn't exist\", async () => {\n const key = recorder.getUniqueName(`setConfigTestNA`);\n const label = \"test\";\n const value = \"foo\";\n\n const result = await client.setConfigurationSetting({ key, label, value: \"foo\" });\n assert.equal(result.key, key, \"Unexpected key in result from setConfigurationSetting().\");\n assert.equal(\n result.label,\n label,\n \"Unexpected label in result from setConfigurationSetting().\"\n );\n assert.equal(\n result.value,\n value,\n \"Unexpected value in result from setConfigurationSetting().\"\n );\n assert.equal(\n result.lastModified instanceof Date,\n true,\n \"Unexpected lastModified in result from setConfigurationSetting().\"\n );\n assert.equal(\n result.isReadOnly,\n false,\n \"Unexpected readOnly in result from setConfigurationSetting().\"\n );\n assert.deepEqual(\n result.tags,\n {},\n \"Unexpected tags in result from setConfigurationSetting().\"\n );\n assert.strictEqual(\n result.contentType,\n null,\n \"Unexpected contentType in result from setConfigurationSetting().\"\n );\n });\n\n it(\"accepts operation options\", async () => {\n const key = recorder.getUniqueName(`setConfigTestNA`);\n const label = \"test\";\n const value = \"foo\";\n await assertThrowsAbortError(async () => {\n await client.setConfigurationSetting(\n { key, label, value: value },\n {\n requestOptions: {\n timeout: 1,\n },\n }\n );\n });\n });\n });\n});\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"secretReference.spec.js","sourceRoot":"","sources":["../../../test/public/secretReference.spec.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;;AAElC,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAC9B,OAAO,EAAE,oCAAoC,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAC1F,OAAO,EAIL,iBAAiB,EACjB,oBAAoB,EACpB,0BAA0B,GAE3B,MAAM,WAAW,CAAC;AAInB,QAAQ,CAAC,0CAA0C,EAAE,GAAG,EAAE;IACxD,IAAI,MAA8B,CAAC;IACnC,IAAI,QAAkB,CAAC;IAEvB,UAAU,CAAC;QACT,QAAQ,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;QAC/B,MAAM,GAAG,oCAAoC,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;IACjE,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,KAAK;QACb,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IACxB,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,uCAAuC,EAAE,GAAG,EAAE;QACrD,MAAM,cAAc,GAAG,GAA+C,EAAE;YACtE,OAAO;gBACL,KAAK,EAAE;oBACL,QAAQ,EAAE,8CAA8C,QAAQ,CAAC,aAAa,CAC5E,QAAQ,CACT,EAAE;iBACJ;gBACD,UAAU,EAAE,KAAK;gBACjB,GAAG,EAAE,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC;gBACrC,KAAK,EAAE,SAAS;gBAChB,WAAW,EAAE,0BAA0B;aACxC,CAAC;QACJ,CAAC,CAAC;QAEF,SAAS,0BAA0B,CACjC,MAA0D,EAC1D,QAAoD;YAEpD,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,qCAAqC,CAAC,CAAC;YACrF,MAAM,qBAAqB,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;YAC3D,IAAI,iBAAiB,CAAC,MAAM,CAAC,EAAE;gBAC7B,MAAM,CAAC,KAAK,CACV,MAAM,CAAC,GAAG,EACV,QAAQ,CAAC,GAAG,EACZ,2DAA2D,CAC5D,CAAC;gBACF,MAAM,CAAC,KAAK,CAAC,qBAAqB,CAAC,KAAK,CAAC,QAAQ,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;gBAC5E,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC;gBACrD,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;gBAC3C,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,EAAE,QAAQ,CAAC,WAAW,CAAC,CAAC;aACxD;QACH,CAAC;QAED,IAAI,WAA4C,CAAC;QACjD,IAAI,WAAuD,CAAC;QAC5D,UAAU,CAAC,KAAK,IAAI,EAAE;YACpB,WAAW,GAAG,cAAc,EAAE,CAAC;YAC/B,WAAW,GAAG,MAAM,MAAM,CAAC,uBAAuB,CAAC,WAAW,CAAC,CAAC;QAClE,CAAC,CAAC,CAAC;QAEH,SAAS,CAAC,KAAK,IAAI,EAAE;YACnB,MAAM,MAAM,CAAC,0BAA0B,CAAC;gBACtC,GAAG,EAAE,WAAW,CAAC,GAAG;aACrB,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,iCAAiC,EAAE,KAAK,IAAI,EAAE;YAC/C,0BAA0B,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;YACrD,MAAM,WAAW,GAAG,MAAM,MAAM,CAAC,uBAAuB,CAAC;gBACvD,GAAG,EAAE,WAAW,CAAC,GAAG;gBACpB,KAAK,EAAE,WAAW,CAAC,KAAK;aACzB,CAAC,CAAC;YACH,0BAA0B,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;QACvD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,oCAAoC,EAAE,KAAK,IAAI,EAAE;YAClD,MAAM,WAAW,GAAG,MAAM,MAAM,CAAC,uBAAuB,CAAC;gBACvD,GAAG,EAAE,WAAW,CAAC,GAAG;gBACpB,KAAK,EAAE,WAAW,CAAC,KAAK;aACzB,CAAC,CAAC;YACH,MAAM,WAAW,GAAG,8CAA8C,QAAQ,CAAC,aAAa,CACtF,QAAQ,CACT,EAAE,CAAC;YAEJ,0BAA0B,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;YACrD,MAAM,eAAe,GAAG,oBAAoB,CAAC,WAAW,CAAC,CAAC;YAC1D,eAAe,CAAC,KAAK,CAAC,QAAQ,GAAG,WAAW,CAAC;YAE7C,MAAM,WAAW,GAAG,MAAM,MAAM,CAAC,uBAAuB,CAAC,eAAe,CAAC,CAAC;YAC1E,0BAA0B,CAAC,WAAW,kCACjC,WAAW,KACd,KAAK,EAAE,EAAE,QAAQ,EAAE,WAAW,EAAE,IAChC,CAAC;YAEH,MAAM,sBAAsB,GAAG,MAAM,MAAM,CAAC,uBAAuB,CAAC;gBAClE,GAAG,EAAE,WAAW,CAAC,GAAG;gBACpB,KAAK,EAAE,WAAW,CAAC,KAAK;aACzB,CAAC,CAAC;YACH,0BAA0B,CAAC,sBAAsB,kCAC5C,WAAW,KACd,KAAK,EAAE,EAAE,QAAQ,EAAE,WAAW,EAAE,IAChC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,oDAAoD,EAAE,KAAK,IAAI,EAAE;;YAClE,MAAM,aAAa,mCACd,WAAW,KACd,GAAG,EAAE,GAAG,WAAW,CAAC,GAAG,IAAI,GAC5B,CAAC;YACF,MAAM,WAAW,GAAG,8CAA8C,QAAQ,CAAC,aAAa,CACtF,QAAQ,CACT,EAAE,CAAC;YACJ,MAAM,MAAM,CAAC,uBAAuB,CAAC,aAAa,CAAC,CAAC;YAEpD,IAAI,gCAAgC,GAAG,CAAC,CAAC;;gBACzC,KAA4B,IAAA,KAAA,cAAA,MAAM,CAAC,yBAAyB,CAAC;oBAC3D,SAAS,EAAE,GAAG,WAAW,CAAC,GAAG,GAAG;iBACjC,CAAC,CAAA,IAAA;oBAFS,MAAM,OAAO,WAAA,CAAA;oBAGtB,gCAAgC,EAAE,CAAC;oBACnC,IAAI,OAAO,CAAC,GAAG,KAAK,WAAW,CAAC,GAAG,EAAE;wBACnC,0BAA0B,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;wBACjD,MAAM,MAAM,CAAC,uBAAuB,iCAC/B,WAAW,KACd,KAAK,EAAE,EAAE,QAAQ,EAAE,WAAW,EAAE,IAChC,CAAC;qBACJ;yBAAM;wBACL,0BAA0B,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;wBACnD,MAAM,MAAM,CAAC,WAAW,CACtB,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,EAC1C,CAAC,aAAa,CAAC,UAAU,CAC1B,CAAC;qBACH;iBACF;;;;;;;;;YACD,MAAM,CAAC,KAAK,CAAC,gCAAgC,EAAE,CAAC,EAAE,wCAAwC,CAAC,CAAC;;gBAC5F,KAA4B,IAAA,KAAA,cAAA,MAAM,CAAC,yBAAyB,CAAC;oBAC3D,SAAS,EAAE,GAAG,WAAW,CAAC,GAAG,GAAG;iBACjC,CAAC,CAAA,IAAA;oBAFS,MAAM,OAAO,WAAA,CAAA;oBAGtB,gCAAgC,EAAE,CAAC;oBACnC,IAAI,OAAO,CAAC,GAAG,KAAK,WAAW,CAAC,GAAG,EAAE;wBACnC,0BAA0B,CAAC,OAAO,kCAAO,WAAW,KAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,WAAW,EAAE,IAAG,CAAC;qBAC3F;yBAAM;wBACL,0BAA0B,CAAC,OAAO,kCAC7B,aAAa,KAChB,UAAU,EAAE,CAAC,aAAa,CAAC,UAAU,IACrC,CAAC;qBACJ;iBACF;;;;;;;;;YAED,MAAM,CAAC,KAAK,CACV,gCAAgC,EAChC,CAAC,EACD,2DAA2D,CAC5D,CAAC;YACF,MAAM,MAAM,CAAC,0BAA0B,CAAC,EAAE,GAAG,EAAE,aAAa,CAAC,GAAG,EAAE,CAAC,CAAC;QACtE,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,sCAAsC,EAAE,GAAG,EAAE;QACpD,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;YACtC,EAAE,CAAC,oBAAoB,KAAK,4BAA4B,EAAE,KAAK,IAAI,EAAE;gBACnE,MAAM,OAAO,GAA+C;oBAC1D,WAAW,EAAE,0BAA0B;oBACvC,GAAG,EAAE,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC;oBACrC,UAAU,EAAE,KAAK;oBACjB,KAAK,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE;iBAC1B,CAAC;gBACF,OAAO,CAAC,KAAK,GAAG,KAAY,CAAC;gBAC7B,MAAM,MAAM,CAAC,uBAAuB,CAAC,OAAO,CAAC,CAAC;gBAC9C,MAAM,CAAC,KAAK,CACV,CAAC,MAAM,MAAM,CAAC,uBAAuB,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,KAAK,EAClE,KAAK,EACL,SAAS,CACV,CAAC;gBACF,MAAM,MAAM,CAAC,0BAA0B,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;YAChE,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport { assert } from \"chai\";\nimport { createAppConfigurationClientForTests, startRecorder } from \"./utils/testHelpers\";\nimport {\n AddConfigurationSettingResponse,\n AppConfigurationClient,\n ConfigurationSetting,\n isSecretReference,\n parseSecretReference,\n secretReferenceContentType,\n SecretReferenceValue,\n} from \"../../src\";\nimport { Recorder } from \"@azure-tools/test-recorder\";\nimport { Context } from \"mocha\";\n\ndescribe(\"AppConfigurationClient - SecretReference\", () => {\n let client: AppConfigurationClient;\n let recorder: Recorder;\n\n beforeEach(function (this: Context) {\n recorder = startRecorder(this);\n client = createAppConfigurationClientForTests() || this.skip();\n });\n\n afterEach(async function (this: Context) {\n await recorder.stop();\n });\n\n describe(\"SecretReference configuration setting\", () => {\n const getBaseSetting = (): ConfigurationSetting<SecretReferenceValue> => {\n return {\n value: {\n secretId: `https://vault_name.vault.azure.net/secrets/${recorder.getUniqueName(\n \"name-2\"\n )}`,\n },\n isReadOnly: false,\n key: recorder.getUniqueName(\"name-3\"),\n label: \"label-s\",\n contentType: secretReferenceContentType,\n };\n };\n\n function assertSecretReferenceProps(\n actual: Omit<AddConfigurationSettingResponse, \"_response\">,\n expected: ConfigurationSetting<SecretReferenceValue>\n ): void {\n assert.equal(isSecretReference(actual), true, \"Expected to get the SecretReference\");\n const actualSecretReference = parseSecretReference(actual);\n if (isSecretReference(actual)) {\n assert.equal(\n actual.key,\n expected.key,\n \"Key from the response from get request is not as expected\"\n );\n assert.equal(actualSecretReference.value.secretId, expected.value.secretId);\n assert.equal(actual.isReadOnly, expected.isReadOnly);\n assert.equal(actual.label, expected.label);\n assert.equal(actual.contentType, expected.contentType);\n }\n }\n\n let addResponse: AddConfigurationSettingResponse;\n let baseSetting: ConfigurationSetting<SecretReferenceValue>;\n beforeEach(async () => {\n baseSetting = getBaseSetting();\n addResponse = await client.addConfigurationSetting(baseSetting);\n });\n\n afterEach(async () => {\n await client.deleteConfigurationSetting({\n key: baseSetting.key,\n });\n });\n\n it(\"can add and get SecretReference\", async () => {\n assertSecretReferenceProps(addResponse, baseSetting);\n const getResponse = await client.getConfigurationSetting({\n key: baseSetting.key,\n label: baseSetting.label,\n });\n assertSecretReferenceProps(getResponse, baseSetting);\n });\n\n it(\"can add and update SecretReference\", async () => {\n const getResponse = await client.getConfigurationSetting({\n key: baseSetting.key,\n label: baseSetting.label,\n });\n const newSecretId = `https://vault_name.vault.azure.net/secrets/${recorder.getUniqueName(\n \"name-4\"\n )}`;\n\n assertSecretReferenceProps(getResponse, baseSetting);\n const secretReference = parseSecretReference(getResponse);\n secretReference.value.secretId = newSecretId;\n\n const setResponse = await client.setConfigurationSetting(secretReference);\n assertSecretReferenceProps(setResponse, {\n ...baseSetting,\n value: { secretId: newSecretId },\n });\n\n const getResponseAfterUpdate = await client.getConfigurationSetting({\n key: baseSetting.key,\n label: baseSetting.label,\n });\n assertSecretReferenceProps(getResponseAfterUpdate, {\n ...baseSetting,\n value: { secretId: newSecretId },\n });\n });\n\n it(\"can add, list and update multiple SecretReferences\", async () => {\n const secondSetting = {\n ...baseSetting,\n key: `${baseSetting.key}-2`,\n };\n const newSecretId = `https://vault_name.vault.azure.net/secrets/${recorder.getUniqueName(\n \"name-5\"\n )}`;\n await client.addConfigurationSetting(secondSetting);\n\n let numberOFSecretReferencesReceived = 0;\n for await (const setting of client.listConfigurationSettings({\n keyFilter: `${baseSetting.key}*`,\n })) {\n numberOFSecretReferencesReceived++;\n if (setting.key === baseSetting.key) {\n assertSecretReferenceProps(setting, baseSetting);\n await client.setConfigurationSetting({\n ...baseSetting,\n value: { secretId: newSecretId },\n });\n } else {\n assertSecretReferenceProps(setting, secondSetting);\n await client.setReadOnly(\n { key: setting.key, label: setting.label },\n !secondSetting.isReadOnly\n );\n }\n }\n assert.equal(numberOFSecretReferencesReceived, 2, \"Unexpected number of FeatureFlags seen\");\n for await (const setting of client.listConfigurationSettings({\n keyFilter: `${baseSetting.key}*`,\n })) {\n numberOFSecretReferencesReceived--;\n if (setting.key === baseSetting.key) {\n assertSecretReferenceProps(setting, { ...baseSetting, value: { secretId: newSecretId } });\n } else {\n assertSecretReferenceProps(setting, {\n ...secondSetting,\n isReadOnly: !secondSetting.isReadOnly,\n });\n }\n }\n\n assert.equal(\n numberOFSecretReferencesReceived,\n 0,\n \"Unexpected number of SecretReferences seen after updating\"\n );\n await client.deleteConfigurationSetting({ key: secondSetting.key });\n });\n });\n\n describe(\"serializeAsConfigurationSettingParam\", () => {\n [`[]`, \"Hello World\"].forEach((value) => {\n it(`Unexpected value ${value} as secret reference value`, async () => {\n const setting: ConfigurationSetting<SecretReferenceValue> = {\n contentType: secretReferenceContentType,\n key: recorder.getUniqueName(\"name-1\"),\n isReadOnly: false,\n value: { secretId: \"id\" },\n };\n setting.value = value as any;\n await client.addConfigurationSetting(setting);\n assert.equal(\n (await client.getConfigurationSetting({ key: setting.key })).value,\n value,\n \"message\"\n );\n await client.deleteConfigurationSetting({ key: setting.key });\n });\n });\n });\n});\n"]}
|
|
1
|
+
{"version":3,"file":"secretReference.spec.js","sourceRoot":"","sources":["../../../test/public/secretReference.spec.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport { assert } from \"chai\";\nimport { createAppConfigurationClientForTests, startRecorder } from \"./utils/testHelpers\";\nimport {\n AddConfigurationSettingResponse,\n AppConfigurationClient,\n ConfigurationSetting,\n SecretReferenceValue,\n isSecretReference,\n parseSecretReference,\n secretReferenceContentType,\n} from \"../../src\";\nimport { Recorder } from \"@azure-tools/test-recorder\";\nimport { Context } from \"mocha\";\n\ndescribe(\"AppConfigurationClient - SecretReference\", () => {\n let client: AppConfigurationClient;\n let recorder: Recorder;\n\n beforeEach(function (this: Context) {\n recorder = startRecorder(this);\n client = createAppConfigurationClientForTests() || this.skip();\n });\n\n afterEach(async function (this: Context) {\n await recorder.stop();\n });\n\n describe(\"SecretReference configuration setting\", () => {\n const getBaseSetting = (): ConfigurationSetting<SecretReferenceValue> => {\n return {\n value: {\n secretId: `https://vault_name.vault.azure.net/secrets/${recorder.getUniqueName(\n \"name-2\"\n )}`,\n },\n isReadOnly: false,\n key: recorder.getUniqueName(\"name-3\"),\n label: \"label-s\",\n contentType: secretReferenceContentType,\n };\n };\n\n function assertSecretReferenceProps(\n actual: Omit<AddConfigurationSettingResponse, \"_response\">,\n expected: ConfigurationSetting<SecretReferenceValue>\n ): void {\n assert.equal(isSecretReference(actual), true, \"Expected to get the SecretReference\");\n const actualSecretReference = parseSecretReference(actual);\n if (isSecretReference(actual)) {\n assert.equal(\n actual.key,\n expected.key,\n \"Key from the response from get request is not as expected\"\n );\n assert.equal(actualSecretReference.value.secretId, expected.value.secretId);\n assert.equal(actual.isReadOnly, expected.isReadOnly);\n assert.equal(actual.label, expected.label);\n assert.equal(actual.contentType, expected.contentType);\n }\n }\n\n let addResponse: AddConfigurationSettingResponse;\n let baseSetting: ConfigurationSetting<SecretReferenceValue>;\n beforeEach(async () => {\n baseSetting = getBaseSetting();\n addResponse = await client.addConfigurationSetting(baseSetting);\n });\n\n afterEach(async () => {\n await client.deleteConfigurationSetting({\n key: baseSetting.key,\n });\n });\n\n it(\"can add and get SecretReference\", async () => {\n assertSecretReferenceProps(addResponse, baseSetting);\n const getResponse = await client.getConfigurationSetting({\n key: baseSetting.key,\n label: baseSetting.label,\n });\n assertSecretReferenceProps(getResponse, baseSetting);\n });\n\n it(\"can add and update SecretReference\", async () => {\n const getResponse = await client.getConfigurationSetting({\n key: baseSetting.key,\n label: baseSetting.label,\n });\n const newSecretId = `https://vault_name.vault.azure.net/secrets/${recorder.getUniqueName(\n \"name-4\"\n )}`;\n\n assertSecretReferenceProps(getResponse, baseSetting);\n const secretReference = parseSecretReference(getResponse);\n secretReference.value.secretId = newSecretId;\n\n const setResponse = await client.setConfigurationSetting(secretReference);\n assertSecretReferenceProps(setResponse, {\n ...baseSetting,\n value: { secretId: newSecretId },\n });\n\n const getResponseAfterUpdate = await client.getConfigurationSetting({\n key: baseSetting.key,\n label: baseSetting.label,\n });\n assertSecretReferenceProps(getResponseAfterUpdate, {\n ...baseSetting,\n value: { secretId: newSecretId },\n });\n });\n\n it(\"can add, list and update multiple SecretReferences\", async () => {\n const secondSetting = {\n ...baseSetting,\n key: `${baseSetting.key}-2`,\n };\n const newSecretId = `https://vault_name.vault.azure.net/secrets/${recorder.getUniqueName(\n \"name-5\"\n )}`;\n await client.addConfigurationSetting(secondSetting);\n\n let numberOFSecretReferencesReceived = 0;\n for await (const setting of client.listConfigurationSettings({\n keyFilter: `${baseSetting.key}*`,\n })) {\n numberOFSecretReferencesReceived++;\n if (setting.key === baseSetting.key) {\n assertSecretReferenceProps(setting, baseSetting);\n await client.setConfigurationSetting({\n ...baseSetting,\n value: { secretId: newSecretId },\n });\n } else {\n assertSecretReferenceProps(setting, secondSetting);\n await client.setReadOnly(\n { key: setting.key, label: setting.label },\n !secondSetting.isReadOnly\n );\n }\n }\n assert.equal(numberOFSecretReferencesReceived, 2, \"Unexpected number of FeatureFlags seen\");\n for await (const setting of client.listConfigurationSettings({\n keyFilter: `${baseSetting.key}*`,\n })) {\n numberOFSecretReferencesReceived--;\n if (setting.key === baseSetting.key) {\n assertSecretReferenceProps(setting, { ...baseSetting, value: { secretId: newSecretId } });\n } else {\n assertSecretReferenceProps(setting, {\n ...secondSetting,\n isReadOnly: !secondSetting.isReadOnly,\n });\n }\n }\n\n assert.equal(\n numberOFSecretReferencesReceived,\n 0,\n \"Unexpected number of SecretReferences seen after updating\"\n );\n await client.deleteConfigurationSetting({ key: secondSetting.key });\n });\n });\n\n describe(\"serializeAsConfigurationSettingParam\", () => {\n [`[]`, \"Hello World\"].forEach((value) => {\n it(`Unexpected value ${value} as secret reference value`, async () => {\n const setting: ConfigurationSetting<SecretReferenceValue> = {\n contentType: secretReferenceContentType,\n key: recorder.getUniqueName(\"name-1\"),\n isReadOnly: false,\n value: { secretId: \"id\" },\n };\n setting.value = value as any;\n await client.addConfigurationSetting(setting);\n assert.equal(\n (await client.getConfigurationSetting({ key: setting.key })).value,\n value,\n \"message\"\n );\n await client.deleteConfigurationSetting({ key: setting.key });\n });\n });\n });\n});\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// Copyright (c) Microsoft Corporation.
|
|
2
2
|
// Licensed under the MIT license.
|
|
3
|
-
import { createAppConfigurationClientForTests, deleteKeyCompletely,
|
|
3
|
+
import { assertThrowsRestError, createAppConfigurationClientForTests, deleteKeyCompletely, startRecorder, } from "./utils/testHelpers";
|
|
4
4
|
import { assert } from "chai";
|
|
5
5
|
// There's been discussion on other teams about what errors are thrown when. This
|
|
6
6
|
// is the file where I've documented the throws/notThrows cases to make coordination
|