cometchat-flutter-v6-testing — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited cometchat-flutter-v6-testing (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Ground truth: kit symbols are catalog-verified against 6.1.0. Test tooling (flutter_test,integration_test,mocktail) is standard Flutter, not CometChat API.
cometchat-flutter-v6-core — install, credentials, init→login→render. This skill ASSUMES it.cometchat-flutter-v6-patterns — how init/login is gated, which is what your tests have to work around.The user ASKS for tests. Building a feature does not imply writing tests (RULES.md) — do not volunteer a test suite as part of "add chat".
flutter pub add --dev mocktail integration_testflutter_test ships with Flutter.
Do not test the UI Kit. CometChatConversations rendering a list, CometChatMessageList appending a message, receipts, typing — all CometChat's own tested surface. Asserting on the kit's internals produces slow tests that break on every kit upgrade and prove nothing about YOUR app.
Test what is yours:
| Worth testing | Why |
|---|---|
| The init/login gate | Your logic. Does a chat route stay unreachable until login resolves? |
| Navigation wiring | onItemTap pushes the right screen with the right user/group. |
| Target plumbing | The thread screen receives parentMessageId and the same user/group — the silent-never-sends trap. |
| Config selection | Prod flavour has no Auth Key; the right App ID per flavour. |
| Your own slots | Custom listItemView / subtitleView widgets render as expected. |
| Error paths | onError surfaces something to the user instead of a blank screen. |
A CometChat widget expects an initialized, logged-in SDK. In a unit/widget test there is none, so:
// A seam: your screen depends on a builder, so tests substitute a stub for the kit widget.
import 'package:cometchat_chat_uikit/cometchat_chat_uikit.dart';
import 'package:flutter/material.dart';
typedef ConversationsBuilder = Widget Function(void Function(Conversation) onTap);
class ChatsScreen extends StatelessWidget {
final ConversationsBuilder builder;
final void Function(Conversation) onOpen;
const ChatsScreen({super.key, required this.builder, required this.onOpen});
@override
Widget build(BuildContext context) => Scaffold(body: SafeArea(child: builder(onOpen)));
}
// production wiring
Widget realConversations(void Function(Conversation) onTap) =>
CometChatConversations(onItemTap: onTap);In the test, pass a builder returning a plain ListView and assert that tapping a row calls onOpen with the right conversation — that is YOUR logic, tested fast and without a network.
integration_test)The only place a real end-to-end chat flow can be asserted, because it needs a real init/login.
cometchat-uid-1…), never production data.Run flutter analyze + unit/widget tests on every PR — they need no credentials. Gate integration tests behind a job that has the test-app secrets, and let them be non-blocking if the environment is flaky; a red build from a missing fixture teaches people to ignore CI.
RULES.md).Unit/widget tests run with no network and no credentials; integration tests pass against the test app; flutter analyze is clean; nothing in the suite asserts on CometChat's internal rendering.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.