Skip to content

Commit

Permalink
feat: add 'sdkPlatform' test capability for OF nodeJS (#497)
Browse files Browse the repository at this point in the history
* feat: add 'sdkPlatform' test capability for OF nodeJS

* feat: add sdk-capabilities input to github action
  • Loading branch information
jonathannorris authored Feb 11, 2025
1 parent 1d03bfb commit 846b42d
Show file tree
Hide file tree
Showing 10 changed files with 109 additions and 74 deletions.
5 changes: 4 additions & 1 deletion action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,9 @@ inputs:
sdks-to-test:
description: 'Which SDKs to test'
required: true
sdk-capabilities:
description: 'Which capabilities to test'
required: false
sdk-github-sha:
description: 'The SHA ref of the SDK to test - used in PRs. If not specified; sdk-version is used'
required: false
Expand All @@ -29,7 +32,7 @@ runs:
env:
SDK_GITHUB_SHA: ${{ inputs.sdk-github-sha }}
SDKS_TO_TEST: ${{ inputs.sdks-to-test }}

SDK_CAPABILITIES: ${{ inputs.sdk-capabilities }}
- uses: actions/upload-artifact@v4
if: success() || failure()
with:
Expand Down
9 changes: 8 additions & 1 deletion harness/features/track.local.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import {
getSDKScope,
hasCapability,
} from '../helpers'
import { Capabilities } from '../types'
import { Capabilities, SDKPlatformMap } from '../types'
import {
optionalEventFields,
optionalUserEventFields,
Expand All @@ -18,6 +18,9 @@ describe('Track Tests - Local', () => {
const validUserId = 'user1'

const expectedPlatform = getPlatformBySdkName(sdkName)
const expectedSDKPlatform = hasCapability(sdkName, Capabilities.sdkPlatform)
? SDKPlatformMap[sdkName]
: undefined

const eventFlushIntervalMS = 1000

Expand All @@ -38,6 +41,7 @@ describe('Track Tests - Local', () => {
...optionalUserEventFields,
platform: expectedPlatform,
sdkType: 'server',
sdkPlatform: expectedSDKPlatform,
user_id: expect.any(String),
},
events: [
Expand Down Expand Up @@ -142,6 +146,7 @@ describe('Track Tests - Local', () => {
...optionalUserEventFields,
platform: expectedPlatform,
sdkType: 'server',
sdkPlatform: expectedSDKPlatform,
user_id: validUserId,
},
events: [
Expand Down Expand Up @@ -210,6 +215,7 @@ describe('Track Tests - Local', () => {
...optionalUserEventFields,
platform: expectedPlatform,
sdkType: 'server',
sdkPlatform: expectedSDKPlatform,
user_id: validUserId,
},
events: [
Expand Down Expand Up @@ -315,6 +321,7 @@ describe('Track Tests - Local', () => {
...optionalUserEventFields,
platform: expectedPlatform,
sdkType: 'server',
sdkPlatform: expectedSDKPlatform,
user_id: validUserId,
},
events: [
Expand Down
22 changes: 20 additions & 2 deletions harness/helpers/events.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,17 +8,22 @@ import {
hasCapability,
waitForRequest,
} from './helpers'
import { Capabilities } from '../types'
import { Capabilities, SDKPlatformMap } from '../types'
import { Scope } from 'nock'

const addSDKConfigEventBatch = (sdkName: string, expectedPlatform: string) => {
const addSDKConfigEventBatch = (
sdkName: string,
expectedPlatform: string,
sdkPlatform: string,
) => {
return hasCapability(sdkName, Capabilities.sdkConfigEvent)
? [
{
user: {
...optionalUserEventFields,
platform: expectedPlatform,
sdkType: 'server',
sdkPlatform: sdkPlatform,
user_id: expect.any(String),
},
events: [
Expand Down Expand Up @@ -73,6 +78,9 @@ export const expectAggregateEvaluationEvent = ({
_feature: featureId,
_variation: variationId,
}
const sdkPlatform = hasCapability(sdkName, Capabilities.sdkPlatform)
? SDKPlatformMap[sdkName]
: undefined

if (hasCapability(sdkName, Capabilities.etagReporting)) {
metadata.configEtag = etag
Expand All @@ -89,11 +97,13 @@ export const expectAggregateEvaluationEvent = ({
optionalSDKConfigNewEvent = addSDKConfigEventBatch(
sdkName,
expectedPlatform,
sdkPlatform,
)[0].events
} else {
optionalSDKConfigNewUser = addSDKConfigEventBatch(
sdkName,
expectedPlatform,
sdkPlatform,
)
}
}
Expand All @@ -107,6 +117,7 @@ export const expectAggregateEvaluationEvent = ({
user_id: expect.any(String),
platform: expectedPlatform,
sdkType: 'server',
sdkPlatform: sdkPlatform,
},
events: expect.toIncludeSameMembers([
{
Expand Down Expand Up @@ -154,6 +165,10 @@ export const expectAggregateDefaultEvent = ({
)
? { defaultReason }
: {}
const sdkPlatform = hasCapability(sdkName, Capabilities.sdkPlatform)
? SDKPlatformMap[sdkName]
: undefined

if (hasCapability(sdkName, Capabilities.etagReporting)) {
if (etag) {
metadata.configEtag = etag
Expand All @@ -175,11 +190,13 @@ export const expectAggregateDefaultEvent = ({
optionalSDKConfigNewEvent = addSDKConfigEventBatch(
sdkName,
expectedPlatform,
sdkPlatform,
)[0].events
} else {
optionalSDKConfigNewUser = addSDKConfigEventBatch(
sdkName,
expectedPlatform,
sdkPlatform,
)
}
}
Expand All @@ -193,6 +210,7 @@ export const expectAggregateDefaultEvent = ({
user_id: expect.any(String),
platform: expectedPlatform,
sdkType: 'server',
sdkPlatform: sdkPlatform,
},
events: expect.arrayContaining([
...optionalSDKConfigNewEvent,
Expand Down
7 changes: 7 additions & 0 deletions harness/types/capabilities.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,11 @@ export const Capabilities = {
sdkConfigEvent: 'SDKConfigEvent',
clientUUID: 'ClientUUID',
v2Config: 'V2Config',
sdkPlatform: 'SDKPlatform',
}

export const SDKPlatformMap = {
'OF-NodeJS': 'nodejs-of',
}

let sdkCapabilities: { [key: string]: string[] } = {
Expand All @@ -33,6 +38,8 @@ let sdkCapabilities: { [key: string]: string[] } = {
Capabilities.sdkConfigEvent,
Capabilities.clientUUID,
Capabilities.v2Config,
// Comment out until changes are merged, will use SDK_CAPABILITIES to override
// Capabilities.sdkPlatform,
],
Python: [
Capabilities.cloud,
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
"author": "DevCycle <[email protected]>",
"license": "MIT",
"devDependencies": {
"@devcycle/types": "^1.20.0",
"@devcycle/types": "^1.22.0",
"@eresearchqut/jest-testcontainers": "^3.7.1",
"@koa/router": "^12.0.0",
"@types/jest": "^29.2.3",
Expand Down
4 changes: 2 additions & 2 deletions proxies/nodejs/package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"dependencies": {
"@devcycle/js-client-sdk": "^1.34.0",
"@devcycle/nodejs-server-sdk": "^1.40.0",
"@devcycle/js-client-sdk": "^1.35.0",
"@devcycle/nodejs-server-sdk": "^1.41.0",
"@types/koa": "^2.13.5",
"@types/koa-bodyparser": "^4.3.10",
"@types/koa-router": "^7.4.4",
Expand Down
54 changes: 27 additions & 27 deletions proxies/nodejs/yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -14,47 +14,47 @@ __metadata:
languageName: node
linkType: hard

"@devcycle/bucketing-assembly-script@npm:^1.30.0":
version: 1.30.0
resolution: "@devcycle/bucketing-assembly-script@npm:1.30.0"
"@devcycle/bucketing-assembly-script@npm:^1.31.0":
version: 1.31.0
resolution: "@devcycle/bucketing-assembly-script@npm:1.31.0"
dependencies:
protobufjs: "npm:^7.4.0"
checksum: 10/1db757d0e51f1492c63f15c7fd273e40865b8255ca4b7a794fb85c9f9c68bc2b35f27fe93a5a9aaf14ab4fedc58935d400233dcebb91b7dd71d9e417a9ffda44
checksum: 10/0083362c1f396616f97661d4de7ab8df97212d6da98a02ff016b0dbbc41033bf4ffcfb803b7600b71292f8acb3501f3a725fa07cdf9ca1889e520866729cea82
languageName: node
linkType: hard

"@devcycle/js-client-sdk@npm:^1.34.0":
version: 1.34.0
resolution: "@devcycle/js-client-sdk@npm:1.34.0"
"@devcycle/js-client-sdk@npm:^1.35.0":
version: 1.35.0
resolution: "@devcycle/js-client-sdk@npm:1.35.0"
dependencies:
"@devcycle/types": "npm:^1.21.0"
"@devcycle/types": "npm:^1.22.0"
fetch-retry: "npm:^5.0.6"
lodash: "npm:^4.17.21"
ua-parser-js: "npm:^1.0.36"
uuid: "npm:^8.3.2"
checksum: 10/ec7bada682f2b26cb43e65c2b62f140afd2a8d51977de16f1a4c01f9fe2832a11338d00a3307ee331d50d1c18c55ade15b0613eec245ff6c985df15423eef24e
checksum: 10/6436f47e29d0e7f9c5ac1af9ba248376c86ac9d48f00e1dd7d94faf8f43a10776c3f9f63702dff93545e18cd449e988c96769b168e4356576dee355717751b02
languageName: node
linkType: hard

"@devcycle/js-cloud-server-sdk@npm:^1.20.0":
version: 1.20.0
resolution: "@devcycle/js-cloud-server-sdk@npm:1.20.0"
"@devcycle/js-cloud-server-sdk@npm:^1.21.0":
version: 1.21.0
resolution: "@devcycle/js-cloud-server-sdk@npm:1.21.0"
dependencies:
"@devcycle/types": "npm:^1.21.0"
"@devcycle/types": "npm:^1.22.0"
cross-fetch: "npm:^4.0.0"
fetch-retry: "npm:^5.0.6"
lodash: "npm:^4.17.21"
checksum: 10/1885fccd8640af130a9c54d4a3f9c1c3f58eee83c1f47e45de54ab23ae1b87a229d17160d62bb7e36f109f75e83c847fb65ab369ab1556fe4b53e83e72fb4575
checksum: 10/7829a5cb82296902b018890b03a2417c8ee17dd0520f51df42b7d224427a1c2782ef3d13b01c7689c66ba3464e8d1aa8f33437f65f47f8b6354938c4efb0fd9e
languageName: node
linkType: hard

"@devcycle/nodejs-server-sdk@npm:^1.40.0":
version: 1.40.0
resolution: "@devcycle/nodejs-server-sdk@npm:1.40.0"
"@devcycle/nodejs-server-sdk@npm:^1.41.0":
version: 1.41.0
resolution: "@devcycle/nodejs-server-sdk@npm:1.41.0"
dependencies:
"@devcycle/bucketing-assembly-script": "npm:^1.30.0"
"@devcycle/js-cloud-server-sdk": "npm:^1.20.0"
"@devcycle/types": "npm:^1.21.0"
"@devcycle/bucketing-assembly-script": "npm:^1.31.0"
"@devcycle/js-cloud-server-sdk": "npm:^1.21.0"
"@devcycle/types": "npm:^1.22.0"
cross-fetch: "npm:^4.0.0"
eventsource: "npm:^2.0.2"
fetch-retry: "npm:^5.0.6"
Expand All @@ -64,20 +64,20 @@ __metadata:
peerDependenciesMeta:
"@openfeature/multi-provider":
optional: true
checksum: 10/68ad2ab32ab5866e7107905895602f6ea847109daf6f9bb03ff6a9e54e6daf40756996c6c9cde4997c68c4da6adac6f529aecd73eaf6f5633f1dcc72251ba07e
checksum: 10/0e68eff48451644407f3597543fbcf2a0818f69c3ce8e3dfa2552b4f107f543c7d981a9d8ad6a00c2d12f66632a0d9e7800ed0abd20a599b385cd42c1d81ca6c
languageName: node
linkType: hard

"@devcycle/types@npm:^1.21.0":
version: 1.21.0
resolution: "@devcycle/types@npm:1.21.0"
"@devcycle/types@npm:^1.22.0":
version: 1.22.0
resolution: "@devcycle/types@npm:1.22.0"
dependencies:
class-transformer: "npm:0.5.1"
class-validator: "npm:0.14.1"
iso-639-1: "npm:^2.1.13"
lodash: "npm:^4.17.21"
reflect-metadata: "npm:^0.1.13"
checksum: 10/de8bfebbbfded77e9bfd5f2924706abfa1eee9bc4f906b62914875abc2d2dee831838897ff0fedad883c1cadedd5b331511dff7ebae0e3671dd8ff037e256667
checksum: 10/d9ae954c9c93e0ddfcc6f479f8113df3a8df1fa0215e7a69aa54d04d166266e679fc672c0f472cfd79f132f5d58475843ffab3c74a04f0f9730463c1f439ce92
languageName: node
linkType: hard

Expand Down Expand Up @@ -1006,8 +1006,8 @@ __metadata:
version: 0.0.0-use.local
resolution: "root-workspace-0b6124@workspace:."
dependencies:
"@devcycle/js-client-sdk": "npm:^1.34.0"
"@devcycle/nodejs-server-sdk": "npm:^1.40.0"
"@devcycle/js-client-sdk": "npm:^1.35.0"
"@devcycle/nodejs-server-sdk": "npm:^1.41.0"
"@types/koa": "npm:^2.13.5"
"@types/koa-bodyparser": "npm:^4.3.10"
"@types/koa-router": "npm:^7.4.4"
Expand Down
6 changes: 3 additions & 3 deletions proxies/openfeature-nodejs/package.json
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
{
"dependencies": {
"@devcycle/nodejs-server-sdk": "^1.40.0",
"@openfeature/core": "^1.6.0",
"@openfeature/server-sdk": "^1.17.0",
"@devcycle/nodejs-server-sdk": "^1.41.0",
"@openfeature/core": "^1.7.0",
"@openfeature/server-sdk": "^1.17.1",
"@types/koa": "^2.13.5",
"@types/koa-bodyparser": "^4.3.10",
"@types/koa-router": "^7.4.4",
Expand Down
Loading

0 comments on commit 846b42d

Please sign in to comment.