@azure/app-configuration 1.3.1-alpha.20211213.2 → 1.3.1

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 CHANGED
@@ -1,10 +1,6 @@
1
1
  # Release History
2
2
 
3
- ## 1.3.1 (Unreleased)
4
-
5
- ### Features Added
6
-
7
- ### Breaking Changes
3
+ ## 1.3.1 (2021-12-14)
8
4
 
9
5
  ### Bugs Fixed
10
6
 
package/dist/index.js CHANGED
@@ -3,7 +3,7 @@
3
3
  * Licensed under the MIT License. See License.txt in the project root for
4
4
  * license information.
5
5
  *
6
- * Azure App Configuration SDK for JavaScript - 1.3.1-alpha.20211213.2
6
+ * Azure App Configuration SDK for JavaScript - 1.3.1
7
7
  */
8
8
  'use strict';
9
9
 
@@ -1,7 +1,7 @@
1
1
  // Copyright (c) Microsoft Corporation.
2
2
  // Licensed under the MIT license.
3
3
  import { checkAndFormatIfAndIfNoneMatch, formatFiltersAndSelect, extractAfterTokenFromNextLink, quoteETag, makeConfigurationSettingEmpty, transformKeyValue, transformKeyValueResponseWithStatusCode, transformKeyValueResponse, formatFieldsForSelect, serializeAsConfigurationSettingParam } from "../../src/internal/helpers";
4
- import * as assert from "assert";
4
+ import { assert } from "chai";
5
5
  import { featureFlagContentType, secretReferenceContentType } from "../../src";
6
6
  import { HttpHeaders } from "@azure/core-http";
7
7
  describe("helper methods", () => {
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.spec.js","sourceRoot":"","sources":["../../../test/internal/helpers.spec.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport {\n checkAndFormatIfAndIfNoneMatch,\n formatFiltersAndSelect,\n extractAfterTokenFromNextLink,\n quoteETag,\n makeConfigurationSettingEmpty,\n transformKeyValue,\n transformKeyValueResponseWithStatusCode,\n transformKeyValueResponse,\n formatFieldsForSelect,\n serializeAsConfigurationSettingParam\n} from \"../../src/internal/helpers\";\nimport * as assert from \"assert\";\nimport {\n ConfigurationSetting,\n featureFlagContentType,\n HttpResponseField,\n HttpResponseFields,\n secretReferenceContentType\n} from \"../../src\";\nimport { HttpHeaders } from \"@azure/core-http\";\nimport { FeatureFlagValue } from \"../../src/featureFlag\";\nimport { SecretReferenceValue } from \"../../src/secretReference\";\n\ndescribe(\"helper methods\", () => {\n it(\"checkAndFormatIfAndIfNoneMatch\", () => {\n const key = \"ignored\";\n\n assert.deepEqual(\n {\n ifMatch: undefined,\n ifNoneMatch: undefined\n },\n checkAndFormatIfAndIfNoneMatch({ key }, {})\n );\n\n assert.deepEqual(\n {\n ifMatch: '\"hello\"',\n ifNoneMatch: undefined\n },\n checkAndFormatIfAndIfNoneMatch(\n { key, etag: \"hello\" },\n {\n onlyIfUnchanged: true\n }\n )\n );\n\n assert.deepEqual(\n {\n ifNoneMatch: '\"hello\"',\n ifMatch: undefined\n },\n checkAndFormatIfAndIfNoneMatch(\n { key, etag: \"hello\" },\n {\n onlyIfChanged: true\n }\n )\n );\n });\n\n it(\"checkAndFormatIfAndIfNoneMatch - mutually exclusive\", () => {\n const key = \"ignored\";\n\n assert.throws(\n () =>\n checkAndFormatIfAndIfNoneMatch(\n { key, etag: \"won't get used\" },\n {\n onlyIfChanged: true,\n onlyIfUnchanged: true\n }\n ),\n /onlyIfChanged and onlyIfUnchanged are mutually-exclusive/\n );\n });\n\n describe(\"quoteETag\", () => {\n it(\"undefined\", () => {\n assert.equal(undefined, quoteETag(undefined));\n\n assert.equal('\"etagishere\"', quoteETag(\"etagishere\"));\n\n assert.equal(\"'etagishere'\", quoteETag(\"'etagishere'\"));\n\n assert.equal(\"*\", quoteETag(\"*\"));\n });\n });\n\n describe(\"formatWildcards\", () => {\n it(\"undefined\", () => {\n const result = formatFiltersAndSelect({\n keyFilter: undefined,\n labelFilter: undefined\n });\n\n assert.ok(!result.key);\n assert.ok(!result.label);\n });\n\n it(\"single values only\", () => {\n const result = formatFiltersAndSelect({\n keyFilter: \"key1\",\n labelFilter: \"label1\"\n });\n\n assert.equal(\"key1\", result.key);\n assert.equal(\"label1\", result.label);\n });\n\n it(\"multiple values\", () => {\n const result = formatFiltersAndSelect({\n keyFilter: \"key1,key2\",\n labelFilter: \"label1,label2\"\n });\n\n assert.equal(\"key1,key2\", result.key);\n assert.equal(\"label1,label2\", result.label);\n });\n\n it(\"fields map properly\", () => {\n const result = formatFiltersAndSelect({\n fields: [\"isReadOnly\", \"value\"]\n });\n\n assert.deepEqual([\"locked\", \"value\"], result.select);\n });\n });\n\n describe(\"extractAfterTokenFromNextLink\", () => {\n it(\"token is extracted and properly unescaped\", () => {\n const token = extractAfterTokenFromNextLink(\"/kv?key=someKey&api-version=1.0&after=bGlah%3D\");\n assert.equal(\"bGlah=\", token);\n });\n });\n\n describe(\"serializeAsConfigurationSettingParam\", () => {\n [`[]`, \"Hello World\"].forEach((value) => {\n // These values are unexpected for feature flag or secret reference config setting\n // These tests make sure the latest version supports such settings where the value is unexpected\n // as well because the older versions of the SDK support such cases.\n // These tests make sure the SDK is not broken for the users with such use cases.\n it(`serializer doesn't throw on ${value} as feature flag value`, () => {\n const featureFlag: ConfigurationSetting<FeatureFlagValue> = {\n contentType: featureFlagContentType,\n key: \"key\",\n isReadOnly: false,\n value: { conditions: { clientFilters: [] }, enabled: true }\n };\n featureFlag.value = value as any;\n assert.deepEqual(\n serializeAsConfigurationSettingParam(featureFlag),\n featureFlag,\n \"setting was modified\"\n );\n });\n\n it(`serializer doesn't throw on ${value} as secret reference value`, () => {\n const setting: ConfigurationSetting<SecretReferenceValue> = {\n contentType: secretReferenceContentType,\n key: \"key\",\n isReadOnly: false,\n value: { secretId: \"abc\" }\n };\n setting.value = value as any;\n assert.deepEqual(\n serializeAsConfigurationSettingParam(setting),\n setting,\n \"setting was modified\"\n );\n });\n });\n });\n\n const fakeHttp204Response: HttpResponseField<any> = {\n _response: {\n request: {\n url: \"unused\",\n abortSignal: {\n aborted: true,\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n addEventListener: () => {},\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n removeEventListener: () => {}\n },\n method: \"GET\",\n withCredentials: false,\n headers: new HttpHeaders(),\n timeout: 0,\n requestId: \"\",\n clone: function() {\n return this;\n },\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n validateRequestProperties: () => {},\n prepare: function() {\n return this;\n }\n },\n status: 204,\n headers: new HttpHeaders(),\n bodyAsText: \"\",\n parsedHeaders: {}\n }\n };\n\n it(\"makeConfigurationSettingEmpty\", () => {\n const response: ConfigurationSetting & HttpResponseField<any> & HttpResponseFields = {\n key: \"mykey\",\n statusCode: 204,\n isReadOnly: false,\n ...fakeHttp204Response\n };\n\n makeConfigurationSettingEmpty(response);\n\n // key isn't touched\n assert.equal(\"mykey\", response.key);\n\n for (const name of getAllConfigurationSettingFieldsMinusKey()) {\n assert.ok(!response[name], name);\n }\n\n // These point is these properties are untouched and won't throw\n // since they're the only properties the user is allowed to touch on these\n // \"body empty\" objects.\n assert.equal(204, response._response.status);\n assert.equal(204, response.statusCode);\n });\n\n it(\"transformKeyValue\", () => {\n const configurationSetting = transformKeyValue({\n key: \"hello\",\n locked: true\n });\n\n assert.deepEqual(configurationSetting, {\n // the 'locked' property should not be present in the object since\n // it should be 'renamed' to readOnly\n isReadOnly: true,\n key: \"hello\",\n value: undefined\n });\n });\n\n it(\"transformKeyValueResponseWithStatusCode\", () => {\n const configurationSetting = transformKeyValueResponseWithStatusCode({\n key: \"hello\",\n locked: true,\n ...fakeHttp204Response\n });\n\n const actualKeys = Object.keys(configurationSetting).sort();\n\n // _response is explictly set to not enumerate, even in our copied object.\n assert.deepEqual(actualKeys, [\"isReadOnly\", \"key\", \"statusCode\", \"value\"]);\n\n // now make it enumerable so we can do our comparison\n Object.defineProperty(configurationSetting, \"_response\", {\n enumerable: true\n });\n\n assert.deepEqual(configurationSetting, {\n isReadOnly: true,\n key: \"hello\",\n value: undefined,\n statusCode: 204,\n _response: fakeHttp204Response._response\n });\n });\n\n it(\"transformKeyValueResponse\", () => {\n const configurationSetting = transformKeyValueResponse({\n key: \"hello\",\n locked: true,\n ...fakeHttp204Response\n });\n\n const actualKeys = Object.keys(configurationSetting).sort();\n\n // _response is explictly set to not enumerate, even in our copied object.\n assert.deepEqual(actualKeys, [\"isReadOnly\", \"key\", \"value\"]);\n\n // now make it enumerable so we can do our comparison\n Object.defineProperty(configurationSetting, \"_response\", {\n enumerable: true\n });\n\n assert.deepEqual(configurationSetting, {\n isReadOnly: true,\n key: \"hello\",\n value: undefined,\n _response: fakeHttp204Response._response\n });\n });\n\n it(\"normalizeFilterFields\", () => {\n const fields = getAllConfigurationSettingFields();\n\n assert.deepEqual(formatFieldsForSelect(fields)!.sort(), [\n \"content_type\",\n \"etag\",\n \"key\",\n \"label\",\n \"last_modified\",\n \"locked\", // isReadOnly maps to this\n \"tags\",\n \"value\"\n ]);\n\n assert.ok(formatFieldsForSelect(undefined) === undefined);\n assert.deepEqual(formatFieldsForSelect([]), []);\n });\n\n /**\n * Gets all the properties from ConfigurationSetting, sorted ascending.\n *\n * @returns All property names, sorted ascending.\n */\n function getAllConfigurationSettingFields(): (keyof ConfigurationSetting)[] {\n const configObjectWithAllFieldsRequired: Required<ConfigurationSetting> = {\n contentType: \"\",\n etag: \"\",\n key: \"\",\n label: \"\",\n lastModified: new Date(),\n isReadOnly: true,\n tags: {},\n value: \"\"\n };\n\n return Object.keys(configObjectWithAllFieldsRequired).sort() as (keyof ConfigurationSetting)[];\n }\n\n function getAllConfigurationSettingFieldsMinusKey(): Exclude<\n keyof ConfigurationSetting,\n \"key\"\n >[] {\n const keys = getAllConfigurationSettingFields().filter((key) => key !== \"key\");\n\n return keys as Exclude<keyof ConfigurationSetting, \"key\">[];\n }\n});\n"]}
1
+ {"version":3,"file":"helpers.spec.js","sourceRoot":"","sources":["../../../test/internal/helpers.spec.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport {\n checkAndFormatIfAndIfNoneMatch,\n formatFiltersAndSelect,\n extractAfterTokenFromNextLink,\n quoteETag,\n makeConfigurationSettingEmpty,\n transformKeyValue,\n transformKeyValueResponseWithStatusCode,\n transformKeyValueResponse,\n formatFieldsForSelect,\n serializeAsConfigurationSettingParam\n} from \"../../src/internal/helpers\";\nimport { assert } from \"chai\";\nimport {\n ConfigurationSetting,\n ConfigurationSettingParam,\n featureFlagContentType,\n HttpResponseField,\n HttpResponseFields,\n secretReferenceContentType\n} from \"../../src\";\nimport { HttpHeaders } from \"@azure/core-http\";\nimport { FeatureFlagValue } from \"../../src/featureFlag\";\nimport { SecretReferenceValue } from \"../../src/secretReference\";\n\ndescribe(\"helper methods\", () => {\n it(\"checkAndFormatIfAndIfNoneMatch\", () => {\n const key = \"ignored\";\n\n assert.deepEqual(\n {\n ifMatch: undefined,\n ifNoneMatch: undefined\n },\n checkAndFormatIfAndIfNoneMatch({ key }, {})\n );\n\n assert.deepEqual(\n {\n ifMatch: '\"hello\"',\n ifNoneMatch: undefined\n },\n checkAndFormatIfAndIfNoneMatch(\n { key, etag: \"hello\" },\n {\n onlyIfUnchanged: true\n }\n )\n );\n\n assert.deepEqual(\n {\n ifNoneMatch: '\"hello\"',\n ifMatch: undefined\n },\n checkAndFormatIfAndIfNoneMatch(\n { key, etag: \"hello\" },\n {\n onlyIfChanged: true\n }\n )\n );\n });\n\n it(\"checkAndFormatIfAndIfNoneMatch - mutually exclusive\", () => {\n const key = \"ignored\";\n\n assert.throws(\n () =>\n checkAndFormatIfAndIfNoneMatch(\n { key, etag: \"won't get used\" },\n {\n onlyIfChanged: true,\n onlyIfUnchanged: true\n }\n ),\n /onlyIfChanged and onlyIfUnchanged are mutually-exclusive/\n );\n });\n\n describe(\"quoteETag\", () => {\n it(\"undefined\", () => {\n assert.equal(undefined, quoteETag(undefined));\n\n assert.equal('\"etagishere\"', quoteETag(\"etagishere\"));\n\n assert.equal(\"'etagishere'\", quoteETag(\"'etagishere'\"));\n\n assert.equal(\"*\", quoteETag(\"*\"));\n });\n });\n\n describe(\"formatWildcards\", () => {\n it(\"undefined\", () => {\n const result = formatFiltersAndSelect({\n keyFilter: undefined,\n labelFilter: undefined\n });\n\n assert.ok(!result.key);\n assert.ok(!result.label);\n });\n\n it(\"single values only\", () => {\n const result = formatFiltersAndSelect({\n keyFilter: \"key1\",\n labelFilter: \"label1\"\n });\n\n assert.equal(\"key1\", result.key);\n assert.equal(\"label1\", result.label);\n });\n\n it(\"multiple values\", () => {\n const result = formatFiltersAndSelect({\n keyFilter: \"key1,key2\",\n labelFilter: \"label1,label2\"\n });\n\n assert.equal(\"key1,key2\", result.key);\n assert.equal(\"label1,label2\", result.label);\n });\n\n it(\"fields map properly\", () => {\n const result = formatFiltersAndSelect({\n fields: [\"isReadOnly\", \"value\"]\n });\n\n assert.deepEqual([\"locked\", \"value\"], result.select);\n });\n });\n\n describe(\"extractAfterTokenFromNextLink\", () => {\n it(\"token is extracted and properly unescaped\", () => {\n const token = extractAfterTokenFromNextLink(\"/kv?key=someKey&api-version=1.0&after=bGlah%3D\");\n assert.equal(\"bGlah=\", token);\n });\n });\n\n describe(\"serializeAsConfigurationSettingParam\", () => {\n [`[]`, \"Hello World\"].forEach((value) => {\n // These values are unexpected for feature flag or secret reference config setting\n // These tests make sure the latest version supports such settings where the value is unexpected\n // as well because the older versions of the SDK support such cases.\n // These tests make sure the SDK is not broken for the users with such use cases.\n it(`serializer doesn't throw on ${value} as feature flag value`, () => {\n const featureFlag: ConfigurationSetting<FeatureFlagValue> = {\n contentType: featureFlagContentType,\n key: \"key\",\n isReadOnly: false,\n value: { conditions: { clientFilters: [] }, enabled: true }\n };\n featureFlag.value = value as any;\n assert.deepEqual(\n serializeAsConfigurationSettingParam(featureFlag),\n (featureFlag as unknown) as ConfigurationSettingParam<string>,\n \"setting was modified\"\n );\n });\n\n it(`serializer doesn't throw on ${value} as secret reference value`, () => {\n const setting: ConfigurationSetting<SecretReferenceValue> = {\n contentType: secretReferenceContentType,\n key: \"key\",\n isReadOnly: false,\n value: { secretId: \"abc\" }\n };\n setting.value = value as any;\n assert.deepEqual(\n serializeAsConfigurationSettingParam(setting),\n setting as any,\n \"setting was modified\"\n );\n });\n });\n });\n\n const fakeHttp204Response: HttpResponseField<any> = {\n _response: {\n request: {\n url: \"unused\",\n abortSignal: {\n aborted: true,\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n addEventListener: () => {},\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n removeEventListener: () => {}\n },\n method: \"GET\",\n withCredentials: false,\n headers: new HttpHeaders(),\n timeout: 0,\n requestId: \"\",\n clone: function() {\n return this;\n },\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n validateRequestProperties: () => {},\n prepare: function() {\n return this;\n }\n },\n status: 204,\n headers: new HttpHeaders(),\n bodyAsText: \"\",\n parsedHeaders: {}\n }\n };\n\n it(\"makeConfigurationSettingEmpty\", () => {\n const response: ConfigurationSetting & HttpResponseField<any> & HttpResponseFields = {\n key: \"mykey\",\n statusCode: 204,\n isReadOnly: false,\n ...fakeHttp204Response\n };\n\n makeConfigurationSettingEmpty(response);\n\n // key isn't touched\n assert.equal(\"mykey\", response.key);\n\n for (const name of getAllConfigurationSettingFieldsMinusKey()) {\n assert.ok(!response[name], name);\n }\n\n // These point is these properties are untouched and won't throw\n // since they're the only properties the user is allowed to touch on these\n // \"body empty\" objects.\n assert.equal(204, response._response.status);\n assert.equal(204, response.statusCode);\n });\n\n it(\"transformKeyValue\", () => {\n const configurationSetting = transformKeyValue({\n key: \"hello\",\n locked: true\n });\n\n assert.deepEqual(configurationSetting, {\n // the 'locked' property should not be present in the object since\n // it should be 'renamed' to readOnly\n isReadOnly: true,\n key: \"hello\",\n value: undefined\n });\n });\n\n it(\"transformKeyValueResponseWithStatusCode\", () => {\n const configurationSetting = transformKeyValueResponseWithStatusCode({\n key: \"hello\",\n locked: true,\n ...fakeHttp204Response\n });\n\n const actualKeys = Object.keys(configurationSetting).sort();\n\n // _response is explictly set to not enumerate, even in our copied object.\n assert.deepEqual(actualKeys, [\"isReadOnly\", \"key\", \"statusCode\", \"value\"]);\n\n // now make it enumerable so we can do our comparison\n Object.defineProperty(configurationSetting, \"_response\", {\n enumerable: true\n });\n\n assert.deepEqual(configurationSetting, {\n isReadOnly: true,\n key: \"hello\",\n value: undefined,\n statusCode: 204,\n _response: fakeHttp204Response._response\n });\n });\n\n it(\"transformKeyValueResponse\", () => {\n const configurationSetting = transformKeyValueResponse({\n key: \"hello\",\n locked: true,\n ...fakeHttp204Response\n });\n\n const actualKeys = Object.keys(configurationSetting).sort();\n\n // _response is explictly set to not enumerate, even in our copied object.\n assert.deepEqual(actualKeys, [\"isReadOnly\", \"key\", \"value\"]);\n\n // now make it enumerable so we can do our comparison\n Object.defineProperty(configurationSetting, \"_response\", {\n enumerable: true\n });\n\n assert.deepEqual(configurationSetting, {\n isReadOnly: true,\n key: \"hello\",\n value: undefined,\n _response: fakeHttp204Response._response\n });\n });\n\n it(\"normalizeFilterFields\", () => {\n const fields = getAllConfigurationSettingFields();\n\n assert.deepEqual(formatFieldsForSelect(fields)!.sort(), [\n \"content_type\",\n \"etag\",\n \"key\",\n \"label\",\n \"last_modified\",\n \"locked\", // isReadOnly maps to this\n \"tags\",\n \"value\"\n ]);\n\n assert.ok(formatFieldsForSelect(undefined) === undefined);\n assert.deepEqual(formatFieldsForSelect([]), []);\n });\n\n /**\n * Gets all the properties from ConfigurationSetting, sorted ascending.\n *\n * @returns All property names, sorted ascending.\n */\n function getAllConfigurationSettingFields(): (keyof ConfigurationSetting)[] {\n const configObjectWithAllFieldsRequired: Required<ConfigurationSetting> = {\n contentType: \"\",\n etag: \"\",\n key: \"\",\n label: \"\",\n lastModified: new Date(),\n isReadOnly: true,\n tags: {},\n value: \"\"\n };\n\n return Object.keys(configObjectWithAllFieldsRequired).sort() as (keyof ConfigurationSetting)[];\n }\n\n function getAllConfigurationSettingFieldsMinusKey(): Exclude<\n keyof ConfigurationSetting,\n \"key\"\n >[] {\n const keys = getAllConfigurationSettingFields().filter((key) => key !== \"key\");\n\n return keys as Exclude<keyof ConfigurationSetting, \"key\">[];\n }\n});\n"]}
@@ -3,7 +3,7 @@
3
3
  // Copyright (c) Microsoft Corporation.
4
4
  // Licensed under the MIT License.
5
5
  import { parseSyncToken, SyncTokens } from "../../src/internal/synctokenpolicy";
6
- import * as assert from "assert";
6
+ import { assert } from "chai";
7
7
  import { AppConfigurationClient } from "../../src";
8
8
  import nock from "nock";
9
9
  import { getUserAgentPrefix, packageVersion } from "../../src/appConfigurationClient";
@@ -1 +1 @@
1
- {"version":3,"file":"http.spec.js","sourceRoot":"","sources":["../../../test/internal/http.spec.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\n// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { parseSyncToken, SyncTokens } from \"../../src/internal/synctokenpolicy\";\nimport * as assert from \"assert\";\nimport { AppConfigurationClient } from \"../../src\";\nimport nock from \"nock\";\nimport {\n getUserAgentPrefix,\n InternalAppConfigurationClientOptions,\n packageVersion\n} from \"../../src/appConfigurationClient\";\nimport {\n createAppConfigurationClientForTests,\n assertThrowsRestError,\n startRecorder\n} from \"../public/utils/testHelpers\";\n\nimport * as chai from \"chai\";\nimport { Recorder } from \"@azure-tools/test-recorder\";\nimport { Context } from \"mocha\";\n\ndescribe(\"http request related tests\", function() {\n describe(\"unit tests\", () => {\n describe(\"parseSyncToken\", () => {\n it(\"can parse various sync tokens\", () => {\n assert.deepEqual(parseSyncToken(\"theid=thevalue;sn=1\"), {\n id: \"theid\",\n value: \"thevalue\",\n sequenceNumber: 1\n });\n });\n\n it(\"throws on invalid sync tokens\", () => {\n for (const invalidToken of [\"invalid token\", \"missing=sequencenumber\", \"key=value;\"]) {\n assert.throws(\n () => parseSyncToken(invalidToken),\n new RegExp(`Failed to parse sync token '${invalidToken}' with regex .+$`)\n );\n }\n });\n });\n\n it(\"useragent\", () => {\n describe(\"with user prefix\", () => {\n const prefix = getUserAgentPrefix(\"MyCustomUserAgent\");\n\n chai.assert.match(\n prefix,\n new RegExp(\n `^MyCustomUserAgent azsdk-js-app-configuration/${packageVersion}+ core-http/[^ ]+.+$`\n ),\n `Using a custom user agent`\n );\n });\n\n describe(\"without user prefix\", () => {\n const prefix = getUserAgentPrefix(undefined);\n\n chai.assert.match(\n prefix,\n new RegExp(`^azsdk-js-app-configuration/${packageVersion}+ core-http/[^ ]+.+$`),\n `Using the default user agent`\n );\n });\n });\n\n describe(\"syncTokens\", () => {\n it(\"basic\", () => {\n const syncTokens = new SyncTokens();\n syncTokens.addSyncTokenFromHeaderValue(\"a=value;sn=0\");\n\n // note that 'sn' is purposefully not serialized\n assert.equal(\"a=value\", syncTokens.getSyncTokenHeaderValue());\n\n syncTokens.addSyncTokenFromHeaderValue(\"b=value2;sn=0\");\n assert.equal(\"a=value,b=value2\", splitAndSort(syncTokens.getSyncTokenHeaderValue()));\n\n // now we'll rev the sequence number field - it should overwrite the original value\n // for b\n syncTokens.addSyncTokenFromHeaderValue(\"b=value2.1;sn=1\");\n assert.equal(\"a=value,b=value2.1\", splitAndSort(syncTokens.getSyncTokenHeaderValue()));\n\n // sending in an older version of an existing key should do nothing\n syncTokens.addSyncTokenFromHeaderValue(\"b=value2.1;sn=0\");\n // note that 'b' didn't change\n assert.equal(\"a=value,b=value2.1\", splitAndSort(syncTokens.getSyncTokenHeaderValue()));\n\n // and sending in multiple values acts the same as passing them in one\n // at a time.\n syncTokens.addSyncTokenFromHeaderValue(\"b=value2.2;sn=100,c=value3;sn=1\");\n assert.equal(\n \"a=value,b=value2.2,c=value3\",\n splitAndSort(syncTokens.getSyncTokenHeaderValue())\n );\n\n // and if we get back undefined (ie, the header wasn't there) then it\n // resets the entire thing\n // (sync tokens are temporary in nature and expire as things are committed\n // and moved out of cache)\n syncTokens.addSyncTokenFromHeaderValue(undefined);\n assert.ok(!syncTokens.getSyncTokenHeaderValue());\n });\n });\n });\n\n describe(\"custom client ID\", () => {\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() {\n await recorder.stop();\n });\n\n it(\"custom client request ID\", async () => {\n const iterator = client.listConfigurationSettings({\n requestOptions: {\n customHeaders: {\n \"x-ms-client-request-id\": \"this is my custom client request id\"\n }\n }\n });\n\n await iterator.next();\n });\n\n it(\"default client request ID\", async () => {\n const iterator = client.listConfigurationSettings();\n await iterator.next();\n });\n });\n\n // these tests are only testing that the requests and responses are\n // properly extracting and sending the sync token header (which is\n // why they appear to not do much of anything meaningful with what\n // they send or reply back with).\n describe(\"request/reply tests for sync token headers\", () => {\n let client: AppConfigurationClient;\n let syncTokens: SyncTokens;\n let scope: nock.Scope;\n\n beforeEach(function(this: Context) {\n if (nock == null || nock.recorder == null) {\n this.skip();\n return;\n }\n\n syncTokens = new SyncTokens();\n\n client =\n createAppConfigurationClientForTests<InternalAppConfigurationClientOptions>({\n syncTokens: syncTokens\n }) || this.skip();\n\n nock.recorder.clear();\n nock.restore();\n nock.cleanAll();\n if (!nock.isActive()) {\n nock.activate();\n }\n scope = nock(/.*/);\n });\n\n afterEach(function(this: Context) {\n if (nock == null || nock.recorder == null) {\n return;\n }\n\n if (!this.currentTest?.isPending()) {\n assert.ok(scope.isDone());\n }\n nock.recorder.clear();\n nock.restore();\n nock.cleanAll();\n });\n\n it(\"policy is setup properly to send sync tokens\", async function() {\n syncTokens.addSyncTokenFromHeaderValue(`hello=world;sn=1`);\n\n const policyScope = nock(/.*/, {\n reqheaders: {\n \"sync-token\": \"hello=world\"\n }\n })\n .get(/.*/)\n .reply(418);\n\n await assertThrowsRestError(\n async () =>\n client.getConfigurationSetting({\n key: \"doesntmatter\"\n }),\n 418\n );\n\n assert.ok(policyScope.isDone());\n });\n\n it(\"addConfigurationSetting\", async () => {\n scope.put(/.*/).reply(200, \"\", { \"sync-token\": \"addConfigurationSetting=value;sn=1\" });\n\n await client.addConfigurationSetting({\n key: \"doesntmatter\"\n });\n\n assert.equal(syncTokens.getSyncTokenHeaderValue(), \"addConfigurationSetting=value\");\n });\n\n it(\"getConfigurationSetting\", async () => {\n scope.get(/.*/).reply(200, \"\", { \"sync-token\": \"getConfigurationSetting=value;sn=1\" });\n\n await client.getConfigurationSetting({\n key: \"doesntmatter\"\n });\n\n assert.equal(syncTokens.getSyncTokenHeaderValue(), \"getConfigurationSetting=value\");\n });\n\n it(\"setConfigurationSetting\", async () => {\n scope.put(/.*/).reply(200, \"\", { \"sync-token\": \"setConfigurationSetting=value;sn=1\" });\n\n await client.setConfigurationSetting({\n key: \"doesntmatter\"\n });\n\n assert.equal(syncTokens.getSyncTokenHeaderValue(), \"setConfigurationSetting=value\");\n });\n\n it(\"deleteConfigurationSetting\", async () => {\n scope.delete(/.*/).reply(200, \"\", { \"sync-token\": \"deleteConfigurationSetting=value;sn=1\" });\n\n await client.deleteConfigurationSetting({\n key: \"doesntmatter\"\n });\n\n assert.equal(syncTokens.getSyncTokenHeaderValue(), \"deleteConfigurationSetting=value\");\n });\n\n it(\"listConfigurationSetting\", async () => {\n scope.get(/.*/).reply(200, \"\", { \"sync-token\": \"listConfigurationSetting=value;sn=1\" });\n\n const iterator = client.listConfigurationSettings({\n keyFilter: \"doesntmatter\"\n });\n\n await iterator.next();\n assert.equal(syncTokens.getSyncTokenHeaderValue(), \"listConfigurationSetting=value\");\n });\n\n it(\"listRevisions\", async () => {\n scope.get(/.*/).reply(200, \"\", { \"sync-token\": \"listRevisions=value;sn=1\" });\n\n const iterator = client.listRevisions({\n keyFilter: \"doesntmatter\"\n });\n\n await iterator.next();\n assert.equal(syncTokens.getSyncTokenHeaderValue(), \"listRevisions=value\");\n });\n\n it(\"setReadOnly (clear and set)\", async () => {\n scope.put(/.*/).reply(200, \"\", { \"sync-token\": \"setReadOnly=value;sn=1\" });\n\n scope.delete(/.*/).reply(200, \"\", { \"sync-token\": \"clearReadOnly=value;sn=1\" });\n\n await client.setReadOnly(\n {\n key: \"doesntmatter\"\n },\n true\n );\n\n assert.equal(syncTokens.getSyncTokenHeaderValue(), \"setReadOnly=value\");\n\n syncTokens.addSyncTokenFromHeaderValue(undefined); // clear out any previous sync tokens\n\n await client.setReadOnly(\n {\n key: \"doesntmatter\"\n },\n false\n );\n\n assert.equal(syncTokens.getSyncTokenHeaderValue(), \"clearReadOnly=value\");\n });\n });\n\n describe(\"syncToken\", async () => {\n it(\"update sync token\", async () => {\n const syncTokens = new SyncTokens();\n syncTokens.addSyncTokenFromHeaderValue(\"a=value;sn=0\");\n const client = new AppConfigurationClient(\n \"Endpoint=https://endpoint.azconfig.io;Id=abc;Secret=123\",\n { syncTokens } as InternalAppConfigurationClientOptions\n );\n assert.equal(\n syncTokens[\"_currentSyncTokens\"].size,\n 1,\n \"Unexpected number of syncTokens before the `update` call\"\n );\n client.updateSyncToken(\"b=value;sn=3\");\n assert.equal(\n syncTokens[\"_currentSyncTokens\"].size,\n 2,\n \"Unexpected number of syncTokens after the `update` call\"\n );\n assert.deepEqual(\n syncTokens[\"_currentSyncTokens\"].get(\"a\"),\n { id: \"a\", value: \"value\", sequenceNumber: 0 },\n \"Unexpected object present for key `a`\"\n );\n assert.deepEqual(\n syncTokens[\"_currentSyncTokens\"].get(\"b\"),\n { id: \"b\", value: \"value\", sequenceNumber: 3 },\n \"Unexpected object present for key `b`\"\n );\n });\n });\n});\n\nfunction splitAndSort(syncTokens: string | undefined): string {\n if (!syncTokens) {\n throw new Error(\"Undefined can't be split and sorted\");\n }\n\n return syncTokens\n .split(\",\")\n .sort()\n .join(\",\");\n}\n"]}
1
+ {"version":3,"file":"http.spec.js","sourceRoot":"","sources":["../../../test/internal/http.spec.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\n// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { parseSyncToken, SyncTokens } from \"../../src/internal/synctokenpolicy\";\nimport { assert } from \"chai\";\nimport { AppConfigurationClient } from \"../../src\";\nimport nock from \"nock\";\nimport {\n getUserAgentPrefix,\n InternalAppConfigurationClientOptions,\n packageVersion\n} from \"../../src/appConfigurationClient\";\nimport {\n createAppConfigurationClientForTests,\n assertThrowsRestError,\n startRecorder\n} from \"../public/utils/testHelpers\";\n\nimport * as chai from \"chai\";\nimport { Recorder } from \"@azure-tools/test-recorder\";\nimport { Context } from \"mocha\";\n\ndescribe(\"http request related tests\", function() {\n describe(\"unit tests\", () => {\n describe(\"parseSyncToken\", () => {\n it(\"can parse various sync tokens\", () => {\n assert.deepEqual(parseSyncToken(\"theid=thevalue;sn=1\"), {\n id: \"theid\",\n value: \"thevalue\",\n sequenceNumber: 1\n });\n });\n\n it(\"throws on invalid sync tokens\", () => {\n for (const invalidToken of [\"invalid token\", \"missing=sequencenumber\", \"key=value;\"]) {\n assert.throws(\n () => parseSyncToken(invalidToken),\n new RegExp(`Failed to parse sync token '${invalidToken}' with regex .+$`)\n );\n }\n });\n });\n\n it(\"useragent\", () => {\n describe(\"with user prefix\", () => {\n const prefix = getUserAgentPrefix(\"MyCustomUserAgent\");\n\n chai.assert.match(\n prefix,\n new RegExp(\n `^MyCustomUserAgent azsdk-js-app-configuration/${packageVersion}+ core-http/[^ ]+.+$`\n ),\n `Using a custom user agent`\n );\n });\n\n describe(\"without user prefix\", () => {\n const prefix = getUserAgentPrefix(undefined);\n\n chai.assert.match(\n prefix,\n new RegExp(`^azsdk-js-app-configuration/${packageVersion}+ core-http/[^ ]+.+$`),\n `Using the default user agent`\n );\n });\n });\n\n describe(\"syncTokens\", () => {\n it(\"basic\", () => {\n const syncTokens = new SyncTokens();\n syncTokens.addSyncTokenFromHeaderValue(\"a=value;sn=0\");\n\n // note that 'sn' is purposefully not serialized\n assert.equal(\"a=value\", syncTokens.getSyncTokenHeaderValue());\n\n syncTokens.addSyncTokenFromHeaderValue(\"b=value2;sn=0\");\n assert.equal(\"a=value,b=value2\", splitAndSort(syncTokens.getSyncTokenHeaderValue()));\n\n // now we'll rev the sequence number field - it should overwrite the original value\n // for b\n syncTokens.addSyncTokenFromHeaderValue(\"b=value2.1;sn=1\");\n assert.equal(\"a=value,b=value2.1\", splitAndSort(syncTokens.getSyncTokenHeaderValue()));\n\n // sending in an older version of an existing key should do nothing\n syncTokens.addSyncTokenFromHeaderValue(\"b=value2.1;sn=0\");\n // note that 'b' didn't change\n assert.equal(\"a=value,b=value2.1\", splitAndSort(syncTokens.getSyncTokenHeaderValue()));\n\n // and sending in multiple values acts the same as passing them in one\n // at a time.\n syncTokens.addSyncTokenFromHeaderValue(\"b=value2.2;sn=100,c=value3;sn=1\");\n assert.equal(\n \"a=value,b=value2.2,c=value3\",\n splitAndSort(syncTokens.getSyncTokenHeaderValue())\n );\n\n // and if we get back undefined (ie, the header wasn't there) then it\n // resets the entire thing\n // (sync tokens are temporary in nature and expire as things are committed\n // and moved out of cache)\n syncTokens.addSyncTokenFromHeaderValue(undefined);\n assert.ok(!syncTokens.getSyncTokenHeaderValue());\n });\n });\n });\n\n describe(\"custom client ID\", () => {\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() {\n await recorder.stop();\n });\n\n it(\"custom client request ID\", async () => {\n const iterator = client.listConfigurationSettings({\n requestOptions: {\n customHeaders: {\n \"x-ms-client-request-id\": \"this is my custom client request id\"\n }\n }\n });\n\n await iterator.next();\n });\n\n it(\"default client request ID\", async () => {\n const iterator = client.listConfigurationSettings();\n await iterator.next();\n });\n });\n\n // these tests are only testing that the requests and responses are\n // properly extracting and sending the sync token header (which is\n // why they appear to not do much of anything meaningful with what\n // they send or reply back with).\n describe(\"request/reply tests for sync token headers\", () => {\n let client: AppConfigurationClient;\n let syncTokens: SyncTokens;\n let scope: nock.Scope;\n\n beforeEach(function(this: Context) {\n if (nock == null || nock.recorder == null) {\n this.skip();\n return;\n }\n\n syncTokens = new SyncTokens();\n\n client =\n createAppConfigurationClientForTests<InternalAppConfigurationClientOptions>({\n syncTokens: syncTokens\n }) || this.skip();\n\n nock.recorder.clear();\n nock.restore();\n nock.cleanAll();\n if (!nock.isActive()) {\n nock.activate();\n }\n scope = nock(/.*/);\n });\n\n afterEach(function(this: Context) {\n if (nock == null || nock.recorder == null) {\n return;\n }\n\n if (!this.currentTest?.isPending()) {\n assert.ok(scope.isDone());\n }\n nock.recorder.clear();\n nock.restore();\n nock.cleanAll();\n });\n\n it(\"policy is setup properly to send sync tokens\", async function() {\n syncTokens.addSyncTokenFromHeaderValue(`hello=world;sn=1`);\n\n const policyScope = nock(/.*/, {\n reqheaders: {\n \"sync-token\": \"hello=world\"\n }\n })\n .get(/.*/)\n .reply(418);\n\n await assertThrowsRestError(\n async () =>\n client.getConfigurationSetting({\n key: \"doesntmatter\"\n }),\n 418\n );\n\n assert.ok(policyScope.isDone());\n });\n\n it(\"addConfigurationSetting\", async () => {\n scope.put(/.*/).reply(200, \"\", { \"sync-token\": \"addConfigurationSetting=value;sn=1\" });\n\n await client.addConfigurationSetting({\n key: \"doesntmatter\"\n });\n\n assert.equal(syncTokens.getSyncTokenHeaderValue(), \"addConfigurationSetting=value\");\n });\n\n it(\"getConfigurationSetting\", async () => {\n scope.get(/.*/).reply(200, \"\", { \"sync-token\": \"getConfigurationSetting=value;sn=1\" });\n\n await client.getConfigurationSetting({\n key: \"doesntmatter\"\n });\n\n assert.equal(syncTokens.getSyncTokenHeaderValue(), \"getConfigurationSetting=value\");\n });\n\n it(\"setConfigurationSetting\", async () => {\n scope.put(/.*/).reply(200, \"\", { \"sync-token\": \"setConfigurationSetting=value;sn=1\" });\n\n await client.setConfigurationSetting({\n key: \"doesntmatter\"\n });\n\n assert.equal(syncTokens.getSyncTokenHeaderValue(), \"setConfigurationSetting=value\");\n });\n\n it(\"deleteConfigurationSetting\", async () => {\n scope.delete(/.*/).reply(200, \"\", { \"sync-token\": \"deleteConfigurationSetting=value;sn=1\" });\n\n await client.deleteConfigurationSetting({\n key: \"doesntmatter\"\n });\n\n assert.equal(syncTokens.getSyncTokenHeaderValue(), \"deleteConfigurationSetting=value\");\n });\n\n it(\"listConfigurationSetting\", async () => {\n scope.get(/.*/).reply(200, \"\", { \"sync-token\": \"listConfigurationSetting=value;sn=1\" });\n\n const iterator = client.listConfigurationSettings({\n keyFilter: \"doesntmatter\"\n });\n\n await iterator.next();\n assert.equal(syncTokens.getSyncTokenHeaderValue(), \"listConfigurationSetting=value\");\n });\n\n it(\"listRevisions\", async () => {\n scope.get(/.*/).reply(200, \"\", { \"sync-token\": \"listRevisions=value;sn=1\" });\n\n const iterator = client.listRevisions({\n keyFilter: \"doesntmatter\"\n });\n\n await iterator.next();\n assert.equal(syncTokens.getSyncTokenHeaderValue(), \"listRevisions=value\");\n });\n\n it(\"setReadOnly (clear and set)\", async () => {\n scope.put(/.*/).reply(200, \"\", { \"sync-token\": \"setReadOnly=value;sn=1\" });\n\n scope.delete(/.*/).reply(200, \"\", { \"sync-token\": \"clearReadOnly=value;sn=1\" });\n\n await client.setReadOnly(\n {\n key: \"doesntmatter\"\n },\n true\n );\n\n assert.equal(syncTokens.getSyncTokenHeaderValue(), \"setReadOnly=value\");\n\n syncTokens.addSyncTokenFromHeaderValue(undefined); // clear out any previous sync tokens\n\n await client.setReadOnly(\n {\n key: \"doesntmatter\"\n },\n false\n );\n\n assert.equal(syncTokens.getSyncTokenHeaderValue(), \"clearReadOnly=value\");\n });\n });\n\n describe(\"syncToken\", async () => {\n it(\"update sync token\", async () => {\n const syncTokens = new SyncTokens();\n syncTokens.addSyncTokenFromHeaderValue(\"a=value;sn=0\");\n const client = new AppConfigurationClient(\n \"Endpoint=https://endpoint.azconfig.io;Id=abc;Secret=123\",\n { syncTokens } as InternalAppConfigurationClientOptions\n );\n assert.equal(\n syncTokens[\"_currentSyncTokens\"].size,\n 1,\n \"Unexpected number of syncTokens before the `update` call\"\n );\n client.updateSyncToken(\"b=value;sn=3\");\n assert.equal(\n syncTokens[\"_currentSyncTokens\"].size,\n 2,\n \"Unexpected number of syncTokens after the `update` call\"\n );\n assert.deepEqual(\n syncTokens[\"_currentSyncTokens\"].get(\"a\"),\n { id: \"a\", value: \"value\", sequenceNumber: 0 },\n \"Unexpected object present for key `a`\"\n );\n assert.deepEqual(\n syncTokens[\"_currentSyncTokens\"].get(\"b\"),\n { id: \"b\", value: \"value\", sequenceNumber: 3 },\n \"Unexpected object present for key `b`\"\n );\n });\n });\n});\n\nfunction splitAndSort(syncTokens: string | undefined): string {\n if (!syncTokens) {\n throw new Error(\"Undefined can't be split and sorted\");\n }\n\n return syncTokens\n .split(\",\")\n .sort()\n .join(\",\");\n}\n"]}
@@ -1,6 +1,6 @@
1
1
  // Copyright (c) Microsoft Corporation.
