ccs-digitalmarketplace-frameworks 3.4.0 → 3.6.0

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.
Files changed (29) hide show
  1. package/frameworks/digital-outcomes-and-specialists-7/manifests/edit_service.yml +34 -0
  2. package/frameworks/digital-outcomes-and-specialists-7/manifests/edit_service_as_admin.yml +34 -0
  3. package/frameworks/digital-outcomes-and-specialists-7/manifests/edit_submission.yml +34 -0
  4. package/frameworks/digital-outcomes-and-specialists-7/questions/services/multiqVirtualStudioCompatibilityConstraints.yml +17 -0
  5. package/frameworks/digital-outcomes-and-specialists-7/questions/services/multiqVirtualStudioOtherBiometrics.yml +17 -0
  6. package/frameworks/digital-outcomes-and-specialists-7/questions/services/multiqVirtualStudioStreaming.yml +17 -0
  7. package/frameworks/digital-outcomes-and-specialists-7/questions/services/virtualMinimumLeadTime.yml +29 -0
  8. package/frameworks/digital-outcomes-and-specialists-7/questions/services/virtualMinimumStudioTime.yml +28 -0
  9. package/frameworks/digital-outcomes-and-specialists-7/questions/services/virtualStudioAnyCompatibilityConstraints.yml +22 -0
  10. package/frameworks/digital-outcomes-and-specialists-7/questions/services/virtualStudioAnyOtherBiometrics.yml +28 -0
  11. package/frameworks/digital-outcomes-and-specialists-7/questions/services/virtualStudioAvailability.yml +27 -0
  12. package/frameworks/digital-outcomes-and-specialists-7/questions/services/virtualStudioBookingCost.yml +37 -0
  13. package/frameworks/digital-outcomes-and-specialists-7/questions/services/virtualStudioCompatibilityConstraints.yml +19 -0
  14. package/frameworks/digital-outcomes-and-specialists-7/questions/services/virtualStudioEyeTracking.yml +23 -0
  15. package/frameworks/digital-outcomes-and-specialists-7/questions/services/virtualStudioNumberOfParticipants.yml +24 -0
  16. package/frameworks/digital-outcomes-and-specialists-7/questions/services/virtualStudioNumberOfResearchers.yml +24 -0
  17. package/frameworks/digital-outcomes-and-specialists-7/questions/services/virtualStudioOtherBiometrics.yml +19 -0
  18. package/frameworks/digital-outcomes-and-specialists-7/questions/services/virtualStudioSessionRecorded.yml +23 -0
  19. package/frameworks/digital-outcomes-and-specialists-7/questions/services/virtualStudioStreaming.yml +28 -0
  20. package/frameworks/digital-outcomes-and-specialists-7/questions/services/virtualStudioStreamingPlatform.yml +19 -0
  21. package/frameworks/digital-outcomes-and-specialists-7/questions/services/virtualStudioTechnicalAssistance.yml +23 -0
  22. package/frameworks/digital-outcomes-and-specialists-7/questions/services/virtualStudioViewOfMobileDevice.yml +23 -0
  23. package/frameworks/digital-outcomes-and-specialists-7/questions/services/virtualStudioViewOfScreen.yml +23 -0
  24. package/frameworks/digital-outcomes-and-specialists-7/questions/services/whatTypesOfUserResearchStudio.yml +36 -0
  25. package/frameworks/digital-outcomes-and-specialists-7/questions/services/whatUserResearchServices.yml +36 -0
  26. package/package.json +1 -1
  27. package/schema_generator/validation.py +14 -4
  28. package/schemas/questions.json +36 -0
  29. package/tests/test_generate_validation_schema.py +99 -2
@@ -245,3 +245,37 @@
245
245
  editable: False
246
246
  questions:
247
247
  - multiqTradeOrIndustryBodies
