digital-tools 2.1.1 → 2.3.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 (293) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/README.md +2 -0
  3. package/dist/client.d.ts +109 -0
  4. package/dist/client.d.ts.map +1 -0
  5. package/dist/client.js +69 -0
  6. package/dist/client.js.map +1 -0
  7. package/dist/define.d.ts +2 -2
  8. package/dist/define.d.ts.map +1 -1
  9. package/dist/define.js +22 -20
  10. package/dist/define.js.map +1 -1
  11. package/dist/function-ref.d.ts +229 -0
  12. package/dist/function-ref.d.ts.map +1 -0
  13. package/dist/function-ref.js +28 -0
  14. package/dist/function-ref.js.map +1 -0
  15. package/dist/function-sugar.d.ts +57 -0
  16. package/dist/function-sugar.d.ts.map +1 -0
  17. package/dist/function-sugar.js +79 -0
  18. package/dist/function-sugar.js.map +1 -0
  19. package/dist/index.d.ts +10 -3
  20. package/dist/index.d.ts.map +1 -1
  21. package/dist/index.js +24 -4
  22. package/dist/index.js.map +1 -1
  23. package/dist/providers/analytics/mixpanel.d.ts.map +1 -1
  24. package/dist/providers/analytics/mixpanel.js +21 -18
  25. package/dist/providers/analytics/mixpanel.js.map +1 -1
  26. package/dist/providers/calendar/cal-com.d.ts.map +1 -1
  27. package/dist/providers/calendar/cal-com.js +10 -10
  28. package/dist/providers/calendar/cal-com.js.map +1 -1
  29. package/dist/providers/calendar/google-calendar.d.ts.map +1 -1
  30. package/dist/providers/calendar/google-calendar.js +4 -4
  31. package/dist/providers/calendar/google-calendar.js.map +1 -1
  32. package/dist/providers/crm/hubspot.d.ts.map +1 -1
  33. package/dist/providers/crm/hubspot.js +107 -85
  34. package/dist/providers/crm/hubspot.js.map +1 -1
  35. package/dist/providers/development/github.d.ts.map +1 -1
  36. package/dist/providers/development/github.js +40 -43
  37. package/dist/providers/development/github.js.map +1 -1
  38. package/dist/providers/ecommerce/shopify.d.ts.map +1 -1
  39. package/dist/providers/ecommerce/shopify.js +79 -62
  40. package/dist/providers/ecommerce/shopify.js.map +1 -1
  41. package/dist/providers/email/resend.d.ts.map +1 -1
  42. package/dist/providers/email/resend.js +20 -16
  43. package/dist/providers/email/resend.js.map +1 -1
  44. package/dist/providers/email/sendgrid.d.ts.map +1 -1
  45. package/dist/providers/email/sendgrid.js +12 -9
  46. package/dist/providers/email/sendgrid.js.map +1 -1
  47. package/dist/providers/finance/stripe.d.ts.map +1 -1
  48. package/dist/providers/finance/stripe.js +44 -42
  49. package/dist/providers/finance/stripe.js.map +1 -1
  50. package/dist/providers/forms/typeform.d.ts.map +1 -1
  51. package/dist/providers/forms/typeform.js +68 -58
  52. package/dist/providers/forms/typeform.js.map +1 -1
  53. package/dist/providers/knowledge/notion.d.ts.map +1 -1
  54. package/dist/providers/knowledge/notion.js +75 -41
  55. package/dist/providers/knowledge/notion.js.map +1 -1
  56. package/dist/providers/marketing/mailchimp.d.ts.map +1 -1
  57. package/dist/providers/marketing/mailchimp.js +74 -61
  58. package/dist/providers/marketing/mailchimp.js.map +1 -1
  59. package/dist/providers/media/cloudinary.d.ts.map +1 -1
  60. package/dist/providers/media/cloudinary.js +30 -28
  61. package/dist/providers/media/cloudinary.js.map +1 -1
  62. package/dist/providers/messaging/slack.d.ts.map +1 -1
  63. package/dist/providers/messaging/slack.js +75 -58
  64. package/dist/providers/messaging/slack.js.map +1 -1
  65. package/dist/providers/messaging/twilio-sms.d.ts.map +1 -1
  66. package/dist/providers/messaging/twilio-sms.js +33 -15
  67. package/dist/providers/messaging/twilio-sms.js.map +1 -1
  68. package/dist/providers/project-management/linear.d.ts.map +1 -1
  69. package/dist/providers/project-management/linear.js +31 -27
  70. package/dist/providers/project-management/linear.js.map +1 -1
  71. package/dist/providers/spreadsheet/google-sheets.d.ts.map +1 -1
  72. package/dist/providers/spreadsheet/google-sheets.js +21 -18
  73. package/dist/providers/spreadsheet/google-sheets.js.map +1 -1
  74. package/dist/providers/spreadsheet/xlsx.d.ts.map +1 -1
  75. package/dist/providers/spreadsheet/xlsx.js +4 -4
  76. package/dist/providers/spreadsheet/xlsx.js.map +1 -1
  77. package/dist/providers/storage/index.js +1 -0
  78. package/dist/providers/storage/index.js.map +1 -1
  79. package/dist/providers/storage/s3.d.ts.map +1 -1
  80. package/dist/providers/storage/s3.js +36 -27
  81. package/dist/providers/storage/s3.js.map +1 -1
  82. package/dist/providers/support/zendesk.d.ts.map +1 -1
  83. package/dist/providers/support/zendesk.js +24 -25
  84. package/dist/providers/support/zendesk.js.map +1 -1
  85. package/dist/providers/tasks/todoist.d.ts.map +1 -1
  86. package/dist/providers/tasks/todoist.js +18 -18
  87. package/dist/providers/tasks/todoist.js.map +1 -1
  88. package/dist/providers/video-conferencing/google-meet.d.ts.map +1 -1
  89. package/dist/providers/video-conferencing/google-meet.js +11 -11
  90. package/dist/providers/video-conferencing/google-meet.js.map +1 -1
  91. package/dist/providers/video-conferencing/jitsi.js +14 -14
  92. package/dist/providers/video-conferencing/jitsi.js.map +1 -1
  93. package/dist/providers/video-conferencing/teams.d.ts.map +1 -1
  94. package/dist/providers/video-conferencing/teams.js +9 -7
  95. package/dist/providers/video-conferencing/teams.js.map +1 -1
  96. package/dist/providers/video-conferencing/zoom.d.ts.map +1 -1
  97. package/dist/providers/video-conferencing/zoom.js +26 -24
  98. package/dist/providers/video-conferencing/zoom.js.map +1 -1
  99. package/dist/tools/data.d.ts.map +1 -1
  100. package/dist/tools/data.js +5 -12
  101. package/dist/tools/data.js.map +1 -1
  102. package/dist/tools/index.d.ts +1 -0
  103. package/dist/tools/index.d.ts.map +1 -1
  104. package/dist/tools/index.js +1 -0
  105. package/dist/tools/index.js.map +1 -1
  106. package/dist/tools/system.d.ts +289 -0
  107. package/dist/tools/system.d.ts.map +1 -0
  108. package/dist/tools/system.js +752 -0
  109. package/dist/tools/system.js.map +1 -0
  110. package/dist/tools/web.d.ts.map +1 -1
  111. package/dist/tools/web.js +22 -10
  112. package/dist/tools/web.js.map +1 -1
  113. package/dist/track-record.d.ts +101 -0
  114. package/dist/track-record.d.ts.map +1 -0
  115. package/dist/track-record.js +17 -0
  116. package/dist/track-record.js.map +1 -0
  117. package/dist/types.d.ts +210 -9
  118. package/dist/types.d.ts.map +1 -1
  119. package/dist/verb-registration.d.ts +122 -0
  120. package/dist/verb-registration.d.ts.map +1 -0
  121. package/dist/verb-registration.js +176 -0
  122. package/dist/verb-registration.js.map +1 -0
  123. package/dist/worker.d.ts +93 -0
  124. package/dist/worker.d.ts.map +1 -0
  125. package/dist/worker.js +315 -0
  126. package/dist/worker.js.map +1 -0
  127. package/dist/wrap.d.ts +89 -0
  128. package/dist/wrap.d.ts.map +1 -0
  129. package/dist/wrap.js +225 -0
  130. package/dist/wrap.js.map +1 -0
  131. package/package.json +21 -4
  132. package/src/client.ts +136 -0
  133. package/src/define.ts +31 -37
  134. package/src/function-ref.ts +264 -0
  135. package/src/function-sugar.ts +134 -0
  136. package/src/index.ts +132 -10
  137. package/src/providers/analytics/mixpanel.ts +19 -18
  138. package/src/providers/calendar/cal-com.ts +29 -18
  139. package/src/providers/calendar/google-calendar.ts +20 -14
  140. package/src/providers/crm/hubspot.ts +225 -99
  141. package/src/providers/development/github.ts +206 -135
  142. package/src/providers/ecommerce/shopify.ts +250 -89
  143. package/src/providers/email/resend.ts +101 -28
  144. package/src/providers/email/sendgrid.ts +12 -9
  145. package/src/providers/finance/stripe.ts +128 -49
  146. package/src/providers/forms/typeform.ts +74 -58
  147. package/src/providers/knowledge/notion.ts +340 -88
  148. package/src/providers/marketing/mailchimp.ts +86 -70
  149. package/src/providers/media/cloudinary.ts +99 -41
  150. package/src/providers/messaging/slack.ts +283 -85
  151. package/src/providers/messaging/twilio-sms.ts +35 -15
  152. package/src/providers/project-management/linear.ts +143 -55
  153. package/src/providers/spreadsheet/google-sheets.ts +222 -56
  154. package/src/providers/spreadsheet/xlsx.ts +47 -16
  155. package/src/providers/storage/s3.ts +119 -47
  156. package/src/providers/support/zendesk.ts +196 -46
  157. package/src/providers/tasks/todoist.ts +20 -26
  158. package/src/providers/video-conferencing/google-meet.ts +17 -20
  159. package/src/providers/video-conferencing/jitsi.ts +14 -14
  160. package/src/providers/video-conferencing/teams.ts +14 -13
  161. package/src/providers/video-conferencing/zoom.ts +54 -49
  162. package/src/tools/data.ts +6 -16
  163. package/src/tools/index.ts +1 -0
  164. package/src/tools/system.ts +887 -0
  165. package/src/tools/web.ts +22 -10
  166. package/src/track-record.ts +106 -0
  167. package/src/types.ts +241 -13
  168. package/src/verb-registration.ts +197 -0
  169. package/src/worker.ts +370 -0
  170. package/src/wrap.ts +260 -0
  171. package/test/client.test.ts +146 -0
  172. package/test/communication-tools-extended.test.ts +734 -0
  173. package/test/data-tools-extended.test.ts +743 -0
  174. package/test/define-extended.test.ts +819 -0
  175. package/test/define.test.ts +150 -41
  176. package/test/entities.test.ts +623 -0
  177. package/test/extended-entities.test.ts +1228 -0
  178. package/test/provider-implementations.test.ts +725 -0
  179. package/test/provider-registry-extended.test.ts +583 -0
  180. package/test/providers/google-sheets.test.ts +851 -0
  181. package/test/providers/helpers.ts +554 -0
  182. package/test/providers/hubspot.test.ts +576 -0
  183. package/test/providers/slack.test.ts +932 -0
  184. package/test/providers/stripe.test.ts +701 -0
  185. package/test/providers.test.ts +578 -0
  186. package/test/system-tools-extended.test.ts +632 -0
  187. package/test/system.test.ts +673 -0
  188. package/test/tools.test.ts +15 -11
  189. package/test/types.test.ts +402 -0
  190. package/test/verb-registration.test.ts +395 -0
  191. package/test/web-tools.test.ts +553 -0
  192. package/test/worker-extended.test.ts +699 -0
  193. package/test/worker.test.ts +576 -0
  194. package/test/wrap.test.ts +366 -0
  195. package/tsconfig.json +3 -13
  196. package/vitest.config.ts +37 -0
  197. package/wrangler.jsonc +9 -0
  198. package/.turbo/turbo-build.log +0 -5
  199. package/dist/providers/voice/vapi.d.ts +0 -27
  200. package/dist/providers/voice/vapi.d.ts.map +0 -1
  201. package/dist/providers/voice/vapi.js +0 -440
  202. package/dist/providers/voice/vapi.js.map +0 -1
  203. package/src/define.js +0 -267
  204. package/src/entities/advertising.js +0 -999
  205. package/src/entities/ai.js +0 -756
  206. package/src/entities/analytics.js +0 -1588
  207. package/src/entities/automation.js +0 -601
  208. package/src/entities/communication.js +0 -1150
  209. package/src/entities/crm.js +0 -1386
  210. package/src/entities/design.js +0 -546
  211. package/src/entities/development.js +0 -2212
  212. package/src/entities/document.js +0 -874
  213. package/src/entities/ecommerce.js +0 -1429
  214. package/src/entities/experiment.js +0 -1039
  215. package/src/entities/finance.js +0 -3478
  216. package/src/entities/forms.js +0 -1892
  217. package/src/entities/hr.js +0 -661
  218. package/src/entities/identity.js +0 -997
  219. package/src/entities/index.js +0 -282
  220. package/src/entities/infrastructure.js +0 -1153
  221. package/src/entities/knowledge.js +0 -1438
  222. package/src/entities/marketing.js +0 -1610
  223. package/src/entities/media.js +0 -1634
  224. package/src/entities/notification.js +0 -1199
  225. package/src/entities/presentation.js +0 -1274
  226. package/src/entities/productivity.js +0 -1317
  227. package/src/entities/project-management.js +0 -1136
  228. package/src/entities/recruiting.js +0 -736
  229. package/src/entities/shipping.js +0 -509
  230. package/src/entities/signature.js +0 -1102
  231. package/src/entities/site.js +0 -222
  232. package/src/entities/spreadsheet.js +0 -1341
  233. package/src/entities/storage.js +0 -1198
  234. package/src/entities/support.js +0 -1166
  235. package/src/entities/video-conferencing.js +0 -1750
  236. package/src/entities/video.js +0 -950
  237. package/src/entities.js +0 -1663
  238. package/src/index.js +0 -74
  239. package/src/providers/analytics/index.js +0 -17
  240. package/src/providers/analytics/mixpanel.js +0 -255
  241. package/src/providers/calendar/cal-com.js +0 -303
  242. package/src/providers/calendar/google-calendar.js +0 -335
  243. package/src/providers/calendar/index.js +0 -20
  244. package/src/providers/crm/hubspot.js +0 -566
  245. package/src/providers/crm/index.js +0 -17
  246. package/src/providers/development/github.js +0 -472
  247. package/src/providers/development/index.js +0 -17
  248. package/src/providers/ecommerce/index.js +0 -17
  249. package/src/providers/ecommerce/shopify.js +0 -378
  250. package/src/providers/email/index.js +0 -20
  251. package/src/providers/email/resend.js +0 -258
  252. package/src/providers/email/sendgrid.js +0 -161
  253. package/src/providers/finance/index.js +0 -17
  254. package/src/providers/finance/stripe.js +0 -549
  255. package/src/providers/forms/index.js +0 -17
  256. package/src/providers/forms/typeform.js +0 -500
  257. package/src/providers/index.js +0 -123
  258. package/src/providers/knowledge/index.js +0 -17
  259. package/src/providers/knowledge/notion.js +0 -389
  260. package/src/providers/marketing/index.js +0 -17
  261. package/src/providers/marketing/mailchimp.js +0 -443
  262. package/src/providers/media/cloudinary.js +0 -318
  263. package/src/providers/media/index.js +0 -17
  264. package/src/providers/messaging/index.js +0 -20
  265. package/src/providers/messaging/slack.js +0 -393
  266. package/src/providers/messaging/twilio-sms.js +0 -249
  267. package/src/providers/project-management/index.js +0 -17
  268. package/src/providers/project-management/linear.js +0 -575
  269. package/src/providers/registry.js +0 -86
  270. package/src/providers/spreadsheet/google-sheets.js +0 -375
  271. package/src/providers/spreadsheet/index.js +0 -20
  272. package/src/providers/spreadsheet/xlsx.js +0 -423
  273. package/src/providers/storage/index.js +0 -24
  274. package/src/providers/storage/s3.js +0 -419
  275. package/src/providers/support/index.js +0 -17
  276. package/src/providers/support/zendesk.js +0 -373
  277. package/src/providers/tasks/index.js +0 -17
  278. package/src/providers/tasks/todoist.js +0 -286
  279. package/src/providers/types.js +0 -9
  280. package/src/providers/video-conferencing/google-meet.js +0 -286
  281. package/src/providers/video-conferencing/index.js +0 -31
  282. package/src/providers/video-conferencing/jitsi.js +0 -254
  283. package/src/providers/video-conferencing/teams.js +0 -270
  284. package/src/providers/video-conferencing/zoom.js +0 -332
  285. package/src/registry.js +0 -128
  286. package/src/tools/communication.js +0 -184
  287. package/src/tools/data.js +0 -205
  288. package/src/tools/index.js +0 -11
  289. package/src/tools/web.js +0 -137
  290. package/src/types.js +0 -10
  291. package/test/define.test.js +0 -306
  292. package/test/registry.test.js +0 -357
  293. package/test/tools.test.js +0 -363