2
2
  // Licensed under the MIT license.
3
- import * as assert from "assert";
3
+ import { assert } from "chai";
4
4
  import { isNode } from "@azure/core-http";
5
5
  import { packageVersion } from "../../src/appConfigurationClient";
6
6
  import path from "path";
@@ -1 +1 @@
1
- {"version":3,"file":"package.spec.js","sourceRoot":"","sources":["../../../test/internal/package.spec.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AACjC,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE1C,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAElE,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,IAAI,CAAC;AAEpB,QAAQ,CAAC,2BAA2B,EAAE,GAAG,EAAE;IACzC,2FAA2F;IAC3F,yBAAyB;IACzB,EAAE,CAAC,+CAA+C,EAAE;QAClD,IAAI,CAAC,MAAM,EAAE;YACX,IAAI,CAAC,IAAI,EAAE,CAAC;SACb;QAED,IAAI,mBAEH,CAAC;QAEF,IAAI;YACF,wBAAwB;YACxB,mBAAmB,GAAG,IAAI,CAAC,KAAK,CAC9B,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,uBAAuB,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CACtF,CAAC;SACH;QAAC,OAAO,CAAC,EAAE;YACV,iBAAiB;YACjB,mBAAmB,GAAG,IAAI,CAAC,KAAK,CAC9B,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,iBAAiB,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAChF,CAAC;SACH;QAED,MAAM,CAAC,WAAW,CAAC,mBAAmB,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;IAClE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport * as assert from \"assert\";\nimport { isNode } from \"@azure/core-http\";\n\nimport { packageVersion } from \"../../src/appConfigurationClient\";\nimport { Context } from \"mocha\";\nimport path from \"path\";\nimport fs from \"fs\";\n\ndescribe(\"packagejson related tests\", () => {\n // if this test is failing you need to update the contant `packageVersion` referenced above\n // in the generated code.\n it(\"user agent string matches the package version\", function(this: Context) {\n if (!isNode) {\n this.skip();\n }\n\n let packageJsonContents: {\n [property: string]: string;\n };\n\n try {\n // For integration tests\n packageJsonContents = JSON.parse(\n fs.readFileSync(path.join(__dirname, \"../../../package.json\"), { encoding: \"utf-8\" })\n );\n } catch (e) {\n // For unit tests\n packageJsonContents = JSON.parse(\n fs.readFileSync(path.join(__dirname, \"../package.json\"), { encoding: \"utf-8\" })\n );\n }\n\n assert.strictEqual(packageJsonContents.version, packageVersion);\n });\n});\n"]}
1
+ {"version":3,"file":"package.spec.js","sourceRoot":"","sources":["../../../test/internal/package.spec.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAC9B,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE1C,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAElE,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,IAAI,CAAC;AAEpB,QAAQ,CAAC,2BAA2B,EAAE,GAAG,EAAE;IACzC,2FAA2F;IAC3F,yBAAyB;IACzB,EAAE,CAAC,+CAA+C,EAAE;QAClD,IAAI,CAAC,MAAM,EAAE;YACX,IAAI,CAAC,IAAI,EAAE,CAAC;SACb;QAED,IAAI,mBAEH,CAAC;QAEF,IAAI;YACF,wBAAwB;YACxB,mBAAmB,GAAG,IAAI,CAAC,KAAK,CAC9B,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,uBAAuB,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CACtF,CAAC;SACH;QAAC,OAAO,CAAC,EAAE;YACV,iBAAiB;YACjB,mBAAmB,GAAG,IAAI,CAAC,KAAK,CAC9B,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,iBAAiB,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAChF,CAAC;SACH;QAED,MAAM,CAAC,WAAW,CAAC,mBAAmB,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;IAClE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport { assert } from \"chai\";\nimport { isNode } from \"@azure/core-http\";\n\nimport { packageVersion } from \"../../src/appConfigurationClient\";\nimport { Context } from \"mocha\";\nimport path from \"path\";\nimport fs from \"fs\";\n\ndescribe(\"packagejson related tests\", () => {\n // if this test is failing you need to update the contant `packageVersion` referenced above\n // in the generated code.\n it(\"user agent string matches the package version\", function(this: Context) {\n if (!isNode) {\n this.skip();\n }\n\n let packageJsonContents: {\n [property: string]: string;\n };\n\n try {\n // For integration tests\n packageJsonContents = JSON.parse(\n fs.readFileSync(path.join(__dirname, \"../../../package.json\"), { encoding: \"utf-8\" })\n );\n } catch (e) {\n // For unit tests\n packageJsonContents = JSON.parse(\n fs.readFileSync(path.join(__dirname, \"../package.json\"), { encoding: \"utf-8\" })\n );\n }\n\n assert.strictEqual(packageJsonContents.version, packageVersion);\n });\n});\n"]}
@@ -2,7 +2,7 @@
2
2
  // Licensed under the MIT license.