248
+
249
+ - name: Virtual user research studio - Booking
250
+ editable: False
251
+ questions:
252
+ - virtualMinimumStudioTime
253
+ - virtualStudioBookingCost
254
+ - virtualMinimumLeadTime
255
+
256
+ - name: Virtual user research studio - Capacity
257
+ editable: False
258
+ questions:
259
+ - virtualStudioNumberOfParticipants
260
+ - virtualStudioNumberOfResearchers
261
+
262
+ - name: Virtual user research studio - Availability
263
+ editable: False
264
+ questions:
265
+ - virtualStudioAvailability
266
+
267
+ - name: Virtual user research studio - Technical assistance
268
+ editable: False
269
+ questions:
270
+ - virtualStudioTechnicalAssistance
271
+
272
+ - name: Virtual user research studio - Viewing
273
+ editable: False
274
+ questions:
275
+ - multiqVirtualStudioStreaming
276
+ - multiqVirtualStudioCompatibilityConstraints
277
+ - virtualStudioViewOfScreen
278
+ - virtualStudioViewOfMobileDevice
279
+ - virtualStudioEyeTracking
280
+ - multiqVirtualStudioOtherBiometrics
281
+ - virtualStudioSessionRecorded
@@ -273,3 +273,37 @@
273
273
  editable: True
274
274
  questions:
275
275
  - multiqTradeOrIndustryBodies
276
+
277
+ - name: Virtual user research studio - Booking
278
+ editable: True
279
+ questions:
280
+ - virtualMinimumStudioTime
281
+ - virtualStudioBookingCost
282
+ - virtualMinimumLeadTime
283
+
284
+ - name: Virtual user research studio - Capacity
285
+ editable: True
286
+ questions:
287
+ - virtualStudioNumberOfParticipants
288
+ - virtualStudioNumberOfResearchers
289
+
290
+ - name: Virtual user research studio - Availability
291
+ editable: True
292
+ questions:
293
+ - virtualStudioAvailability
294
+
295
+ - name: Virtual user research studio - Technical assistance
296
+ editable: True
297
+ questions:
298
+ - virtualStudioTechnicalAssistance
299
+
300
+ - name: Virtual user research studio - Viewing
301
+ editable: True
302
+ questions:
303
+ - multiqVirtualStudioStreaming
304
+ - multiqVirtualStudioCompatibilityConstraints
305
+ - virtualStudioViewOfScreen
306
+ - virtualStudioViewOfMobileDevice
307
+ - virtualStudioEyeTracking
308
+ - multiqVirtualStudioOtherBiometrics
309
+ - virtualStudioSessionRecorded
@@ -317,3 +317,37 @@
317
317
  editable: True
318
318
  questions:
319
319
  - multiqTradeOrIndustryBodies