@@ -0,0 +1,1228 @@
1
+ /**
2
+ * Tests for Extended Entity Types
3
+ *
4
+ * Covers entity types from the entities/ directory including:
5
+ * - Communication, Productivity, Project Management
6
+ * - Development, CRM, Finance, Support
7
+ * - Media, Marketing, Knowledge, Ecommerce
8
+ * - Analytics, Storage, Video Conferencing, Forms
9
+ * - And many more...
10
+ */
11
+
12
+ import { describe, it, expect } from 'vitest'
13
+ import {
14
+ // Site
15
+ Site,
16
+ SiteEntities,
17
+ SiteTypes,
18
+
19
+ // Communication/Message
20
+ Message,
21
+ Thread,
22
+ Call,
23
+ Channel,
24
+ Workspace,
25
+ Member,
26
+ Contact,
27
+ Attachment,
28
+ Reaction,
29
+ MessageEntities,
30
+
31
+ // Productivity
32
+ Calendar,
33
+ Event,
34
+ Task,
35
+ Note,
36
+ Notebook,
37
+ Reminder,
38
+ ProductivityEntities,
39
+
40
+ // Project Management
41
+ Project,
42
+ Issue,
43
+ Sprint,
44
+ Milestone,
45
+ Board,
46
+ ProjectEntities,
47
+
48
+ // Development/Code
49
+ Repository,
50
+ Branch,
51
+ Commit,
52
+ PullRequest,
53
+ CodeReview,
54
+ Release,
55
+ CodeEntities,
56
+
57
+ // CRM/Sales
58
+ Lead,
59
+ Deal,
60
+ Account,
61
+ Pipeline,
62
+ SalesEntities,
63
+
64
+ // Finance
65
+ Customer as FinanceCustomer,
66
+ Price,
67
+ PaymentIntent,
68
+ Invoice,
69
+ Subscription,
70
+ FinanceEntities,
71
+
72
+ // Support
73
+ SupportTicket,
74
+ Conversation,
75
+ HelpArticle,
76
+ SupportEntities,
77
+
78
+ // Media
79
+ Image,
80
+ Video,
81
+ Audio,
82
+ Screenshot,
83
+ MediaEntities,
84
+
85
+ // Marketing
86
+ Campaign,
87
+ Audience,
88
+ EmailTemplate,
89
+ MarketingEntities,
90
+
91
+ // Knowledge
92
+ WikiPage,
93
+ Article,
94
+ KnowledgeBase,
95
+ KnowledgeEntities,
96
+
97
+ // Ecommerce/Commerce
98
+ Product,
99
+ Order,
100
+ Cart,
101
+ Customer,
102
+ CommerceEntities,
103
+
104
+ // Analytics
105
+ Report,
106
+ Dashboard,
107
+ Metric,
108
+ AnalyticsEntities,
109
+
110
+ // Storage
111
+ File,
112
+ Folder,
113
+ Drive,
114
+ StorageEntities,
115
+
116
+ // Video Conferencing/Meeting
117
+ Meeting,
118
+ MeetingParticipant,
119
+ MeetingRoom,
120
+ MeetingEntities,
121
+
122
+ // Forms
123
+ Form,
124
+ FormField,
125
+ FormResponse,
126
+ FormEntities,
127
+
128
+ // Signature
129
+ SignatureDocument,
130
+ SignatureRequest,
131
+ Signer,
132
+ SignatureEntities,
133
+
134
+ // Document
135
+ Document,
136
+ DocumentVersion,
137
+ DocumentEntities,
138
+
139
+ // Spreadsheet
140
+ Spreadsheet,
141
+ Sheet,
142
+ Cell,
143
+ SpreadsheetEntities,
144
+
145
+ // Presentation
146
+ Presentation,
147
+ Slide,
148
+ PresentationEntities,
149
+
150
+ // Infrastructure
151
+ Config,
152
+ Database,
153
+ Hosting,
154
+ InfrastructureEntities,
155
+
156
+ // Experiment
157
+ FeatureFlag,
158
+ Experiment,
159
+ ExperimentEntities,
160
+
161
+ // Advertising
162
+ Ad,
163
+ AdCampaign,
164
+ AdvertisingEntities,
165
+
166
+ // Video/Streaming
167
+ VideoChannel,
168
+ Playlist,
169
+ LiveStream,
170
+ VideoEntities,
171
+
172
+ // Identity
173
+ Organization,
174
+ SSOConnection,
175
+ IdentityEntities,
176
+
177
+ // Notification
178
+ Notification,
179
+ SMS,
180
+ PushNotification,
181
+ NotificationEntities,
182
+
183
+ // HR
184
+ Employee,
185
+ Team,
186
+ TimeOff,
187
+ HREntities,
188
+
189
+ // Recruiting
190
+ Job,
191
+ Candidate,
192
+ Interview,
193
+ RecruitingEntities,
194
+
195
+ // Design
196
+ DesignFile,
197
+ Component,
198
+ DesignEntities,
199
+
200
+ // Shipping
201
+ Shipment,
202
+ Package,
203
+ ShippingEntities,
204
+
205
+ // Automation
206
+ AutomationWorkflow,
207
+ Trigger,
208
+ Action,
209
+ AutomationEntities,
210
+
211
+ // AI
212
+ Model,
213
+ Prompt,
214
+ Agent,
215
+ AIEntities,
216
+
217
+ // Collections
218
+ AllEntities,
219
+ EntityCategories,
220
+ } from '../src/entities/index.js'
221
+
222
+ describe('Site Entities', () => {
223
+ it('Site has correct noun definition', () => {
224
+ expect(Site.singular).toBe('site')
225
+ expect(Site.plural).toBe('sites')
226
+ expect(Site.description).toBeDefined()
227
+ })
228
+
229
+ it('Site has required properties', () => {
230
+ expect(Site.properties).toHaveProperty('name')
231
+ expect(Site.properties).toHaveProperty('domain')
232
+ expect(Site.properties).toHaveProperty('type')
233
+ expect(Site.properties).toHaveProperty('status')
234
+ })
235
+
236
+ it('SiteEntities collection exists', () => {
237
+ expect(SiteEntities).toHaveProperty('Site')
238
+ })
239
+
240
+ it('SiteTypes are defined', () => {
241
+ expect(SiteTypes).toContain('store')
242
+ expect(SiteTypes).toContain('marketplace')
243
+ expect(SiteTypes).toContain('api')
244
+ expect(SiteTypes).toContain('docs')
245
+ expect(SiteTypes).toContain('app')
246
+ expect(SiteTypes).toContain('blog')
247
+ })
248
+ })
249
+
250
+ describe('Communication/Message Entities', () => {
251
+ it('Message has correct structure', () => {
252
+ expect(Message.singular).toBe('message')
253
+ expect(Message.plural).toBe('messages')
254
+ expect(Message.properties).toHaveProperty('body')
255
+ expect(Message.properties).toHaveProperty('type')
256
+ })
257
+
258
+ it('Thread has correct structure', () => {
259
+ expect(Thread.singular).toBe('thread')
260
+ expect(Thread.plural).toBe('threads')
261
+ })
262
+
263
+ it('Call has correct structure', () => {
264
+ expect(Call.singular).toBe('call')
265
+ expect(Call.plural).toBe('calls')
266
+ expect(Call.properties).toHaveProperty('from')
267
+ expect(Call.properties).toHaveProperty('to')
268
+ expect(Call.properties).toHaveProperty('duration')
269
+ })
270
+
271
+ it('Channel has correct structure', () => {
272
+ expect(Channel.singular).toBe('channel')
273
+ expect(Channel.plural).toBe('channels')
274
+ })
275
+
276
+ it('Workspace has correct structure', () => {
277
+ expect(Workspace.singular).toBe('workspace')
278
+ expect(Workspace.plural).toBe('workspaces')
279
+ })
280
+
281
+ it('Member has correct structure', () => {
282
+ expect(Member.singular).toBe('member')
283
+ expect(Member.plural).toBe('members')
284
+ })
285
+
286
+ it('Contact has correct structure', () => {
287
+ expect(Contact.singular).toBe('contact')
288
+ expect(Contact.plural).toBe('contacts')
289
+ expect(Contact.properties).toHaveProperty('name')
290
+ expect(Contact.properties).toHaveProperty('email')
291
+ })
292
+
293
+ it('Attachment has correct structure', () => {
294
+ expect(Attachment.singular).toBe('attachment')
295
+ expect(Attachment.plural).toBe('attachments')
296
+ expect(Attachment.properties).toHaveProperty('name')
297
+ expect(Attachment.properties).toHaveProperty('size')
298
+ })
299
+
300
+ it('Reaction has correct structure', () => {
301
+ expect(Reaction.singular).toBe('reaction')
302
+ expect(Reaction.plural).toBe('reactions')
303
+ })
304
+
305
+ it('MessageEntities collection exists', () => {
306
+ expect(MessageEntities).toBeDefined()
307
+ expect(Object.keys(MessageEntities).length).toBeGreaterThan(0)
308
+ })
309
+ })
310
+
311
+ describe('Productivity Entities', () => {
312
+ it('Calendar has correct structure', () => {
313
+ expect(Calendar.singular).toBe('calendar')
314
+ expect(Calendar.plural).toBe('calendars')
315
+ })
316
+
317
+ it('Event has correct structure', () => {
318
+ expect(Event.singular).toBe('event')
319
+ expect(Event.plural).toBe('events')
320
+ expect(Event.properties).toHaveProperty('title')
321
+ expect(Event.properties).toHaveProperty('startTime')
322
+ })
323
+
324
+ it('Task has correct structure', () => {
325
+ expect(Task.singular).toBe('task')
326
+ expect(Task.plural).toBe('tasks')
327
+ expect(Task.properties).toHaveProperty('title')
328
+ expect(Task.properties).toHaveProperty('status')
329
+ })
330
+
331
+ it('Note has correct structure', () => {
332
+ expect(Note.singular).toBe('note')
333
+ expect(Note.plural).toBe('notes')
334
+ expect(Note.properties).toHaveProperty('title')
335
+ expect(Note.properties).toHaveProperty('content')
336
+ })
337
+
338
+ it('Notebook has correct structure', () => {
339
+ expect(Notebook.singular).toBe('notebook')
340
+ expect(Notebook.plural).toBe('notebooks')
341
+ })
342
+
343
+ it('Reminder has correct structure', () => {
344
+ expect(Reminder.singular).toBe('reminder')
345
+ expect(Reminder.plural).toBe('reminders')
346
+ })
347
+
348
+ it('ProductivityEntities collection exists', () => {
349
+ expect(ProductivityEntities).toBeDefined()
350
+ expect(Object.keys(ProductivityEntities).length).toBeGreaterThan(0)
351
+ })
352
+ })
353
+
354
+ describe('Project Management Entities', () => {
355
+ it('Project has correct structure', () => {
356
+ expect(Project.singular).toBe('project')
357
+ expect(Project.plural).toBe('projects')
358
+ expect(Project.properties).toHaveProperty('name')
359
+ })
360
+
361
+ it('Issue has correct structure', () => {
362
+ expect(Issue.singular).toBe('issue')
363
+ expect(Issue.plural).toBe('issues')
364
+ expect(Issue.properties).toHaveProperty('title')
365
+ expect(Issue.properties).toHaveProperty('status')
366
+ })
367
+
368
+ it('Sprint has correct structure', () => {
369
+ expect(Sprint.singular).toBe('sprint')
370
+ expect(Sprint.plural).toBe('sprints')
371
+ expect(Sprint.properties).toHaveProperty('name')
372
+ expect(Sprint.properties).toHaveProperty('startDate')
373
+ expect(Sprint.properties).toHaveProperty('endDate')
374
+ })
375
+
376
+ it('Milestone has correct structure', () => {
377
+ expect(Milestone.singular).toBe('milestone')
378
+ expect(Milestone.plural).toBe('milestones')
379
+ })
380
+
381
+ it('Board has correct structure', () => {
382
+ expect(Board.singular).toBe('board')
383
+ expect(Board.plural).toBe('boards')
384
+ })
385
+
386
+ it('ProjectEntities collection exists', () => {
387
+ expect(ProjectEntities).toBeDefined()
388
+ expect(Object.keys(ProjectEntities).length).toBeGreaterThan(0)
389
+ })
390
+ })
391
+
392
+ describe('Development/Code Entities', () => {
393
+ it('Repository has correct structure', () => {
394
+ expect(Repository.singular).toBe('repository')
395
+ expect(Repository.plural).toBe('repositories')
396
+ expect(Repository.properties).toHaveProperty('name')
397
+ expect(Repository.properties).toHaveProperty('visibility')
398
+ })
399
+
400
+ it('Branch has correct structure', () => {
401
+ expect(Branch.singular).toBe('branch')
402
+ expect(Branch.plural).toBe('branches')
403
+ expect(Branch.properties).toHaveProperty('name')
404
+ })
405
+
406
+ it('Commit has correct structure', () => {
407
+ expect(Commit.singular).toBe('commit')
408
+ expect(Commit.plural).toBe('commits')
409
+ expect(Commit.properties).toHaveProperty('sha')
410
+ expect(Commit.properties).toHaveProperty('message')
411
+ })
412
+
413
+ it('PullRequest has correct structure', () => {
414
+ expect(PullRequest.singular).toBe('pull request')
415
+ expect(PullRequest.plural).toBe('pull requests')
416
+ expect(PullRequest.properties).toHaveProperty('title')
417
+ expect(PullRequest.properties).toHaveProperty('status')
418
+ })
419
+
420
+ it('CodeReview has correct structure', () => {
421
+ expect(CodeReview.singular).toBe('code review')
422
+ expect(CodeReview.plural).toBe('code reviews')
423
+ })
424
+
425
+ it('Release has correct structure', () => {
426
+ expect(Release.singular).toBe('release')
427
+ expect(Release.plural).toBe('releases')
428
+ expect(Release.properties).toHaveProperty('tagName')
429
+ expect(Release.properties).toHaveProperty('name')
430
+ })
431
+
432
+ it('CodeEntities collection exists', () => {
433
+ expect(CodeEntities).toBeDefined()
434
+ expect(Object.keys(CodeEntities).length).toBeGreaterThan(0)
435
+ })
436
+ })
437
+
438
+ describe('CRM/Sales Entities', () => {
439
+ it('Lead has correct structure', () => {
440
+ expect(Lead.singular).toBe('lead')
441
+ expect(Lead.plural).toBe('leads')
442
+ expect(Lead.properties).toHaveProperty('firstName')
443
+ expect(Lead.properties).toHaveProperty('email')
444
+ expect(Lead.properties).toHaveProperty('status')
445
+ })
446
+
447
+ it('Deal has correct structure', () => {
448
+ expect(Deal.singular).toBe('deal')
449
+ expect(Deal.plural).toBe('deals')
450
+ expect(Deal.properties).toHaveProperty('name')
451
+ expect(Deal.properties).toHaveProperty('value')
452
+ expect(Deal.properties).toHaveProperty('stage')
453
+ })
454
+
455
+ it('Account has correct structure', () => {
456
+ expect(Account.singular).toBe('account')
457
+ expect(Account.plural).toBe('accounts')
458
+ expect(Account.properties).toHaveProperty('name')
459
+ })
460
+
461
+ it('Pipeline has correct structure', () => {
462
+ expect(Pipeline.singular).toBe('pipeline')
463
+ expect(Pipeline.plural).toBe('pipelines')
464
+ expect(Pipeline.properties).toHaveProperty('name')
465
+ })
466
+
467
+ it('SalesEntities collection exists', () => {
468
+ expect(SalesEntities).toBeDefined()
469
+ expect(Object.keys(SalesEntities).length).toBeGreaterThan(0)
470
+ })
471
+ })
472
+
473
+ describe('Finance Entities', () => {
474
+ it('FinanceCustomer has correct structure', () => {
475
+ expect(FinanceCustomer.singular).toBe('customer')
476
+ expect(FinanceCustomer.plural).toBe('customers')
477
+ expect(FinanceCustomer.properties).toHaveProperty('email')
478
+ })
479
+
480
+ it('Price has correct structure', () => {
481
+ expect(Price.singular).toBe('price')
482
+ expect(Price.plural).toBe('prices')
483
+ expect(Price.properties).toHaveProperty('unitAmount')
484
+ expect(Price.properties).toHaveProperty('currency')
485
+ })
486
+
487
+ it('PaymentIntent has correct structure', () => {
488
+ expect(PaymentIntent.singular).toBe('payment intent')
489
+ expect(PaymentIntent.plural).toBe('payment intents')
490
+ expect(PaymentIntent.properties).toHaveProperty('amount')
491
+ expect(PaymentIntent.properties).toHaveProperty('currency')
492
+ expect(PaymentIntent.properties).toHaveProperty('status')
493
+ })
494
+
495
+ it('Invoice has correct structure', () => {
496
+ expect(Invoice.singular).toBe('invoice')
497
+ expect(Invoice.plural).toBe('invoices')
498
+ expect(Invoice.properties).toHaveProperty('number')
499
+ expect(Invoice.properties).toHaveProperty('status')
500
+ })
501
+
502
+ it('Subscription has correct structure', () => {
503
+ expect(Subscription.singular).toBe('subscription')
504
+ expect(Subscription.plural).toBe('subscriptions')
505
+ expect(Subscription.properties).toHaveProperty('status')
506
+ })
507
+
508
+ it('FinanceEntities collection exists', () => {
509
+ expect(FinanceEntities).toBeDefined()
510
+ expect(Object.keys(FinanceEntities).length).toBeGreaterThan(0)
511
+ })
512
+ })
513
+
514
+ describe('Support Entities', () => {
515
+ it('SupportTicket has correct structure', () => {
516
+ expect(SupportTicket.singular).toBe('support ticket')
517
+ expect(SupportTicket.plural).toBe('support tickets')
518
+ expect(SupportTicket.properties).toHaveProperty('subject')
519
+ expect(SupportTicket.properties).toHaveProperty('status')
520
+ expect(SupportTicket.properties).toHaveProperty('priority')
521
+ })
522
+
523
+ it('Conversation has correct structure', () => {
524
+ expect(Conversation.singular).toBe('conversation')
525
+ expect(Conversation.plural).toBe('conversations')
526
+ })
527
+
528
+ it('HelpArticle has correct structure', () => {
529
+ expect(HelpArticle.singular).toBe('help article')
530
+ expect(HelpArticle.plural).toBe('help articles')
531
+ expect(HelpArticle.properties).toHaveProperty('title')
532
+ expect(HelpArticle.properties).toHaveProperty('body')
533
+ })
534
+
535
+ it('SupportEntities collection exists', () => {
536
+ expect(SupportEntities).toBeDefined()
537
+ expect(Object.keys(SupportEntities).length).toBeGreaterThan(0)
538
+ })
539
+ })
540
+
541
+ describe('Media Entities', () => {
542
+ it('Image has correct structure', () => {
543
+ expect(Image.singular).toBe('image')
544
+ expect(Image.plural).toBe('images')
545
+ expect(Image.properties).toHaveProperty('url')
546
+ expect(Image.properties).toHaveProperty('width')
547
+ expect(Image.properties).toHaveProperty('height')
548
+ })
549
+
550
+ it('Video has correct structure', () => {
551
+ expect(Video.singular).toBe('video')
552
+ expect(Video.plural).toBe('videos')
553
+ expect(Video.properties).toHaveProperty('url')
554
+ expect(Video.properties).toHaveProperty('duration')
555
+ })
556
+
557
+ it('Audio has correct structure', () => {
558
+ expect(Audio.singular).toBe('audio')
559
+ expect(Audio.plural).toBe('audio files')
560
+ expect(Audio.properties).toHaveProperty('url')
561
+ expect(Audio.properties).toHaveProperty('duration')
562
+ })
563
+
564
+ it('Screenshot has correct structure', () => {
565
+ expect(Screenshot.singular).toBe('screenshot')
566
+ expect(Screenshot.plural).toBe('screenshots')
567
+ })
568
+
569
+ it('MediaEntities collection exists', () => {
570
+ expect(MediaEntities).toBeDefined()
571
+ expect(Object.keys(MediaEntities).length).toBeGreaterThan(0)
572
+ })
573
+ })
574
+
575
+ describe('Marketing Entities', () => {
576
+ it('Campaign has correct structure', () => {
577
+ expect(Campaign.singular).toBe('campaign')
578
+ expect(Campaign.plural).toBe('campaigns')
579
+ expect(Campaign.properties).toHaveProperty('name')
580
+ expect(Campaign.properties).toHaveProperty('status')
581
+ })
582
+
583
+ it('Audience has correct structure', () => {
584
+ expect(Audience.singular).toBe('audience')
585
+ expect(Audience.plural).toBe('audiences')
586
+ expect(Audience.properties).toHaveProperty('name')
587
+ })
588
+
589
+ it('EmailTemplate has correct structure', () => {
590
+ expect(EmailTemplate.singular).toBe('email template')
591
+ expect(EmailTemplate.plural).toBe('email templates')
592
+ expect(EmailTemplate.properties).toHaveProperty('name')
593
+ expect(EmailTemplate.properties).toHaveProperty('subject')
594
+ })
595
+
596
+ it('MarketingEntities collection exists', () => {
597
+ expect(MarketingEntities).toBeDefined()
598
+ expect(Object.keys(MarketingEntities).length).toBeGreaterThan(0)
599
+ })
600
+ })
601
+
602
+ describe('Knowledge Entities', () => {
603
+ it('WikiPage has correct structure', () => {
604
+ expect(WikiPage.singular).toBe('wiki page')
605
+ expect(WikiPage.plural).toBe('wiki pages')
606
+ expect(WikiPage.properties).toHaveProperty('title')
607
+ expect(WikiPage.properties).toHaveProperty('content')
608
+ })
609
+
610
+ it('Article has correct structure', () => {
611
+ expect(Article.singular).toBe('article')
612
+ expect(Article.plural).toBe('articles')
613
+ expect(Article.properties).toHaveProperty('title')
614
+ expect(Article.properties).toHaveProperty('content')
615
+ })
616
+
617
+ it('KnowledgeBase has correct structure', () => {
618
+ expect(KnowledgeBase.singular).toBe('knowledge base')
619
+ expect(KnowledgeBase.plural).toBe('knowledge bases')
620
+ expect(KnowledgeBase.properties).toHaveProperty('name')
621
+ })
622
+
623
+ it('KnowledgeEntities collection exists', () => {
624
+ expect(KnowledgeEntities).toBeDefined()
625
+ expect(Object.keys(KnowledgeEntities).length).toBeGreaterThan(0)
626
+ })
627
+ })
628
+
629
+ describe('Commerce Entities', () => {
630
+ it('Product has correct structure', () => {
631
+ expect(Product.singular).toBe('product')
632
+ expect(Product.plural).toBe('products')
633
+ expect(Product.properties).toHaveProperty('name')
634
+ expect(Product.properties).toHaveProperty('price')
635
+ })
636
+
637
+ it('Order has correct structure', () => {
638
+ expect(Order.singular).toBe('order')
639
+ expect(Order.plural).toBe('orders')
640
+ expect(Order.properties).toHaveProperty('status')
641
+ expect(Order.properties).toHaveProperty('total')
642
+ })
643
+
644
+ it('Cart has correct structure', () => {
645
+ expect(Cart.singular).toBe('cart')
646
+ expect(Cart.plural).toBe('carts')
647
+ })
648
+
649
+ it('Customer has correct structure', () => {
650
+ expect(Customer.singular).toBe('customer')
651
+ expect(Customer.plural).toBe('customers')
652
+ expect(Customer.properties).toHaveProperty('email')
653
+ })
654
+
655
+ it('CommerceEntities collection exists', () => {
656
+ expect(CommerceEntities).toBeDefined()
657
+ expect(Object.keys(CommerceEntities).length).toBeGreaterThan(0)
658
+ })
659
+ })
660
+
661
+ describe('Analytics Entities', () => {
662
+ it('Report has correct structure', () => {
663
+ expect(Report.singular).toBe('report')
664
+ expect(Report.plural).toBe('reports')
665
+ expect(Report.properties).toHaveProperty('title')
666
+ })
667
+
668
+ it('Dashboard has correct structure', () => {
669
+ expect(Dashboard.singular).toBe('dashboard')
670
+ expect(Dashboard.plural).toBe('dashboards')
671
+ expect(Dashboard.properties).toHaveProperty('name')
672
+ })
673
+
674
+ it('Metric has correct structure', () => {
675
+ expect(Metric.singular).toBe('metric')
676
+ expect(Metric.plural).toBe('metrics')
677
+ expect(Metric.properties).toHaveProperty('name')
678
+ expect(Metric.properties).toHaveProperty('value')
679
+ })
680
+
681
+ it('AnalyticsEntities collection exists', () => {
682
+ expect(AnalyticsEntities).toBeDefined()
683
+ expect(Object.keys(AnalyticsEntities).length).toBeGreaterThan(0)
684
+ })
685
+ })
686
+
687
+ describe('Storage Entities', () => {
688
+ it('File has correct structure', () => {
689
+ expect(File.singular).toBe('file')
690
+ expect(File.plural).toBe('files')
691
+ expect(File.properties).toHaveProperty('name')
692
+ expect(File.properties).toHaveProperty('size')
693
+ expect(File.properties).toHaveProperty('mimeType')
694
+ })
695
+
696
+ it('Folder has correct structure', () => {
697
+ expect(Folder.singular).toBe('folder')
698
+ expect(Folder.plural).toBe('folders')
699
+ expect(Folder.properties).toHaveProperty('name')
700
+ })
701
+
702
+ it('Drive has correct structure', () => {
703
+ expect(Drive.singular).toBe('drive')
704
+ expect(Drive.plural).toBe('drives')
705
+ expect(Drive.properties).toHaveProperty('name')
706
+ })
707
+
708
+ it('StorageEntities collection exists', () => {
709
+ expect(StorageEntities).toBeDefined()
710
+ expect(Object.keys(StorageEntities).length).toBeGreaterThan(0)
711
+ })
712
+ })
713
+
714
+ describe('Meeting Entities', () => {
715
+ it('Meeting has correct structure', () => {
716
+ expect(Meeting.singular).toBe('meeting')
717
+ expect(Meeting.plural).toBe('meetings')
718
+ expect(Meeting.properties).toHaveProperty('title')
719
+ expect(Meeting.properties).toHaveProperty('scheduledAt')
720
+ })
721
+
722
+ it('MeetingParticipant has correct structure', () => {
723
+ expect(MeetingParticipant.singular).toBe('meeting participant')
724
+ expect(MeetingParticipant.plural).toBe('meeting participants')
725
+ })
726
+
727
+ it('MeetingRoom has correct structure', () => {
728
+ expect(MeetingRoom.singular).toBe('meeting room')
729
+ expect(MeetingRoom.plural).toBe('meeting rooms')
730
+ expect(MeetingRoom.properties).toHaveProperty('name')
731
+ })
732
+
733
+ it('MeetingEntities collection exists', () => {
734
+ expect(MeetingEntities).toBeDefined()
735
+ expect(Object.keys(MeetingEntities).length).toBeGreaterThan(0)
736
+ })
737
+ })
738
+
739
+ describe('Form Entities', () => {
740
+ it('Form has correct structure', () => {
741
+ expect(Form.singular).toBe('form')
742
+ expect(Form.plural).toBe('forms')
743
+ expect(Form.properties).toHaveProperty('title')
744
+ })
745
+
746
+ it('FormField has correct structure', () => {
747
+ expect(FormField.singular).toBe('form field')
748
+ expect(FormField.plural).toBe('form fields')
749
+ expect(FormField.properties).toHaveProperty('type')
750
+ expect(FormField.properties).toHaveProperty('label')
751
+ })
752
+
753
+ it('FormResponse has correct structure', () => {
754
+ expect(FormResponse.singular).toBe('form response')
755
+ expect(FormResponse.plural).toBe('form responses')
756
+ })
757
+
758
+ it('FormEntities collection exists', () => {
759
+ expect(FormEntities).toBeDefined()
760
+ expect(Object.keys(FormEntities).length).toBeGreaterThan(0)
761
+ })
762
+ })
763
+
764
+ describe('Signature Entities', () => {
765
+ it('SignatureDocument has correct structure', () => {
766
+ expect(SignatureDocument.singular).toBe('signature document')
767
+ expect(SignatureDocument.plural).toBe('signature documents')
768
+ expect(SignatureDocument.properties).toHaveProperty('title')
769
+ expect(SignatureDocument.properties).toHaveProperty('status')
770
+ })
771
+
772
+ it('SignatureRequest has correct structure', () => {
773
+ expect(SignatureRequest.singular).toBe('signature request')
774
+ expect(SignatureRequest.plural).toBe('signature requests')
775
+ })
776
+
777
+ it('Signer has correct structure', () => {
778
+ expect(Signer.singular).toBe('signer')
779
+ expect(Signer.plural).toBe('signers')
780
+ expect(Signer.properties).toHaveProperty('email')
781
+ expect(Signer.properties).toHaveProperty('status')
782
+ })
783
+
784
+ it('SignatureEntities collection exists', () => {
785
+ expect(SignatureEntities).toBeDefined()
786
+ expect(Object.keys(SignatureEntities).length).toBeGreaterThan(0)
787
+ })
788
+ })
789
+
790
+ describe('Document Entities', () => {
791
+ it('Document has correct structure', () => {
792
+ expect(Document.singular).toBe('document')
793
+ expect(Document.plural).toBe('documents')
794
+ expect(Document.properties).toHaveProperty('title')
795
+ expect(Document.properties).toHaveProperty('content')
796
+ })
797
+
798
+ it('DocumentVersion has correct structure', () => {
799
+ expect(DocumentVersion.singular).toBe('document version')
800
+ expect(DocumentVersion.plural).toBe('document versions')
801
+ expect(DocumentVersion.properties).toHaveProperty('versionNumber')
802
+ })
803
+
804
+ it('DocumentEntities collection exists', () => {
805
+ expect(DocumentEntities).toBeDefined()
806
+ expect(Object.keys(DocumentEntities).length).toBeGreaterThan(0)
807
+ })
808
+ })
809
+
810
+ describe('Spreadsheet Entities', () => {
811
+ it('Spreadsheet has correct structure', () => {
812
+ expect(Spreadsheet.singular).toBe('spreadsheet')
813
+ expect(Spreadsheet.plural).toBe('spreadsheets')
814
+ expect(Spreadsheet.properties).toHaveProperty('title')
815
+ })
816
+
817
+ it('Sheet has correct structure', () => {
818
+ expect(Sheet.singular).toBe('sheet')
819
+ expect(Sheet.plural).toBe('sheets')
820
+ expect(Sheet.properties).toHaveProperty('name')
821
+ expect(Sheet.properties).toHaveProperty('index')
822
+ })
823
+
824
+ it('Cell has correct structure', () => {
825
+ expect(Cell.singular).toBe('cell')
826
+ expect(Cell.plural).toBe('cells')
827
+ expect(Cell.properties).toHaveProperty('address')
828
+ expect(Cell.properties).toHaveProperty('value')
829
+ })
830
+
831
+ it('SpreadsheetEntities collection exists', () => {
832
+ expect(SpreadsheetEntities).toBeDefined()
833
+ expect(Object.keys(SpreadsheetEntities).length).toBeGreaterThan(0)
834
+ })
835
+ })
836
+
837
+ describe('Presentation Entities', () => {
838
+ it('Presentation has correct structure', () => {
839
+ expect(Presentation.singular).toBe('presentation')
840
+ expect(Presentation.plural).toBe('presentations')
841
+ expect(Presentation.properties).toHaveProperty('title')
842
+ })
843
+
844
+ it('Slide has correct structure', () => {
845
+ expect(Slide.singular).toBe('slide')
846
+ expect(Slide.plural).toBe('slides')
847
+ expect(Slide.properties).toHaveProperty('index')
848
+ })
849
+
850
+ it('PresentationEntities collection exists', () => {
851
+ expect(PresentationEntities).toBeDefined()
852
+ expect(Object.keys(PresentationEntities).length).toBeGreaterThan(0)
853
+ })
854
+ })
855
+
856
+ describe('Infrastructure Entities', () => {
857
+ it('Config has correct structure', () => {
858
+ expect(Config.singular).toBe('config')
859
+ expect(Config.plural).toBe('configs')
860
+ expect(Config.properties).toHaveProperty('name')
861
+ })
862
+
863
+ it('Database has correct structure', () => {
864
+ expect(Database.singular).toBe('database')
865
+ expect(Database.plural).toBe('databases')
866
+ expect(Database.properties).toHaveProperty('name')
867
+ })
868
+
869
+ it('Hosting has correct structure', () => {
870
+ expect(Hosting.singular).toBe('hosting')
871
+ expect(Hosting.plural).toBe('hostings')
872
+ })
873
+
874
+ it('InfrastructureEntities collection exists', () => {
875
+ expect(InfrastructureEntities).toBeDefined()
876
+ expect(Object.keys(InfrastructureEntities).length).toBeGreaterThan(0)
877
+ })
878
+ })
879
+
880
+ describe('Experiment Entities', () => {
881
+ it('FeatureFlag has correct structure', () => {
882
+ expect(FeatureFlag.singular).toBe('feature flag')
883
+ expect(FeatureFlag.plural).toBe('feature flags')
884
+ expect(FeatureFlag.properties).toHaveProperty('key')
885
+ expect(FeatureFlag.properties).toHaveProperty('enabled')
886
+ })
887
+
888
+ it('Experiment has correct structure', () => {
889
+ expect(Experiment.singular).toBe('experiment')
890
+ expect(Experiment.plural).toBe('experiments')
891
+ expect(Experiment.properties).toHaveProperty('name')
892
+ expect(Experiment.properties).toHaveProperty('status')
893
+ })
894
+
895
+ it('ExperimentEntities collection exists', () => {
896
+ expect(ExperimentEntities).toBeDefined()
897
+ expect(Object.keys(ExperimentEntities).length).toBeGreaterThan(0)
898
+ })
899
+ })
900
+
901
+ describe('Advertising Entities', () => {
902
+ it('Ad has correct structure', () => {
903
+ expect(Ad.singular).toBe('ad')
904
+ expect(Ad.plural).toBe('ads')
905
+ expect(Ad.properties).toHaveProperty('name')
906
+ expect(Ad.properties).toHaveProperty('status')
907
+ })
908
+
909
+ it('AdCampaign has correct structure', () => {
910
+ expect(AdCampaign.singular).toBe('ad campaign')
911
+ expect(AdCampaign.plural).toBe('ad campaigns')
912
+ expect(AdCampaign.properties).toHaveProperty('name')
913
+ expect(AdCampaign.properties).toHaveProperty('budget')
914
+ })
915
+
916
+ it('AdvertisingEntities collection exists', () => {
917
+ expect(AdvertisingEntities).toBeDefined()
918
+ expect(Object.keys(AdvertisingEntities).length).toBeGreaterThan(0)
919
+ })
920
+ })
921
+
922
+ describe('Video/Streaming Entities', () => {
923
+ it('VideoChannel has correct structure', () => {
924
+ expect(VideoChannel.singular).toBe('video channel')
925
+ expect(VideoChannel.plural).toBe('video channels')
926
+ expect(VideoChannel.properties).toHaveProperty('name')
927
+ })
928
+
929
+ it('Playlist has correct structure', () => {
930
+ expect(Playlist.singular).toBe('playlist')
931
+ expect(Playlist.plural).toBe('playlists')
932
+ expect(Playlist.properties).toHaveProperty('title')
933
+ })
934
+
935
+ it('LiveStream has correct structure', () => {
936
+ expect(LiveStream.singular).toBe('live stream')
937
+ expect(LiveStream.plural).toBe('live streams')
938
+ expect(LiveStream.properties).toHaveProperty('title')
939
+ expect(LiveStream.properties).toHaveProperty('status')
940
+ })
941
+
942
+ it('VideoEntities collection exists', () => {
943
+ expect(VideoEntities).toBeDefined()
944
+ expect(Object.keys(VideoEntities).length).toBeGreaterThan(0)
945
+ })
946
+ })
947
+
948
+ describe('Identity Entities', () => {
949
+ it('Organization has correct structure', () => {
950
+ expect(Organization.singular).toBe('organization')
951
+ expect(Organization.plural).toBe('organizations')
952
+ expect(Organization.properties).toHaveProperty('name')
953
+ })
954
+
955
+ it('SSOConnection has correct structure', () => {
956
+ expect(SSOConnection.singular).toBe('sso connection')
957
+ expect(SSOConnection.plural).toBe('sso connections')
958
+ expect(SSOConnection.properties).toHaveProperty('type')
959
+ })
960
+
961
+ it('IdentityEntities collection exists', () => {
962
+ expect(IdentityEntities).toBeDefined()
963
+ expect(Object.keys(IdentityEntities).length).toBeGreaterThan(0)
964
+ })
965
+ })
966
+
967
+ describe('Notification Entities', () => {
968
+ it('Notification has correct structure', () => {
969
+ expect(Notification.singular).toBe('notification')
970
+ expect(Notification.plural).toBe('notifications')
971
+ expect(Notification.properties).toHaveProperty('title')
972
+ expect(Notification.properties).toHaveProperty('body')
973
+ })
974
+
975
+ it('SMS has correct structure', () => {
976
+ expect(SMS.singular).toBe('sms')
977
+ expect(SMS.plural).toBe('sms-messages')
978
+ expect(SMS.properties).toHaveProperty('to')
979
+ expect(SMS.properties).toHaveProperty('body')
980
+ })
981
+
982
+ it('PushNotification has correct structure', () => {
983
+ expect(PushNotification.singular).toBe('push-notification')
984
+ expect(PushNotification.plural).toBe('push-notifications')
985
+ expect(PushNotification.properties).toHaveProperty('title')
986
+ expect(PushNotification.properties).toHaveProperty('body')
987
+ })
988
+
989
+ it('NotificationEntities collection exists', () => {
990
+ expect(NotificationEntities).toBeDefined()
991
+ expect(Object.keys(NotificationEntities).length).toBeGreaterThan(0)
992
+ })
993
+ })
994
+
995
+ describe('HR Entities', () => {
996
+ it('Employee has correct structure', () => {
997
+ expect(Employee.singular).toBe('employee')
998
+ expect(Employee.plural).toBe('employees')
999
+ expect(Employee.properties).toHaveProperty('firstName')
1000
+ expect(Employee.properties).toHaveProperty('email')
1001
+ })
1002
+
1003
+ it('Team has correct structure', () => {
1004
+ expect(Team.singular).toBe('team')
1005
+ expect(Team.plural).toBe('teams')
1006
+ expect(Team.properties).toHaveProperty('name')
1007
+ })
1008
+
1009
+ it('TimeOff has correct structure', () => {
1010
+ expect(TimeOff.singular).toBe('time-off')
1011
+ expect(TimeOff.plural).toBe('time-off-requests')
1012
+ expect(TimeOff.properties).toHaveProperty('type')
1013
+ expect(TimeOff.properties).toHaveProperty('status')
1014
+ })
1015
+
1016
+ it('HREntities collection exists', () => {
1017
+ expect(HREntities).toBeDefined()
1018
+ expect(Object.keys(HREntities).length).toBeGreaterThan(0)
1019
+ })
1020
+ })
1021
+
1022
+ describe('Recruiting Entities', () => {
1023
+ it('Job has correct structure', () => {
1024
+ expect(Job.singular).toBe('job')
1025
+ expect(Job.plural).toBe('jobs')
1026
+ expect(Job.properties).toHaveProperty('title')
1027
+ expect(Job.properties).toHaveProperty('status')
1028
+ })
1029
+
1030
+ it('Candidate has correct structure', () => {
1031
+ expect(Candidate.singular).toBe('candidate')
1032
+ expect(Candidate.plural).toBe('candidates')
1033
+ expect(Candidate.properties).toHaveProperty('firstName')
1034
+ expect(Candidate.properties).toHaveProperty('email')
1035
+ })
1036
+
1037
+ it('Interview has correct structure', () => {
1038
+ expect(Interview.singular).toBe('interview')
1039
+ expect(Interview.plural).toBe('interviews')
1040
+ expect(Interview.properties).toHaveProperty('type')
1041
+ expect(Interview.properties).toHaveProperty('scheduledAt')
1042
+ })
1043
+
1044
+ it('RecruitingEntities collection exists', () => {
1045
+ expect(RecruitingEntities).toBeDefined()
1046
+ expect(Object.keys(RecruitingEntities).length).toBeGreaterThan(0)
1047
+ })
1048
+ })
1049
+
1050
+ describe('Design Entities', () => {
1051
+ it('DesignFile has correct structure', () => {
1052
+ expect(DesignFile.singular).toBe('design-file')
1053
+ expect(DesignFile.plural).toBe('design-files')
1054
+ expect(DesignFile.properties).toHaveProperty('name')
1055
+ })
1056
+
1057
+ it('Component has correct structure', () => {
1058
+ expect(Component.singular).toBe('component')
1059
+ expect(Component.plural).toBe('components')
1060
+ expect(Component.properties).toHaveProperty('name')
1061
+ })
1062
+
1063
+ it('DesignEntities collection exists', () => {
1064
+ expect(DesignEntities).toBeDefined()
1065
+ expect(Object.keys(DesignEntities).length).toBeGreaterThan(0)
1066
+ })
1067
+ })
1068
+
1069
+ describe('Shipping Entities', () => {
1070
+ it('Shipment has correct structure', () => {
1071
+ expect(Shipment.singular).toBe('shipment')
1072
+ expect(Shipment.plural).toBe('shipments')
1073
+ expect(Shipment.properties).toHaveProperty('status')
1074
+ expect(Shipment.properties).toHaveProperty('trackingNumber')
1075
+ })
1076
+
1077
+ it('Package has correct structure', () => {
1078
+ expect(Package.singular).toBe('package')
1079
+ expect(Package.plural).toBe('packages')
1080
+ expect(Package.properties).toHaveProperty('weight')
1081
+ })
1082
+
1083
+ it('ShippingEntities collection exists', () => {
1084
+ expect(ShippingEntities).toBeDefined()
1085
+ expect(Object.keys(ShippingEntities).length).toBeGreaterThan(0)
1086
+ })
1087
+ })
1088
+
1089
+ describe('Automation Entities', () => {
1090
+ it('AutomationWorkflow has correct structure', () => {
1091
+ expect(AutomationWorkflow.singular).toBe('automation-workflow')
1092
+ expect(AutomationWorkflow.plural).toBe('automation-workflows')
1093
+ expect(AutomationWorkflow.properties).toHaveProperty('name')
1094
+ expect(AutomationWorkflow.properties).toHaveProperty('status')
1095
+ })
1096
+
1097
+ it('Trigger has correct structure', () => {
1098
+ expect(Trigger.singular).toBe('trigger')
1099
+ expect(Trigger.plural).toBe('triggers')
1100
+ expect(Trigger.properties).toHaveProperty('type')
1101
+ })
1102
+
1103
+ it('Action has correct structure', () => {
1104
+ expect(Action.singular).toBe('action')
1105
+ expect(Action.plural).toBe('actions')
1106
+ expect(Action.properties).toHaveProperty('type')
1107
+ })
1108
+
1109
+ it('AutomationEntities collection exists', () => {
1110
+ expect(AutomationEntities).toBeDefined()
1111
+ expect(Object.keys(AutomationEntities).length).toBeGreaterThan(0)
1112
+ })
1113
+ })
1114
+
1115
+ describe('AI Entities', () => {
1116
+ it('Model has correct structure', () => {
1117
+ expect(Model.singular).toBe('model')
1118
+ expect(Model.plural).toBe('models')
1119
+ expect(Model.properties).toHaveProperty('name')
1120
+ expect(Model.properties).toHaveProperty('provider')
1121
+ })
1122
+
1123
+ it('Prompt has correct structure', () => {
1124
+ expect(Prompt.singular).toBe('prompt')
1125
+ expect(Prompt.plural).toBe('prompts')
1126
+ expect(Prompt.properties).toHaveProperty('template')
1127
+ })
1128
+
1129
+ it('Agent has correct structure', () => {
1130
+ expect(Agent.singular).toBe('agent')
1131
+ expect(Agent.plural).toBe('agents')
1132
+ expect(Agent.properties).toHaveProperty('name')
1133
+ expect(Agent.properties).toHaveProperty('systemPrompt')
1134
+ })
1135
+
1136
+ it('AIEntities collection exists', () => {
1137
+ expect(AIEntities).toBeDefined()
1138
+ expect(Object.keys(AIEntities).length).toBeGreaterThan(0)
1139
+ })
1140
+ })
1141
+
1142
+ describe('AllEntities Collection', () => {
1143
+ it('contains all entity categories', () => {
1144
+ expect(AllEntities).toHaveProperty('site')
1145
+ expect(AllEntities).toHaveProperty('message')
1146
+ expect(AllEntities).toHaveProperty('productivity')
1147
+ expect(AllEntities).toHaveProperty('project')
1148
+ expect(AllEntities).toHaveProperty('code')
1149
+ expect(AllEntities).toHaveProperty('sales')
1150
+ expect(AllEntities).toHaveProperty('finance')
1151
+ expect(AllEntities).toHaveProperty('support')
1152
+ expect(AllEntities).toHaveProperty('media')
1153
+ expect(AllEntities).toHaveProperty('marketing')
1154
+ expect(AllEntities).toHaveProperty('knowledge')
1155
+ expect(AllEntities).toHaveProperty('commerce')
1156
+ expect(AllEntities).toHaveProperty('analytics')
1157
+ expect(AllEntities).toHaveProperty('storage')
1158
+ expect(AllEntities).toHaveProperty('meeting')
1159
+ expect(AllEntities).toHaveProperty('form')
1160
+ expect(AllEntities).toHaveProperty('signature')
1161
+ expect(AllEntities).toHaveProperty('document')
1162
+ expect(AllEntities).toHaveProperty('spreadsheet')
1163
+ expect(AllEntities).toHaveProperty('presentation')
1164
+ expect(AllEntities).toHaveProperty('infrastructure')
1165
+ expect(AllEntities).toHaveProperty('experiment')
1166
+ expect(AllEntities).toHaveProperty('advertising')
1167
+ expect(AllEntities).toHaveProperty('video')
1168
+ expect(AllEntities).toHaveProperty('identity')
1169
+ expect(AllEntities).toHaveProperty('notification')
1170
+ expect(AllEntities).toHaveProperty('hr')
1171
+ expect(AllEntities).toHaveProperty('recruiting')
1172
+ expect(AllEntities).toHaveProperty('design')
1173
+ expect(AllEntities).toHaveProperty('shipping')
1174
+ expect(AllEntities).toHaveProperty('automation')
1175
+ expect(AllEntities).toHaveProperty('ai')
1176
+ })
1177
+
1178
+ it('has 32 entity categories', () => {
1179
+ expect(Object.keys(AllEntities)).toHaveLength(32)
1180
+ })
1181
+ })
1182
+
1183
+ describe('EntityCategories', () => {
1184
+ it('contains all category names', () => {
1185
+ expect(EntityCategories).toContain('site')
1186
+ expect(EntityCategories).toContain('message')
1187
+ expect(EntityCategories).toContain('productivity')
1188
+ expect(EntityCategories).toContain('project')
1189
+ expect(EntityCategories).toContain('code')
1190
+ expect(EntityCategories).toContain('sales')
1191
+ expect(EntityCategories).toContain('finance')
1192
+ expect(EntityCategories).toContain('support')
1193
+ expect(EntityCategories).toContain('media')
1194
+ expect(EntityCategories).toContain('marketing')
1195
+ expect(EntityCategories).toContain('knowledge')
1196
+ expect(EntityCategories).toContain('commerce')
1197
+ expect(EntityCategories).toContain('analytics')
1198
+ expect(EntityCategories).toContain('storage')
1199
+ expect(EntityCategories).toContain('meeting')
1200
+ expect(EntityCategories).toContain('form')
1201
+ expect(EntityCategories).toContain('signature')
1202
+ expect(EntityCategories).toContain('document')
1203
+ expect(EntityCategories).toContain('spreadsheet')
1204
+ expect(EntityCategories).toContain('presentation')
1205
+ expect(EntityCategories).toContain('infrastructure')
1206
+ expect(EntityCategories).toContain('experiment')
1207
+ expect(EntityCategories).toContain('advertising')
1208
+ expect(EntityCategories).toContain('video')
1209
+ expect(EntityCategories).toContain('identity')
1210
+ expect(EntityCategories).toContain('notification')
1211
+ expect(EntityCategories).toContain('hr')
1212
+ expect(EntityCategories).toContain('recruiting')
1213
+ expect(EntityCategories).toContain('design')
1214
+ expect(EntityCategories).toContain('shipping')
1215
+ expect(EntityCategories).toContain('automation')
1216
+ expect(EntityCategories).toContain('ai')
1217
+ })
1218
+
1219
+ it('has 32 categories', () => {
1220
+ expect(EntityCategories).toHaveLength(32)
1221
+ })
1222
+
1223
+ it('matches AllEntities keys', () => {
1224
+ const allEntityKeys = Object.keys(AllEntities)
1225
+ expect(EntityCategories).toEqual(expect.arrayContaining(allEntityKeys))
1226
+ expect(allEntityKeys).toEqual(expect.arrayContaining([...EntityCategories]))
1227
+ })
1228
+ })