@symbo.ls/sdk 3.2.3 → 3.2.7
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/README.md +141 -0
- package/dist/cjs/config/environment.js +94 -10
- package/dist/cjs/index.js +152 -12
- package/dist/cjs/services/AdminService.js +351 -0
- package/dist/cjs/services/AuthService.js +738 -305
- package/dist/cjs/services/BaseService.js +158 -6
- package/dist/cjs/services/BranchService.js +484 -0
- package/dist/cjs/services/CollabService.js +439 -116
- package/dist/cjs/services/DnsService.js +340 -0
- package/dist/cjs/services/FeatureFlagService.js +175 -0
- package/dist/cjs/services/FileService.js +201 -0
- package/dist/cjs/services/IntegrationService.js +538 -0
- package/dist/cjs/services/MetricsService.js +62 -0
- package/dist/cjs/services/PaymentService.js +271 -0
- package/dist/cjs/services/PlanService.js +426 -0
- package/dist/cjs/services/ProjectService.js +1207 -0
- package/dist/cjs/services/PullRequestService.js +503 -0
- package/dist/cjs/services/ScreenshotService.js +304 -0
- package/dist/cjs/services/SubscriptionService.js +396 -0
- package/dist/cjs/services/TrackingService.js +661 -0
- package/dist/cjs/services/WaitlistService.js +148 -0
- package/dist/cjs/services/index.js +60 -4
- package/dist/cjs/state/RootStateManager.js +2 -23
- package/dist/cjs/state/rootEventBus.js +9 -0
- package/dist/cjs/utils/CollabClient.js +78 -12
- package/dist/cjs/utils/TokenManager.js +16 -3
- package/dist/cjs/utils/changePreprocessor.js +199 -0
- package/dist/cjs/utils/jsonDiff.js +46 -4
- package/dist/cjs/utils/ordering.js +309 -0
- package/dist/cjs/utils/services.js +285 -128
- package/dist/cjs/utils/validation.js +0 -3
- package/dist/esm/config/environment.js +94 -10
- package/dist/esm/index.js +47862 -18248
- package/dist/esm/services/AdminService.js +1132 -0
- package/dist/esm/services/AuthService.js +1493 -386
- package/dist/esm/services/BaseService.js +757 -6
- package/dist/esm/services/BranchService.js +1265 -0
- package/dist/esm/services/CollabService.js +24956 -16089
- package/dist/esm/services/DnsService.js +1121 -0
- package/dist/esm/services/FeatureFlagService.js +956 -0
- package/dist/esm/services/FileService.js +982 -0
- package/dist/esm/services/IntegrationService.js +1319 -0
- package/dist/esm/services/MetricsService.js +843 -0
- package/dist/esm/services/PaymentService.js +1052 -0
- package/dist/esm/services/PlanService.js +1207 -0
- package/dist/esm/services/ProjectService.js +2526 -0
- package/dist/esm/services/PullRequestService.js +1284 -0
- package/dist/esm/services/ScreenshotService.js +1085 -0
- package/dist/esm/services/SubscriptionService.js +1177 -0
- package/dist/esm/services/TrackingService.js +18454 -0
- package/dist/esm/services/WaitlistService.js +929 -0
- package/dist/esm/services/index.js +47373 -18027
- package/dist/esm/state/RootStateManager.js +11 -23
- package/dist/esm/state/rootEventBus.js +9 -0
- package/dist/esm/utils/CollabClient.js +17526 -16120
- package/dist/esm/utils/TokenManager.js +16 -3
- package/dist/esm/utils/changePreprocessor.js +542 -0
- package/dist/esm/utils/jsonDiff.js +958 -43
- package/dist/esm/utils/ordering.js +291 -0
- package/dist/esm/utils/services.js +285 -128
- package/dist/esm/utils/validation.js +116 -50
- package/dist/node/config/environment.js +94 -10
- package/dist/node/index.js +183 -16
- package/dist/node/services/AdminService.js +332 -0
- package/dist/node/services/AuthService.js +742 -310
- package/dist/node/services/BaseService.js +148 -6
- package/dist/node/services/BranchService.js +465 -0
- package/dist/node/services/CollabService.js +439 -116
- package/dist/node/services/DnsService.js +321 -0
- package/dist/node/services/FeatureFlagService.js +156 -0
- package/dist/node/services/FileService.js +182 -0
- package/dist/node/services/IntegrationService.js +519 -0
- package/dist/node/services/MetricsService.js +43 -0
- package/dist/node/services/PaymentService.js +252 -0
- package/dist/node/services/PlanService.js +407 -0
- package/dist/node/services/ProjectService.js +1188 -0
- package/dist/node/services/PullRequestService.js +484 -0
- package/dist/node/services/ScreenshotService.js +285 -0
- package/dist/node/services/SubscriptionService.js +377 -0
- package/dist/node/services/TrackingService.js +632 -0
- package/dist/node/services/WaitlistService.js +129 -0
- package/dist/node/services/index.js +60 -4
- package/dist/node/state/RootStateManager.js +2 -23
- package/dist/node/state/rootEventBus.js +9 -0
- package/dist/node/utils/CollabClient.js +77 -11
- package/dist/node/utils/TokenManager.js +16 -3
- package/dist/node/utils/changePreprocessor.js +180 -0
- package/dist/node/utils/jsonDiff.js +46 -4
- package/dist/node/utils/ordering.js +290 -0
- package/dist/node/utils/services.js +285 -128
- package/dist/node/utils/validation.js +0 -3
- package/package.json +30 -18
- package/src/config/environment.js +95 -10
- package/src/index.js +190 -23
- package/src/services/AdminService.js +374 -0
- package/src/services/AuthService.js +874 -328
- package/src/services/BaseService.js +166 -6
- package/src/services/BranchService.js +536 -0
- package/src/services/CollabService.js +557 -148
- package/src/services/DnsService.js +366 -0
- package/src/services/FeatureFlagService.js +174 -0
- package/src/services/FileService.js +213 -0
- package/src/services/IntegrationService.js +548 -0
- package/src/services/MetricsService.js +40 -0
- package/src/services/PaymentService.js +287 -0
- package/src/services/PlanService.js +468 -0
- package/src/services/ProjectService.js +1366 -0
- package/src/services/PullRequestService.js +537 -0
- package/src/services/ScreenshotService.js +258 -0
- package/src/services/SubscriptionService.js +425 -0
- package/src/services/TrackingService.js +853 -0
- package/src/services/WaitlistService.js +130 -0
- package/src/services/index.js +79 -5
- package/src/services/tests/BranchService/createBranch.test.js +153 -0
- package/src/services/tests/BranchService/deleteBranch.test.js +173 -0
- package/src/services/tests/BranchService/getBranchChanges.test.js +146 -0
- package/src/services/tests/BranchService/listBranches.test.js +87 -0
- package/src/services/tests/BranchService/mergeBranch.test.js +210 -0
- package/src/services/tests/BranchService/publishVersion.test.js +183 -0
- package/src/services/tests/BranchService/renameBranch.test.js +240 -0
- package/src/services/tests/BranchService/resetBranch.test.js +152 -0
- package/src/services/tests/FeatureFlagService/adminFeatureFlags.test.js +67 -0
- package/src/services/tests/FeatureFlagService/getFeatureFlags.test.js +75 -0
- package/src/services/tests/FileService/createFileFormData.test.js +74 -0
- package/src/services/tests/FileService/getFileUrl.test.js +69 -0
- package/src/services/tests/FileService/updateProjectIcon.test.js +109 -0
- package/src/services/tests/FileService/uploadDocument.test.js +36 -0
- package/src/services/tests/FileService/uploadFile.test.js +78 -0
- package/src/services/tests/FileService/uploadFileWithValidation.test.js +114 -0
- package/src/services/tests/FileService/uploadImage.test.js +36 -0
- package/src/services/tests/FileService/uploadMultipleFiles.test.js +111 -0
- package/src/services/tests/FileService/validateFile.test.js +63 -0
- package/src/services/tests/PlanService/createPlan.test.js +104 -0
- package/src/services/tests/PlanService/createPlanWithValidation.test.js +523 -0
- package/src/services/tests/PlanService/deletePlan.test.js +92 -0
- package/src/services/tests/PlanService/getActivePlans.test.js +123 -0
- package/src/services/tests/PlanService/getAdminPlans.test.js +84 -0
- package/src/services/tests/PlanService/getPlan.test.js +50 -0
- package/src/services/tests/PlanService/getPlanByKey.test.js +109 -0
- package/src/services/tests/PlanService/getPlanWithValidation.test.js +85 -0
- package/src/services/tests/PlanService/getPlans.test.js +53 -0
- package/src/services/tests/PlanService/getPlansByPriceRange.test.js +109 -0
- package/src/services/tests/PlanService/getPlansWithValidation.test.js +48 -0
- package/src/services/tests/PlanService/initializePlans.test.js +75 -0
- package/src/services/tests/PlanService/updatePlan.test.js +111 -0
- package/src/services/tests/PlanService/updatePlanWithValidation.test.js +556 -0
- package/src/state/RootStateManager.js +37 -32
- package/src/state/rootEventBus.js +19 -0
- package/src/utils/CollabClient.js +99 -12
- package/src/utils/TokenManager.js +20 -3
- package/src/utils/changePreprocessor.js +239 -0
- package/src/utils/jsonDiff.js +40 -5
- package/src/utils/ordering.js +271 -0
- package/src/utils/services.js +306 -139
- package/src/utils/validation.js +0 -3
- package/dist/cjs/services/AIService.js +0 -155
- package/dist/cjs/services/BasedService.js +0 -1185
- package/dist/cjs/services/CoreService.js +0 -2295
- package/dist/cjs/services/SocketService.js +0 -309
- package/dist/cjs/services/SymstoryService.js +0 -571
- package/dist/cjs/utils/basedQuerys.js +0 -181
- package/dist/cjs/utils/symstoryClient.js +0 -259
- package/dist/esm/services/AIService.js +0 -185
- package/dist/esm/services/BasedService.js +0 -5262
- package/dist/esm/services/CoreService.js +0 -2827
- package/dist/esm/services/SocketService.js +0 -456
- package/dist/esm/services/SymstoryService.js +0 -7025
- package/dist/esm/utils/basedQuerys.js +0 -163
- package/dist/esm/utils/symstoryClient.js +0 -354
- package/dist/node/services/AIService.js +0 -136
- package/dist/node/services/BasedService.js +0 -1156
- package/dist/node/services/CoreService.js +0 -2266
- package/dist/node/services/SocketService.js +0 -280
- package/dist/node/services/SymstoryService.js +0 -542
- package/dist/node/utils/basedQuerys.js +0 -162
- package/dist/node/utils/symstoryClient.js +0 -230
- package/src/services/AIService.js +0 -150
- package/src/services/BasedService.js +0 -1302
- package/src/services/CoreService.js +0 -2548
- package/src/services/SocketService.js +0 -336
- package/src/services/SymstoryService.js +0 -649
- package/src/utils/basedQuerys.js +0 -164
- package/src/utils/symstoryClient.js +0 -252
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
/* eslint-disable no-undefined */
|
|
2
|
+
import test from 'tape'
|
|
3
|
+
import sinon from 'sinon'
|
|
4
|
+
import { PlanService } from '../../PlanService.js'
|
|
5
|
+
|
|
6
|
+
// #region Setup
|
|
7
|
+
const sandbox = sinon.createSandbox()
|
|
8
|
+
// #endregion
|
|
9
|
+
|
|
10
|
+
// #region Tests
|
|
11
|
+
test('getActivePlans should return active plans', async t => {
|
|
12
|
+
t.plan(3)
|
|
13
|
+
const numActivePlans = 2
|
|
14
|
+
const plansStub = [
|
|
15
|
+
{
|
|
16
|
+
plan: 'plan1',
|
|
17
|
+
status: 'active',
|
|
18
|
+
isVisible: true
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
plan: 'plan2',
|
|
22
|
+
status: 'inactive',
|
|
23
|
+
isVisible: false
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
plan: 'plan3',
|
|
27
|
+
status: 'active',
|
|
28
|
+
isVisible: true
|
|
29
|
+
}
|
|
30
|
+
]
|
|
31
|
+
const planServiceStub = new PlanService()
|
|
32
|
+
sandbox.stub(planServiceStub, 'getPlans').resolves(plansStub)
|
|
33
|
+
const response = await planServiceStub.getActivePlans()
|
|
34
|
+
|
|
35
|
+
t.equal(
|
|
36
|
+
response.length,
|
|
37
|
+
numActivePlans,
|
|
38
|
+
'Correct number of active plans returned'
|
|
39
|
+
)
|
|
40
|
+
t.equal(
|
|
41
|
+
response[0].plan,
|
|
42
|
+
plansStub[0].plan,
|
|
43
|
+
'First plan successfully returned'
|
|
44
|
+
)
|
|
45
|
+
t.equal(
|
|
46
|
+
response[1].plan,
|
|
47
|
+
plansStub[2].plan,
|
|
48
|
+
'Third plan successfully returned'
|
|
49
|
+
)
|
|
50
|
+
})
|
|
51
|
+
|
|
52
|
+
function planFilter () {
|
|
53
|
+
const badPlans = [
|
|
54
|
+
{
|
|
55
|
+
plan: 'status is inactive and isVisible is false',
|
|
56
|
+
status: 'inactive',
|
|
57
|
+
isVisible: false
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
plan: 'status is active and isVisible is false',
|
|
61
|
+
status: 'active',
|
|
62
|
+
isVisible: false
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
plan: 'status is undefined and isVisible is true',
|
|
66
|
+
status: undefined,
|
|
67
|
+
isVisible: true
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
plan: 'status is undefined and isVisible is false',
|
|
71
|
+
status: undefined,
|
|
72
|
+
isVisible: false
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
plan: 'status is null and isVisible is true',
|
|
76
|
+
status: null,
|
|
77
|
+
isVisible: true
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
plan: 'status is null and isVisible is false',
|
|
81
|
+
status: null,
|
|
82
|
+
isVisible: false
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
plan: 'status is active and isVisible is undefined',
|
|
86
|
+
status: 'active',
|
|
87
|
+
isVisible: undefined
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
plan: 'status is active and isVisible is null',
|
|
91
|
+
status: 'active',
|
|
92
|
+
isVisible: null
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
plan: 'status is a number and isVisible is true',
|
|
96
|
+
status: 123,
|
|
97
|
+
isVisible: true
|
|
98
|
+
}
|
|
99
|
+
]
|
|
100
|
+
for (let ii = 0; ii < badPlans.length; ii++) {
|
|
101
|
+
test(`getActivePlans should return no plans using ${badPlans[ii].plan}`, async t => {
|
|
102
|
+
t.plan(1)
|
|
103
|
+
const planServiceStub = new PlanService()
|
|
104
|
+
sandbox.stub(planServiceStub, 'getPlans').resolves([badPlans[ii]])
|
|
105
|
+
const response = await planServiceStub.getActivePlans()
|
|
106
|
+
t.equal(
|
|
107
|
+
response.length,
|
|
108
|
+
0,
|
|
109
|
+
`No active plans returned when ${badPlans[ii].plan}`
|
|
110
|
+
)
|
|
111
|
+
})
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
planFilter()
|
|
116
|
+
// #endregion
|
|
117
|
+
|
|
118
|
+
// #region Cleanup
|
|
119
|
+
test('teardown', t => {
|
|
120
|
+
sandbox.restore()
|
|
121
|
+
t.end()
|
|
122
|
+
})
|
|
123
|
+
// #endregion
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import test from 'tape'
|
|
2
|
+
import sinon from 'sinon'
|
|
3
|
+
import { PlanService } from '../../PlanService.js'
|
|
4
|
+
|
|
5
|
+
// #region Setup
|
|
6
|
+
const sandbox = sinon.createSandbox()
|
|
7
|
+
// #endregion
|
|
8
|
+
|
|
9
|
+
// #region Tests
|
|
10
|
+
test('getAdminPlans should return response data', async t => {
|
|
11
|
+
t.plan(1)
|
|
12
|
+
const responseStub = {
|
|
13
|
+
success: true,
|
|
14
|
+
data: sandbox.stub()
|
|
15
|
+
}
|
|
16
|
+
const planServiceStub = new PlanService()
|
|
17
|
+
sandbox.stub(planServiceStub, '_request').resolves(responseStub)
|
|
18
|
+
sandbox.stub(planServiceStub, '_requireReady').resolves()
|
|
19
|
+
const response = await planServiceStub.getAdminPlans()
|
|
20
|
+
t.equal(response, responseStub.data, 'Response data returned')
|
|
21
|
+
|
|
22
|
+
sandbox.restore()
|
|
23
|
+
t.end()
|
|
24
|
+
})
|
|
25
|
+
|
|
26
|
+
test('getAdminPlans should return an error', async t => {
|
|
27
|
+
t.plan(1)
|
|
28
|
+
const responseStub = {
|
|
29
|
+
success: false,
|
|
30
|
+
data: sandbox.stub(),
|
|
31
|
+
message: 'Negative getAdminPlans Test'
|
|
32
|
+
}
|
|
33
|
+
const planServiceStub = new PlanService()
|
|
34
|
+
sandbox.stub(planServiceStub, '_request').resolves(responseStub)
|
|
35
|
+
sandbox.stub(planServiceStub, '_requireReady').resolves()
|
|
36
|
+
|
|
37
|
+
try {
|
|
38
|
+
await planServiceStub.getAdminPlans()
|
|
39
|
+
} catch (err) {
|
|
40
|
+
t.ok(
|
|
41
|
+
err
|
|
42
|
+
.toString()
|
|
43
|
+
.includes(`Failed to get admin plans: ${responseStub.message}`),
|
|
44
|
+
'Error correctly returned'
|
|
45
|
+
)
|
|
46
|
+
}
|
|
47
|
+
sandbox.restore()
|
|
48
|
+
t.end()
|
|
49
|
+
})
|
|
50
|
+
|
|
51
|
+
test('getAdminPlans should fail the requireReady', async t => {
|
|
52
|
+
t.plan(1)
|
|
53
|
+
const responseStub = {
|
|
54
|
+
success: false,
|
|
55
|
+
data: sandbox.stub(),
|
|
56
|
+
message: 'Service not initialized for method: getAdminPlans'
|
|
57
|
+
}
|
|
58
|
+
const planServiceStub = new PlanService()
|
|
59
|
+
sandbox.stub(planServiceStub, '_request').resolves(responseStub)
|
|
60
|
+
sandbox
|
|
61
|
+
.stub(planServiceStub, '_requireReady')
|
|
62
|
+
.throws(() => new Error(responseStub.message))
|
|
63
|
+
|
|
64
|
+
try {
|
|
65
|
+
await planServiceStub.getAdminPlans()
|
|
66
|
+
t.fail('getAdminPlans should have failed')
|
|
67
|
+
} catch (err) {
|
|
68
|
+
t.equal(
|
|
69
|
+
err.toString(),
|
|
70
|
+
`Error: ${responseStub.message}`,
|
|
71
|
+
'Error correctly returned'
|
|
72
|
+
)
|
|
73
|
+
}
|
|
74
|
+
sandbox.restore()
|
|
75
|
+
t.end()
|
|
76
|
+
})
|
|
77
|
+
// #endregion
|
|
78
|
+
|
|
79
|
+
// #region Cleanup
|
|
80
|
+
test('teardown', t => {
|
|
81
|
+
sandbox.restore()
|
|
82
|
+
t.end()
|
|
83
|
+
})
|
|
84
|
+
// #endregion
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import test from 'tape'
|
|
2
|
+
import sinon from 'sinon'
|
|
3
|
+
import { PlanService } from '../../PlanService.js'
|
|
4
|
+
|
|
5
|
+
// #region Setup
|
|
6
|
+
const sandbox = sinon.createSandbox()
|
|
7
|
+
// #endregion
|
|
8
|
+
|
|
9
|
+
// #region Tests
|
|
10
|
+
test('getPlan should return response data', async t => {
|
|
11
|
+
t.plan(1)
|
|
12
|
+
const responseStub = {
|
|
13
|
+
success: true,
|
|
14
|
+
data: sandbox.stub()
|
|
15
|
+
}
|
|
16
|
+
const planServiceStub = new PlanService()
|
|
17
|
+
sandbox.stub(planServiceStub, '_request').resolves(responseStub)
|
|
18
|
+
const response = await planServiceStub.getPlan(true)
|
|
19
|
+
t.equal(response, responseStub.data, 'Response data returned')
|
|
20
|
+
|
|
21
|
+
sandbox.restore()
|
|
22
|
+
t.end()
|
|
23
|
+
})
|
|
24
|
+
|
|
25
|
+
test('getPlan should return an error', async t => {
|
|
26
|
+
t.plan(1)
|
|
27
|
+
const responseStub = {
|
|
28
|
+
success: false,
|
|
29
|
+
data: sandbox.stub(),
|
|
30
|
+
message: 'Error: Plan ID is required'
|
|
31
|
+
}
|
|
32
|
+
const planServiceStub = new PlanService()
|
|
33
|
+
sandbox.stub(planServiceStub, '_request').resolves(responseStub)
|
|
34
|
+
|
|
35
|
+
try {
|
|
36
|
+
await planServiceStub.getPlan()
|
|
37
|
+
} catch (err) {
|
|
38
|
+
t.equal(err.toString(), responseStub.message, 'Error correctly returned')
|
|
39
|
+
}
|
|
40
|
+
sandbox.restore()
|
|
41
|
+
t.end()
|
|
42
|
+
})
|
|
43
|
+
// #endregion
|
|
44
|
+
|
|
45
|
+
// #region Cleanup
|
|
46
|
+
test('teardown', t => {
|
|
47
|
+
sandbox.restore()
|
|
48
|
+
t.end()
|
|
49
|
+
})
|
|
50
|
+
// #endregion
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
/* eslint-disable no-undefined */
|
|
2
|
+
import test from 'tape'
|
|
3
|
+
import sinon from 'sinon'
|
|
4
|
+
import { PlanService } from '../../PlanService.js'
|
|
5
|
+
|
|
6
|
+
// #region Setup
|
|
7
|
+
const sandbox = sinon.createSandbox()
|
|
8
|
+
// #endregion
|
|
9
|
+
|
|
10
|
+
// #region Tests
|
|
11
|
+
test('getPlanByKey should return response data', async t => {
|
|
12
|
+
t.plan(1)
|
|
13
|
+
const responseStub = {
|
|
14
|
+
key: 'test123'
|
|
15
|
+
}
|
|
16
|
+
const planServiceStub = new PlanService()
|
|
17
|
+
sandbox.stub(planServiceStub, 'getPlans').resolves([responseStub])
|
|
18
|
+
const response = await planServiceStub.getPlanByKey('test123')
|
|
19
|
+
t.equal(response.key, responseStub.key, 'Response data matches stubbed data')
|
|
20
|
+
sandbox.restore()
|
|
21
|
+
t.end()
|
|
22
|
+
})
|
|
23
|
+
|
|
24
|
+
test('getPlanByKey should return a key not found error', async t => {
|
|
25
|
+
t.plan(1)
|
|
26
|
+
const responseStub = {
|
|
27
|
+
key: 'test123'
|
|
28
|
+
}
|
|
29
|
+
const planServiceStub = new PlanService()
|
|
30
|
+
sandbox.stub(planServiceStub, 'getPlans').resolves([responseStub])
|
|
31
|
+
try {
|
|
32
|
+
await planServiceStub.getPlanByKey('wrongKey123')
|
|
33
|
+
t.fail('getPlanByKey key validation successfully threw an error')
|
|
34
|
+
} catch (err) {
|
|
35
|
+
t.equal(
|
|
36
|
+
err.toString(),
|
|
37
|
+
"Error: Failed to get plan by key: Plan with key 'wrongKey123' not found",
|
|
38
|
+
'Plan key not found validation successfully threw an error for a wrong key entered.'
|
|
39
|
+
)
|
|
40
|
+
}
|
|
41
|
+
sandbox.restore()
|
|
42
|
+
t.end()
|
|
43
|
+
})
|
|
44
|
+
|
|
45
|
+
test('getPlanByKey error handling catches and returns an error', async t => {
|
|
46
|
+
t.plan(1)
|
|
47
|
+
const planServiceStub = new PlanService()
|
|
48
|
+
sandbox.stub(planServiceStub, 'getPlans').throws('Test Error')
|
|
49
|
+
try {
|
|
50
|
+
await planServiceStub.getPlanByKey('test123')
|
|
51
|
+
} catch (err) {
|
|
52
|
+
t.equal(
|
|
53
|
+
err.toString(),
|
|
54
|
+
'Error: Failed to get plan by key: Sinon-provided Test Error',
|
|
55
|
+
'Error handling caught and returned the correct error.'
|
|
56
|
+
)
|
|
57
|
+
}
|
|
58
|
+
sandbox.restore()
|
|
59
|
+
t.end()
|
|
60
|
+
})
|
|
61
|
+
|
|
62
|
+
function checkPlanKeyIsRequired () {
|
|
63
|
+
const badPlanKeys = [
|
|
64
|
+
{
|
|
65
|
+
name: 'an undefined value',
|
|
66
|
+
key: undefined
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
name: 'a null',
|
|
70
|
+
key: null
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
name: 'an empty string',
|
|
74
|
+
key: ''
|
|
75
|
+
}
|
|
76
|
+
]
|
|
77
|
+
for (let ii = 0; ii < badPlanKeys.length; ii++) {
|
|
78
|
+
test(`getPlanByKey should demand a Plan key when the key entered is ${badPlanKeys[ii].name}`, async t => {
|
|
79
|
+
t.plan(1)
|
|
80
|
+
const responseStub = {
|
|
81
|
+
key: 'test123'
|
|
82
|
+
}
|
|
83
|
+
const planServiceStub = new PlanService()
|
|
84
|
+
sandbox.stub(planServiceStub, 'getPlans').resolves([responseStub])
|
|
85
|
+
try {
|
|
86
|
+
await planServiceStub.getPlanByKey(badPlanKeys[ii].key)
|
|
87
|
+
t.fail('getPlanByKey key validation successfully threw an error')
|
|
88
|
+
} catch (err) {
|
|
89
|
+
t.equal(
|
|
90
|
+
err.toString(),
|
|
91
|
+
'Error: Plan key is required',
|
|
92
|
+
`Key requirement validation successfully threw an error when ${badPlanKeys[ii].name} key is entered.`
|
|
93
|
+
)
|
|
94
|
+
}
|
|
95
|
+
sandbox.restore()
|
|
96
|
+
t.end()
|
|
97
|
+
})
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
checkPlanKeyIsRequired()
|
|
102
|
+
// #endregion
|
|
103
|
+
|
|
104
|
+
// #region Cleanup
|
|
105
|
+
test('teardown', t => {
|
|
106
|
+
sandbox.restore()
|
|
107
|
+
t.end()
|
|
108
|
+
})
|
|
109
|
+
// #endregion
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/* eslint-disable no-undefined */
|
|
2
|
+
import test from 'tape'
|
|
3
|
+
import sinon from 'sinon'
|
|
4
|
+
import { PlanService } from '../../PlanService.js'
|
|
5
|
+
|
|
6
|
+
// #region Setup
|
|
7
|
+
const sandbox = sinon.createSandbox()
|
|
8
|
+
// #endregion
|
|
9
|
+
|
|
10
|
+
// #region Tests
|
|
11
|
+
test('getPlanWithValidation should return response data', async t => {
|
|
12
|
+
t.plan(1)
|
|
13
|
+
const responseStub = [sandbox.stub()]
|
|
14
|
+
const planServiceStub = new PlanService()
|
|
15
|
+
sandbox.stub(planServiceStub, 'getPlan').resolves(responseStub)
|
|
16
|
+
const response = await planServiceStub.getPlanWithValidation(
|
|
17
|
+
'Plan ID Test String'
|
|
18
|
+
)
|
|
19
|
+
t.equal(response, responseStub, 'Response data returned')
|
|
20
|
+
|
|
21
|
+
sandbox.restore()
|
|
22
|
+
t.end()
|
|
23
|
+
})
|
|
24
|
+
|
|
25
|
+
test('getPlanWithValidation should return an error - null causes Invalid plan data received', async t => {
|
|
26
|
+
t.plan(1)
|
|
27
|
+
const responseStub = null
|
|
28
|
+
const planServiceStub = new PlanService()
|
|
29
|
+
sandbox.stub(planServiceStub, 'getPlan').resolves(responseStub)
|
|
30
|
+
|
|
31
|
+
try {
|
|
32
|
+
await planServiceStub.getPlanWithValidation('Plan ID Test String')
|
|
33
|
+
} catch (err) {
|
|
34
|
+
t.ok(
|
|
35
|
+
err.toString().includes('Invalid plan data received'),
|
|
36
|
+
'Error correctly returned'
|
|
37
|
+
)
|
|
38
|
+
}
|
|
39
|
+
sandbox.restore()
|
|
40
|
+
t.end()
|
|
41
|
+
})
|
|
42
|
+
|
|
43
|
+
test('getPlanWithValidation should return an error - string causes Invalid plan data received', async t => {
|
|
44
|
+
t.plan(1)
|
|
45
|
+
const responseStub = 'Not an object'
|
|
46
|
+
const planServiceStub = new PlanService()
|
|
47
|
+
sandbox.stub(planServiceStub, 'getPlan').resolves(responseStub)
|
|
48
|
+
|
|
49
|
+
try {
|
|
50
|
+
await planServiceStub.getPlanWithValidation('Plan ID Test String')
|
|
51
|
+
} catch (err) {
|
|
52
|
+
t.ok(
|
|
53
|
+
err.toString().includes('Invalid plan data received'),
|
|
54
|
+
'Error correctly returned'
|
|
55
|
+
)
|
|
56
|
+
}
|
|
57
|
+
sandbox.restore()
|
|
58
|
+
t.end()
|
|
59
|
+
})
|
|
60
|
+
|
|
61
|
+
test('getPlanWithValidation should return an error - Plan ID must be a valid string', async t => {
|
|
62
|
+
t.plan(1)
|
|
63
|
+
const responseStub = null
|
|
64
|
+
const planServiceStub = new PlanService()
|
|
65
|
+
sandbox.stub(planServiceStub, 'getPlan').resolves(responseStub)
|
|
66
|
+
|
|
67
|
+
try {
|
|
68
|
+
await planServiceStub.getPlanWithValidation(undefined)
|
|
69
|
+
} catch (err) {
|
|
70
|
+
t.ok(
|
|
71
|
+
err.toString().includes('Plan ID must be a valid string'),
|
|
72
|
+
'Error correctly returned'
|
|
73
|
+
)
|
|
74
|
+
}
|
|
75
|
+
sandbox.restore()
|
|
76
|
+
t.end()
|
|
77
|
+
})
|
|
78
|
+
// #endregion
|
|
79
|
+
|
|
80
|
+
// #region Cleanup
|
|
81
|
+
test('teardown', t => {
|
|
82
|
+
sandbox.restore()
|
|
83
|
+
t.end()
|
|
84
|
+
})
|
|
85
|
+
// #endregion
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import test from 'tape'
|
|
2
|
+
import sinon from 'sinon'
|
|
3
|
+
import { PlanService } from '../../PlanService.js'
|
|
4
|
+
|
|
5
|
+
// #region Setup
|
|
6
|
+
const sandbox = sinon.createSandbox()
|
|
7
|
+
// #endregion
|
|
8
|
+
|
|
9
|
+
// #region Tests
|
|
10
|
+
test('getPlans should return response data', async t => {
|
|
11
|
+
t.plan(1)
|
|
12
|
+
const responseStub = {
|
|
13
|
+
success: true,
|
|
14
|
+
data: sandbox.stub()
|
|
15
|
+
}
|
|
16
|
+
const planServiceStub = new PlanService()
|
|
17
|
+
sandbox.stub(planServiceStub, '_request').resolves(responseStub)
|
|
18
|
+
const response = await planServiceStub.getPlans()
|
|
19
|
+
t.equal(response, responseStub.data, 'Response data returned')
|
|
20
|
+
|
|
21
|
+
sandbox.restore()
|
|
22
|
+
t.end()
|
|
23
|
+
})
|
|
24
|
+
|
|
25
|
+
test('getPlans should return an error', async t => {
|
|
26
|
+
t.plan(1)
|
|
27
|
+
const responseStub = {
|
|
28
|
+
success: false,
|
|
29
|
+
data: sandbox.stub(),
|
|
30
|
+
message: 'Negative getPlans Test'
|
|
31
|
+
}
|
|
32
|
+
const planServiceStub = new PlanService()
|
|
33
|
+
sandbox.stub(planServiceStub, '_request').resolves(responseStub)
|
|
34
|
+
|
|
35
|
+
try {
|
|
36
|
+
await planServiceStub.getPlans()
|
|
37
|
+
} catch (err) {
|
|
38
|
+
t.ok(
|
|
39
|
+
err.toString().includes(`Failed to get plans: ${responseStub.message}`),
|
|
40
|
+
'Error correctly returned'
|
|
41
|
+
)
|
|
42
|
+
}
|
|
43
|
+
sandbox.restore()
|
|
44
|
+
t.end()
|
|
45
|
+
})
|
|
46
|
+
// #endregion
|
|
47
|
+
|
|
48
|
+
// #region Cleanup
|
|
49
|
+
test('teardown', t => {
|
|
50
|
+
sandbox.restore()
|
|
51
|
+
t.end()
|
|
52
|
+
})
|
|
53
|
+
// #endregion
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
/* eslint-disable no-undefined */
|
|
2
|
+
import test from 'tape'
|
|
3
|
+
import sinon from 'sinon'
|
|
4
|
+
import { PlanService } from '../../PlanService.js'
|
|
5
|
+
|
|
6
|
+
// #region Setup
|
|
7
|
+
const sandbox = sinon.createSandbox()
|
|
8
|
+
// #endregion
|
|
9
|
+
|
|
10
|
+
// #region Tests
|
|
11
|
+
test('getPlans should return response data', async t => {
|
|
12
|
+
t.plan(1)
|
|
13
|
+
const responseStub = {
|
|
14
|
+
pricing: {
|
|
15
|
+
bestPrice: {
|
|
16
|
+
amount: 1
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
const planServiceStub = new PlanService()
|
|
21
|
+
sandbox.stub(planServiceStub, 'getPlansWithPricing').resolves([responseStub])
|
|
22
|
+
const response = await planServiceStub.getPlansByPriceRange()
|
|
23
|
+
t.equal(
|
|
24
|
+
response[0].pricing.bestPrice.amount,
|
|
25
|
+
responseStub.pricing.bestPrice.amount,
|
|
26
|
+
'Response data matches stubbed data'
|
|
27
|
+
)
|
|
28
|
+
sandbox.restore()
|
|
29
|
+
t.end()
|
|
30
|
+
})
|
|
31
|
+
|
|
32
|
+
function noPricingAmount () {
|
|
33
|
+
const noPriceAmounts = [
|
|
34
|
+
{
|
|
35
|
+
name: 'undefined',
|
|
36
|
+
amount: undefined
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
name: 'null',
|
|
40
|
+
amount: null
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
name: 'less than the minimum',
|
|
44
|
+
amount: 1
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
name: 'more than the maximum',
|
|
48
|
+
amount: 20
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
name: 'a string',
|
|
52
|
+
amount: 'test string'
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
name: 'an object',
|
|
56
|
+
amount: {}
|
|
57
|
+
}
|
|
58
|
+
]
|
|
59
|
+
for (let ii = 0; ii < noPriceAmounts.length; ii++) {
|
|
60
|
+
test(`getPlansWithPricing should return an empty response when the amount entered is ${noPriceAmounts[ii].name}`, async t => {
|
|
61
|
+
t.plan(1)
|
|
62
|
+
const responseStub = {
|
|
63
|
+
pricing: {
|
|
64
|
+
bestPrice: {}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
responseStub.pricing.bestPrice.amount = noPriceAmounts[ii].amount
|
|
68
|
+
const planServiceStub = new PlanService()
|
|
69
|
+
sandbox
|
|
70
|
+
.stub(planServiceStub, 'getPlansWithPricing')
|
|
71
|
+
.resolves([responseStub])
|
|
72
|
+
const response = await planServiceStub.getPlansByPriceRange(5, 10)
|
|
73
|
+
t.equal(
|
|
74
|
+
response.length,
|
|
75
|
+
0,
|
|
76
|
+
`Response is an empty array when entered amount is: ${responseStub.pricing.bestPrice.amount}`
|
|
77
|
+
)
|
|
78
|
+
sandbox.restore()
|
|
79
|
+
t.end()
|
|
80
|
+
})
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
test('getPlans should return an error', async t => {
|
|
85
|
+
t.plan(1)
|
|
86
|
+
const planServiceStub = new PlanService()
|
|
87
|
+
sandbox.stub(planServiceStub, 'getPlansWithPricing').throws('Test Error')
|
|
88
|
+
try {
|
|
89
|
+
await planServiceStub.getPlansByPriceRange()
|
|
90
|
+
} catch (err) {
|
|
91
|
+
t.equal(
|
|
92
|
+
err.toString(),
|
|
93
|
+
'Error: Failed to get plans by price range: Sinon-provided Test Error',
|
|
94
|
+
'Error caught and correctly returned'
|
|
95
|
+
)
|
|
96
|
+
}
|
|
97
|
+
sandbox.restore()
|
|
98
|
+
t.end()
|
|
99
|
+
})
|
|
100
|
+
|
|
101
|
+
noPricingAmount()
|
|
102
|
+
// #endregion
|
|
103
|
+
|
|
104
|
+
// #region Cleanup
|
|
105
|
+
test('teardown', t => {
|
|
106
|
+
sandbox.restore()
|
|
107
|
+
t.end()
|
|
108
|
+
})
|
|
109
|
+
// #endregion
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import test from 'tape'
|
|
2
|
+
import sinon from 'sinon'
|
|
3
|
+
import { PlanService } from '../../PlanService.js'
|
|
4
|
+
|
|
5
|
+
// #region Setup
|
|
6
|
+
const sandbox = sinon.createSandbox()
|
|
7
|
+
// #endregion
|
|
8
|
+
|
|
9
|
+
// #region Tests
|
|
10
|
+
test('getPlansWithValidation should return response data', async t => {
|
|
11
|
+
t.plan(1)
|
|
12
|
+
const responseStub = [sandbox.stub()]
|
|
13
|
+
const planServiceStub = new PlanService()
|
|
14
|
+
sandbox.stub(planServiceStub, 'getPlans').resolves(responseStub)
|
|
15
|
+
const response = await planServiceStub.getPlansWithValidation()
|
|
16
|
+
t.equal(response, responseStub, 'Response data returned')
|
|
17
|
+
|
|
18
|
+
sandbox.restore()
|
|
19
|
+
t.end()
|
|
20
|
+
})
|
|
21
|
+
|
|
22
|
+
test('getPlansWithValidation should return an error - plans should be an array', async t => {
|
|
23
|
+
t.plan(1)
|
|
24
|
+
const responseStub = null
|
|
25
|
+
const planServiceStub = new PlanService()
|
|
26
|
+
sandbox.stub(planServiceStub, 'getPlans').resolves(responseStub)
|
|
27
|
+
|
|
28
|
+
try {
|
|
29
|
+
await planServiceStub.getPlansWithValidation()
|
|
30
|
+
} catch (err) {
|
|
31
|
+
t.ok(
|
|
32
|
+
err
|
|
33
|
+
.toString()
|
|
34
|
+
.includes('Invalid response format: plans should be an array'),
|
|
35
|
+
'Error correctly returned'
|
|
36
|
+
)
|
|
37
|
+
}
|
|
38
|
+
sandbox.restore()
|
|
39
|
+
t.end()
|
|
40
|
+
})
|
|
41
|
+
// #endregion
|
|
42
|
+
|
|
43
|
+
// #region Cleanup
|
|
44
|
+
test('teardown', t => {
|
|
45
|
+
sandbox.restore()
|
|
46
|
+
t.end()
|
|
47
|
+
})
|
|
48
|
+
// #endregion
|