@cometchat/skills 4.4.1 → 5.0.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 (489) hide show
  1. package/.claude-plugin/marketplace.json +55 -0
  2. package/.claude-plugin/plugin.json +14 -0
  3. package/CHANGELOG.md +36 -0
  4. package/README.md +41 -163
  5. package/RULES.md +114 -0
  6. package/bin/cometchat-skills.mjs +1180 -0
  7. package/bin/legacy-skills.json +95 -0
  8. package/catalogs/android-v6.json +1646 -0
  9. package/catalogs/flutter-v6.json +651 -0
  10. package/catalogs/ios-v5.json +1383 -0
  11. package/catalogs/rn-calls-v5.json +134 -0
  12. package/catalogs/rn-calls-v5.symbols.txt +58 -0
  13. package/catalogs/rn-sdk-v4.json +672 -0
  14. package/catalogs/rn-v5.json +449 -0
  15. package/catalogs/rn-v5.symbols.txt +216 -0
  16. package/catalogs/sdk-android-v5.json +514 -0
  17. package/contracts.android-calls-v5.json +122 -0
  18. package/contracts.android-v6.json +135 -0
  19. package/contracts.angular-v5.json +694 -0
  20. package/contracts.flutter-calls-v5.json +77 -0
  21. package/contracts.flutter-v6.json +126 -0
  22. package/contracts.ios-calls-v5.json +67 -0
  23. package/contracts.ios-v5.json +436 -0
  24. package/contracts.json +82 -0
  25. package/contracts.rn-calls-v5.json +77 -0
  26. package/contracts.rn-v5.json +727 -0
  27. package/contracts.sdk-android-v5.json +15 -0
  28. package/contracts.web-calls-v5.json +45 -0
  29. package/features.android-calls-v5.json +246 -0
  30. package/features.android-v6.json +65 -0
  31. package/features.angular-v5.json +521 -0
  32. package/features.flutter-calls-v5.json +286 -0
  33. package/features.flutter-v6.json +484 -0
  34. package/features.ios-calls-v5.json +236 -0
  35. package/features.ios-v5.json +573 -0
  36. package/features.json +61 -0
  37. package/features.rn-calls-v5.json +187 -0
  38. package/features.rn-v5.json +614 -0
  39. package/features.sdk-android-v5.json +40 -0
  40. package/features.sdk-jsv4.json +24 -0
  41. package/features.web-calls-v5.json +108 -0
  42. package/package.json +151 -74
  43. package/peers.yaml +312 -0
  44. package/registry/README.md +31 -0
  45. package/registry/android-calls-v5.json +54 -0
  46. package/registry/android-v6.json +137 -0
  47. package/registry/angular-v5.json +114 -0
  48. package/registry/flutter-calls-v5.json +54 -0
  49. package/registry/flutter-v6.json +119 -0
  50. package/registry/ios-calls-v5.json +59 -0
  51. package/registry/ios-v5.json +97 -0
  52. package/registry/rn-calls-v5.json +59 -0
  53. package/registry/rn-v5.json +129 -0
  54. package/registry/sdk-android-v5.json +53 -0
  55. package/registry/sdk-jsv4.json +53 -0
  56. package/registry/web-calls-v5.json +54 -0
  57. package/registry/web-v7.json +99 -0
  58. package/skills/cometchat/SKILL.md +42 -2096
  59. package/skills/cometchat-android-v5-calls-sdk/SKILL.md +206 -0
  60. package/skills/cometchat-android-v5-calls-sdk/references/build-truth.md +63 -0
  61. package/skills/cometchat-android-v5-calls-sdk/references/docs-map.md +119 -0
  62. package/skills/cometchat-android-v5-calls-sdk/references/method-map.md +53 -0
  63. package/skills/cometchat-android-v5-calls-sdk/references/pitfalls.md +72 -0
  64. package/skills/cometchat-android-v5-calls-sdk/references/ringing.md +92 -0
  65. package/skills/cometchat-android-v5-calls-sdk/references/user-switch.md +90 -0
  66. package/skills/cometchat-android-v5-sdk/SKILL.md +127 -0
  67. package/skills/cometchat-android-v5-sdk/references/app-surface.md +88 -0
  68. package/skills/cometchat-android-v5-sdk/references/docs-map.md +91 -0
  69. package/skills/cometchat-android-v6-builder-settings/SKILL.md +51 -137
  70. package/skills/cometchat-android-v6-calls/SKILL.md +128 -411
  71. package/skills/cometchat-android-v6-compose-components/SKILL.md +84 -194
  72. package/skills/cometchat-android-v6-compose-customization/SKILL.md +66 -411
  73. package/skills/cometchat-android-v6-compose-placement/SKILL.md +154 -237
  74. package/skills/cometchat-android-v6-core/SKILL.md +236 -672
  75. package/skills/cometchat-android-v6-core/references/anti-patterns.md +31 -0
  76. package/skills/cometchat-android-v6-core/references/component-props.md +168 -0
  77. package/skills/cometchat-android-v6-core/references/docs-map.md +153 -0
  78. package/skills/cometchat-android-v6-core/references/layout.md +112 -0
  79. package/skills/cometchat-android-v6-core/references/lifecycle.md +75 -0
  80. package/skills/cometchat-android-v6-core/references/setup-credentials.md +105 -0
  81. package/skills/cometchat-android-v6-core/references/troubleshooting.md +36 -0
  82. package/skills/cometchat-android-v6-events/SKILL.md +46 -184
  83. package/skills/cometchat-android-v6-extensions/SKILL.md +39 -179
  84. package/skills/cometchat-android-v6-features/SKILL.md +74 -143
  85. package/skills/cometchat-android-v6-kotlin-components/SKILL.md +75 -193
  86. package/skills/cometchat-android-v6-kotlin-customization/SKILL.md +67 -419
  87. package/skills/cometchat-android-v6-kotlin-placement/SKILL.md +77 -223
  88. package/skills/cometchat-android-v6-migration/SKILL.md +67 -378
  89. package/skills/cometchat-android-v6-production/SKILL.md +40 -179
  90. package/skills/cometchat-android-v6-push/SKILL.md +39 -289
  91. package/skills/cometchat-android-v6-testing/SKILL.md +50 -265
  92. package/skills/cometchat-android-v6-troubleshooting/SKILL.md +70 -254
  93. package/skills/cometchat-angular-v5-calls/SKILL.md +193 -0
  94. package/skills/cometchat-angular-v5-components/SKILL.md +131 -0
  95. package/skills/cometchat-angular-v5-components/references/catalog.md +111 -0
  96. package/skills/cometchat-angular-v5-components/references/host-composed.md +46 -0
  97. package/skills/cometchat-angular-v5-core/SKILL.md +300 -0
  98. package/skills/cometchat-angular-v5-core/references/anti-patterns.md +49 -0
  99. package/skills/cometchat-angular-v5-core/references/component-props.md +55 -0
  100. package/skills/cometchat-angular-v5-core/references/dependencies.md +66 -0
  101. package/skills/cometchat-angular-v5-core/references/docs-map.md +132 -0
  102. package/skills/cometchat-angular-v5-core/references/layout.md +64 -0
  103. package/skills/cometchat-angular-v5-core/references/lifecycle.md +202 -0
  104. package/skills/cometchat-angular-v5-core/references/setup-credentials.md +137 -0
  105. package/skills/cometchat-angular-v5-core/references/theming.md +70 -0
  106. package/skills/cometchat-angular-v5-core/references/troubleshooting.md +27 -0
  107. package/skills/cometchat-angular-v5-customization/SKILL.md +94 -0
  108. package/skills/cometchat-angular-v5-features/SKILL.md +107 -0
  109. package/skills/cometchat-angular-v5-features/references/custom-messages.md +133 -0
  110. package/skills/cometchat-angular-v5-features/references/formatters.md +28 -0
  111. package/skills/cometchat-angular-v5-features/references/host-composed-extensions.md +85 -0
  112. package/skills/cometchat-angular-v5-migration/SKILL.md +40 -0
  113. package/skills/cometchat-angular-v5-migration/references/migration-guide.md +165 -0
  114. package/skills/cometchat-angular-v5-patterns/SKILL.md +107 -0
  115. package/skills/cometchat-angular-v5-placement/SKILL.md +133 -0
  116. package/skills/cometchat-angular-v5-placement/references/combined-app.md +174 -0
  117. package/skills/cometchat-angular-v5-placement/references/core-surface.md +199 -0
  118. package/skills/cometchat-angular-v5-production/SKILL.md +101 -0
  119. package/skills/cometchat-angular-v5-push/SKILL.md +61 -0
  120. package/skills/cometchat-angular-v5-testing/SKILL.md +112 -0
  121. package/skills/cometchat-angular-v5-troubleshooting/SKILL.md +96 -0
  122. package/skills/cometchat-flutter-v5-sdk/SKILL.md +188 -0
  123. package/skills/cometchat-flutter-v5-sdk/references/doc-corrections.md +55 -0
  124. package/skills/cometchat-flutter-v5-sdk/references/docs-map.md +211 -0
  125. package/skills/cometchat-flutter-v5-sdk/references/platform-notes.md +48 -0
  126. package/skills/cometchat-flutter-v5-sdk/references/transcription.md +87 -0
  127. package/skills/cometchat-flutter-v6-calls/SKILL.md +75 -387
  128. package/skills/cometchat-flutter-v6-components/SKILL.md +88 -361
  129. package/skills/cometchat-flutter-v6-core/SKILL.md +154 -593
  130. package/skills/cometchat-flutter-v6-core/references/anti-patterns.md +55 -0
  131. package/skills/cometchat-flutter-v6-core/references/docs-map.md +143 -0
  132. package/skills/cometchat-flutter-v6-core/references/layout.md +45 -0
  133. package/skills/cometchat-flutter-v6-core/references/lifecycle.md +87 -0
  134. package/skills/cometchat-flutter-v6-core/references/setup-credentials.md +84 -0
  135. package/skills/cometchat-flutter-v6-core/references/troubleshooting.md +26 -0
  136. package/skills/cometchat-flutter-v6-customization/SKILL.md +70 -712
  137. package/skills/cometchat-flutter-v6-events/SKILL.md +79 -174
  138. package/skills/cometchat-flutter-v6-features/SKILL.md +55 -394
  139. package/skills/cometchat-flutter-v6-migration/SKILL.md +68 -367
  140. package/skills/cometchat-flutter-v6-migration/references/migration-guide.md +131 -0
  141. package/skills/cometchat-flutter-v6-patterns/SKILL.md +61 -0
  142. package/skills/cometchat-flutter-v6-placement/SKILL.md +94 -381
  143. package/skills/cometchat-flutter-v6-production/SKILL.md +58 -615
  144. package/skills/cometchat-flutter-v6-push/SKILL.md +46 -455
  145. package/skills/cometchat-flutter-v6-testing/SKILL.md +68 -299
  146. package/skills/cometchat-flutter-v6-troubleshooting/SKILL.md +54 -878
  147. package/skills/cometchat-ios-calls/SKILL.md +105 -511
  148. package/skills/cometchat-ios-components/SKILL.md +44 -834
  149. package/skills/cometchat-ios-core/SKILL.md +181 -1068
  150. package/skills/cometchat-ios-core/references/anti-patterns.md +80 -0
  151. package/skills/cometchat-ios-core/references/docs-map.md +123 -0
  152. package/skills/cometchat-ios-core/references/install.md +23 -0
  153. package/skills/cometchat-ios-core/references/layout.md +186 -0
  154. package/skills/cometchat-ios-core/references/setup-credentials.md +197 -0
  155. package/skills/cometchat-ios-core/references/swiftui.md +91 -0
  156. package/skills/cometchat-ios-core/references/troubleshooting.md +100 -0
  157. package/skills/cometchat-ios-customization/SKILL.md +33 -968
  158. package/skills/cometchat-ios-features/SKILL.md +29 -738
  159. package/skills/cometchat-ios-migration/SKILL.md +39 -0
  160. package/skills/cometchat-ios-placement/SKILL.md +51 -729
  161. package/skills/cometchat-ios-push/SKILL.md +24 -602
  162. package/skills/cometchat-ios-v5-sdk/SKILL.md +161 -0
  163. package/skills/cometchat-ios-v5-sdk/references/docs-map.md +326 -0
  164. package/skills/cometchat-js-v5-sdk/SKILL.md +95 -0
  165. package/skills/cometchat-js-v5-sdk/references/docs-map.md +114 -0
  166. package/skills/cometchat-onboarding/SKILL.md +89 -0
  167. package/skills/cometchat-onboarding/references/archetypes.md +51 -0
  168. package/skills/cometchat-onboarding/references/calling-first.md +77 -0
  169. package/skills/cometchat-onboarding/references/not-in-this-pack.md +8 -0
  170. package/skills/cometchat-onboarding/references/plan-artifact.md +133 -0
  171. package/skills/cometchat-onboarding/references/platforms.md +90 -0
  172. package/skills/cometchat-react-native-bare-patterns/SKILL.md +120 -0
  173. package/skills/cometchat-react-native-calls/SKILL.md +200 -0
  174. package/skills/cometchat-react-native-components/SKILL.md +142 -0
  175. package/skills/cometchat-react-native-core/SKILL.md +313 -0
  176. package/skills/cometchat-react-native-core/references/anti-patterns.md +79 -0
  177. package/skills/cometchat-react-native-core/references/component-props.md +105 -0
  178. package/skills/cometchat-react-native-core/references/dependencies.md +62 -0
  179. package/skills/cometchat-react-native-core/references/docs-map.md +126 -0
  180. package/skills/cometchat-react-native-core/references/layout.md +61 -0
  181. package/skills/cometchat-react-native-core/references/lifecycle.md +64 -0
  182. package/skills/cometchat-react-native-core/references/setup-credentials.md +39 -0
  183. package/skills/cometchat-react-native-customization/SKILL.md +198 -0
  184. package/skills/cometchat-react-native-expo-patterns/SKILL.md +116 -0
  185. package/skills/cometchat-react-native-features/SKILL.md +122 -0
  186. package/skills/cometchat-react-native-migration/SKILL.md +103 -0
  187. package/skills/cometchat-react-native-placement/SKILL.md +158 -0
  188. package/skills/cometchat-react-native-production/SKILL.md +78 -0
  189. package/skills/cometchat-react-native-push/SKILL.md +88 -0
  190. package/skills/cometchat-react-native-sdk/SKILL.md +126 -0
  191. package/skills/cometchat-react-native-sdk/references/method-map.md +239 -0
  192. package/skills/cometchat-react-native-sdk/references/page-map.md +96 -0
  193. package/skills/cometchat-react-native-testing/SKILL.md +94 -0
  194. package/skills/cometchat-react-native-troubleshooting/SKILL.md +116 -0
  195. package/skills/cometchat-react-native-v5-sdk/SKILL.md +150 -0
  196. package/skills/cometchat-react-native-v5-sdk/references/docs-map.md +127 -0
  197. package/skills/cometchat-react-native-v5-sdk/references/ringing-voip.md +369 -0
  198. package/skills/cometchat-react-v7-calls/SKILL.md +75 -0
  199. package/skills/cometchat-react-v7-components/SKILL.md +72 -0
  200. package/skills/cometchat-react-v7-core/SKILL.md +101 -0
  201. package/skills/cometchat-react-v7-core/references/anti-patterns.md +19 -0
  202. package/skills/cometchat-react-v7-core/references/component-props.md +82 -0
  203. package/skills/cometchat-react-v7-core/references/dependencies.md +23 -0
  204. package/skills/cometchat-react-v7-core/references/docs-map.md +117 -0
  205. package/skills/cometchat-react-v7-core/references/i18n-rtl-a11y.md +22 -0
  206. package/skills/cometchat-react-v7-core/references/layout.md +158 -0
  207. package/skills/cometchat-react-v7-core/references/lifecycle.md +74 -0
  208. package/skills/cometchat-react-v7-core/references/setup-credentials.md +58 -0
  209. package/skills/cometchat-react-v7-core/references/ssr.md +11 -0
  210. package/skills/cometchat-react-v7-core/references/theming.md +52 -0
  211. package/skills/cometchat-react-v7-core/references/troubleshooting.md +28 -0
  212. package/skills/cometchat-react-v7-customization/SKILL.md +84 -0
  213. package/skills/cometchat-react-v7-features/SKILL.md +92 -0
  214. package/skills/cometchat-react-v7-migration/SKILL.md +39 -0
  215. package/skills/cometchat-react-v7-migration/references/migration-guide.md +119 -0
  216. package/skills/cometchat-react-v7-patterns/SKILL.md +43 -0
  217. package/skills/cometchat-react-v7-placement/SKILL.md +106 -0
  218. package/skills/cometchat-react-v7-placement/references/recipes.md +354 -0
  219. package/skills/cometchat-react-v7-push/SKILL.md +53 -0
  220. package/test-suite/README.md +70 -0
  221. package/test-suite/catalogs/android-calls-v5.json +830 -0
  222. package/test-suite/catalogs/android-calls-v5.symbols.txt +499 -0
  223. package/test-suite/catalogs/android-v6.json +1646 -0
  224. package/test-suite/catalogs/android-v6.symbols.txt +298 -0
  225. package/test-suite/catalogs/angular-v5.json +7587 -0
  226. package/test-suite/catalogs/flutter-calls-v5.json +196 -0
  227. package/test-suite/catalogs/flutter-calls-v5.symbols.txt +59 -0
  228. package/test-suite/catalogs/flutter-v6.json +651 -0
  229. package/test-suite/catalogs/ios-calls-v5.json +158 -0
  230. package/test-suite/catalogs/ios-calls-v5.symbols.txt +70 -0
  231. package/test-suite/catalogs/ios-v5.json +1383 -0
  232. package/test-suite/catalogs/ios-v5.symbols.txt +699 -0
  233. package/test-suite/catalogs/rn-calls-v5.json +134 -0
  234. package/test-suite/catalogs/rn-sdk-v4.json +672 -0
  235. package/test-suite/catalogs/rn-v5.json +449 -0
  236. package/test-suite/catalogs/sdk-android-v5.json +514 -0
  237. package/test-suite/catalogs/sdk-android-v5.symbols.txt +254 -0
  238. package/test-suite/catalogs/sdk-jsv4.json +800 -0
  239. package/test-suite/catalogs/web-calls-v5.json +195 -0
  240. package/test-suite/catalogs/web-v7.json +1243 -0
  241. package/test-suite/scripts/build-registry.mjs +113 -0
  242. package/test-suite/scripts/catalog-refresh-dart.mjs +151 -0
  243. package/test-suite/scripts/catalog-refresh.mjs +100 -0
  244. package/test-suite/scripts/lint-skills.mjs +909 -0
  245. package/test-suite/scripts/measure-tokens.mjs +169 -0
  246. package/test-suite/scripts/typecheck-fences-dart.mjs +437 -0
  247. package/test-suite/scripts/typecheck-fences-kotlin.mjs +269 -0
  248. package/test-suite/scripts/typecheck-fences.mjs +206 -0
  249. package/test-suite/scripts/verify-catalog.mjs +242 -0
  250. package/test-suite/scripts/verify-contract-fences.mjs +94 -0
  251. package/test-suite/scripts/verify-detection.mjs +178 -0
  252. package/test-suite/scripts/verify-docs-base.mjs +91 -0
  253. package/test-suite/scripts/verify-family-agnostic.mjs +130 -0
  254. package/test-suite/scripts/verify-golden-path.mjs +138 -0
  255. package/test-suite/scripts/verify-oracle-components.mjs +133 -0
  256. package/test-suite/scripts/verify-template-bindings.mjs +148 -0
  257. package/test-suite/typecheck/angular-v5/package.json +21 -0
  258. package/test-suite/typecheck/angular-v5/tsconfig.json +21 -0
  259. package/test-suite/typecheck/flutter-v6/analysis_options.yaml +25 -0
  260. package/test-suite/typecheck/flutter-v6/pubspec.yaml +21 -0
  261. package/test-suite/typecheck/web-v7/package.json +18 -0
  262. package/test-suite/typecheck/web-v7/tsconfig.json +19 -0
  263. package/bin/install.js +0 -1003
  264. package/skills/.claude-plugin/marketplace.json +0 -86
  265. package/skills/cometchat/references/asking-questions.md +0 -48
  266. package/skills/cometchat-a11y/SKILL.md +0 -477
  267. package/skills/cometchat-android-v5/SKILL.md +0 -121
  268. package/skills/cometchat-android-v5-calls/SKILL.md +0 -427
  269. package/skills/cometchat-android-v5-calls/references/README.md +0 -53
  270. package/skills/cometchat-android-v5-calls/references/add-calls-to-existing-chat.md +0 -197
  271. package/skills/cometchat-android-v5-calls/references/audio-controls.md +0 -91
  272. package/skills/cometchat-android-v5-calls/references/background-handling.md +0 -168
  273. package/skills/cometchat-android-v5-calls/references/call-layouts.md +0 -131
  274. package/skills/cometchat-android-v5-calls/references/call-logs.md +0 -113
  275. package/skills/cometchat-android-v5-calls/references/call-session.md +0 -274
  276. package/skills/cometchat-android-v5-calls/references/custom-ui.md +0 -150
  277. package/skills/cometchat-android-v5-calls/references/event-listeners.md +0 -123
  278. package/skills/cometchat-android-v5-calls/references/group-calls.md +0 -205
  279. package/skills/cometchat-android-v5-calls/references/idle-timeout.md +0 -117
  280. package/skills/cometchat-android-v5-calls/references/in-call-chat.md +0 -134
  281. package/skills/cometchat-android-v5-calls/references/join-session.md +0 -120
  282. package/skills/cometchat-android-v5-calls/references/migration-v4-to-v5.md +0 -222
  283. package/skills/cometchat-android-v5-calls/references/participant-management.md +0 -110
  284. package/skills/cometchat-android-v5-calls/references/picture-in-picture.md +0 -106
  285. package/skills/cometchat-android-v5-calls/references/raise-hand.md +0 -248
  286. package/skills/cometchat-android-v5-calls/references/recording.md +0 -101
  287. package/skills/cometchat-android-v5-calls/references/ringing-integration.md +0 -152
  288. package/skills/cometchat-android-v5-calls/references/screen-sharing.md +0 -78
  289. package/skills/cometchat-android-v5-calls/references/server-fcm-voip.md +0 -215
  290. package/skills/cometchat-android-v5-calls/references/session-settings.md +0 -121
  291. package/skills/cometchat-android-v5-calls/references/setup.md +0 -137
  292. package/skills/cometchat-android-v5-calls/references/share-invite.md +0 -156
  293. package/skills/cometchat-android-v5-calls/references/video-controls.md +0 -87
  294. package/skills/cometchat-android-v5-calls/references/voip-calling.md +0 -526
  295. package/skills/cometchat-android-v5-components/SKILL.md +0 -431
  296. package/skills/cometchat-android-v5-core/SKILL.md +0 -486
  297. package/skills/cometchat-android-v5-customization/SKILL.md +0 -469
  298. package/skills/cometchat-android-v5-extensions/SKILL.md +0 -127
  299. package/skills/cometchat-android-v5-features/SKILL.md +0 -131
  300. package/skills/cometchat-android-v5-placement/SKILL.md +0 -277
  301. package/skills/cometchat-android-v5-production/SKILL.md +0 -95
  302. package/skills/cometchat-android-v5-push/SKILL.md +0 -619
  303. package/skills/cometchat-android-v5-testing/SKILL.md +0 -188
  304. package/skills/cometchat-android-v5-theming/SKILL.md +0 -167
  305. package/skills/cometchat-android-v5-troubleshooting/SKILL.md +0 -74
  306. package/skills/cometchat-android-v6/SKILL.md +0 -108
  307. package/skills/cometchat-android-v6-calls/references/add-calls-to-existing-chat.md +0 -97
  308. package/skills/cometchat-android-v6-calls/references/advanced-features.md +0 -87
  309. package/skills/cometchat-android-v6-calls/references/call-layouts.md +0 -100
  310. package/skills/cometchat-android-v6-calls/references/call-session.md +0 -163
  311. package/skills/cometchat-android-v6-calls/references/device-management.md +0 -172
  312. package/skills/cometchat-android-v6-calls/references/group-calls.md +0 -191
  313. package/skills/cometchat-android-v6-calls/references/idle-timeout.md +0 -110
  314. package/skills/cometchat-android-v6-calls/references/in-call-chat.md +0 -141
  315. package/skills/cometchat-android-v6-calls/references/raise-hand.md +0 -188
  316. package/skills/cometchat-android-v6-calls/references/ringing-integration.md +0 -176
  317. package/skills/cometchat-android-v6-calls/references/server-fcm-voip.md +0 -127
  318. package/skills/cometchat-android-v6-calls/references/share-invite.md +0 -105
  319. package/skills/cometchat-android-v6-compose-theming/SKILL.md +0 -250
  320. package/skills/cometchat-android-v6-kotlin-theming/SKILL.md +0 -233
  321. package/skills/cometchat-angular-calls/SKILL.md +0 -378
  322. package/skills/cometchat-angular-calls/references/add-calls-to-existing-chat.md +0 -96
  323. package/skills/cometchat-angular-calls/references/call-layouts.md +0 -123
  324. package/skills/cometchat-angular-calls/references/call-session.md +0 -167
  325. package/skills/cometchat-angular-calls/references/custom-ui.md +0 -239
  326. package/skills/cometchat-angular-calls/references/device-management.md +0 -154
  327. package/skills/cometchat-angular-calls/references/group-calls.md +0 -433
  328. package/skills/cometchat-angular-calls/references/idle-timeout.md +0 -161
  329. package/skills/cometchat-angular-calls/references/in-call-chat.md +0 -148
  330. package/skills/cometchat-angular-calls/references/lazy-loading-pitfalls.md +0 -205
  331. package/skills/cometchat-angular-calls/references/migration-v4-to-v5.md +0 -53
  332. package/skills/cometchat-angular-calls/references/ngzone-and-async-callbacks.md +0 -184
  333. package/skills/cometchat-angular-calls/references/picture-in-picture.md +0 -285
  334. package/skills/cometchat-angular-calls/references/raise-hand.md +0 -172
  335. package/skills/cometchat-angular-calls/references/recording-screen-share.md +0 -260
  336. package/skills/cometchat-angular-calls/references/ringing-integration.md +0 -133
  337. package/skills/cometchat-angular-calls/references/server-web-push-vapid.md +0 -100
  338. package/skills/cometchat-angular-calls/references/share-invite.md +0 -122
  339. package/skills/cometchat-angular-calls/references/virtual-background.md +0 -29
  340. package/skills/cometchat-angular-components/SKILL.md +0 -235
  341. package/skills/cometchat-angular-core/SKILL.md +0 -386
  342. package/skills/cometchat-angular-customization/SKILL.md +0 -616
  343. package/skills/cometchat-angular-features/SKILL.md +0 -329
  344. package/skills/cometchat-angular-patterns/SKILL.md +0 -256
  345. package/skills/cometchat-angular-placement/SKILL.md +0 -314
  346. package/skills/cometchat-angular-production/SKILL.md +0 -564
  347. package/skills/cometchat-angular-push/SKILL.md +0 -389
  348. package/skills/cometchat-angular-testing/SKILL.md +0 -605
  349. package/skills/cometchat-angular-theming/SKILL.md +0 -290
  350. package/skills/cometchat-angular-troubleshooting/SKILL.md +0 -364
  351. package/skills/cometchat-astro-patterns/SKILL.md +0 -708
  352. package/skills/cometchat-calls/SKILL.md +0 -364
  353. package/skills/cometchat-calls/references/use-case-broadcast.md +0 -199
  354. package/skills/cometchat-calls/references/use-case-marketplace.md +0 -157
  355. package/skills/cometchat-calls/references/use-case-support.md +0 -189
  356. package/skills/cometchat-calls/references/use-case-team.md +0 -180
  357. package/skills/cometchat-calls/references/use-case-telehealth.md +0 -153
  358. package/skills/cometchat-components/SKILL.md +0 -1142
  359. package/skills/cometchat-core/SKILL.md +0 -1048
  360. package/skills/cometchat-customization/SKILL.md +0 -580
  361. package/skills/cometchat-customization/references/component-catalog.md +0 -236
  362. package/skills/cometchat-features/SKILL.md +0 -861
  363. package/skills/cometchat-flutter-v5/SKILL.md +0 -173
  364. package/skills/cometchat-flutter-v5-calls/SKILL.md +0 -453
  365. package/skills/cometchat-flutter-v5-calls/references/add-calls-to-existing-chat.md +0 -193
  366. package/skills/cometchat-flutter-v5-calls/references/call-layouts.md +0 -103
  367. package/skills/cometchat-flutter-v5-calls/references/call-session.md +0 -285
  368. package/skills/cometchat-flutter-v5-calls/references/device-management.md +0 -124
  369. package/skills/cometchat-flutter-v5-calls/references/group-calls.md +0 -181
  370. package/skills/cometchat-flutter-v5-calls/references/idle-timeout.md +0 -99
  371. package/skills/cometchat-flutter-v5-calls/references/in-call-chat.md +0 -135
  372. package/skills/cometchat-flutter-v5-calls/references/migration-v4-to-v5.md +0 -210
  373. package/skills/cometchat-flutter-v5-calls/references/raise-hand.md +0 -255
  374. package/skills/cometchat-flutter-v5-calls/references/ringing-integration.md +0 -196
  375. package/skills/cometchat-flutter-v5-calls/references/server-push-bridge.md +0 -101
  376. package/skills/cometchat-flutter-v5-calls/references/share-invite.md +0 -148
  377. package/skills/cometchat-flutter-v5-conversations/SKILL.md +0 -118
  378. package/skills/cometchat-flutter-v5-core/SKILL.md +0 -239
  379. package/skills/cometchat-flutter-v5-customization/SKILL.md +0 -358
  380. package/skills/cometchat-flutter-v5-events/SKILL.md +0 -156
  381. package/skills/cometchat-flutter-v5-messages/SKILL.md +0 -259
  382. package/skills/cometchat-flutter-v5-production/SKILL.md +0 -216
  383. package/skills/cometchat-flutter-v5-push/SKILL.md +0 -285
  384. package/skills/cometchat-flutter-v5-testing/SKILL.md +0 -401
  385. package/skills/cometchat-flutter-v5-theming/SKILL.md +0 -161
  386. package/skills/cometchat-flutter-v5-troubleshooting/SKILL.md +0 -130
  387. package/skills/cometchat-flutter-v5-users-groups/SKILL.md +0 -152
  388. package/skills/cometchat-flutter-v6/SKILL.md +0 -446
  389. package/skills/cometchat-flutter-v6-calls/references/add-calls-to-existing-chat.md +0 -136
  390. package/skills/cometchat-flutter-v6-calls/references/advanced-features.md +0 -89
  391. package/skills/cometchat-flutter-v6-calls/references/call-layouts.md +0 -105
  392. package/skills/cometchat-flutter-v6-calls/references/call-session.md +0 -229
  393. package/skills/cometchat-flutter-v6-calls/references/device-management.md +0 -105
  394. package/skills/cometchat-flutter-v6-calls/references/group-calls.md +0 -190
  395. package/skills/cometchat-flutter-v6-calls/references/idle-timeout.md +0 -88
  396. package/skills/cometchat-flutter-v6-calls/references/in-call-chat.md +0 -125
  397. package/skills/cometchat-flutter-v6-calls/references/raise-hand.md +0 -275
  398. package/skills/cometchat-flutter-v6-calls/references/ringing-integration.md +0 -171
  399. package/skills/cometchat-flutter-v6-calls/references/server-push-bridge.md +0 -93
  400. package/skills/cometchat-flutter-v6-calls/references/share-invite.md +0 -102
  401. package/skills/cometchat-flutter-v6-conversations/SKILL.md +0 -238
  402. package/skills/cometchat-flutter-v6-messages/SKILL.md +0 -384
  403. package/skills/cometchat-flutter-v6-theming/SKILL.md +0 -293
  404. package/skills/cometchat-flutter-v6-users-groups/SKILL.md +0 -224
  405. package/skills/cometchat-i18n/SKILL.md +0 -419
  406. package/skills/cometchat-ios/SKILL.md +0 -325
  407. package/skills/cometchat-ios-calls/references/add-calls-to-existing-chat.md +0 -174
  408. package/skills/cometchat-ios-calls/references/audio-modes-and-controls.md +0 -45
  409. package/skills/cometchat-ios-calls/references/avaudiosession-routing.md +0 -188
  410. package/skills/cometchat-ios-calls/references/call-layouts.md +0 -76
  411. package/skills/cometchat-ios-calls/references/call-session.md +0 -218
  412. package/skills/cometchat-ios-calls/references/callkit-and-pushkit.md +0 -357
  413. package/skills/cometchat-ios-calls/references/custom-ui.md +0 -322
  414. package/skills/cometchat-ios-calls/references/device-management.md +0 -171
  415. package/skills/cometchat-ios-calls/references/group-calls.md +0 -359
  416. package/skills/cometchat-ios-calls/references/idle-timeout.md +0 -184
  417. package/skills/cometchat-ios-calls/references/in-call-chat.md +0 -179
  418. package/skills/cometchat-ios-calls/references/migration-v4-to-v5.md +0 -196
  419. package/skills/cometchat-ios-calls/references/picture-in-picture.md +0 -246
  420. package/skills/cometchat-ios-calls/references/raise-hand.md +0 -26
  421. package/skills/cometchat-ios-calls/references/recording-screen-share.md +0 -252
  422. package/skills/cometchat-ios-calls/references/ringing-integration.md +0 -143
  423. package/skills/cometchat-ios-calls/references/server-apns-pushkit.md +0 -267
  424. package/skills/cometchat-ios-calls/references/share-invite.md +0 -148
  425. package/skills/cometchat-ios-calls/references/swiftui-uikit-hosting.md +0 -246
  426. package/skills/cometchat-ios-calls/references/voip-cert-setup.md +0 -166
  427. package/skills/cometchat-ios-production/SKILL.md +0 -738
  428. package/skills/cometchat-ios-testing/SKILL.md +0 -376
  429. package/skills/cometchat-ios-theming/SKILL.md +0 -667
  430. package/skills/cometchat-ios-troubleshooting/SKILL.md +0 -1003
  431. package/skills/cometchat-native-bare-patterns/SKILL.md +0 -550
  432. package/skills/cometchat-native-calls/SKILL.md +0 -669
  433. package/skills/cometchat-native-calls/references/add-calls-to-existing-chat.md +0 -203
  434. package/skills/cometchat-native-calls/references/call-layouts.md +0 -125
  435. package/skills/cometchat-native-calls/references/call-session.md +0 -182
  436. package/skills/cometchat-native-calls/references/custom-ui.md +0 -254
  437. package/skills/cometchat-native-calls/references/device-management.md +0 -158
  438. package/skills/cometchat-native-calls/references/expo-vs-bare.md +0 -179
  439. package/skills/cometchat-native-calls/references/group-calls.md +0 -296
  440. package/skills/cometchat-native-calls/references/idle-timeout.md +0 -128
  441. package/skills/cometchat-native-calls/references/in-call-chat.md +0 -145
  442. package/skills/cometchat-native-calls/references/migration-v4-to-v5.md +0 -72
  443. package/skills/cometchat-native-calls/references/picture-in-picture.md +0 -276
  444. package/skills/cometchat-native-calls/references/raise-hand.md +0 -205
  445. package/skills/cometchat-native-calls/references/recording-screen-share.md +0 -169
  446. package/skills/cometchat-native-calls/references/ringing-integration.md +0 -118
  447. package/skills/cometchat-native-calls/references/server-push-bridge.md +0 -135
  448. package/skills/cometchat-native-calls/references/server-push-payloads.md +0 -193
  449. package/skills/cometchat-native-calls/references/share-invite.md +0 -146
  450. package/skills/cometchat-native-calls/references/voip-push-end-to-end.md +0 -319
  451. package/skills/cometchat-native-components/SKILL.md +0 -628
  452. package/skills/cometchat-native-core/SKILL.md +0 -679
  453. package/skills/cometchat-native-customization/SKILL.md +0 -716
  454. package/skills/cometchat-native-expo-patterns/SKILL.md +0 -552
  455. package/skills/cometchat-native-features/SKILL.md +0 -638
  456. package/skills/cometchat-native-placement/SKILL.md +0 -509
  457. package/skills/cometchat-native-production/SKILL.md +0 -700
  458. package/skills/cometchat-native-push/SKILL.md +0 -594
  459. package/skills/cometchat-native-testing/SKILL.md +0 -582
  460. package/skills/cometchat-native-theming/SKILL.md +0 -681
  461. package/skills/cometchat-native-troubleshooting/SKILL.md +0 -501
  462. package/skills/cometchat-nextjs-patterns/SKILL.md +0 -899
  463. package/skills/cometchat-placement/SKILL.md +0 -1360
  464. package/skills/cometchat-production/SKILL.md +0 -1027
  465. package/skills/cometchat-react-calls/SKILL.md +0 -749
  466. package/skills/cometchat-react-calls/references/add-calls-to-existing-chat.md +0 -146
  467. package/skills/cometchat-react-calls/references/call-layouts.md +0 -160
  468. package/skills/cometchat-react-calls/references/call-session.md +0 -235
  469. package/skills/cometchat-react-calls/references/custom-ui.md +0 -247
  470. package/skills/cometchat-react-calls/references/device-management.md +0 -210
  471. package/skills/cometchat-react-calls/references/group-calls.md +0 -257
  472. package/skills/cometchat-react-calls/references/idle-timeout.md +0 -188
  473. package/skills/cometchat-react-calls/references/in-call-chat.md +0 -212
  474. package/skills/cometchat-react-calls/references/migration-v4-to-v5.md +0 -170
  475. package/skills/cometchat-react-calls/references/picture-in-picture.md +0 -245
  476. package/skills/cometchat-react-calls/references/raise-hand.md +0 -238
  477. package/skills/cometchat-react-calls/references/recording-screen-share.md +0 -144
  478. package/skills/cometchat-react-calls/references/ringing-integration.md +0 -255
  479. package/skills/cometchat-react-calls/references/server-web-push-vapid.md +0 -241
  480. package/skills/cometchat-react-calls/references/share-invite.md +0 -175
  481. package/skills/cometchat-react-calls/references/testing-calls-on-web.md +0 -216
  482. package/skills/cometchat-react-calls/references/virtual-background.md +0 -32
  483. package/skills/cometchat-react-calls/references/voip-and-web-push.md +0 -165
  484. package/skills/cometchat-react-patterns/SKILL.md +0 -628
  485. package/skills/cometchat-react-push/SKILL.md +0 -634
  486. package/skills/cometchat-react-router-patterns/SKILL.md +0 -758
  487. package/skills/cometchat-react-testing/SKILL.md +0 -413
  488. package/skills/cometchat-theming/SKILL.md +0 -498
  489. package/skills/cometchat-troubleshooting/SKILL.md +0 -294
@@ -1,582 +0,0 @@
1
- ---
2
- name: cometchat-native-testing
3
- description: "Testing patterns for CometChat React Native — Jest + React Native Testing Library setup, mocking the UI Kit + SDK, testing custom bubbles / headers / composer actions, snapshot pitfalls, E2E with Detox vs Maestro, and CI integration. Covers what to test vs what to skip."
4
- license: "MIT"
5
- compatibility: "Node.js >=18; React Native >=0.70; @cometchat/chat-uikit-react-native ^5; Jest ^29; @testing-library/react-native ^12"
6
- metadata:
7
- author: "CometChat"
8
- version: "3.0.0"
9
- tags: "cometchat react-native testing jest rnt detox maestro ci"
10
- ---
11
-
12
- ## Purpose
13
-
14
- Teaches Claude how to write and run tests against a CometChat React Native integration. Covers:
15
-
16
- - Unit / component tests with Jest + React Native Testing Library (RNTL)
17
- - How to mock `@cometchat/chat-uikit-react-native` and `@cometchat/chat-sdk-react-native` (both pull in native modules that fail in Node's jest-expo / jest-react-native environments)
18
- - Testing custom bubbles, headers, composer actions, empty states
19
- - Snapshot testing pitfalls specific to theme-driven components
20
- - E2E with Detox (iOS + Android native drivers) vs Maestro (declarative YAML)
21
- - Which tests catch real regressions vs which are flaky churn
22
-
23
- Ground truth: `@cometchat/chat-uikit-react-native@5.3.3`'s example jest config (`examples/SampleAppWithPushNotifications/jest.config.js`) and the standard RN testing toolkit docs (callstack.github.io/react-native-testing-library, wix.github.io/Detox, maestro.mobile.dev). **Official docs:** https://www.cometchat.com/docs/ui-kit/react-native/overview · **Docs MCP:** `claude mcp add --transport http cometchat-docs https://www.cometchat.com/docs/mcp` (or fetch the URL directly without MCP).
24
-
25
- ---
26
-
27
- ## 1. What to test, what to skip
28
-
29
- Not every test is worth the maintenance cost. A few rules of thumb:
30
-
31
- **Worth testing:**
32
- - Custom components you wrote (custom bubble, custom header, empty-state view)
33
- - Navigation logic triggered by CometChat events (push tap → deep-link)
34
- - Message render logic with text formatters
35
- - Your provider chain wires correctly (four-wrapper order, init called, login called)
36
- - Production auth token refresh + retry logic
37
- - User-ID mapping (Firebase UID → CometChat UID)
38
-
39
- **Skip:**
40
- - UI Kit internals — that's the UI Kit's responsibility. Testing `<CometChatConversations>` renders a list is testing CometChat's code.
41
- - Realtime delivery (A sends, B receives) — requires real servers; flaky and slow; use manual QA or E2E with real accounts.
42
- - Presence / typing indicators — race-prone, depend on socket state.
43
- - Snapshot tests of CometChat components — theme changes, UI Kit updates, and `cometchat-native-theming` edits all churn the snapshots with no real signal.
44
- - Native module calls (camera, picker) — Jest's mocks already return stubs; testing them verifies the mock, not the integration.
45
-
46
- The golden rule: if the test fails because **your code** changed, it's valuable. If it fails because **the UI Kit updated** or **a network blip happened**, it's churn.
47
-
48
- ---
49
-
50
- ## 2. Toolchain
51
-
52
- | Layer | Tool | Why |
53
- |---|---|---|
54
- | Unit + component tests | Jest + `@testing-library/react-native` | The RN default. Preset handles metro module resolution. |
55
- | Mocking | Jest `moduleNameMapper` + manual mocks | UI Kit imports native modules — can't run real components in a Node env. |
56
- | Snapshot | Jest's built-in | Use sparingly — see §7 |
57
- | E2E | Maestro OR Detox | See §10 for tradeoff |
58
- | CI | GitHub Actions / EAS / Bitrise | §11 |
59
-
60
- Install:
61
- ```bash
62
- # Bare RN
63
- npm install --save-dev jest @testing-library/react-native @testing-library/jest-native \
64
- react-test-renderer @types/jest
65
-
66
- # Expo
67
- npx expo install --dev jest-expo @testing-library/react-native @testing-library/jest-native \
68
- react-test-renderer
69
- ```
70
-
71
- `jest-expo` wraps `react-native` preset with Expo-specific module resolution (handles `expo-modules-core`, `expo-router`, etc.).
72
-
73
- ---
74
-
75
- ## 3. Jest config
76
-
77
- **Bare RN** — `jest.config.js`:
78
- ```js
79
- module.exports = {
80
- preset: "react-native",
81
- setupFilesAfterEach: ["<rootDir>/jest.setup.ts"],
82
- transformIgnorePatterns: [
83
- "node_modules/(?!(?:react-native|@react-native|@react-navigation|" +
84
- "@cometchat/chat-uikit-react-native|@cometchat/chat-sdk-react-native|" +
85
- "react-native-.+|@notifee/react-native)/)",
86
- ],
87
- moduleNameMapper: {
88
- "^@cometchat/chat-uikit-react-native$": "<rootDir>/__mocks__/cometchat-uikit.ts",
89
- "^@cometchat/chat-sdk-react-native$": "<rootDir>/__mocks__/cometchat-sdk.ts",
90
- },
91
- };
92
- ```
93
-
94
- **Expo** — `jest.config.js`:
95
- ```js
96
- module.exports = {
97
- preset: "jest-expo",
98
- setupFilesAfterEach: ["<rootDir>/jest.setup.ts"],
99
- transformIgnorePatterns: [
100
- "node_modules/(?!(?:(jest-)?react-native|@react-native|expo(nent)?|@expo(nent)?/.*|" +
101
- "@expo-google-fonts/.*|react-navigation|@react-navigation/.*|" +
102
- "@cometchat/chat-uikit-react-native|@cometchat/chat-sdk-react-native|" +
103
- "@unimodules/.*|unimodules|sentry-expo|native-base|react-native-svg)/)",
104
- ],
105
- moduleNameMapper: {
106
- "^@cometchat/chat-uikit-react-native$": "<rootDir>/__mocks__/cometchat-uikit.ts",
107
- "^@cometchat/chat-sdk-react-native$": "<rootDir>/__mocks__/cometchat-sdk.ts",
108
- },
109
- };
110
- ```
111
-
112
- **`transformIgnorePatterns` matters.** By default Jest doesn't transform anything under `node_modules`, but CometChat ships ES module source. Without the pattern, Jest errors with `SyntaxError: Unexpected token 'export'`. The UI Kit + SDK names must be in the allow list.
113
-
114
- ---
115
-
116
- ## 4. Global setup — `jest.setup.ts`
117
-
118
- ```ts
119
- import "@testing-library/jest-native/extend-expect";
120
-
121
- // Silence RN's "AnimatedValue" warning noise in tests
122
- jest.mock("react-native/Libraries/Animated/NativeAnimatedHelper");
123
-
124
- // Mock native modules that the UI Kit pulls in
125
- jest.mock("react-native-gesture-handler", () => {
126
- const View = require("react-native/Libraries/Components/View/View");
127
- return {
128
- GestureHandlerRootView: View,
129
- PanGestureHandler: View,
130
- TapGestureHandler: View,
131
- State: {},
132
- Directions: {},
133
- };
134
- });
135
-
136
- // react-native-reanimated is NOT a peer dep of the kit. Only add this
137
- // mock if your app installs reanimated for its own animation needs.
138
- // jest.mock("react-native-reanimated", () =>
139
- // require("react-native-reanimated/mock"),
140
- // );
141
-
142
- jest.mock("react-native-safe-area-context", () => ({
143
- SafeAreaProvider: ({ children }: { children: React.ReactNode }) => children,
144
- SafeAreaView: ({ children }: { children: React.ReactNode }) => children,
145
- useSafeAreaInsets: () => ({ top: 0, right: 0, bottom: 0, left: 0 }),
146
- }));
147
-
148
- // Silence console.warn from legacy components in tests — re-enable locally if debugging
149
- const originalWarn = console.warn;
150
- console.warn = (...args: unknown[]) => {
151
- if (
152
- typeof args[0] === "string" &&
153
- /componentWill|Unable to find|act\(\)/i.test(args[0])
154
- ) {
155
- return;
156
- }
157
- originalWarn(...args);
158
- };
159
- ```
160
-
161
- ---
162
-
163
- ## 5. Mocking the UI Kit
164
-
165
- The UI Kit's top-level components (`CometChatConversations`, `CometChatMessageList`, etc.) wire socket listeners, call native modules, and render FlatLists with async data. Rendering them in Jest is more effort than value.
166
-
167
- **Strategy: mock them as transparent Views that forward children.** This lets your tests verify your integration (are the right props being passed? does the right component mount in the right screen?) without pulling in the real implementation.
168
-
169
- `__mocks__/cometchat-uikit.ts`:
170
- ```ts
171
- import React from "react";
172
- import { View } from "react-native";
173
-
174
- const passThrough = (name: string) =>
175
- React.forwardRef<unknown, Record<string, unknown>>((props, ref) => {
176
- const { children, ...rest } = props as { children?: React.ReactNode };
177
- return (
178
- <View ref={ref as never} testID={name} {...rest}>
179
- {children}
180
- </View>
181
- );
182
- });
183
-
184
- export const CometChatUIKit = {
185
- init: jest.fn(async () => undefined),
186
- login: jest.fn(async () => ({ getUid: () => "cometchat-uid-1" })),
187
- logout: jest.fn(async () => undefined),
188
- getLoggedInUser: jest.fn(async () => ({ getUid: () => "cometchat-uid-1" })),
189
- };
190
-
191
- // NOTE: the v5 RN UI Kit does NOT export `UIKitSettingsBuilder` — `init()` takes
192
- // a flat `UIKitSettings` object. No mock needed for a builder that doesn't exist.
193
-
194
- export const CometChatThemeProvider = passThrough("CometChatThemeProvider");
195
- export const CometChatI18nProvider = passThrough("CometChatI18nProvider");
196
- export const CometChatConversations = passThrough("CometChatConversations");
197
- export const CometChatMessageList = passThrough("CometChatMessageList");
198
- export const CometChatMessageComposer = passThrough("CometChatMessageComposer");
199
- export const CometChatMessageHeader = passThrough("CometChatMessageHeader");
200
- export const CometChatUsers = passThrough("CometChatUsers");
201
- export const CometChatGroups = passThrough("CometChatGroups");
202
- export const CometChatIncomingCall = passThrough("CometChatIncomingCall");
203
- export const CometChatOutgoingCall = passThrough("CometChatOutgoingCall");
204
-
205
- export const CometChatUIEventHandler = {
206
- addUIListener: jest.fn(),
207
- removeListener: jest.fn(),
208
- };
209
- export const CometChatUIEvents = {};
210
-
211
- export const useTheme = () => ({
212
- color: {
213
- primary: "#6852D6",
214
- background1: "#FFFFFF",
215
- textPrimary: "#141414",
216
- },
217
- typography: {
218
- heading1: { fontFamily: "System", fontSize: 28 },
219
- body1: { fontFamily: "System", fontSize: 16 },
220
- },
221
- });
222
- ```
223
-
224
- `__mocks__/cometchat-sdk.ts`:
225
- ```ts
226
- export const CometChat = {
227
- getUser: jest.fn(async (uid: string) => ({ getUid: () => uid, getName: () => "Test User" })),
228
- getGroup: jest.fn(async (guid: string) => ({ getGuid: () => guid, getName: () => "Test Group" })),
229
- addMessageListener: jest.fn(),
230
- removeMessageListener: jest.fn(),
231
- };
232
-
233
- export const CometChatNotifications = {
234
- PushPlatforms: {
235
- FCM_REACT_NATIVE_ANDROID: "fcm-android",
236
- FCM_REACT_NATIVE_IOS: "fcm-ios",
237
- APNS_REACT_NATIVE_DEVICE: "apns-device",
238
- APNS_REACT_NATIVE_VOIP: "apns-voip",
239
- },
240
- registerPushToken: jest.fn(async () => ({ success: true })),
241
- unregisterPushToken: jest.fn(async () => ({ success: true })),
242
- };
243
- ```
244
-
245
- Every real `<CometChatMessageList>` in your code renders as `<View testID="CometChatMessageList">` in tests. You can assert on `testID` + the props you passed.
246
-
247
- ---
248
-
249
- ## 6. Testing a custom component
250
-
251
- Example — a custom chat screen that renders `<CometChatMessageList>` for a specific user:
252
-
253
- ```tsx
254
- // src/screens/MessagesScreen.tsx
255
- import { CometChat } from "@cometchat/chat-sdk-react-native";
256
- import { CometChatMessageList } from "@cometchat/chat-uikit-react-native";
257
- import { useEffect, useState } from "react";
258
-
259
- export function MessagesScreen({ uid }: { uid: string }) {
260
- const [user, setUser] = useState<CometChat.User | null>(null);
261
-
262
- useEffect(() => {
263
- CometChat.getUser(uid).then(setUser);
264
- }, [uid]);
265
-
266
- if (!user) return null;
267
-
268
- return <CometChatMessageList user={user} hideReplyInThreadOption />;
269
- }
270
- ```
271
-
272
- Test:
273
- ```tsx
274
- // src/screens/__tests__/MessagesScreen.test.tsx
275
- import { render, waitFor } from "@testing-library/react-native";
276
- import { CometChat } from "@cometchat/chat-sdk-react-native";
277
- import { MessagesScreen } from "../MessagesScreen";
278
-
279
- test("fetches user then renders MessageList", async () => {
280
- const { getByTestId, queryByTestId } = render(<MessagesScreen uid="alice" />);
281
-
282
- // Before fetch resolves — nothing rendered
283
- expect(queryByTestId("CometChatMessageList")).toBeNull();
284
-
285
- // After fetch resolves — list renders with user prop
286
- await waitFor(() => expect(getByTestId("CometChatMessageList")).toBeTruthy());
287
-
288
- expect(CometChat.getUser).toHaveBeenCalledWith("alice");
289
- });
290
-
291
- test("passes hideReplyInThreadOption to MessageList", async () => {
292
- const { findByTestId } = render(<MessagesScreen uid="alice" />);
293
- const list = await findByTestId("CometChatMessageList");
294
-
295
- // The mocked component stored props on the View — check them
296
- expect(list.props.hideReplyInThreadOption).toBe(true);
297
- });
298
- ```
299
-
300
- The second test is the valuable one — it guards the mandatory `hideReplyInThreadOption` flag (hard rule §4 in `cometchat-native-core`) against a future refactor dropping it.
301
-
302
- ---
303
-
304
- ## 7. Snapshot testing — use sparingly
305
-
306
- **Do snapshot:**
307
- - Pure presentational components with no UI Kit dependency
308
- - Custom bubble renderers with fixed inputs
309
- - Data transforms (message → display string)
310
-
311
- **Don't snapshot:**
312
- - Anything wrapped in `CometChatThemeProvider` — a token change churns snapshots with no regression meaning.
313
- - Components rendering UI Kit internals — even with mocks, prop churn from UI Kit updates churns your snapshots.
314
- - Navigators / full screens — too many variables.
315
-
316
- ```tsx
317
- // Good — isolated, theme-free
318
- test("formatTimestamp(1700000000000) matches snapshot", () => {
319
- expect(formatTimestamp(1_700_000_000_000)).toMatchInlineSnapshot(`"Tue, 14 Nov 2023"`);
320
- });
321
- ```
322
-
323
- If a snapshot test churns on every UI Kit update, delete it — it's net-negative.
324
-
325
- ---
326
-
327
- ## 8. Testing the provider chain
328
-
329
- The four-wrapper chain (hard rule §3 in `cometchat-native-core`) is one of the most common regressions AI edits introduce. Test that all four wrappers render:
330
-
331
- ```tsx
332
- // src/App.test.tsx
333
- import { render } from "@testing-library/react-native";
334
- import App from "./App";
335
-
336
- test("App mounts all four CometChat wrappers", () => {
337
- const { getByTestId } = render(<App />);
338
-
339
- // The mocked wrappers each render a View with testID matching their name
340
- expect(getByTestId("CometChatThemeProvider")).toBeTruthy();
341
- // Note: GestureHandlerRootView and SafeAreaProvider are pass-through Views
342
- // without distinct testIDs in our setup, so assert via presence of children
343
- // OR extend the mock in jest.setup.ts to add testIDs.
344
- });
345
- ```
346
-
347
- For the `GestureHandlerRootView` + `SafeAreaProvider` assertion, extend their mocks in `jest.setup.ts` to add `testID`:
348
-
349
- ```ts
350
- jest.mock("react-native-gesture-handler", () => {
351
- const { View } = require("react-native");
352
- return {
353
- GestureHandlerRootView: (props: any) =>
354
- require("react").createElement(View, { ...props, testID: "GestureHandlerRootView" }),
355
- // ...
356
- };
357
- });
358
- ```
359
-
360
- ---
361
-
362
- ## 9. Testing login lifecycle
363
-
364
- The `ensureLoggedIn` helper (hard rule §2 in `cometchat-native-core`) must handle concurrent calls safely:
365
-
366
- ```tsx
367
- // src/providers/__tests__/CometChatProvider.test.tsx
368
- import { CometChatUIKit } from "@cometchat/chat-uikit-react-native";
369
- import { ensureLoggedIn } from "../CometChatProvider";
370
-
371
- beforeEach(() => {
372
- jest.clearAllMocks();
373
- });
374
-
375
- test("concurrent ensureLoggedIn calls only invoke login once", async () => {
376
- (CometChatUIKit.getLoggedInUser as jest.Mock).mockResolvedValue(null);
377
-
378
- const results = await Promise.all([
379
- ensureLoggedIn("alice"),
380
- ensureLoggedIn("alice"),
381
- ensureLoggedIn("alice"),
382
- ]);
383
-
384
- expect(CometChatUIKit.login).toHaveBeenCalledTimes(1);
385
- });
386
-
387
- test("already-logged-in skips login entirely", async () => {
388
- (CometChatUIKit.getLoggedInUser as jest.Mock).mockResolvedValue({
389
- getUid: () => "alice",
390
- });
391
-
392
- await ensureLoggedIn("alice");
393
-
394
- expect(CometChatUIKit.login).not.toHaveBeenCalled();
395
- });
396
- ```
397
-
398
- These two tests catch the most common `ensureLoggedIn` breakages — dropping the module-level promise guard, or forgetting the `getLoggedInUser` short-circuit.
399
-
400
- ---
401
-
402
- ## 10. E2E — Detox vs Maestro
403
-
404
- Two choices for end-to-end. Different philosophies.
405
-
406
- | | Detox | Maestro |
407
- |---|---|---|
408
- | Config | Native drivers (iOS + Android). `.detoxrc.js`. | YAML flows. Single binary. |
409
- | Language | JavaScript / TypeScript | YAML |
410
- | Setup | Heavy — Xcode build, Detox CLI, Jest runner | Light — brew install, run CLI |
411
- | CI | Slow (full native build each run) | Fast (reuses install) |
412
- | Speed | Flaky in CI, reliable locally | Fast, stable |
413
- | iOS + Android parity | Yes | Yes |
414
- | Cloud runs | No native cloud support | Maestro Cloud (paid) |
415
- | Learning curve | Steep if you don't know RN internals | Low |
416
-
417
- **Recommendation: Maestro for most teams.** Flows are readable, runs in seconds, CI-friendly. Detox makes sense if you have existing Jest infrastructure and want E2E to live in the same runner.
418
-
419
- ### Maestro flow (recommended)
420
-
421
- `.maestro/chat-happy-path.yaml`:
422
- ```yaml
423
- appId: com.yourapp.mobile
424
- ---
425
- - launchApp
426
- - tapOn: "Login"
427
- - inputText: "cometchat-uid-1"
428
- - tapOn: "Continue"
429
- - assertVisible: "Messages"
430
- - tapOn: "Messages"
431
- - assertVisible: "Conversations"
432
- - tapOn: id: "conversation-cometchat-uid-2"
433
- - inputText: "Hello from Maestro"
434
- - tapOn: id: "send-button"
435
- - assertVisible: "Hello from Maestro"
436
- ```
437
-
438
- Run:
439
- ```bash
440
- maestro test .maestro/chat-happy-path.yaml
441
- ```
442
-
443
- Needs your RN `<CometChatMessageComposer>` to expose `testID="send-button"` — the UI Kit supports this via the `sendButtonStyle` slot or via a Custom view template.
444
-
445
- ### Detox
446
-
447
- `.detoxrc.js` (abbreviated):
448
- ```js
449
- module.exports = {
450
- testRunner: { args: { $0: "jest", config: "e2e/jest.config.js" } },
451
- apps: {
452
- "ios.debug": {
453
- type: "ios.app",
454
- binaryPath: "ios/build/Build/Products/Debug-iphonesimulator/YourApp.app",
455
- },
456
- },
457
- devices: { simulator: { type: "ios.simulator", device: { type: "iPhone 15" } } },
458
- configurations: {
459
- "ios.sim.debug": { device: "simulator", app: "ios.debug" },
460
- },
461
- };
462
- ```
463
-
464
- Test:
465
- ```ts
466
- // e2e/chat.test.ts
467
- describe("chat flow", () => {
468
- beforeAll(async () => {
469
- await device.launchApp();
470
- });
471
-
472
- it("sends a message", async () => {
473
- await element(by.text("Login")).tap();
474
- await element(by.id("uid-input")).typeText("cometchat-uid-1");
475
- await element(by.text("Continue")).tap();
476
- await element(by.text("Messages")).tap();
477
- await element(by.id("conversation-cometchat-uid-2")).tap();
478
- await element(by.id("message-input")).typeText("Hello from Detox");
479
- await element(by.id("send-button")).tap();
480
- await expect(element(by.text("Hello from Detox"))).toBeVisible();
481
- });
482
- });
483
- ```
484
-
485
- Detox needs a native dev build first (`detox build --configuration ios.sim.debug`) — slow in CI.
486
-
487
- ### What NOT to E2E
488
-
489
- - Login with a real auth provider (Firebase / Clerk). Mock the auth callback or use a test account with a fixed password.
490
- - Real push delivery. Fire via a CI-only fake push tool, or skip entirely.
491
- - Group calls with real peers. Use two simulators only if Detox/Maestro supports it (both do, but flaky).
492
-
493
- ---
494
-
495
- ## 11. CI integration
496
-
497
- ### GitHub Actions — Jest on every push
498
-
499
- `.github/workflows/test.yml`:
500
- ```yaml
501
- name: test
502
- on: [push, pull_request]
503
- jobs:
504
- jest:
505
- runs-on: ubuntu-latest
506
- steps:
507
- - uses: actions/checkout@v4
508
- - uses: actions/setup-node@v4
509
- with:
510
- node-version: 20
511
- cache: npm
512
- - run: npm ci
513
- - run: npx tsc --noEmit
514
- - run: npm test -- --ci --coverage
515
- ```
516
-
517
- ### Maestro in CI
518
-
519
- Maestro runs on macOS runners (iOS) or Linux runners with Android emulators. The `mobile-dev-inc/action-maestro-cloud` action simplifies it:
520
-
521
- ```yaml
522
- e2e:
523
- runs-on: macos-14
524
- steps:
525
- - uses: actions/checkout@v4
526
- - name: Build iOS
527
- run: |
528
- cd ios
529
- pod install
530
- xcodebuild -workspace YourApp.xcworkspace -scheme YourApp \
531
- -sdk iphonesimulator -configuration Debug \
532
- -derivedDataPath build
533
- - name: Run Maestro flows
534
- uses: mobile-dev-inc/action-maestro-cloud@v1
535
- with:
536
- api-key: ${{ secrets.MAESTRO_CLOUD_API_KEY }}
537
- app-file: ios/build/Build/Products/Debug-iphonesimulator/YourApp.app
538
- workspace: .maestro
539
- ```
540
-
541
- ### EAS + Expo
542
-
543
- If you're on EAS, `eas build --profile preview` followed by `maestro test` against the preview build works for CI smoke tests. EAS Test (paid) orchestrates Maestro runs across multiple devices.
544
-
545
- ---
546
-
547
- ## 12. Common failure modes
548
-
549
- | Symptom | Cause | Fix |
550
- |---|---|---|
551
- | `SyntaxError: Unexpected token 'export'` | Jest not transforming a UI Kit or SDK file | Add package name to `transformIgnorePatterns` allow list |
552
- | `TypeError: Cannot read properties of undefined (reading 'Directions')` | Gesture handler native module missing | Mock in `jest.setup.ts` (see §4) |
553
- | Tests hang for 30s+ | Real WebSocket or fetch not mocked | Add `jest.useFakeTimers()` + mock `fetch` |
554
- | Snapshot fails after no code change | Theme token update churned output | Either delete the snapshot (§7) or run `--updateSnapshot` |
555
- | `useInsertionEffect must not schedule updates` warning | React Navigation dev warning, harmless in tests | Silence in `jest.setup.ts` (see §4) |
556
- | `Could not find React Testing Library matchers` | `@testing-library/jest-native` not extended | `import "@testing-library/jest-native/extend-expect"` in setup |
557
- | Maestro "app not installed" | Bundle ID mismatch or simulator not booted | `xcrun simctl boot "iPhone 15"`, verify `appId` in YAML |
558
- | Detox "Cannot find element" | `testID` not set on UI Kit component | Add via slot view template or custom view; don't rely on text matching |
559
-
560
- ---
561
-
562
- ## 13. Hard rules
563
-
564
- - **Mock the UI Kit and SDK in every test file.** Running real components in Node fails on native modules and wastes CI time even when it works.
565
- - **Don't test what the UI Kit already tests.** You're responsible for YOUR code — bubbles, headers, navigation, auth mapping. UI Kit internals are CometChat's job.
566
- - **Skip realtime and presence.** They require real servers and produce flaky suites. Use manual QA or E2E with real test accounts.
567
- - **Assert on `testID` and prop values, not on pixel output.** Theme changes, font metrics, and platform differences all churn pixel-level assertions.
568
- - **Keep snapshot tests scoped.** Use for pure data transforms and isolated presentational code. Never snapshot a full screen.
569
- - **E2E tests run against a dev build, not Jest.** Don't try to test real CometChat flow in Jest — it belongs in Detox/Maestro.
570
-
571
- ---
572
-
573
- ## 14. Skill routing
574
-
575
- | This skill | Covers |
576
- |---|---|
577
- | `cometchat-native-testing` (this) | Jest + RNTL setup, mocking UI Kit + SDK, component / provider / login tests, Detox vs Maestro for E2E, CI |
578
- | `cometchat-native-core` | The provider chain + login concurrency patterns you're testing |
579
- | `cometchat-native-components` | Component catalog — what props to assert in tests |
580
- | `cometchat-native-customization` | DataSource decorators + custom views — test per §6 |
581
- | `cometchat-native-push` | Push tests (mock `CometChatNotifications`); E2E tap-to-deep-link needs a real device |
582
- | `cometchat-native-troubleshooting` | Metro cache / pod install / native module errors (often surface first in a CI run) |