320
+
321
+ - name: Virtual user research studio - Booking
322
+ editable: True
323
+ questions:
324
+ - virtualMinimumStudioTime
325
+ - virtualStudioBookingCost
326
+ - virtualMinimumLeadTime
327
+
328
+ - name: Virtual user research studio - Capacity
329
+ editable: True
330
+ questions:
331
+ - virtualStudioNumberOfParticipants
332
+ - virtualStudioNumberOfResearchers
333
+
334
+ - name: Virtual user research studio - Availability
335
+ editable: True
336
+ questions:
337
+ - virtualStudioAvailability
338
+
339
+ - name: Virtual user research studio - Technical assistance
340
+ editable: True
341
+ questions:
342
+ - virtualStudioTechnicalAssistance
343
+
344
+ - name: Virtual user research studio - Viewing
345
+ editable: True
346
+ questions:
347
+ - multiqVirtualStudioStreaming
348
+ - multiqVirtualStudioCompatibilityConstraints
349
+ - virtualStudioViewOfScreen
350
+ - virtualStudioViewOfMobileDevice
351
+ - virtualStudioEyeTracking
352
+ - multiqVirtualStudioOtherBiometrics
353
+ - virtualStudioSessionRecorded
@@ -0,0 +1,17 @@
1
+ name: Compatibility constraints
2
+ question: ""
3
+
4
+ depends:
5
+ - "on": lot
6
+ being:
7
+ - user-research-studios-and-participants
8
+
9
+ depends_on_follow_up:
10
+ whatTypesOfUserResearchStudio:
11
+ - virtual-studio
12
+
13
+ type: multiquestion
14
+
15
+ questions:
16
+ - virtualStudioAnyCompatibilityConstraints
17
+ - virtualStudioCompatibilityConstraints
@@ -0,0 +1,17 @@
1
+ name: Other biometric technologies
2
+ question: ""
3
+
4
+ depends:
5
+ - "on": lot
6
+ being:
7
+ - user-research-studios-and-participants
8
+
9
+ depends_on_follow_up:
10
+ whatTypesOfUserResearchStudio:
11
+ - virtual-studio
12
+
13
+ type: multiquestion
14
+
15
+ questions:
16
+ - virtualStudioAnyOtherBiometrics
17
+ - virtualStudioOtherBiometrics
@@ -0,0 +1,17 @@
1
+ name: Streaming
2
+ question: ""
3
+
4
+ depends:
5
+ - "on": lot
6
+ being:
7
+ - user-research-studios-and-participants
8
+
9
+ depends_on_follow_up:
10
+ whatTypesOfUserResearchStudio:
11
+ - virtual-studio
12
+
13
+ type: multiquestion
14
+
15
+ questions:
16
+ - virtualStudioStreaming
17
+ - virtualStudioStreamingPlatform
@@ -0,0 +1,29 @@
1
+ name: Minimum lead time you need to make a studio booking
2
+ question: What is the minimum lead time you need to make a studio booking?
3
+
4
+ depends:
5
+ - "on": lot
6
+ being:
7
+ - user-research-studios-and-participants
8
+
9
+ type: radios
10
+
11
+ options:
12
+ - label: "1 day"
13
+ - label: "2 days"
14
+ - label: "3 to 5 days"
15
+ - label: "1 week"
16
+ - label: "2 weeks"
17
+ - label: "3 weeks"
18
+ - label: "1 month"
19
+ - label: "6 weeks"
20
+ - label: "More than 6 weeks"
21
+
22
+ depends_on_follow_up:
23
+ whatTypesOfUserResearchStudio:
24
+ - virtual-studio
25
+
26
+ validations:
27
+ -
28
+ name: answer_required
29
+ message: Select the minimum lead time you need to make a studio booking
@@ -0,0 +1,28 @@
1
+ name: Minimum amount of time a studio can be booked for
2
+ question: What is the minimum amount of time a studio can be booked for?
3
+
4
+ depends:
5
+ - "on": lot
6
+ being:
7
+ - user-research-studios-and-participants
8
+
9
+ type: radios
10
+
11
+ options:
12
+ - label: "1 hour"
13
+ - label: "2 hours"
14
+ - label: "3 hours"
15
+ - label: "4 hours"
16
+ - label: "5 hours"
17
+ - label: "6 hours"
18
+ - label: "7 hours"
19
+ - label: "8 hours"
20
+
21
+ depends_on_follow_up:
22
+ whatTypesOfUserResearchStudio:
23
+ - virtual-studio
24
+
25
+ validations:
26
+ -
27
+ name: answer_required
28
+ message: Select the minimum amount of time a studio can be booked for
@@ -0,0 +1,22 @@
1
+ name: Any compatibility constraints
2
+ question: Are there any compatibility constraints with the platform or system used which may exclude government clients?
3
+
4
+ depends:
5
+ - "on": lot
6
+ being:
7
+ - user-research-studios-and-participants
8
+
9
+ type: boolean
10
+
11
+ followup:
12
+ virtualStudioCompatibilityConstraints:
13
+ - True
14
+
15
+ depends_on_follow_up:
16
+ whatTypesOfUserResearchStudio:
17
+ - virtual-studio
18
+
19
+ validations:
20
+ -
21
+ name: answer_required
22
+ message: Select if there are any compatibility constraints
@@ -0,0 +1,28 @@
1
+ name: Provide other biometric technologies
2
+ question: Do you provide any other biometric technologies other than eye tracking?
3
+
4
+ depends:
5
+ - "on": lot
6
+ being:
7
+ - user-research-studios-and-participants
8
+
9
+ type: radios
10
+
11
+ options:
12
+ - label: Yes, included as standard
13
+ - label: Yes, for an additional cost
14
+ - label: "No"
15
+
16
+ followup:
17
+ virtualStudioOtherBiometrics:
18
+ - Yes, included as standard
19
+ - Yes, for an additional cost
20
+
21
+ depends_on_follow_up:
22
+ whatTypesOfUserResearchStudio:
23
+ - virtual-studio
24
+
25
+ validations:
26
+ -
27
+ name: answer_required
28
+ message: Select if you provide other biometric technologies
@@ -0,0 +1,27 @@
1
+ name: Days a studio can be hired
2
+ question: What days can a studio be hired?
3
+
4
+ depends:
5
+ - "on": lot
6
+ being:
7
+ - user-research-studios-and-participants
8
+
9
+ type: checkboxes
10
+
11
+ options:
12
+ - label: "Monday"
13
+ - label: "Tuesday"
14
+ - label: "Wednesday"
15
+ - label: "Thursday"
16
+ - label: "Friday"
17
+ - label: "Saturday"
18
+ - label: "Sunday"
19
+
20
+ depends_on_follow_up:
21
+ whatTypesOfUserResearchStudio:
22
+ - virtual-studio
23
+
24
+ validations:
25
+ -
26
+ name: answer_required
27
+ message: Select the days a studio can be hired
@@ -0,0 +1,37 @@
1
+ name: Cost of booking a studio
2
+ question: How much does it cost (excluding VAT) to book a studio?
3
+
4
+ depends:
5
+ - "on": lot
6
+ being:
7
+ - user-research-studios-and-participants
8
+
9
+ type: pricing
10
+ fields:
11
+ price: virtualStudioBookingCostPrice
12
+ price_unit: virtualStudioBookingCostUnit
13
+
14
+ units:
15
+ - label: an hour
16
+ value: Hour
17
+ - label: a half day
18
+ value: Half day
19
+ - label: a day
20
+ value: Day
21
+ - label: a week
22
+ value: Week
23
+
24
+ depends_on_follow_up:
25
+ whatTypesOfUserResearchStudio:
26
+ - virtual-studio
27
+
28
+ validations:
29
+ - name: answer_required
30
+ field: virtualStudioBookingCostPrice
31
+ message: Enter how much it costs to book a studio
32
+ - name: not_money_format
33
+ field: virtualStudioBookingCostPrice
34
+ message: Price must be a number, without units, eg 99.95
35
+ - name: answer_required
36
+ field: virtualStudioBookingCostUnit
37
+ message: You must select the unit
@@ -0,0 +1,19 @@
1
+ name: Compatibility constraints
2
+ question: Specify the compatibility constraints
3
+
4
+ depends:
5
+ - "on": lot
6
+ being:
7
+ - user-research-studios-and-participants
8
+
9
+ type: textbox_large
10
+ max_length_in_words: 200
11
+ hidden: true
12
+
13
+ validations:
14
+ - name: answer_required
15
+ message: Enter the compatibility constraints
16
+ - name: under_200_words
17
+ message: "Your answer must be no more than 200 words"
18
+ - name: under_character_limit
19
+ message: "Your answer must be no more than 2000 characters"
@@ -0,0 +1,23 @@
1
+ name: Provide eye-tracking
2
+ question: Do you provide eye-tracking?
3
+
4
+ depends:
5
+ - "on": lot
6
+ being:
7
+ - user-research-studios-and-participants
8
+
9
+ type: radios
10
+
11
+ options:
12
+ - label: Yes, included as standard
13
+ - label: Yes, for an additional cost
14
+ - label: "No"
15
+
16
+ depends_on_follow_up:
17
+ whatTypesOfUserResearchStudio:
18
+ - virtual-studio
19
+
20
+ validations:
21
+ -
22
+ name: answer_required
23
+ message: Select if you provide eye-tracking
@@ -0,0 +1,24 @@
1
+ name: Number of participants
2
+ question: What is the maximum number of participants in a studio?
3
+
4
+ depends:
5
+ - "on": lot
6
+ being:
7
+ - user-research-studios-and-participants
8
+
9
+ type: number
10
+
11
+ limits:
12
+ min_value: 1
13
+ max_value: 99
14
+ integer_only: true
15
+
16
+ depends_on_follow_up:
17
+ whatTypesOfUserResearchStudio:
18
+ - virtual-studio
19
+
20
+ validations:
21
+ - name: answer_required
22
+ message: Enter the number of participants in a studio
23
+ - name: not_a_number
24
+ message: You need to enter a number from 1 to 99
@@ -0,0 +1,24 @@
1
+ name: Number of researchers
2
+ question: What is the maximum number of researchers in a studio?
3
+
4
+ depends:
5
+ - "on": lot
6
+ being:
7
+ - user-research-studios-and-participants
8
+
9
+ type: number
10
+
11
+ limits:
12
+ min_value: 1
13
+ max_value: 99
14
+ integer_only: true
15
+
16
+ depends_on_follow_up:
17
+ whatTypesOfUserResearchStudio:
18
+ - virtual-studio
19
+
20
+ validations:
21
+ - name: answer_required
22
+ message: Enter the number of researchers in a studio
23
+ - name: not_a_number
24
+ message: You need to enter a number from 1 to 99
@@ -0,0 +1,19 @@
1
+ name: Other biometric technologies
2
+ question: Specify the other biometric technologies
3
+
4
+ depends:
5
+ - "on": lot
6
+ being:
7
+ - user-research-studios-and-participants
8
+
9
+ type: textbox_large
10
+ max_length_in_words: 200
11
+ hidden: true
12
+
13
+ validations:
14
+ - name: answer_required
15
+ message: Enter the other biometric technologies
16
+ - name: under_200_words
17
+ message: "Your answer must be no more than 200 words"
18
+ - name: under_character_limit
19
+ message: "Your answer must be no more than 2000 characters"
@@ -0,0 +1,23 @@
1
+ name: Record user research session
2
+ question: Can the user research session be recorded?
3
+
4
+ depends:
5
+ - "on": lot
6
+ being:
7
+ - user-research-studios-and-participants
8
+
9
+ type: radios
10
+
11
+ options:
12
+ - label: Yes, included as standard
13
+ - label: Yes, for an additional cost
14
+ - label: "No"
15
+
16
+ depends_on_follow_up:
17
+ whatTypesOfUserResearchStudio:
18
+ - virtual-studio
19
+
20
+ validations:
21
+ -
22
+ name: answer_required
23
+ message: Select if you can record user research session
@@ -0,0 +1,28 @@
1
+ name: Provide remote streaming from the studio
2
+ question: Do you provide remote streaming from the studio?
3
+
4
+ depends:
5
+ - "on": lot
6
+ being:
7
+ - user-research-studios-and-participants
8
+
9
+ type: radios
10
+
11
+ options:
12
+ - label: Yes, included as standard
13
+ - label: Yes, for an additional cost
14
+ - label: "No"
15
+
16
+ followup:
17
+ virtualStudioStreamingPlatform:
18
+ - Yes, included as standard
19
+ - Yes, for an additional cost
20
+
21
+ depends_on_follow_up:
22
+ whatTypesOfUserResearchStudio:
23
+ - virtual-studio
24
+
25
+ validations:
26
+ -
27
+ name: answer_required
28
+ message: Select if you provide remote streaming from the studio
@@ -0,0 +1,19 @@
1
+ name: Streaming platform
2
+ question: What streaming platform do you use?
3
+
4
+ depends:
5
+ - "on": lot
6
+ being:
7
+ - user-research-studios-and-participants
8
+
9
+ type: textbox_large
10
+ max_length_in_words: 200
11
+ hidden: true
12
+
13
+ validations:
14
+ - name: answer_required
15
+ message: Enter the streaming platform you use
16
+ - name: under_200_words
17
+ message: "Your answer must be no more than 200 words"
18
+ - name: under_character_limit
19
+ message: "Your answer must be no more than 2000 characters"
@@ -0,0 +1,23 @@
1
+ name: Provide technical support and assistance
2
+ question: Do you provide technical support and assistance?
3
+
4
+ depends:
5
+ - "on": lot
6
+ being:
7
+ - user-research-studios-and-participants
8
+
9
+ type: radios
10
+
11
+ options:
12
+ - label: Yes, included as standard
13
+ - label: Yes, for an additional cost
14
+ - label: "No"
15
+
16
+ depends_on_follow_up:
17
+ whatTypesOfUserResearchStudio:
18
+ - virtual-studio
19
+
20
+ validations:
21
+ -
22
+ name: answer_required
23
+ message: Select if you provide technical support and assistance
@@ -0,0 +1,23 @@
1
+ name: Stream a view of a mobile or tablet device
2
+ question: Do you stream a view of a mobile or tablet device?
3
+
4
+ depends:
5
+ - "on": lot
6
+ being:
7
+ - user-research-studios-and-participants
8
+
9
+ type: radios
10
+
11
+ options:
12
+ - label: Yes, included as standard
13
+ - label: Yes, for an additional cost
14
+ - label: "No"
15
+
16
+ depends_on_follow_up:
17
+ whatTypesOfUserResearchStudio:
18
+ - virtual-studio
19
+
20
+ validations:
21
+ -
22
+ name: answer_required
23
+ message: Select if you stream a view of a mobile or tablet device
@@ -0,0 +1,23 @@
1
+ name: Stream a view of the screen
2
+ question: Do you stream a view of the desktop or laptop screen?
3
+
4
+ depends:
5
+ - "on": lot
6
+ being:
7
+ - user-research-studios-and-participants
8
+
9
+ type: radios
10
+
11
+ options:
12
+ - label: Yes, included as standard
13
+ - label: Yes, for an additional cost
14
+ - label: "No"
15
+
16
+ depends_on_follow_up:
17
+ whatTypesOfUserResearchStudio:
18
+ - virtual-studio
19
+
20
+ validations:
21
+ -
22
+ name: answer_required
23
+ message: Select if you stream a view of the screen
@@ -21,10 +21,46 @@ depends_on_follow_up:
21
21
  dependent_follow_up:
22
22
  tradeOrIndustryBodies:
23
23
  - virtual-studio
24
+ virtualMinimumStudioTime:
25
+ - virtual-studio
26
+ virtualStudioBookingCostPrice:
27
+ - virtual-studio
28
+ virtualStudioBookingCostUnit:
29
+ - virtual-studio
30
+ virtualMinimumLeadTime:
31
+ - virtual-studio
32
+ virtualStudioNumberOfParticipants:
33
+ - virtual-studio
34
+ virtualStudioNumberOfResearchers:
35
+ - virtual-studio
36
+ virtualStudioAvailability:
37
+ - virtual-studio
38
+ virtualStudioTechnicalAssistance:
39
+ - virtual-studio
40
+ virtualStudioStreaming:
41
+ - virtual-studio
42
+ virtualStudioAnyCompatibilityConstraints:
43
+ - virtual-studio
44
+ virtualStudioViewOfScreen:
45
+ - virtual-studio
46
+ virtualStudioViewOfMobileDevice:
47
+ - virtual-studio
48
+ virtualStudioEyeTracking:
49
+ - virtual-studio
50
+ virtualStudioAnyOtherBiometrics:
51
+ - virtual-studio
52
+ virtualStudioSessionRecorded:
53
+ - virtual-studio
24
54
 
25
55
  dependent_follow_up_followup:
26
56
  tradeOrIndustryBodiesOther:
27
57
  - virtual-studio
58
+ virtualStudioStreamingPlatform:
59
+ - virtual-studio
60
+ virtualStudioCompatibilityConstraints:
61
+ - virtual-studio
62
+ virtualStudioOtherBiometrics:
63
+ - virtual-studio
28
64
 
29
65
  validations:
30
66
  -
@@ -35,6 +35,36 @@ dependent_follow_up:
35
35
  - user-research-studios
36
36
  tradeOrIndustryBodies:
37
37
  - user-research-studios
38
+ virtualMinimumStudioTime:
39
+ - user-research-studios
40
+ virtualStudioBookingCostPrice:
41
+ - user-research-studios
42
+ virtualStudioBookingCostUnit:
43
+ - user-research-studios
44
+ virtualMinimumLeadTime:
45
+ - user-research-studios
46
+ virtualStudioNumberOfParticipants:
47
+ - user-research-studios
48
+ virtualStudioNumberOfResearchers:
49
+ - user-research-studios
50
+ virtualStudioAvailability:
51
+ - user-research-studios
52
+ virtualStudioTechnicalAssistance:
53
+ - user-research-studios
54
+ virtualStudioStreaming:
55
+ - user-research-studios
56
+ virtualStudioAnyCompatibilityConstraints:
57
+ - user-research-studios
58
+ virtualStudioViewOfScreen:
59
+ - user-research-studios
60
+ virtualStudioViewOfMobileDevice:
61
+ - user-research-studios
62
+ virtualStudioEyeTracking:
63
+ - user-research-studios
64
+ virtualStudioAnyOtherBiometrics:
65
+ - user-research-studios
66
+ virtualStudioSessionRecorded:
67
+ - user-research-studios
38
68
 
39
69
  dependent_follow_up_followup:
40
70
  otherTradeOrIndustryBodiesOther:
@@ -43,6 +73,12 @@ dependent_follow_up_followup:
43
73
  - user-research-participants
44
74
  tradeOrIndustryBodiesOther:
45
75
  - user-research-studios
76
+ virtualStudioStreamingPlatform:
77
+ - user-research-studios
78
+ virtualStudioCompatibilityConstraints:
79
+ - user-research-studios
80
+ virtualStudioOtherBiometrics:
81
+ - user-research-studios
46
82
 
47
83
  validations:
48
84
  -
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ccs-digitalmarketplace-frameworks",
3
- "version": "3.4.0",
3
+ "version": "3.6.0",
4
4
  "description": "Data files for Digital Marketplace’s procurement frameworks",
5
5
  "repository": "git@github.com:Crown-Commercial-Service/ccs-digitalmarketplace-frameworks",
6
6
  "author": "enquiries@digitalmarketplace.service.gov.uk"
@@ -501,8 +501,10 @@ def pricing_property(question):
501
501
  )
502
502
 
503
503
  if 'price_unit' in question.fields:
504
- pricing[question.fields['price_unit']] = {
505
- "enum": [
504
+ if question.get('units'):
505
+ units = [unit.get('value', unit.get('label')) for unit in question.get('units')]
506
+ else:
507
+ units = [
506
508
  "Unit",
507
509
  "Person",
508
510
  "Licence",
@@ -516,13 +518,18 @@ def pricing_property(question):
516
518
  "Gigabyte",
517
519
  "Terabyte"
518
520
  ]
521
+
522
+ pricing[question.fields['price_unit']] = {
523
+ "enum": units
519
524
  }
520
525
  if 'price_unit' in question.get('optional_fields', []):
521
526
  pricing[question.fields['price_unit']]['enum'].insert(0, "")
522
527
 
523
528
  if 'price_interval' in question.fields:
524
- pricing[question.fields['price_interval']] = {
525
- "enum": [
529
+ if question.get('intervals'):
530
+ intervals = [interval.get('value', interval.get('label')) for interval in question.get('intervals')]
531
+ else:
532
+ intervals = [
526
533
  "Second",
527
534
  "Minute",
528
535
  "Hour",
@@ -533,6 +540,9 @@ def pricing_property(question):
533
540
  "6 months",
534
541
  "Year"
535
542
  ]
543
+
544
+ pricing[question.fields['price_interval']] = {
545
+ "enum": intervals
536
546
  }
537
547
  if 'price_interval' in question.get('optional_fields', []):
538
548
  pricing[question.fields['price_interval']]['enum'].insert(0, "")
@@ -367,6 +367,42 @@
367
367
  "required": [
368
368
  "passIfIn"
369
369
  ]
370
+ },
371
+ "units": {
372
+ "type": "array",
373
+ "items": {
374
+ "type": "object",
375
+ "properties": {
376
+ "label": {
377
+ "type": "string"
378
+ },
379
+ "value": {
380
+ "type": "string"
381
+ }
382
+ },
383
+ "additionalProperties": false,
384
+ "required": [
385
+ "label"
386
+ ]
387
+ }
388
+ },
389
+ "intervals": {
390
+ "type": "array",
391
+ "items": {
392
+ "type": "object",
393
+ "properties": {
394
+ "label": {
395
+ "type": "string"
396
+ },
397
+ "value": {
398
+ "type": "string"
399
+ }
400
+ },
401
+ "additionalProperties": false,
402
+ "required": [
403
+ "label"
404
+ ]
405
+ }
370
406
  }
371
407
  },
372
408
  "additionalProperties": false,
@@ -558,8 +558,31 @@ def test_pricing_property_price_unit_and_interval():
558
558
  }
559
559
  cq = ContentQuestion(manifest)
560
560
  result = pricing_property(cq)
561
- assert isinstance(result['priceInterval']['enum'], list)
562
- assert isinstance(result['priceUnit']['enum'], list)
561
+ assert result['priceUnit']['enum'] == [
562
+ "Unit",
563
+ "Person",
564
+ "Licence",
565
+ "User",
566
+ "Device",
567
+ "Instance",
568
+ "Server",
569
+ "Virtual machine",
570
+ "Transaction",
571
+ "Megabyte",
572
+ "Gigabyte",
573
+ "Terabyte"
574
+ ]
575
+ assert result['priceInterval']['enum'] == [
576
+ "Second",
577
+ "Minute",
578
+ "Hour",
579
+ "Day",
580
+ "Week",
581
+ "Month",
582
+ "Quarter",
583
+ "6 months",
584
+ "Year"
585
+ ]
563
586
 
564
587
 
565
588
  def test_pricing_property_price_unit_and_interval_optional():
@@ -633,6 +656,80 @@ def test_pricing_property_digit_limits_decimal_place_restriction():
633
656
  assert '{1,14}' in result['priceMax']['pattern']
634
657
 
635
658
 
659
+ def test_pricing_property_price():
660
+ manifest = {
661
+ "id": "Test",
662
+ "type": "pricing",
663
+ "fields": {
664
+ "price": "price"
665
+ }
666
+ }
667
+ cq = ContentQuestion(manifest)
668
+ result = pricing_property(cq)
669
+ assert not result['price']['pattern'].startswith("^$|")
670
+
671
+
672
+ def test_pricing_property_custom_units():
673
+ manifest = {
674
+ "id": "Test",
675
+ "type": "pricing",
676
+ "fields": {
677
+ "price": "price",
678
+ "price_unit": "priceUnit"
679
+ },
680
+ "units": [
681
+ {
682
+ "label": "Option 1"
683
+ },
684
+ {
685
+ "label": "Option 2",
686
+ "value": "option-2"
687
+ },
688
+ {
689
+ "label": "Option 3",
690
+ "value": "option-3"
691
+ }
692
+ ]
693
+ }
694
+ cq = ContentQuestion(manifest)
695
+ result = pricing_property(cq)
696
+ assert result['priceUnit']['enum'] == [
697
+ "Option 1",
698
+ "option-2",
699
+ "option-3"
700
+ ]
701
+
702
+
703
+ def test_pricing_property_custom_intervals():
704
+ manifest = {
705
+ "id": "Test",
706
+ "type": "pricing",
707
+ "fields": {
708
+ "price": "price",
709
+ "price_interval": "priceInterval"
710
+ },
711
+ "intervals": [
712
+ {
713
+ "label": "Option 1",
714
+ "value": "option-1"
715
+ },
716
+ {
717
+ "label": "Option 2"
718
+ },
719
+ {
720
+ "label": "Option 3"
721
+ }
722
+ ]
723
+ }
724
+ cq = ContentQuestion(manifest)
725
+ result = pricing_property(cq)
726
+ assert result['priceInterval']['enum'] == [
727
+ "option-1",
728
+ "Option 2",
729
+ "Option 3"
730
+ ]
731
+
732
+
636
733
  @given(st.text())
637
734
  def test_number_property(id):
638
735
  actual = number_property({'id': id, 'type': 'number'})