digital-tools 2.1.3 → 2.4.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 (294) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/CHANGELOG.md +19 -0
  3. package/README.md +2 -0
  4. package/dist/client.d.ts +109 -0
  5. package/dist/client.d.ts.map +1 -0
  6. package/dist/client.js +69 -0
  7. package/dist/client.js.map +1 -0
  8. package/dist/define.d.ts +2 -2
  9. package/dist/define.d.ts.map +1 -1
  10. package/dist/define.js +21 -11
  11. package/dist/define.js.map +1 -1
  12. package/dist/function-ref.d.ts +229 -0
  13. package/dist/function-ref.d.ts.map +1 -0
  14. package/dist/function-ref.js +28 -0
  15. package/dist/function-ref.js.map +1 -0
  16. package/dist/function-sugar.d.ts +57 -0
  17. package/dist/function-sugar.d.ts.map +1 -0
  18. package/dist/function-sugar.js +79 -0
  19. package/dist/function-sugar.js.map +1 -0
  20. package/dist/index.d.ts +10 -3
  21. package/dist/index.d.ts.map +1 -1
  22. package/dist/index.js +24 -4
  23. package/dist/index.js.map +1 -1
  24. package/dist/providers/analytics/mixpanel.d.ts.map +1 -1
  25. package/dist/providers/analytics/mixpanel.js +21 -18
  26. package/dist/providers/analytics/mixpanel.js.map +1 -1
  27. package/dist/providers/calendar/cal-com.d.ts.map +1 -1
  28. package/dist/providers/calendar/cal-com.js +10 -10
  29. package/dist/providers/calendar/cal-com.js.map +1 -1
  30. package/dist/providers/calendar/google-calendar.d.ts.map +1 -1
  31. package/dist/providers/calendar/google-calendar.js +4 -4
  32. package/dist/providers/calendar/google-calendar.js.map +1 -1
  33. package/dist/providers/crm/hubspot.d.ts.map +1 -1
  34. package/dist/providers/crm/hubspot.js +107 -85
  35. package/dist/providers/crm/hubspot.js.map +1 -1
  36. package/dist/providers/development/github.d.ts.map +1 -1
  37. package/dist/providers/development/github.js +40 -43
  38. package/dist/providers/development/github.js.map +1 -1
  39. package/dist/providers/ecommerce/shopify.d.ts.map +1 -1
  40. package/dist/providers/ecommerce/shopify.js +79 -62
  41. package/dist/providers/ecommerce/shopify.js.map +1 -1
  42. package/dist/providers/email/resend.d.ts.map +1 -1
  43. package/dist/providers/email/resend.js +20 -16
  44. package/dist/providers/email/resend.js.map +1 -1
  45. package/dist/providers/email/sendgrid.d.ts.map +1 -1
  46. package/dist/providers/email/sendgrid.js +12 -9
  47. package/dist/providers/email/sendgrid.js.map +1 -1
  48. package/dist/providers/finance/stripe.d.ts.map +1 -1
  49. package/dist/providers/finance/stripe.js +44 -42
  50. package/dist/providers/finance/stripe.js.map +1 -1
  51. package/dist/providers/forms/typeform.d.ts.map +1 -1
  52. package/dist/providers/forms/typeform.js +68 -58
  53. package/dist/providers/forms/typeform.js.map +1 -1
  54. package/dist/providers/knowledge/notion.d.ts.map +1 -1
  55. package/dist/providers/knowledge/notion.js +75 -41
  56. package/dist/providers/knowledge/notion.js.map +1 -1
  57. package/dist/providers/marketing/mailchimp.d.ts.map +1 -1
  58. package/dist/providers/marketing/mailchimp.js +74 -61
  59. package/dist/providers/marketing/mailchimp.js.map +1 -1
  60. package/dist/providers/media/cloudinary.d.ts.map +1 -1
  61. package/dist/providers/media/cloudinary.js +30 -28
  62. package/dist/providers/media/cloudinary.js.map +1 -1
  63. package/dist/providers/messaging/slack.d.ts.map +1 -1
  64. package/dist/providers/messaging/slack.js +75 -58
  65. package/dist/providers/messaging/slack.js.map +1 -1
  66. package/dist/providers/messaging/twilio-sms.d.ts.map +1 -1
  67. package/dist/providers/messaging/twilio-sms.js +33 -15
  68. package/dist/providers/messaging/twilio-sms.js.map +1 -1
  69. package/dist/providers/project-management/linear.d.ts.map +1 -1
  70. package/dist/providers/project-management/linear.js +31 -27
  71. package/dist/providers/project-management/linear.js.map +1 -1
  72. package/dist/providers/spreadsheet/google-sheets.d.ts.map +1 -1
  73. package/dist/providers/spreadsheet/google-sheets.js +21 -18
  74. package/dist/providers/spreadsheet/google-sheets.js.map +1 -1
  75. package/dist/providers/spreadsheet/xlsx.d.ts.map +1 -1
  76. package/dist/providers/spreadsheet/xlsx.js +4 -4
  77. package/dist/providers/spreadsheet/xlsx.js.map +1 -1
  78. package/dist/providers/storage/index.js +1 -0
  79. package/dist/providers/storage/index.js.map +1 -1
  80. package/dist/providers/storage/s3.d.ts.map +1 -1
  81. package/dist/providers/storage/s3.js +36 -27
  82. package/dist/providers/storage/s3.js.map +1 -1
  83. package/dist/providers/support/zendesk.d.ts.map +1 -1
  84. package/dist/providers/support/zendesk.js +24 -25
  85. package/dist/providers/support/zendesk.js.map +1 -1
  86. package/dist/providers/tasks/todoist.d.ts.map +1 -1
  87. package/dist/providers/tasks/todoist.js +18 -18
  88. package/dist/providers/tasks/todoist.js.map +1 -1
  89. package/dist/providers/video-conferencing/google-meet.d.ts.map +1 -1
  90. package/dist/providers/video-conferencing/google-meet.js +11 -11
  91. package/dist/providers/video-conferencing/google-meet.js.map +1 -1
  92. package/dist/providers/video-conferencing/jitsi.js +14 -14
  93. package/dist/providers/video-conferencing/jitsi.js.map +1 -1
  94. package/dist/providers/video-conferencing/teams.d.ts.map +1 -1
  95. package/dist/providers/video-conferencing/teams.js +9 -7
  96. package/dist/providers/video-conferencing/teams.js.map +1 -1
  97. package/dist/providers/video-conferencing/zoom.d.ts.map +1 -1
  98. package/dist/providers/video-conferencing/zoom.js +26 -24
  99. package/dist/providers/video-conferencing/zoom.js.map +1 -1
  100. package/dist/tools/data.d.ts.map +1 -1
  101. package/dist/tools/data.js +5 -12
  102. package/dist/tools/data.js.map +1 -1
  103. package/dist/tools/index.d.ts +1 -0
  104. package/dist/tools/index.d.ts.map +1 -1
  105. package/dist/tools/index.js +1 -0
  106. package/dist/tools/index.js.map +1 -1
  107. package/dist/tools/system.d.ts +289 -0
  108. package/dist/tools/system.d.ts.map +1 -0
  109. package/dist/tools/system.js +752 -0
  110. package/dist/tools/system.js.map +1 -0
  111. package/dist/tools/web.d.ts.map +1 -1
  112. package/dist/tools/web.js +22 -10
  113. package/dist/tools/web.js.map +1 -1
  114. package/dist/track-record.d.ts +101 -0
  115. package/dist/track-record.d.ts.map +1 -0
  116. package/dist/track-record.js +17 -0
  117. package/dist/track-record.js.map +1 -0
  118. package/dist/types.d.ts +210 -9
  119. package/dist/types.d.ts.map +1 -1
  120. package/dist/verb-registration.d.ts +122 -0
  121. package/dist/verb-registration.d.ts.map +1 -0
  122. package/dist/verb-registration.js +176 -0
  123. package/dist/verb-registration.js.map +1 -0
  124. package/dist/worker.d.ts +93 -0
  125. package/dist/worker.d.ts.map +1 -0
  126. package/dist/worker.js +315 -0
  127. package/dist/worker.js.map +1 -0
  128. package/dist/wrap.d.ts +89 -0
  129. package/dist/wrap.d.ts.map +1 -0
  130. package/dist/wrap.js +225 -0
  131. package/dist/wrap.js.map +1 -0
  132. package/package.json +31 -14
  133. package/src/client.ts +136 -0
  134. package/src/define.ts +30 -24
  135. package/src/function-ref.ts +264 -0
  136. package/src/function-sugar.ts +134 -0
  137. package/src/index.ts +132 -10
  138. package/src/providers/analytics/mixpanel.ts +19 -18
  139. package/src/providers/calendar/cal-com.ts +29 -18
  140. package/src/providers/calendar/google-calendar.ts +20 -14
  141. package/src/providers/crm/hubspot.ts +225 -99
  142. package/src/providers/development/github.ts +206 -135
  143. package/src/providers/ecommerce/shopify.ts +250 -89
  144. package/src/providers/email/resend.ts +101 -28
  145. package/src/providers/email/sendgrid.ts +12 -9
  146. package/src/providers/finance/stripe.ts +128 -49
  147. package/src/providers/forms/typeform.ts +74 -58
  148. package/src/providers/knowledge/notion.ts +340 -88
  149. package/src/providers/marketing/mailchimp.ts +86 -70
  150. package/src/providers/media/cloudinary.ts +99 -41
  151. package/src/providers/messaging/slack.ts +283 -85
  152. package/src/providers/messaging/twilio-sms.ts +35 -15
  153. package/src/providers/project-management/linear.ts +143 -55
  154. package/src/providers/spreadsheet/google-sheets.ts +222 -56
  155. package/src/providers/spreadsheet/xlsx.ts +47 -16
  156. package/src/providers/storage/s3.ts +119 -47
  157. package/src/providers/support/zendesk.ts +196 -46
  158. package/src/providers/tasks/todoist.ts +20 -26
  159. package/src/providers/video-conferencing/google-meet.ts +17 -20
  160. package/src/providers/video-conferencing/jitsi.ts +14 -14
  161. package/src/providers/video-conferencing/teams.ts +14 -13
  162. package/src/providers/video-conferencing/zoom.ts +54 -49
  163. package/src/tools/data.ts +6 -16
  164. package/src/tools/index.ts +1 -0
  165. package/src/tools/system.ts +887 -0
  166. package/src/tools/web.ts +22 -10
  167. package/src/track-record.ts +106 -0
  168. package/src/types.ts +241 -13
  169. package/src/verb-registration.ts +197 -0
  170. package/src/worker.ts +370 -0
  171. package/src/wrap.ts +260 -0
  172. package/test/client.test.ts +146 -0
  173. package/test/communication-tools-extended.test.ts +734 -0
  174. package/test/data-tools-extended.test.ts +743 -0
  175. package/test/define-extended.test.ts +819 -0
  176. package/test/define.test.ts +150 -41
  177. package/test/entities.test.ts +623 -0
  178. package/test/extended-entities.test.ts +1228 -0
  179. package/test/provider-implementations.test.ts +725 -0
  180. package/test/provider-registry-extended.test.ts +583 -0
  181. package/test/providers/google-sheets.test.ts +851 -0
  182. package/test/providers/helpers.ts +554 -0
  183. package/test/providers/hubspot.test.ts +576 -0
  184. package/test/providers/slack.test.ts +932 -0
  185. package/test/providers/stripe.test.ts +701 -0
  186. package/test/providers.test.ts +578 -0
  187. package/test/system-tools-extended.test.ts +632 -0
  188. package/test/system.test.ts +673 -0
  189. package/test/tools.test.ts +15 -11
  190. package/test/types.test.ts +402 -0
  191. package/test/verb-registration.test.ts +395 -0
  192. package/test/web-tools.test.ts +553 -0
  193. package/test/worker-extended.test.ts +699 -0
  194. package/test/worker.test.ts +576 -0
  195. package/test/wrap.test.ts +366 -0
  196. package/tsconfig.json +3 -13
  197. package/vitest.config.ts +37 -0
  198. package/wrangler.jsonc +9 -0
  199. package/LICENSE +0 -21
  200. package/dist/providers/voice/vapi.d.ts +0 -27
  201. package/dist/providers/voice/vapi.d.ts.map +0 -1
  202. package/dist/providers/voice/vapi.js +0 -440
  203. package/dist/providers/voice/vapi.js.map +0 -1
  204. package/src/define.js +0 -259
  205. package/src/entities/advertising.js +0 -999
  206. package/src/entities/ai.js +0 -756
  207. package/src/entities/analytics.js +0 -1588
  208. package/src/entities/automation.js +0 -601
  209. package/src/entities/communication.js +0 -1150
  210. package/src/entities/crm.js +0 -1386
  211. package/src/entities/design.js +0 -546
  212. package/src/entities/development.js +0 -2212
  213. package/src/entities/document.js +0 -874
  214. package/src/entities/ecommerce.js +0 -1429
  215. package/src/entities/experiment.js +0 -1039
  216. package/src/entities/finance.js +0 -3478
  217. package/src/entities/forms.js +0 -1892
  218. package/src/entities/hr.js +0 -661
  219. package/src/entities/identity.js +0 -997
  220. package/src/entities/index.js +0 -282
  221. package/src/entities/infrastructure.js +0 -1153
  222. package/src/entities/knowledge.js +0 -1438
  223. package/src/entities/marketing.js +0 -1610
  224. package/src/entities/media.js +0 -1634
  225. package/src/entities/notification.js +0 -1199
  226. package/src/entities/presentation.js +0 -1274
  227. package/src/entities/productivity.js +0 -1317
  228. package/src/entities/project-management.js +0 -1136
  229. package/src/entities/recruiting.js +0 -736
  230. package/src/entities/shipping.js +0 -509
  231. package/src/entities/signature.js +0 -1102
  232. package/src/entities/site.js +0 -222
  233. package/src/entities/spreadsheet.js +0 -1341
  234. package/src/entities/storage.js +0 -1198
  235. package/src/entities/support.js +0 -1166
  236. package/src/entities/video-conferencing.js +0 -1750
  237. package/src/entities/video.js +0 -950
  238. package/src/entities.js +0 -1663
  239. package/src/index.js +0 -74
  240. package/src/providers/analytics/index.js +0 -17
  241. package/src/providers/analytics/mixpanel.js +0 -255
  242. package/src/providers/calendar/cal-com.js +0 -303
  243. package/src/providers/calendar/google-calendar.js +0 -335
  244. package/src/providers/calendar/index.js +0 -20
  245. package/src/providers/crm/hubspot.js +0 -566
  246. package/src/providers/crm/index.js +0 -17
  247. package/src/providers/development/github.js +0 -472
  248. package/src/providers/development/index.js +0 -17
  249. package/src/providers/ecommerce/index.js +0 -17
  250. package/src/providers/ecommerce/shopify.js +0 -378
  251. package/src/providers/email/index.js +0 -20
  252. package/src/providers/email/resend.js +0 -258
  253. package/src/providers/email/sendgrid.js +0 -161
  254. package/src/providers/finance/index.js +0 -17
  255. package/src/providers/finance/stripe.js +0 -549
  256. package/src/providers/forms/index.js +0 -17
  257. package/src/providers/forms/typeform.js +0 -500
  258. package/src/providers/index.js +0 -123
  259. package/src/providers/knowledge/index.js +0 -17
  260. package/src/providers/knowledge/notion.js +0 -389
  261. package/src/providers/marketing/index.js +0 -17
  262. package/src/providers/marketing/mailchimp.js +0 -443
  263. package/src/providers/media/cloudinary.js +0 -318
  264. package/src/providers/media/index.js +0 -17
  265. package/src/providers/messaging/index.js +0 -20
  266. package/src/providers/messaging/slack.js +0 -393
  267. package/src/providers/messaging/twilio-sms.js +0 -249
  268. package/src/providers/project-management/index.js +0 -17
  269. package/src/providers/project-management/linear.js +0 -575
  270. package/src/providers/registry.js +0 -86
  271. package/src/providers/spreadsheet/google-sheets.js +0 -375
  272. package/src/providers/spreadsheet/index.js +0 -20
  273. package/src/providers/spreadsheet/xlsx.js +0 -423
  274. package/src/providers/storage/index.js +0 -24
  275. package/src/providers/storage/s3.js +0 -419
  276. package/src/providers/support/index.js +0 -17
  277. package/src/providers/support/zendesk.js +0 -373
  278. package/src/providers/tasks/index.js +0 -17
  279. package/src/providers/tasks/todoist.js +0 -286
  280. package/src/providers/types.js +0 -9
  281. package/src/providers/video-conferencing/google-meet.js +0 -286
  282. package/src/providers/video-conferencing/index.js +0 -31
  283. package/src/providers/video-conferencing/jitsi.js +0 -254
  284. package/src/providers/video-conferencing/teams.js +0 -270
  285. package/src/providers/video-conferencing/zoom.js +0 -332
  286. package/src/registry.js +0 -128
  287. package/src/tools/communication.js +0 -184
  288. package/src/tools/data.js +0 -205
  289. package/src/tools/index.js +0 -11
  290. package/src/tools/web.js +0 -137
  291. package/src/types.js +0 -10
  292. package/test/define.test.js +0 -306
  293. package/test/registry.test.js +0 -357
  294. 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
+ })