agentsclimarketplace

Cometchat android v5 testing

Skill cometchat/cometchat-skills/skills/cometchat-android-v5-testing

Add CometChat chat & messaging and voice & video calls to any React, Next.js, React Native, Angular, Android, iOS, or Flutter project through your AI coding agent. Works with Claude Code, Cursor, Codex, VS Code Copilot, Windsurf, Cline, Kiro, and 50+ more agents.

Install
npx -y skills add cometchat/cometchat-skills --skill cometchat-android-v5-testing

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

One thing to look at

  • no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.

What its author says it does

Copied from the file, not written here

Testing patterns for CometChat Android — JUnit + Mockito setup, mocking the SDK, Espresso UI tests, E2E with Maestro, and CI integration.

The file declares its own license as MIT. That is the author’s claim about this one file, and it is not the same thing as the license GitHub reports for the repository, which is listed with the other numbers below.

SKILL.md

5.7 KB, ~1.4k tokens by cl100k_base, as published. Nobody here has run it

Ground truth: com.cometchat:chat-uikit-android:5.x (legacy/maintenance-only; +calls-sdk-android:5.x) — resolved AAR (javap) + ui-kit/android. Official docs: https://www.cometchat.com/docs/ui-kit/android/overview · Docs MCP: claude mcp add --transport http cometchat-docs https://www.cometchat.com/docs/mcp (or fetch the URL directly without MCP). Verify symbols against the installed package/source before relying on them.

Companion skills: cometchat-android-v5-core covers init/login patterns you're testing; cometchat-android-v5-components covers component APIs to assert against.

Purpose

This skill teaches how to write and run tests against a CometChat Android integration. Covers unit tests with JUnit + Mockito/MockK, UI tests with Espresso, E2E with Maestro, and CI integration.


Use this skill when

  • "Add tests for my CometChat integration"
  • "How do I mock CometChat in tests?"
  • "Set up E2E testing"
  • "CI pipeline for chat tests"

Do not use this skill when

  • Setting up the integration → use cometchat-android-v5-core
  • Diagnosing runtime issues → use cometchat-android-v5-troubleshooting

1. What to test vs what to skip

Worth testing:

  • Custom components you wrote (custom bubbles, headers, empty states)
  • Navigation logic triggered by CometChat events (push tap → deep-link)
  • Init/login lifecycle (init before login, already-logged-in skip)
  • Production auth token refresh logic
  • User-ID mapping (your auth system → CometChat UID)

Skip:

  • UIKit internals — that's CometChat's responsibility
  • Realtime delivery (A sends, B receives) — requires real servers, flaky
  • Presence/typing indicators — race-prone
  • Snapshot tests of CometChat components — theme changes churn them

Golden rule: if the test fails because YOUR code changed, it's valuable. If it fails because the UIKit updated, it's churn.


2. Toolchain

LayerToolWhy
Unit testsJUnit 4 + Mockito / MockKStandard Android unit testing
Component testsRobolectricRun Android component tests without emulator
UI testsEspressoAndroid's native UI testing framework
E2EMaestroDeclarative YAML flows, fast, stable
CIGitHub Actions / BitriseAutomated test runs

3. Mocking the CometChat SDK

Java (Mockito):

@RunWith(MockitoJUnitRunner.class)
public class ChatViewModelTest {
    @Test
    public void testLoginCallsInit() {
        try (MockedStatic<CometChatUIKit> mocked = mockStatic(CometChatUIKit.class)) {
            mocked.when(CometChatUIKit::getLoggedInUser).thenReturn(null);
            mocked.when(CometChatUIKit::isSDKInitialized).thenReturn(true);

            // Test your ViewModel or helper that calls login
            // Verify init was called before login
        }
    }
}

Kotlin (MockK):

@Test
fun `already logged in skips login`() {
    mockkStatic(CometChatUIKit::class)
    every { CometChatUIKit.getLoggedInUser() } returns mockk<User>()

    // Your code should skip login
    verify(exactly = 0) { CometChatUIKit.login(any(), any()) }

    unmockkAll()
}

4. Espresso UI tests

@RunWith(AndroidJUnit4.class)
public class MessagesActivityTest {
    @Rule
    public ActivityScenarioRule<MessagesActivity> rule =
        new ActivityScenarioRule<>(MessagesActivity.class);

    @Test
    public void messageListIsDisplayed() {
        onView(withId(R.id.messageList)).check(matches(isDisplayed()));
    }

    @Test
    public void composerIsDisplayed() {
        onView(withId(R.id.composer)).check(matches(isDisplayed()));
    }
}

5. E2E with Maestro

.maestro/chat-happy-path.yaml:

appId: com.yourapp.android
---
- launchApp
- tapOn: "Login"
- inputText: "cometchat-uid-1"
- tapOn: "Continue"
- assertVisible: "Chats"
- tapOn:
    id: "conversations"
    index: 0
- assertVisible: "Type a message"
- inputText: "Hello from Maestro"
- tapOn:
    id: "send_button"
- assertVisible: "Hello from Maestro"

Run: maestro test .maestro/chat-happy-path.yaml


6. CI integration

# .github/workflows/test.yml
name: test
on: [push, pull_request]
jobs:
  unit-tests:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-java@v4
        with:
          java-version: 17
          distribution: temurin
      - run: ./gradlew test

7. Common failure modes

SymptomCauseFix
NoClassDefFoundError: CometChatSDK not mockedAdd Mockito/MockK mock for static methods
Espresso test hangsAsync CometChat operationRegister IdlingResource
Tests pass locally, fail on CIEmulator not bootedPin emulator API level in CI
IllegalStateException: not initializedinit() not called in test setupMock isSDKInitialized() to return true

Hard rules

  • Mock the SDK in every unit test. Running real CometChat requires network + servers.
  • Don't test UIKit internals. You're responsible for YOUR code.
  • Skip realtime tests. They require real servers and produce flaky suites.
  • Assert on view IDs and state, not pixels. Theme changes churn pixel assertions.
  • E2E runs on emulator/device, not JUnit. Don't test real CometChat flow in unit tests.

Keep looking

Skills are one crate of 328,083. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.