3
3
  import { createSpan, trace } from "../../src/internal/tracingHelpers";
4
4
  import { SpanStatusCode } from "@azure/core-tracing";
5
- import * as assert from "assert";
5
+ import { assert } from "chai";
6
6
  import sinon from "sinon";
7
7
  import { AppConfigurationClient } from "../../src/appConfigurationClient";
8
8
  describe("tracingHelpers", () => {
@@ -44,6 +44,9 @@ describe("tracingHelpers", () => {
44
44
  assert.fail("Exception should have been thrown from `trace` since the inner action threw");
45
45
  }
46
46
  catch (err) {
47
+ if (!(err instanceof Error)) {
48
+ throw new Error("Error is not recognized");
49
+ }
47
50
  assert.equal(err.message, "Purposefully thrown error");
48
51
  }
49
52
  assert.ok(setStatusStub, "setStatus should have been called");
@@ -1 +1 @@
1
- {"version":3,"file":"tracingHelpers.spec.js","sourceRoot":"","sources":["../../../test/internal/tracingHelpers.spec.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport { createSpan, trace } from \"../../src/internal/tracingHelpers\";\nimport { Span, SpanStatus, SpanStatusCode } from \"@azure/core-tracing\";\n\nimport * as assert from \"assert\";\nimport sinon from \"sinon\";\nimport { AppConfigurationClient } from \"../../src/appConfigurationClient\";\nimport { AbortSignalLike, OperationOptions } from \"@azure/core-http\";\nimport { OperationTracingOptions } from \"@azure/core-tracing\";\n\ndescribe(\"tracingHelpers\", () => {\n it(\"trace OK\", async () => {\n let setStatusStub: sinon.SinonStub<[SpanStatus], Span> | undefined;\n let endStub: sinon.SinonStub | undefined;\n\n const fakeCreateSpan = <\n T extends {\n tracingOptions?: OperationTracingOptions | undefined;\n }\n >(\n operationName: string,\n operationOptions: T | undefined\n ): {\n span: Span;\n updatedOptions: T;\n } => {\n assert.deepEqual(operationName, \"addConfigurationSetting\");\n\n const createdSpan = createSpan(operationName, operationOptions);\n\n setStatusStub = sinon.stub(createdSpan.span, \"setStatus\");\n endStub = sinon.stub(createdSpan.span, \"end\");\n\n return createdSpan;\n };\n\n await trace(\n \"addConfigurationSetting\",\n {\n tracingOptions: {}\n },\n async (_newOptions, _span) => {\n /** empty */\n },\n fakeCreateSpan\n );\n\n assert.equal(setStatusStub?.called, true);\n\n const [status] = setStatusStub!.args[0];\n\n assert.equal(status.code, SpanStatusCode.OK);\n assert.equal(endStub?.called, true);\n });\n\n it(\"trace ERROR\", async () => {\n let setStatusStub: sinon.SinonStub<[SpanStatus], Span> | undefined;\n let endStub: sinon.SinonStub | undefined;\n\n try {\n await trace(\n \"addConfigurationSetting\",\n {\n tracingOptions: {}\n },\n async (_options: any, _span: Span) => {\n throw new Error(\"Purposefully thrown error\");\n },\n <\n T extends {\n tracingOptions?: OperationTracingOptions | undefined;\n }\n >(\n operationName: string,\n operationOptions: T | undefined\n ): {\n span: Span;\n updatedOptions: T;\n } => {\n assert.deepEqual(operationName, \"addConfigurationSetting\");\n\n const createdSpan = createSpan(operationName, operationOptions);\n\n setStatusStub = sinon.stub(createdSpan.span, \"setStatus\");\n endStub = sinon.stub(createdSpan.span, \"end\");\n\n return createdSpan;\n }\n );\n\n assert.fail(\"Exception should have been thrown from `trace` since the inner action threw\");\n } catch (err) {\n assert.equal(err.message, \"Purposefully thrown error\");\n }\n\n assert.ok(setStatusStub, \"setStatus should have been called\");\n assert.equal(\n setStatusStub?.args[0][0].code,\n SpanStatusCode.ERROR,\n \"Any thrown exception causes the span status to be set to an error\"\n );\n\n assert.equal(endStub?.called, true);\n });\n\n it(\"tracing is set up for all methods\", async () => {\n const appConfigurationClient = new AppConfigurationClient(\n \"Endpoint=endpoint;Id=id;Secret=secret\"\n );\n\n const traceData = {\n operationName: \"\",\n options: undefined as OperationOptions | undefined\n };\n\n appConfigurationClient[\"_trace\"] = async (operationName, options, _fn) => {\n traceData.operationName = operationName;\n traceData.options = options;\n return {} as any;\n };\n\n const operationOptions: OperationOptions = {\n abortSignal: ({} as any) as AbortSignalLike,\n tracingOptions: {\n hello: \"world\"\n } as OperationTracingOptions\n };\n\n await appConfigurationClient.addConfigurationSetting(\n { key: \"ignored\", value: \"ignored\" },\n operationOptions\n );\n assert.deepEqual(traceData, {\n operationName: \"addConfigurationSetting\",\n options: operationOptions\n });\n\n await appConfigurationClient.setConfigurationSetting(\n { key: \"ignored\", value: \"ignored\" },\n operationOptions\n );\n assert.deepEqual(traceData, {\n operationName: \"setConfigurationSetting\",\n options: operationOptions\n });\n\n await appConfigurationClient.getConfigurationSetting({ key: \"ignored\" }, operationOptions);\n assert.deepEqual(traceData, {\n operationName: \"getConfigurationSetting\",\n options: operationOptions\n });\n\n await appConfigurationClient.setReadOnly({ key: \"ignored\" }, true, operationOptions);\n assert.deepEqual(traceData, {\n operationName: \"setReadOnly\",\n options: operationOptions\n });\n\n await appConfigurationClient.deleteConfigurationSetting({ key: \"ignored\" }, operationOptions);\n assert.deepEqual(traceData, {\n operationName: \"deleteConfigurationSetting\",\n options: operationOptions\n });\n\n const it = appConfigurationClient.listConfigurationSettings({\n keyFilter: \"ignored\",\n ...operationOptions\n });\n await it.next();\n\n assert.deepEqual(traceData, {\n operationName: \"listConfigurationSettings\",\n options: { ...operationOptions, keyFilter: \"ignored\" }\n });\n\n const it2 = appConfigurationClient.listRevisions({ keyFilter: \"ignored\", ...operationOptions });\n await it2.next();\n\n assert.deepEqual(traceData, {\n operationName: \"listRevisions\",\n options: { ...operationOptions, keyFilter: \"ignored\" }\n });\n });\n});\n"]}
1
+ {"version":3,"file":"tracingHelpers.spec.js","sourceRoot":"","sources":["../../../test/internal/tracingHelpers.spec.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport { createSpan, trace } from \"../../src/internal/tracingHelpers\";\nimport { Span, SpanStatus, SpanStatusCode } from \"@azure/core-tracing\";\n\nimport { assert } from \"chai\";\nimport sinon from \"sinon\";\nimport { AppConfigurationClient } from \"../../src/appConfigurationClient\";\nimport { AbortSignalLike, OperationOptions } from \"@azure/core-http\";\nimport { OperationTracingOptions } from \"@azure/core-tracing\";\n\ndescribe(\"tracingHelpers\", () => {\n it(\"trace OK\", async () => {\n let setStatusStub: sinon.SinonStub<[SpanStatus], Span> | undefined;\n let endStub: sinon.SinonStub | undefined;\n\n const fakeCreateSpan = <\n T extends {\n tracingOptions?: OperationTracingOptions | undefined;\n }\n >(\n operationName: string,\n operationOptions: T | undefined\n ): {\n span: Span;\n updatedOptions: T;\n } => {\n assert.deepEqual(operationName, \"addConfigurationSetting\");\n\n const createdSpan = createSpan(operationName, operationOptions);\n\n setStatusStub = sinon.stub(createdSpan.span, \"setStatus\");\n endStub = sinon.stub(createdSpan.span, \"end\");\n\n return createdSpan;\n };\n\n await trace(\n \"addConfigurationSetting\",\n {\n tracingOptions: {}\n },\n async (_newOptions, _span) => {\n /** empty */\n },\n fakeCreateSpan\n );\n\n assert.equal(setStatusStub?.called, true);\n\n const [status] = setStatusStub!.args[0];\n\n assert.equal(status.code, SpanStatusCode.OK);\n assert.equal(endStub?.called, true);\n });\n\n it(\"trace ERROR\", async () => {\n let setStatusStub: sinon.SinonStub<[SpanStatus], Span> | undefined;\n let endStub: sinon.SinonStub | undefined;\n\n try {\n await trace(\n \"addConfigurationSetting\",\n {\n tracingOptions: {}\n },\n async (_options: any, _span: Span) => {\n throw new Error(\"Purposefully thrown error\");\n },\n <\n T extends {\n tracingOptions?: OperationTracingOptions | undefined;\n }\n >(\n operationName: string,\n operationOptions: T | undefined\n ): {\n span: Span;\n updatedOptions: T;\n } => {\n assert.deepEqual(operationName, \"addConfigurationSetting\");\n\n const createdSpan = createSpan(operationName, operationOptions);\n\n setStatusStub = sinon.stub(createdSpan.span, \"setStatus\");\n endStub = sinon.stub(createdSpan.span, \"end\");\n\n return createdSpan;\n }\n );\n\n assert.fail(\"Exception should have been thrown from `trace` since the inner action threw\");\n } catch (err) {\n if (!(err instanceof Error)) {\n throw new Error(\"Error is not recognized\");\n }\n assert.equal(err.message, \"Purposefully thrown error\");\n }\n\n assert.ok(setStatusStub, \"setStatus should have been called\");\n assert.equal(\n setStatusStub?.args[0][0].code,\n SpanStatusCode.ERROR,\n \"Any thrown exception causes the span status to be set to an error\"\n );\n\n assert.equal(endStub?.called, true);\n });\n\n it(\"tracing is set up for all methods\", async () => {\n const appConfigurationClient = new AppConfigurationClient(\n \"Endpoint=endpoint;Id=id;Secret=secret\"\n );\n\n const traceData = {\n operationName: \"\",\n options: undefined as OperationOptions | undefined\n };\n\n appConfigurationClient[\"_trace\"] = async (operationName, options, _fn) => {\n traceData.operationName = operationName;\n traceData.options = options;\n return {} as any;\n };\n\n const operationOptions: OperationOptions = {\n abortSignal: ({} as any) as AbortSignalLike,\n tracingOptions: {\n hello: \"world\"\n } as OperationTracingOptions\n };\n\n await appConfigurationClient.addConfigurationSetting(\n { key: \"ignored\", value: \"ignored\" },\n operationOptions\n );\n assert.deepEqual(traceData, {\n operationName: \"addConfigurationSetting\",\n options: operationOptions\n });\n\n await appConfigurationClient.setConfigurationSetting(\n { key: \"ignored\", value: \"ignored\" },\n operationOptions\n );\n assert.deepEqual(traceData, {\n operationName: \"setConfigurationSetting\",\n options: operationOptions\n });\n\n await appConfigurationClient.getConfigurationSetting({ key: \"ignored\" }, operationOptions);\n assert.deepEqual(traceData, {\n operationName: \"getConfigurationSetting\",\n options: operationOptions\n });\n\n await appConfigurationClient.setReadOnly({ key: \"ignored\" }, true, operationOptions);\n assert.deepEqual(traceData, {\n operationName: \"setReadOnly\",\n options: operationOptions\n });\n\n await appConfigurationClient.deleteConfigurationSetting({ key: \"ignored\" }, operationOptions);\n assert.deepEqual(traceData, {\n operationName: \"deleteConfigurationSetting\",\n options: operationOptions\n });\n\n const it = appConfigurationClient.listConfigurationSettings({\n keyFilter: \"ignored\",\n ...operationOptions\n });\n await it.next();\n\n assert.deepEqual(traceData, {\n operationName: \"listConfigurationSettings\",\n options: { ...operationOptions, keyFilter: \"ignored\" } as OperationOptions & {\n keyFilter?: string;\n }\n });\n\n const it2 = appConfigurationClient.listRevisions({ keyFilter: \"ignored\", ...operationOptions });\n await it2.next();\n\n assert.deepEqual(traceData, {\n operationName: \"listRevisions\",\n options: { ...operationOptions, keyFilter: \"ignored\" } as OperationOptions & {\n keyFilter?: string;\n }\n });\n });\n});\n"]}
@@ -2,7 +2,7 @@
2
2
  // Licensed under the MIT license.
3
3
  import { AppConfigurationClient } from "../../src";
4
4
  import { startRecorder, getTokenAuthenticationCredential } from "./utils/testHelpers";
5
- import * as assert from "assert";
5
+ import { assert } from "chai";
6
6
  describe("Authentication", () => {
7
7
  let credsAndEndpoint;
8
8
  let recorder;
@@ -1 +1 @@
1
- {"version":3,"file":"auth.spec.js","sourceRoot":"","sources":["../../../test/public/auth.spec.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,OAAO,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EACL,aAAa,EACb,gCAAgC,EAEjC,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AAIjC,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;IAC9B,IAAI,gBAAkC,CAAC;IACvC,IAAI,QAAkB,CAAC;IAEvB,UAAU,CAAC;QACT,QAAQ,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;QAC/B,gBAAgB,GAAG,gCAAgC,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;IACvE,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,KAAK;QACb,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IACxB,CAAC,CAAC,CAAC;IACH,EAAE,CAAC,4BAA4B,EAAE,KAAK;QACpC,MAAM,MAAM,GAAG,IAAI,sBAAsB,CACvC,gBAAgB,CAAC,QAAQ,EACzB,gBAAgB,CAAC,UAAU,CAC5B,CAAC;QAEF,4DAA4D;QAC5D,uCAAuC;QACvC,MAAM,MAAM,CAAC,uBAAuB,CAAC;YACnC,GAAG,EAAE,6BAA6B,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,EAAE;YACzE,KAAK,EAAE,OAAO;SACf,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,gDAAgD,EAAE,GAAG,EAAE;IAC9D,EAAE,CAAC,wDAAwD,EAAE,GAAG,EAAE;QAChE,MAAM,CAAC,MAAM,CACX,GAAG,EAAE,CAAC,IAAI,sBAAsB,CAAC,8BAA8B,CAAC,EAChE,6HAA6H,CAC9H,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0DAA0D,EAAE,GAAG,EAAE;QAClE,MAAM,CAAC,MAAM,CACX,GAAG,EAAE,CAAC,IAAI,sBAAsB,CAAC,SAAgB,CAAC,EAClD,6HAA6H,CAC9H,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport { AppConfigurationClient } from \"../../src\";\nimport {\n startRecorder,\n getTokenAuthenticationCredential,\n CredsAndEndpoint\n} from \"./utils/testHelpers\";\nimport * as assert from \"assert\";\nimport { Recorder } from \"@azure-tools/test-recorder\";\nimport { Context } from \"mocha\";\n\ndescribe(\"Authentication\", () => {\n let credsAndEndpoint: CredsAndEndpoint;\n let recorder: Recorder;\n\n beforeEach(function(this: Context) {\n recorder = startRecorder(this);\n credsAndEndpoint = getTokenAuthenticationCredential() || this.skip();\n });\n\n afterEach(async function() {\n await recorder.stop();\n });\n it(\"token authentication works\", async function() {\n const client = new AppConfigurationClient(\n credsAndEndpoint.endpoint,\n credsAndEndpoint.credential\n );\n\n // it doesn't matter if any data comes in so long as we were\n // able to connect and call the service\n await client.addConfigurationSetting({\n key: `token-authentication-test-${recorder.newDate(\"label-1\").valueOf()}`,\n value: \"hello\"\n });\n });\n});\n\ndescribe(\"AppConfigurationClient constructor error cases\", () => {\n it(\"invalid connection string gives a decent error message\", () => {\n assert.throws(\n () => new AppConfigurationClient(\"an invalid connection string\"),\n /Invalid connection string\\. Valid connection strings should match the regex 'Endpoint=\\(\\.\\*\\);Id=\\(\\.\\*\\);Secret=\\(\\.\\*\\)'/\n );\n });\n\n it(\"undefined connection string gives a decent error message\", () => {\n assert.throws(\n () => new AppConfigurationClient(undefined as any),\n /Invalid connection string\\. Valid connection strings should match the regex 'Endpoint=\\(\\.\\*\\);Id=\\(\\.\\*\\);Secret=\\(\\.\\*\\)'/\n );\n });\n});\n"]}
1
+ {"version":3,"file":"auth.spec.js","sourceRoot":"","sources":["../../../test/public/auth.spec.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,OAAO,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EACL,aAAa,EACb,gCAAgC,EAEjC,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAI9B,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;IAC9B,IAAI,gBAAkC,CAAC;IACvC,IAAI,QAAkB,CAAC;IAEvB,UAAU,CAAC;QACT,QAAQ,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;QAC/B,gBAAgB,GAAG,gCAAgC,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;IACvE,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,KAAK;QACb,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IACxB,CAAC,CAAC,CAAC;IACH,EAAE,CAAC,4BAA4B,EAAE,KAAK;QACpC,MAAM,MAAM,GAAG,IAAI,sBAAsB,CACvC,gBAAgB,CAAC,QAAQ,EACzB,gBAAgB,CAAC,UAAU,CAC5B,CAAC;QAEF,4DAA4D;QAC5D,uCAAuC;QACvC,MAAM,MAAM,CAAC,uBAAuB,CAAC;YACnC,GAAG,EAAE,6BAA6B,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,EAAE;YACzE,KAAK,EAAE,OAAO;SACf,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,gDAAgD,EAAE,GAAG,EAAE;IAC9D,EAAE,CAAC,wDAAwD,EAAE,GAAG,EAAE;QAChE,MAAM,CAAC,MAAM,CACX,GAAG,EAAE,CAAC,IAAI,sBAAsB,CAAC,8BAA8B,CAAC,EAChE,6HAA6H,CAC9H,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0DAA0D,EAAE,GAAG,EAAE;QAClE,MAAM,CAAC,MAAM,CACX,GAAG,EAAE,CAAC,IAAI,sBAAsB,CAAC,SAAgB,CAAC,EAClD,6HAA6H,CAC9H,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport { AppConfigurationClient } from \"../../src\";\nimport {\n startRecorder,\n getTokenAuthenticationCredential,\n CredsAndEndpoint\n} from \"./utils/testHelpers\";\nimport { assert } from \"chai\";\nimport { Recorder } from \"@azure-tools/test-recorder\";\nimport { Context } from \"mocha\";\n\ndescribe(\"Authentication\", () => {\n let credsAndEndpoint: CredsAndEndpoint;\n let recorder: Recorder;\n\n beforeEach(function(this: Context) {\n recorder = startRecorder(this);\n credsAndEndpoint = getTokenAuthenticationCredential() || this.skip();\n });\n\n afterEach(async function() {\n await recorder.stop();\n });\n it(\"token authentication works\", async function() {\n const client = new AppConfigurationClient(\n credsAndEndpoint.endpoint,\n credsAndEndpoint.credential\n );\n\n // it doesn't matter if any data comes in so long as we were\n // able to connect and call the service\n await client.addConfigurationSetting({\n key: `token-authentication-test-${recorder.newDate(\"label-1\").valueOf()}`,\n value: \"hello\"\n });\n });\n});\n\ndescribe(\"AppConfigurationClient constructor error cases\", () => {\n it(\"invalid connection string gives a decent error message\", () => {\n assert.throws(\n () => new AppConfigurationClient(\"an invalid connection string\"),\n /Invalid connection string\\. Valid connection strings should match the regex 'Endpoint=\\(\\.\\*\\);Id=\\(\\.\\*\\);Secret=\\(\\.\\*\\)'/\n );\n });\n\n it(\"undefined connection string gives a decent error message\", () => {\n assert.throws(\n () => new AppConfigurationClient(undefined as any),\n /Invalid connection string\\. Valid connection strings should match the regex 'Endpoint=\\(\\.\\*\\);Id=\\(\\.\\*\\);Secret=\\(\\.\\*\\)'/\n );\n });\n});\n"]}
@@ -1,7 +1,7 @@
1
1
  // Copyright (c) Microsoft Corporation.
2
2
  // Licensed under the MIT license.
3
3
  import { startRecorder, createAppConfigurationClientForTests, deleteKeyCompletely, assertThrowsRestError } from "./utils/testHelpers";
4
- import * as assert from "assert";
4
+ import { assert } from "chai";
5
5
  describe("etags", () => {
6
6
  let client;
7
7
  let recorder;
@@ -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 * as assert from \"assert\";\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 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,7 +1,7 @@
1
1
  // Copyright (c) Microsoft Corporation.
2
2
  // Licensed under the MIT license.
3
3
  import { createAppConfigurationClientForTests, assertThrowsRestError, deleteKeyCompletely, assertThrowsAbortError, startRecorder } from "./utils/testHelpers";
4
- import * as assert from "assert";
4
+ import { assert } from "chai";
5
5
  describe("AppConfigurationClient (set|clear)ReadOnly", () => {
6
6
  let client;
7
7
  let recorder;
@@ -1 +1 @@
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 createAppConfigurationClientForTests,\n assertThrowsRestError,\n deleteKeyCompletely,\n assertThrowsAbortError,\n startRecorder\n} from \"./utils/testHelpers\";\nimport { AppConfigurationClient } from \"../../src\";\nimport * as assert from \"assert\";\nimport { Recorder } 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 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
+ {"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 createAppConfigurationClientForTests,\n assertThrowsRestError,\n deleteKeyCompletely,\n assertThrowsAbortError,\n startRecorder\n} from \"./utils/testHelpers\";\nimport { AppConfigurationClient } from \"../../src\";\nimport { assert } from \"chai\";\nimport { Recorder } 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 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,7 +1,7 @@
1
1
  // Copyright (c) Microsoft Corporation.
2
2
  // Licensed under the MIT license.
3
3
  import { createAppConfigurationClientForTests, deleteKeyCompletely, assertThrowsRestError, startRecorder } from "./utils/testHelpers";
4
- import * as assert from "assert";
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
7
7
  // with other teams simpler. (there's redundancy with other parts of the test suite but
@@ -1 +1 @@
1
- {"version":3,"file":"throwOrNotThrow.spec.js","sourceRoot":"","sources":["../../../test/public/throwOrNotThrow.spec.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport { AppConfigurationClient, ConfigurationSetting } from \"../../src\";\nimport {\n createAppConfigurationClientForTests,\n deleteKeyCompletely,\n assertThrowsRestError,\n startRecorder\n} from \"./utils/testHelpers\";\nimport * as assert from \"assert\";\nimport { Recorder } from \"@azure-tools/test-recorder\";\nimport { Context } from \"mocha\";\n\n// There's been discussion on other teams about what errors are thrown when. This\n// is the file where I've documented the throws/notThrows cases to make coordination\n// with other teams simpler. (there's redundancy with other parts of the test suite but\n// that's okay)\ndescribe(\"Various error cases\", () => {\n let client: AppConfigurationClient;\n let recorder: Recorder;\n const nonMatchingETag = \"never-match-etag\";\n\n beforeEach(function(this: Context) {\n recorder = startRecorder(this);\n client = createAppConfigurationClientForTests() || this.skip();\n });\n\n afterEach(async function() {\n await recorder.stop();\n });\n\n describe(\"throws\", () => {\n let addedSetting: ConfigurationSetting;\n let nonExistentKey: string;\n\n beforeEach(async () => {\n addedSetting = await client.addConfigurationSetting({\n key: recorder.getUniqueName(`etags`),\n value: \"world\"\n });\n\n nonExistentKey = \"non-existent key \" + addedSetting.key;\n });\n\n afterEach(async function(this: Context) {\n if (!this.currentTest?.isPending()) {\n await deleteKeyCompletely([addedSetting.key], client);\n }\n });\n\n it(\"get: Non-existent key throws 404\", async () => {\n await assertThrowsRestError(\n () => client.getConfigurationSetting({ key: nonExistentKey }),\n 404\n );\n });\n\n it(\"add: Setting already exists throws 412\", async () => {\n await assertThrowsRestError(() => client.addConfigurationSetting(addedSetting), 412);\n });\n\n it(\"set: Existing key, (onlyIfUnchanged) throws 412\", async () => {\n await assertThrowsRestError(\n () =>\n client.setConfigurationSetting(\n {\n ...addedSetting,\n etag: nonMatchingETag // purposefully make the etag not match the server\n },\n { onlyIfUnchanged: true }\n ),\n 412\n );\n });\n\n it(\"set: trying to modify a read-only setting throws 409\", async () => {\n await client.setReadOnly(addedSetting, true);\n\n await assertThrowsRestError(() => client.setConfigurationSetting(addedSetting), 409);\n });\n\n it(\"delete: key that is set to read-only throws 409\", async () => {\n await client.setReadOnly(addedSetting, true);\n await assertThrowsRestError(async () => client.deleteConfigurationSetting(addedSetting), 409);\n await client.setReadOnly(addedSetting, false);\n });\n });\n\n describe(\"doesn't throw\", () => {\n let addedSetting: ConfigurationSetting;\n let nonExistentKey: string;\n\n beforeEach(async () => {\n // same setup for all tests:\n // key: hello{date}, value: world\n\n // the 'no label' value for 'hello'\n addedSetting = await client.addConfigurationSetting({\n key: recorder.getUniqueName(`etags`),\n value: \"world\"\n });\n\n nonExistentKey = \"bogus key \" + addedSetting.key;\n });\n\n afterEach(async function(this: Context) {\n if (!this.currentTest?.isPending()) {\n await deleteKeyCompletely([addedSetting.key], client);\n }\n });\n\n it(\"get: value is unchanged from etag (304) using ifNoneMatch, sets all properties to undefined\", async () => {\n const response = await client.getConfigurationSetting(addedSetting, {\n onlyIfChanged: true\n });\n\n assert.equal(304, response.statusCode);\n assert.ok(!response.value);\n });\n\n it(\"delete: non-existent key (no etag)\", async () => {\n await client.deleteConfigurationSetting({ key: nonExistentKey });\n });\n });\n});\n"]}
1
+ {"version":3,"file":"throwOrNotThrow.spec.js","sourceRoot":"","sources":["../../../test/public/throwOrNotThrow.spec.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport { AppConfigurationClient, ConfigurationSetting } from \"../../src\";\nimport {\n createAppConfigurationClientForTests,\n deleteKeyCompletely,\n assertThrowsRestError,\n startRecorder\n} from \"./utils/testHelpers\";\nimport { assert } from \"chai\";\nimport { Recorder } from \"@azure-tools/test-recorder\";\nimport { Context } from \"mocha\";\n\n// There's been discussion on other teams about what errors are thrown when. This\n// is the file where I've documented the throws/notThrows cases to make coordination\n// with other teams simpler. (there's redundancy with other parts of the test suite but\n// that's okay)\ndescribe(\"Various error cases\", () => {\n let client: AppConfigurationClient;\n let recorder: Recorder;\n const nonMatchingETag = \"never-match-etag\";\n\n beforeEach(function(this: Context) {\n recorder = startRecorder(this);\n client = createAppConfigurationClientForTests() || this.skip();\n });\n\n afterEach(async function() {\n await recorder.stop();\n });\n\n describe(\"throws\", () => {\n let addedSetting: ConfigurationSetting;\n let nonExistentKey: string;\n\n beforeEach(async () => {\n addedSetting = await client.addConfigurationSetting({\n key: recorder.getUniqueName(`etags`),\n value: \"world\"\n });\n\n nonExistentKey = \"non-existent key \" + addedSetting.key;\n });\n\n afterEach(async function(this: Context) {\n if (!this.currentTest?.isPending()) {\n await deleteKeyCompletely([addedSetting.key], client);\n }\n });\n\n it(\"get: Non-existent key throws 404\", async () => {\n await assertThrowsRestError(\n () => client.getConfigurationSetting({ key: nonExistentKey }),\n 404\n );\n });\n\n it(\"add: Setting already exists throws 412\", async () => {\n await assertThrowsRestError(() => client.addConfigurationSetting(addedSetting), 412);\n });\n\n it(\"set: Existing key, (onlyIfUnchanged) throws 412\", async () => {\n await assertThrowsRestError(\n () =>\n client.setConfigurationSetting(\n {\n ...addedSetting,\n etag: nonMatchingETag // purposefully make the etag not match the server\n },\n { onlyIfUnchanged: true }\n ),\n 412\n );\n });\n\n it(\"set: trying to modify a read-only setting throws 409\", async () => {\n await client.setReadOnly(addedSetting, true);\n\n await assertThrowsRestError(() => client.setConfigurationSetting(addedSetting), 409);\n });\n\n it(\"delete: key that is set to read-only throws 409\", async () => {\n await client.setReadOnly(addedSetting, true);\n await assertThrowsRestError(async () => client.deleteConfigurationSetting(addedSetting), 409);\n await client.setReadOnly(addedSetting, false);\n });\n });\n\n describe(\"doesn't throw\", () => {\n let addedSetting: ConfigurationSetting;\n let nonExistentKey: string;\n\n beforeEach(async () => {\n // same setup for all tests:\n // key: hello{date}, value: world\n\n // the 'no label' value for 'hello'\n addedSetting = await client.addConfigurationSetting({\n key: recorder.getUniqueName(`etags`),\n value: \"world\"\n });\n\n nonExistentKey = \"bogus key \" + addedSetting.key;\n });\n\n afterEach(async function(this: Context) {\n if (!this.currentTest?.isPending()) {\n await deleteKeyCompletely([addedSetting.key], client);\n }\n });\n\n it(\"get: value is unchanged from etag (304) using ifNoneMatch, sets all properties to undefined\", async () => {\n const response = await client.getConfigurationSetting(addedSetting, {\n onlyIfChanged: true\n });\n\n assert.equal(304, response.statusCode);\n assert.ok(!response.value);\n });\n\n it(\"delete: non-existent key (no etag)\", async () => {\n await client.deleteConfigurationSetting({ key: nonExistentKey });\n });\n });\n});\n"]}
@@ -3,8 +3,9 @@
3
3
  import { __asyncValues } from "tslib";
4
4
  import { AppConfigurationClient } from "../../../src";
5
5
  import { env, isPlaybackMode, record } from "@azure-tools/test-recorder";
6
- import * as assert from "assert";
6
+ import { assert } from "chai";
7
7
  import { DefaultAzureCredential } from "@azure/identity";
8
+ import { RestError } from "@azure/core-http";
8
9
  let connectionStringNotPresentWarning = false;
9
10
  let tokenCredentialsNotPresentWarning = false;
10
11
  export function startRecorder(that) {
@@ -117,7 +118,7 @@ export function assertEqualSettings(expected, actual) {
117
118
  actual = actual.map((setting) => {
118
119
  return {
119
120
  key: setting.key,
120
- label: setting.label,
121
+ label: setting.label || undefined,
121
122
  value: setting.value,
122
123
  isReadOnly: setting.isReadOnly
123
124
  };
@@ -130,6 +131,9 @@ export async function assertThrowsRestError(testFunction, expectedStatusCode, me
130
131
  assert.fail(`${message}: No error thrown`);
131
132
  }
132
133
  catch (err) {
134
+ if (!(err instanceof RestError)) {
135
+ throw new Error("Error is not recognized");
136
+ }
133
137
  if (err.name === "RestError") {
134
138
  assert.equal(expectedStatusCode, err.statusCode, message);
135
139
  return err;
@@ -144,6 +148,9 @@ export async function assertThrowsAbortError(testFunction, message = "") {
144
148
  assert.fail(`${message}: No error thrown`);
145
149
  }
146
150
  catch (e) {
151
+ if (!(e instanceof Error)) {
152
+ throw new Error("Error is not recognized");
153
+ }
147
154
  if (isPlaybackMode() && (e.name === "FetchError" || e.name === "AbortError")) {
148
155
  return e;
149
156
  }
@@ -1 +1 @@
1
- {"version":3,"file":"testHelpers.js","sourceRoot":"","sources":["../../../../test/public/utils/testHelpers.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport { AppConfigurationClient, AppConfigurationClientOptions } from \"../../../src\";\nimport { PagedAsyncIterableIterator } from \"@azure/core-paging\";\nimport {\n ConfigurationSetting,\n ListConfigurationSettingPage,\n ListRevisionsPage\n} from \"../../../src\";\nimport {\n env,\n isPlaybackMode,\n RecorderEnvironmentSetup,\n record,\n Recorder\n} from \"@azure-tools/test-recorder\";\nimport * as assert from \"assert\";\n\nimport { DefaultAzureCredential, TokenCredential } from \"@azure/identity\";\n\nlet connectionStringNotPresentWarning = false;\nlet tokenCredentialsNotPresentWarning = false;\n\nexport interface CredsAndEndpoint {\n credential: TokenCredential;\n endpoint: string;\n}\n\nexport function startRecorder(that: Mocha.Context): Recorder {\n const recorderEnvSetup: RecorderEnvironmentSetup = {\n replaceableVariables: {\n APPCONFIG_CONNECTION_STRING:\n \"Endpoint=https://myappconfig.azconfig.io;Id=123456;Secret=123456\",\n AZ_CONFIG_ENDPOINT: \"https://myappconfig.azconfig.io\",\n AZURE_CLIENT_ID: \"azure_client_id\",\n AZURE_CLIENT_SECRET: \"azure_client_secret\",\n AZURE_TENANT_ID: \"azuretenantid\"\n },\n customizationsOnRecordings: [],\n queryParametersToSkip: []\n };\n\n return record(that, recorderEnvSetup);\n}\n\nexport function getTokenAuthenticationCredential(): CredsAndEndpoint | undefined {\n const requiredEnvironmentVariables = [\n \"AZ_CONFIG_ENDPOINT\",\n \"AZURE_CLIENT_ID\",\n \"AZURE_TENANT_ID\",\n \"AZURE_CLIENT_SECRET\"\n ];\n\n for (const name of requiredEnvironmentVariables) {\n const value = env[name];\n\n if (value == null) {\n if (tokenCredentialsNotPresentWarning) {\n tokenCredentialsNotPresentWarning = true;\n console.log(\"Functional tests not running - set client identity variables to activate\");\n }\n\n return undefined;\n }\n }\n\n return {\n credential: new DefaultAzureCredential(),\n endpoint: env[\"AZ_CONFIG_ENDPOINT\"]!\n };\n}\n\nexport function createAppConfigurationClientForTests<\n Options extends AppConfigurationClientOptions = AppConfigurationClientOptions\n>(options?: Options): AppConfigurationClient | undefined {\n const connectionString = env[\"APPCONFIG_CONNECTION_STRING\"];\n\n if (connectionString == null) {\n if (!connectionStringNotPresentWarning) {\n connectionStringNotPresentWarning = true;\n console.log(\n \"Functional tests not running - set APPCONFIG_CONNECTION_STRING to a valid AppConfig connection string to activate\"\n );\n }\n return undefined;\n }\n\n return new AppConfigurationClient(connectionString, options);\n}\n\nexport async function deleteKeyCompletely(\n keys: string[],\n client: AppConfigurationClient\n): Promise<void> {\n const settingsIterator = client.listConfigurationSettings({\n keyFilter: keys.join(\",\")\n });\n\n for await (const setting of settingsIterator) {\n if (setting.isReadOnly) {\n await client.setReadOnly(setting, false);\n }\n\n await client.deleteConfigurationSetting({ key: setting.key, label: setting.label });\n }\n}\n\nexport async function toSortedArray(\n pagedIterator: PagedAsyncIterableIterator<\n ConfigurationSetting,\n ListConfigurationSettingPage | ListRevisionsPage\n >,\n compareFn?: (a: ConfigurationSetting, b: ConfigurationSetting) => number\n): Promise<ConfigurationSetting[]> {\n const settings: ConfigurationSetting[] = [];\n\n for await (const setting of pagedIterator) {\n settings.push(setting);\n }\n\n let settingsViaPageIterator: ConfigurationSetting[] = [];\n\n for await (const page of pagedIterator.byPage()) {\n settingsViaPageIterator = settingsViaPageIterator.concat(page.items);\n }\n\n // just a sanity-check\n assert.deepEqual(settings, settingsViaPageIterator);\n\n settings.sort((a, b) =>\n compareFn\n ? compareFn(a, b)\n : `${a.key}-${a.label}-${a.value}`.localeCompare(`${b.key}-${b.label}-${b.value}`)\n );\n\n return settings;\n}\n\nexport function assertEqualSettings(\n expected: Pick<ConfigurationSetting, \"key\" | \"value\" | \"label\" | \"isReadOnly\">[],\n actual: ConfigurationSetting[]\n): void {\n actual = actual.map((setting) => {\n return {\n key: setting.key,\n label: setting.label,\n value: setting.value,\n isReadOnly: setting.isReadOnly\n };\n });\n\n assert.deepEqual(expected, actual);\n}\n\nexport async function assertThrowsRestError(\n testFunction: () => Promise<any>,\n expectedStatusCode: number,\n message: string = \"\"\n): Promise<Error> {\n try {\n await testFunction();\n assert.fail(`${message}: No error thrown`);\n } catch (err) {\n if (err.name === \"RestError\") {\n assert.equal(expectedStatusCode, err.statusCode, message);\n return err;\n }\n\n assert.fail(`${message}: Caught error but wasn't a RestError: ${err}`);\n }\n\n return new Error(\"We won't reach this - both cases above throw because of assert.fail()\");\n}\n\nexport async function assertThrowsAbortError(\n testFunction: () => Promise<any>,\n message = \"\"\n): Promise<Error> {\n try {\n await testFunction();\n assert.fail(`${message}: No error thrown`);\n } catch (e) {\n if (isPlaybackMode() && (e.name === \"FetchError\" || e.name === \"AbortError\")) {\n return e;\n } else {\n assert.equal(e.name, \"AbortError\");\n return e;\n }\n }\n}\n"]}
1
+ {"version":3,"file":"testHelpers.js","sourceRoot":"","sources":["../../../../test/public/utils/testHelpers.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport { AppConfigurationClient, AppConfigurationClientOptions } from \"../../../src\";\nimport { PagedAsyncIterableIterator } from \"@azure/core-paging\";\nimport {\n ConfigurationSetting,\n ListConfigurationSettingPage,\n ListRevisionsPage\n} from \"../../../src\";\nimport {\n env,\n isPlaybackMode,\n RecorderEnvironmentSetup,\n record,\n Recorder\n} from \"@azure-tools/test-recorder\";\nimport { assert } from \"chai\";\n\nimport { DefaultAzureCredential, TokenCredential } from \"@azure/identity\";\nimport { RestError } from \"@azure/core-http\";\n\nlet connectionStringNotPresentWarning = false;\nlet tokenCredentialsNotPresentWarning = false;\n\nexport interface CredsAndEndpoint {\n credential: TokenCredential;\n endpoint: string;\n}\n\nexport function startRecorder(that: Mocha.Context): Recorder {\n const recorderEnvSetup: RecorderEnvironmentSetup = {\n replaceableVariables: {\n APPCONFIG_CONNECTION_STRING:\n \"Endpoint=https://myappconfig.azconfig.io;Id=123456;Secret=123456\",\n AZ_CONFIG_ENDPOINT: \"https://myappconfig.azconfig.io\",\n AZURE_CLIENT_ID: \"azure_client_id\",\n AZURE_CLIENT_SECRET: \"azure_client_secret\",\n AZURE_TENANT_ID: \"azuretenantid\"\n },\n customizationsOnRecordings: [],\n queryParametersToSkip: []\n };\n\n return record(that, recorderEnvSetup);\n}\n\nexport function getTokenAuthenticationCredential(): CredsAndEndpoint | undefined {\n const requiredEnvironmentVariables = [\n \"AZ_CONFIG_ENDPOINT\",\n \"AZURE_CLIENT_ID\",\n \"AZURE_TENANT_ID\",\n \"AZURE_CLIENT_SECRET\"\n ];\n\n for (const name of requiredEnvironmentVariables) {\n const value = env[name];\n\n if (value == null) {\n if (tokenCredentialsNotPresentWarning) {\n tokenCredentialsNotPresentWarning = true;\n console.log(\"Functional tests not running - set client identity variables to activate\");\n }\n\n return undefined;\n }\n }\n\n return {\n credential: new DefaultAzureCredential(),\n endpoint: env[\"AZ_CONFIG_ENDPOINT\"]!\n };\n}\n\nexport function createAppConfigurationClientForTests<\n Options extends AppConfigurationClientOptions = AppConfigurationClientOptions\n>(options?: Options): AppConfigurationClient | undefined {\n const connectionString = env[\"APPCONFIG_CONNECTION_STRING\"];\n\n if (connectionString == null) {\n if (!connectionStringNotPresentWarning) {\n connectionStringNotPresentWarning = true;\n console.log(\n \"Functional tests not running - set APPCONFIG_CONNECTION_STRING to a valid AppConfig connection string to activate\"\n );\n }\n return undefined;\n }\n\n return new AppConfigurationClient(connectionString, options);\n}\n\nexport async function deleteKeyCompletely(\n keys: string[],\n client: AppConfigurationClient\n): Promise<void> {\n const settingsIterator = client.listConfigurationSettings({\n keyFilter: keys.join(\",\")\n });\n\n for await (const setting of settingsIterator) {\n if (setting.isReadOnly) {\n await client.setReadOnly(setting, false);\n }\n\n await client.deleteConfigurationSetting({ key: setting.key, label: setting.label });\n }\n}\n\nexport async function toSortedArray(\n pagedIterator: PagedAsyncIterableIterator<\n ConfigurationSetting,\n ListConfigurationSettingPage | ListRevisionsPage\n >,\n compareFn?: (a: ConfigurationSetting, b: ConfigurationSetting) => number\n): Promise<ConfigurationSetting[]> {\n const settings: ConfigurationSetting[] = [];\n\n for await (const setting of pagedIterator) {\n settings.push(setting);\n }\n\n let settingsViaPageIterator: ConfigurationSetting[] = [];\n\n for await (const page of pagedIterator.byPage()) {\n settingsViaPageIterator = settingsViaPageIterator.concat(page.items);\n }\n\n // just a sanity-check\n assert.deepEqual(settings, settingsViaPageIterator);\n\n settings.sort((a, b) =>\n compareFn\n ? compareFn(a, b)\n : `${a.key}-${a.label}-${a.value}`.localeCompare(`${b.key}-${b.label}-${b.value}`)\n );\n\n return settings;\n}\n\nexport function assertEqualSettings(\n expected: Pick<ConfigurationSetting, \"key\" | \"value\" | \"label\" | \"isReadOnly\">[],\n actual: ConfigurationSetting[]\n): void {\n actual = actual.map((setting) => {\n return {\n key: setting.key,\n label: setting.label || undefined,\n value: setting.value,\n isReadOnly: setting.isReadOnly\n };\n });\n\n assert.deepEqual(expected, actual);\n}\n\nexport async function assertThrowsRestError(\n testFunction: () => Promise<any>,\n expectedStatusCode: number,\n message: string = \"\"\n): Promise<Error> {\n try {\n await testFunction();\n assert.fail(`${message}: No error thrown`);\n } catch (err) {\n if (!(err instanceof RestError)) {\n throw new Error(\"Error is not recognized\");\n }\n if (err.name === \"RestError\") {\n assert.equal(expectedStatusCode, err.statusCode, message);\n return err;\n }\n\n assert.fail(`${message}: Caught error but wasn't a RestError: ${err}`);\n }\n\n return new Error(\"We won't reach this - both cases above throw because of assert.fail()\");\n}\n\nexport async function assertThrowsAbortError(\n testFunction: () => Promise<any>,\n message = \"\"\n): Promise<Error> {\n try {\n await testFunction();\n assert.fail(`${message}: No error thrown`);\n } catch (e) {\n if (!(e instanceof Error)) {\n throw new Error(\"Error is not recognized\");\n }\n if (isPlaybackMode() && (e.name === \"FetchError\" || e.name === \"AbortError\")) {\n return e;\n } else {\n assert.equal(e.name, \"AbortError\");\n return e;\n }\n }\n}\n"]}
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@azure/app-configuration",
3
3
  "author": "Microsoft Corporation",
4
4
  "description": "An isomorphic client library for the Azure App Configuration service.",
5
- "version": "1.3.1-alpha.20211213.2",
5
+ "version": "1.3.1",
6
6
  "sdk-type": "client",
7
7
  "keywords": [
8
8
  "node",
@@ -64,8 +64,7 @@
64
64
  "test": "npm run test:node && npm run test:browser",
65
65
  "unit-test:browser": "",
66
66
  "unit-test:node": "npm run build:test:node && mocha --require source-map-support/register --reporter ../../../common/tools/mocha-multi-reporter.js --timeout 180000 --full-trace \"dist-test/index.node.js\"",
67
- "unit-test": "npm run unit-test:node && npm run unit-test:browser",
68
- "docs": "typedoc --excludePrivate --excludeNotExported --excludeExternals --stripInternal --mode file --out ./dist/docs ./src"
67
+ "unit-test": "npm run unit-test:node && npm run unit-test:browser"
69
68
  },
70
69
  "engines": {
71
70
  "node": ">=12.0.0"
@@ -94,8 +93,8 @@
94
93
  "tslib": "^2.2.0"
95
94
  },
96
95
  "devDependencies": {
97
- "@azure/dev-tool": ">=1.0.0-alpha <1.0.0-alphb",
98
- "@azure/eslint-plugin-azure-sdk": ">=3.0.0-alpha <3.0.0-alphb",
96
+ "@azure/dev-tool": "^1.0.0",
97
+ "@azure/eslint-plugin-azure-sdk": "^3.0.0",
99
98
  "@azure/identity": "^2.0.1",
100
99
  "@azure/keyvault-secrets": "^4.2.0",
101
100
  "@azure-tools/test-recorder": "^1.0.0",
@@ -126,7 +125,7 @@
126
125
  "karma-mocha-reporter": "^2.2.5",
127
126
  "karma-sourcemap-loader": "^0.3.8",
128
127
  "mocha": "^7.1.1",
129
- "mocha-junit-reporter": "^1.18.0",
128
+ "mocha-junit-reporter": "^2.0.0",
130
129
  "nock": "^12.0.3",
131
130
  "nyc": "^15.0.0",
132
131
  "prettier": "^1.16.4",
@@ -139,8 +138,7 @@
139
138
  "ts-node": "^10.0.0",
140
139
  "typescript": "~4.2.0",
141
140
  "uglify-js": "^3.4.9",
142
- "cross-env": "^7.0.2",
143
- "typedoc": "0.15.2"
141
+ "cross-env": "^7.0.2"
144
142
  },
145
143
  "//sampleConfiguration": {
146
144
  "productName": "Azure App Configuration",