• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

agentic-dev-library / thumbcode / 21933739570

12 Feb 2026 04:37AM UTC coverage: 42.308% (+14.6%) from 27.702%
21933739570

push

github

web-flow
test: add 130 new tests, coverage from 34% to 51% (#118)

* test(tabs): add screen tests for Dashboard, Chat, Projects, Settings

Each test verifies the screen renders without crashing and key UI
elements are present in the rendered tree, using toJSON() + string
matching to work around jest-expo/react-native-web text query issues.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* test(onboarding): add screen tests for all 5 onboarding screens

Tests for welcome, api-keys, github-auth, create-project, and
complete screens verifying render and key UI element presence.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* test(settings): add screen tests for settings and detail screens

Tests for credentials, agents, editor settings screens plus
agent/[id] and project/[id] detail screens. Detail screens mock
useLocalSearchParams to test both found and not-found branches.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* test: enable E2E tests, add integration and package tests

- Remove skip markers from e2e/web/dashboard.spec.ts and interactions.spec.ts
  (Dashboard, Tab Navigation, Full Flow, Dashboard/Agents/Chat Interactions)
- Add integration tests for auth flow (credential lifecycle, biometrics,
  format validation, secret masking) and chat flow (thread lifecycle,
  multi-thread isolation, events, approval workflow, search)
- Add config package tests (constants, environment, feature flags)
- Add UI package tests (Text, Button, Card, Spinner, Alert, theme tokens,
  organic styles)
- Update jest.config.js to include config and ui packages in testMatch
  and collectCoverageFrom

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>

749 of 2371 branches covered (31.59%)

Branch coverage included in aggregate %.

1608 of 3200 relevant lines covered (50.25%)

19.88 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

22.22
/packages/core/src/git/GitService.ts
1
/**
2
 * Git Service - Unified Facade
3
 *
4
 * Thin facade that delegates to focused Git service modules.
5
 * Maintains backward-compatible API for all consumers.
6
 *
7
 * For new code, consider importing the focused services directly:
8
 * - GitCloneService: clone, fetch, pull, push, remotes, init
9
 * - GitBranchService: branches, checkout
10
 * - GitCommitService: commit, stage, unstage, log
11
 * - GitDiffService: diff, status
12
 */
13

14
import { GitBranchService } from './GitBranchService';
15
import { GitCloneService } from './GitCloneService';
16
import { GitCommitService } from './GitCommitService';
17
import { GitDiffService } from './GitDiffService';
18

19
import type {
20
  BranchInfo,
21
  BranchOptions,
22
  CheckoutOptions,
23
  CloneOptions,
24
  CommitInfo,
25
  CommitOptions,
26
  DiffResult,
27
  FetchOptions,
28
  FileStatus,
29
  GitResult,
30
  PullOptions,
31
  PushOptions,
32
  RemoteInfo,
33
  StageOptions,
34
} from './types';
35

36
class GitServiceClass {
37
  // Clone & Remote operations (delegated to GitCloneService)
38
  getRepoBaseDir(): string {
39
    return GitCloneService.getRepoBaseDir();
×
40
  }
41

42
  clone(options: CloneOptions): Promise<GitResult<void>> {
43
    return GitCloneService.clone(options);
×
44
  }
45

46
  fetch(options: FetchOptions): Promise<GitResult<void>> {
47
    return GitCloneService.fetch(options);
×
48
  }
49

50
  pull(options: PullOptions): Promise<GitResult<void>> {
51
    return GitCloneService.pull(options);
×
52
  }
53

54
  push(options: PushOptions): Promise<GitResult<void>> {
55
    return GitCloneService.push(options);
×
56
  }
57

58
  listRemotes(dir: string): Promise<GitResult<RemoteInfo[]>> {
59
    return GitCloneService.listRemotes(dir);
×
60
  }
61

62
  addRemote(dir: string, name: string, url: string): Promise<GitResult<void>> {
63
    return GitCloneService.addRemote(dir, name, url);
×
64
  }
65

66
  deleteRemote(dir: string, name: string): Promise<GitResult<void>> {
67
    return GitCloneService.deleteRemote(dir, name);
×
68
  }
69

70
  init(dir: string, defaultBranch = 'main'): Promise<GitResult<void>> {
1✔
71
    return GitCloneService.init(dir, defaultBranch);
1✔
72
  }
73

74
  isRepository(dir: string): Promise<boolean> {
75
    return GitCloneService.isRepository(dir);
×
76
  }
77

78
  getHead(dir: string): Promise<GitResult<string>> {
79
    return GitCloneService.getHead(dir);
×
80
  }
81

82
  cleanup(dir: string): Promise<GitResult<void>> {
83
    return GitCloneService.cleanup(dir);
×
84
  }
85

86
  // Branch operations (delegated to GitBranchService)
87
  createBranch(options: BranchOptions): Promise<GitResult<void>> {
88
    return GitBranchService.createBranch(options);
×
89
  }
90

91
  deleteBranch(dir: string, branch: string): Promise<GitResult<void>> {
92
    return GitBranchService.deleteBranch(dir, branch);
×
93
  }
94

95
  checkout(options: CheckoutOptions): Promise<GitResult<void>> {
96
    return GitBranchService.checkout(options);
×
97
  }
98

99
  currentBranch(dir: string): Promise<GitResult<string>> {
100
    return GitBranchService.currentBranch(dir);
×
101
  }
102

103
  listBranches(dir: string, remote?: string): Promise<GitResult<BranchInfo[]>> {
104
    return GitBranchService.listBranches(dir, remote);
×
105
  }
106

107
  // Commit operations (delegated to GitCommitService)
108
  commit(options: CommitOptions): Promise<GitResult<string>> {
109
    return GitCommitService.commit(options);
2✔
110
  }
111

112
  stage(options: StageOptions): Promise<GitResult<void>> {
113
    return GitCommitService.stage(options);
2✔
114
  }
115

116
  unstage(options: StageOptions): Promise<GitResult<void>> {
117
    return GitCommitService.unstage(options);
×
118
  }
119

120
  log(dir: string, depth = 20): Promise<GitResult<CommitInfo[]>> {
×
121
    return GitCommitService.log(dir, depth);
×
122
  }
123

124
  // Diff operations (delegated to GitDiffService)
125
  status(dir: string): Promise<GitResult<FileStatus[]>> {
126
    return GitDiffService.status(dir);
×
127
  }
128

129
  diff(dir: string, commitA: string, commitB: string): Promise<GitResult<DiffResult>> {
130
    return GitDiffService.diff(dir, commitA, commitB);
1✔
131
  }
132

133
  diffWorkingDir(dir: string): Promise<GitResult<DiffResult>> {
134
    return GitDiffService.diffWorkingDir(dir);
×
135
  }
136
}
137

138
// Export singleton instance
139
export const GitService = new GitServiceClass();
2✔
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc