@symbo.ls/sdk 3.2.3 → 3.2.6
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,114 @@
|
|
|
1
|
+
import test from 'tape'
|
|
2
|
+
import sinon from 'sinon'
|
|
3
|
+
import { FileService } from '../../FileService.js'
|
|
4
|
+
|
|
5
|
+
// #region Setup
|
|
6
|
+
const sandbox = sinon.createSandbox()
|
|
7
|
+
// #endregion
|
|
8
|
+
|
|
9
|
+
// #region Tests
|
|
10
|
+
test('uploadFileWithValidation should return response data', async t => {
|
|
11
|
+
t.plan(2)
|
|
12
|
+
const uploadFileResponseStub = {
|
|
13
|
+
success: true,
|
|
14
|
+
data: 'test data response'
|
|
15
|
+
}
|
|
16
|
+
const mockFile = new File(['file contents'], 'filename.txt', {
|
|
17
|
+
type: 'text/*'
|
|
18
|
+
})
|
|
19
|
+
const fileServiceStub = new FileService()
|
|
20
|
+
const uploadFileStub = sandbox
|
|
21
|
+
.stub(fileServiceStub, 'uploadFile')
|
|
22
|
+
.resolves(uploadFileResponseStub)
|
|
23
|
+
const response = await fileServiceStub.uploadFileWithValidation(mockFile)
|
|
24
|
+
t.ok(response.success, 'response successfully returned')
|
|
25
|
+
t.ok(uploadFileStub.calledOnce, 'uploadFileStub called once')
|
|
26
|
+
sandbox.restore()
|
|
27
|
+
t.end()
|
|
28
|
+
})
|
|
29
|
+
|
|
30
|
+
test('file validation should throw an error when no file is uploaded', async t => {
|
|
31
|
+
t.plan(1)
|
|
32
|
+
const uploadFileResponseStub = {
|
|
33
|
+
success: true,
|
|
34
|
+
data: 'test data response'
|
|
35
|
+
}
|
|
36
|
+
const fileServiceStub = new FileService()
|
|
37
|
+
sandbox.stub(fileServiceStub, 'uploadFile').resolves(uploadFileResponseStub)
|
|
38
|
+
try {
|
|
39
|
+
await fileServiceStub.uploadFileWithValidation()
|
|
40
|
+
t.fail('file validation successfully threw an error')
|
|
41
|
+
} catch (err) {
|
|
42
|
+
t.equal(
|
|
43
|
+
err.toString(),
|
|
44
|
+
'Error: File is required',
|
|
45
|
+
'file validation successfully threw an error when no file was uploaded.'
|
|
46
|
+
)
|
|
47
|
+
}
|
|
48
|
+
sandbox.restore()
|
|
49
|
+
t.end()
|
|
50
|
+
})
|
|
51
|
+
|
|
52
|
+
test('file size validation throws an error', async t => {
|
|
53
|
+
t.plan(1)
|
|
54
|
+
const uploadFileResponseStub = {
|
|
55
|
+
success: true,
|
|
56
|
+
data: 'test data response'
|
|
57
|
+
}
|
|
58
|
+
const mockFile = new File(['file contents'], 'filename.txt', {
|
|
59
|
+
type: 'text/*'
|
|
60
|
+
})
|
|
61
|
+
const options = {
|
|
62
|
+
maxSize: 1
|
|
63
|
+
}
|
|
64
|
+
const fileServiceStub = new FileService()
|
|
65
|
+
sandbox.stub(fileServiceStub, 'uploadFile').resolves(uploadFileResponseStub)
|
|
66
|
+
try {
|
|
67
|
+
await fileServiceStub.uploadFileWithValidation(mockFile, options)
|
|
68
|
+
t.fail('file size validation successfully threw an error')
|
|
69
|
+
} catch (err) {
|
|
70
|
+
t.ok(
|
|
71
|
+
err
|
|
72
|
+
.toString()
|
|
73
|
+
.includes('Error: File size exceeds maximum allowed size of ')
|
|
74
|
+
)
|
|
75
|
+
}
|
|
76
|
+
sandbox.restore()
|
|
77
|
+
t.end()
|
|
78
|
+
})
|
|
79
|
+
|
|
80
|
+
test('isValid type check throws an error', async t => {
|
|
81
|
+
t.plan(1)
|
|
82
|
+
const uploadFileResponseStub = {
|
|
83
|
+
success: true,
|
|
84
|
+
data: 'test data response'
|
|
85
|
+
}
|
|
86
|
+
const mockFile = new File(['file contents'], 'filename.txt', {
|
|
87
|
+
type: 'text/*'
|
|
88
|
+
})
|
|
89
|
+
const options = {
|
|
90
|
+
allowedTypes: ['test type']
|
|
91
|
+
}
|
|
92
|
+
const fileServiceStub = new FileService()
|
|
93
|
+
sandbox.stub(fileServiceStub, 'uploadFile').resolves(uploadFileResponseStub)
|
|
94
|
+
try {
|
|
95
|
+
await fileServiceStub.uploadFileWithValidation(mockFile, options)
|
|
96
|
+
t.fail('isValid check successfully threw an error')
|
|
97
|
+
} catch (err) {
|
|
98
|
+
t.equal(
|
|
99
|
+
err.toString(),
|
|
100
|
+
"Error: File type 'text/*' is not allowed. Allowed types: test type",
|
|
101
|
+
'isValid check succeeded.'
|
|
102
|
+
)
|
|
103
|
+
}
|
|
104
|
+
sandbox.restore()
|
|
105
|
+
t.end()
|
|
106
|
+
})
|
|
107
|
+
// #endregion
|
|
108
|
+
|
|
109
|
+
// #region Cleanup
|
|
110
|
+
test('teardown', t => {
|
|
111
|
+
sandbox.restore()
|
|
112
|
+
t.end()
|
|
113
|
+
})
|
|
114
|
+
// #endregion
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import test from 'tape'
|
|
2
|
+
import sinon from 'sinon'
|
|
3
|
+
import { FileService } from '../../FileService.js'
|
|
4
|
+
|
|
5
|
+
// #region Setup
|
|
6
|
+
const sandbox = sinon.createSandbox()
|
|
7
|
+
// #endregion
|
|
8
|
+
|
|
9
|
+
// #region Tests
|
|
10
|
+
test('uploadImage should return response data', async t => {
|
|
11
|
+
t.plan(2)
|
|
12
|
+
const uploadFileResponseStub = {
|
|
13
|
+
success: true,
|
|
14
|
+
data: 'test data response'
|
|
15
|
+
}
|
|
16
|
+
const mockFile = new File(['file contents'], 'filename.txt', {
|
|
17
|
+
type: 'image/*'
|
|
18
|
+
})
|
|
19
|
+
const fileServiceStub = new FileService()
|
|
20
|
+
const uploadFileStub = sandbox
|
|
21
|
+
.stub(fileServiceStub, 'uploadFileWithValidation')
|
|
22
|
+
.resolves(uploadFileResponseStub)
|
|
23
|
+
const response = await fileServiceStub.uploadImage(mockFile)
|
|
24
|
+
t.ok(response.success, 'response successfully returned')
|
|
25
|
+
t.ok(uploadFileStub.calledOnce, 'uploadFileStub called once')
|
|
26
|
+
sandbox.restore()
|
|
27
|
+
t.end()
|
|
28
|
+
})
|
|
29
|
+
// #endregion
|
|
30
|
+
|
|
31
|
+
// #region Cleanup
|
|
32
|
+
test('teardown', t => {
|
|
33
|
+
sandbox.restore()
|
|
34
|
+
t.end()
|
|
35
|
+
})
|
|
36
|
+
// #endregion
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
/* eslint-disable no-undefined */
|
|
2
|
+
import test from 'tape'
|
|
3
|
+
import sinon from 'sinon'
|
|
4
|
+
import { FileService } from '../../FileService.js'
|
|
5
|
+
|
|
6
|
+
// #region Setup
|
|
7
|
+
const sandbox = sinon.createSandbox()
|
|
8
|
+
// #endregion
|
|
9
|
+
|
|
10
|
+
// #region Tests
|
|
11
|
+
test('uploadMultipleFiles should return response data', async t => {
|
|
12
|
+
t.plan(3)
|
|
13
|
+
const uploadFileResponseStub = {
|
|
14
|
+
success: true,
|
|
15
|
+
data: 'test data response'
|
|
16
|
+
}
|
|
17
|
+
const firstMockFile = new File(['file contents'], 'filename.txt', {
|
|
18
|
+
type: 'text/*'
|
|
19
|
+
})
|
|
20
|
+
const secondMockFile = new File(['file contents'], 'filename1.txt', {
|
|
21
|
+
type: 'text/*'
|
|
22
|
+
})
|
|
23
|
+
const files = [firstMockFile, secondMockFile]
|
|
24
|
+
const fileServiceStub = new FileService()
|
|
25
|
+
sandbox.stub(fileServiceStub, 'uploadFile').resolves(uploadFileResponseStub)
|
|
26
|
+
const response = await fileServiceStub.uploadMultipleFiles(files)
|
|
27
|
+
t.equal(
|
|
28
|
+
response.length,
|
|
29
|
+
2,
|
|
30
|
+
'Actual number of uploaded files matches expected number of files'
|
|
31
|
+
)
|
|
32
|
+
t.ok(
|
|
33
|
+
response[0].success,
|
|
34
|
+
'response for first file uploaded successfully returned'
|
|
35
|
+
)
|
|
36
|
+
t.ok(
|
|
37
|
+
response[1].success,
|
|
38
|
+
'response for second file uploaded successfully returned'
|
|
39
|
+
)
|
|
40
|
+
sandbox.restore()
|
|
41
|
+
t.end()
|
|
42
|
+
})
|
|
43
|
+
|
|
44
|
+
test('file validation should throw an error when no file is uploaded', async t => {
|
|
45
|
+
t.plan(1)
|
|
46
|
+
const uploadFileResponseStub = {
|
|
47
|
+
success: true,
|
|
48
|
+
data: 'test data response'
|
|
49
|
+
}
|
|
50
|
+
const fileServiceStub = new FileService()
|
|
51
|
+
sandbox.stub(fileServiceStub, 'uploadFile').resolves(uploadFileResponseStub)
|
|
52
|
+
try {
|
|
53
|
+
await fileServiceStub.uploadMultipleFiles()
|
|
54
|
+
t.fail('file validation successfully threw an error')
|
|
55
|
+
} catch (err) {
|
|
56
|
+
t.equal(
|
|
57
|
+
err.toString(),
|
|
58
|
+
'Error: Files array is required and must not be empty',
|
|
59
|
+
'file validation successfully threw an error when no file was uploaded.'
|
|
60
|
+
)
|
|
61
|
+
}
|
|
62
|
+
sandbox.restore()
|
|
63
|
+
t.end()
|
|
64
|
+
})
|
|
65
|
+
|
|
66
|
+
function checkFileTypeValidation () {
|
|
67
|
+
const badData = [
|
|
68
|
+
{ name: 'Number value', value: 123 },
|
|
69
|
+
{ name: 'False boolean value', value: false },
|
|
70
|
+
{ name: 'True boolean value', value: true },
|
|
71
|
+
{ name: 'Empty String value', value: '' },
|
|
72
|
+
{ name: 'Object value', value: {} },
|
|
73
|
+
{ name: 'Null value', value: null },
|
|
74
|
+
{ name: 'Undefined value', value: undefined }
|
|
75
|
+
]
|
|
76
|
+
for (let ii = 0; ii < badData.length; ii++) {
|
|
77
|
+
test(`file validation should throw an error when: ${badData[ii].name} is uploaded`, async t => {
|
|
78
|
+
t.plan(1)
|
|
79
|
+
const uploadFileResponseStub = {
|
|
80
|
+
success: true,
|
|
81
|
+
data: 'test data response'
|
|
82
|
+
}
|
|
83
|
+
const fileServiceStub = new FileService()
|
|
84
|
+
sandbox
|
|
85
|
+
.stub(fileServiceStub, 'uploadFile')
|
|
86
|
+
.resolves(uploadFileResponseStub)
|
|
87
|
+
try {
|
|
88
|
+
await fileServiceStub.uploadMultipleFiles(badData[ii].value)
|
|
89
|
+
t.fail('file validation successfully threw an error')
|
|
90
|
+
} catch (err) {
|
|
91
|
+
t.equal(
|
|
92
|
+
err.toString(),
|
|
93
|
+
'Error: Files array is required and must not be empty',
|
|
94
|
+
`file validation successfully threw an error when: ${badData[ii].name} was uploaded.`
|
|
95
|
+
)
|
|
96
|
+
}
|
|
97
|
+
sandbox.restore()
|
|
98
|
+
t.end()
|
|
99
|
+
})
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
checkFileTypeValidation()
|
|
104
|
+
// #endregion
|
|
105
|
+
|
|
106
|
+
// #region Cleanup
|
|
107
|
+
test('teardown', t => {
|
|
108
|
+
sandbox.restore()
|
|
109
|
+
t.end()
|
|
110
|
+
})
|
|
111
|
+
// #endregion
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import test from 'tape'
|
|
2
|
+
import { FileService } from '../../FileService.js'
|
|
3
|
+
|
|
4
|
+
// #region Tests
|
|
5
|
+
test('validateFile should return a good file url', t => {
|
|
6
|
+
t.plan(1)
|
|
7
|
+
const mockFile = new File(['file contents'], 'filename.txt', {
|
|
8
|
+
type: 'text/*'
|
|
9
|
+
})
|
|
10
|
+
const fileServiceStub = new FileService()
|
|
11
|
+
const response = fileServiceStub.validateFile(mockFile)
|
|
12
|
+
t.ok(response.length === 0, 'Empty array of errors is succesfully returned')
|
|
13
|
+
t.end()
|
|
14
|
+
})
|
|
15
|
+
|
|
16
|
+
test('file validation should return an error', t => {
|
|
17
|
+
t.plan(1)
|
|
18
|
+
const mockFile = false
|
|
19
|
+
const fileServiceStub = new FileService()
|
|
20
|
+
const response = fileServiceStub.validateFile(mockFile)
|
|
21
|
+
t.equal(
|
|
22
|
+
response[0],
|
|
23
|
+
'File is required',
|
|
24
|
+
'File validation successfully threw an error'
|
|
25
|
+
)
|
|
26
|
+
t.end()
|
|
27
|
+
})
|
|
28
|
+
|
|
29
|
+
test('size validation should return an error', t => {
|
|
30
|
+
t.plan(1)
|
|
31
|
+
const mockFile = new File(['file contents'], 'filename.txt', {
|
|
32
|
+
type: 'text/*'
|
|
33
|
+
})
|
|
34
|
+
const mockOptions = {
|
|
35
|
+
maxSize: 1
|
|
36
|
+
}
|
|
37
|
+
const fileServiceStub = new FileService()
|
|
38
|
+
const response = fileServiceStub.validateFile(mockFile, mockOptions)
|
|
39
|
+
t.ok(
|
|
40
|
+
response[0].includes('File size (0.00MB) exceeds maximum allowed size of '),
|
|
41
|
+
'Size validation successfully threw an error'
|
|
42
|
+
)
|
|
43
|
+
t.end()
|
|
44
|
+
})
|
|
45
|
+
|
|
46
|
+
test('allowedTypes validation should return an error', t => {
|
|
47
|
+
t.plan(1)
|
|
48
|
+
const mockFile = new File(['file contents'], 'filename.txt', {
|
|
49
|
+
type: 'text/*'
|
|
50
|
+
})
|
|
51
|
+
const mockOptions = {
|
|
52
|
+
allowedTypes: ['test123']
|
|
53
|
+
}
|
|
54
|
+
const fileServiceStub = new FileService()
|
|
55
|
+
const response = fileServiceStub.validateFile(mockFile, mockOptions)
|
|
56
|
+
t.equal(
|
|
57
|
+
response[0],
|
|
58
|
+
"File type 'text/*' is not allowed. Allowed types: test123",
|
|
59
|
+
'allowedTypes validation should return an error'
|
|
60
|
+
)
|
|
61
|
+
t.end()
|
|
62
|
+
})
|
|
63
|
+
// #endregion
|
|
@@ -0,0 +1,104 @@
|
|
|
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('createPlan should return response data', async t => {
|
|
12
|
+
t.plan(1)
|
|
13
|
+
|
|
14
|
+
const planDataStub = {
|
|
15
|
+
success: true,
|
|
16
|
+
data: sandbox.stub()
|
|
17
|
+
}
|
|
18
|
+
const planServiceStub = new PlanService()
|
|
19
|
+
sandbox.stub(planServiceStub, '_request').resolves(planDataStub)
|
|
20
|
+
sandbox.stub(planServiceStub, '_requireReady').resolves()
|
|
21
|
+
const response = await planServiceStub.createPlan([])
|
|
22
|
+
t.equal(response, planDataStub.data, 'Response data returned')
|
|
23
|
+
|
|
24
|
+
sandbox.restore()
|
|
25
|
+
t.end()
|
|
26
|
+
})
|
|
27
|
+
|
|
28
|
+
function planDataValidation () {
|
|
29
|
+
const badData = {
|
|
30
|
+
falseValue: false,
|
|
31
|
+
undefinedValue: undefined,
|
|
32
|
+
stringValue: 'testString'
|
|
33
|
+
}
|
|
34
|
+
Object.keys(badData).forEach(key => {
|
|
35
|
+
test(`createPlan should return an error for ${key} - Plan data is required`, async t => {
|
|
36
|
+
t.plan(1)
|
|
37
|
+
const planServiceStub = new PlanService()
|
|
38
|
+
sandbox.stub(planServiceStub, '_requireReady').resolves()
|
|
39
|
+
|
|
40
|
+
try {
|
|
41
|
+
await planServiceStub.createPlan(badData[key])
|
|
42
|
+
t.fail('createPlan should have failed')
|
|
43
|
+
} catch (err) {
|
|
44
|
+
t.equal(
|
|
45
|
+
err.toString(),
|
|
46
|
+
'Error: Plan data is required',
|
|
47
|
+
'Error correctly returned'
|
|
48
|
+
)
|
|
49
|
+
}
|
|
50
|
+
sandbox.restore()
|
|
51
|
+
t.end()
|
|
52
|
+
})
|
|
53
|
+
})
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
test('createPlan should return an error - Failed to parse URL', async t => {
|
|
57
|
+
t.plan(1)
|
|
58
|
+
const planServiceStub = new PlanService()
|
|
59
|
+
sandbox.stub(planServiceStub, '_requireReady').resolves()
|
|
60
|
+
|
|
61
|
+
try {
|
|
62
|
+
await planServiceStub.createPlan([])
|
|
63
|
+
t.fail('createPlan should have failed')
|
|
64
|
+
} catch (err) {
|
|
65
|
+
t.equal(
|
|
66
|
+
err.toString(),
|
|
67
|
+
'Error: Failed to create plan: Request failed: Failed to parse URL from null/core/admin/plans',
|
|
68
|
+
'Error correctly returned'
|
|
69
|
+
)
|
|
70
|
+
}
|
|
71
|
+
sandbox.restore()
|
|
72
|
+
t.end()
|
|
73
|
+
})
|
|
74
|
+
|
|
75
|
+
test('createPlan should fail the requireReady', async t => {
|
|
76
|
+
t.plan(1)
|
|
77
|
+
const planServiceStub = new PlanService()
|
|
78
|
+
sandbox
|
|
79
|
+
.stub(planServiceStub, '_requireReady')
|
|
80
|
+
.throws(() => new Error('Service not initialized for method: createPlan'))
|
|
81
|
+
|
|
82
|
+
try {
|
|
83
|
+
await planServiceStub.createPlan()
|
|
84
|
+
t.fail('createPlan should have failed')
|
|
85
|
+
} catch (err) {
|
|
86
|
+
t.equal(
|
|
87
|
+
err.toString(),
|
|
88
|
+
'Error: Service not initialized for method: createPlan',
|
|
89
|
+
'Error correctly returned'
|
|
90
|
+
)
|
|
91
|
+
}
|
|
92
|
+
sandbox.restore()
|
|
93
|
+
t.end()
|
|
94
|
+
})
|
|
95
|
+
|
|
96
|
+
planDataValidation()
|
|
97
|
+
// #endregion
|
|
98
|
+
|
|
99
|
+
// #region Cleanup
|
|
100
|
+
test('teardown', t => {
|
|
101
|
+
sandbox.restore()
|
|
102
|
+
t.end()
|
|
103
|
+
})
|
|
104
|
+
// #endregion
|