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

kobotoolbox / kpi / 26601979292
82%
master: 76%

Build:
Build:
LAST BUILD BRANCH: dev-1680-usernames
DEFAULT BRANCH: master
Ran 28 May 2026 09:04PM UTC
Jobs 10
Files 881
Run time 3min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

28 May 2026 09:00PM UTC coverage: 81.691%. Remained the same
26601979292

push

github

web-flow
feat(bulkProcessing): dismissible info banner DEV-1402 (#7092)

### 📣 Summary

On the Data Table, we show a dismissible info banner when bulk
processing is actively running and at least one active job was started
by a different user, so data changes are easier to anticipate. This is
hidden behind feature flag.

### 💭 Notes

This PR adds a new Bulk Processing banner in the Data Table and wires
the display logic to active bulk-action ownership.

The banner appears only when:

1. Bulk processing feature flag is enabled.
2. There is at least one active bulk action (pending or in progress).
3. At least one active action was created by someone other than the
current logged-in user.

It is dismissible per user and per form for the current browser session,
and includes singular/plural copy for 1 vs multiple active jobs.

This PR also includes Storybook coverage for banner scenarios and unit
tests for hook logic.

Changes here:
- New banner component and rendering (`BulkProcessingBanner.tsx`):
- Adds a Mantine alert-style banner in the table banner container (atop
`table.tsx`)
- Banner supports dismiss via `sessionStorage` key scoped by user
(safely) + asset
   - Message handles singular/plural active-job wording
- Bulk-action domain logic extraction (`useDataTableBulkActions.ts`):
   - Introduces hook returning:
     - `activeBulkActions`
     - `hasActiveBulkActionsCreatedByAnotherUser`
     - `currentUsername`
- Keeps `DataTableWrapper` cleaner and makes banner condition testable
   - Simple unit tests in `useDataTableBulkActions.tests.ts`
- Covers feature-flag off, active status filtering, other-user
detection, and session-pending/no-username behavior
- Storybook (created `BulkProcessingBanner.stories.tsx` and
`bulkProcessingBanner.storiesUtils.tsx`, updated
`DataTableWrapper.stories.tsx`):
- Adds focused stories and a shared decorator utility that clears
banner-dismissal session keys, so stories remain easy to retest
- Close button styling follow-up:
- Re... (continued)

8893 of 12052 branches covered (73.79%)

29175 of 35714 relevant lines covered (81.69%)

5.59 hits per line

Coverage Regressions

Lines Coverage ∆ File
226
26.4
-63.48% kpi/serializers/v2/asset_permission_assignment.py
167
66.45
-27.33% kpi/serializers/v2/asset.py
151
37.46
-50.5% kpi/views/v2/data.py
105
47.45
-17.3% kpi/deployment_backends/openrosa_backend.py
98
61.89
-26.49% kpi/views/v2/asset.py
87
29.29
-62.14% kpi/serializers/v2/asset_file.py
70
37.21
-40.7% kpi/serializers/current_user.py
66
31.62
-56.41% kpi/serializers/v2/export_task.py
66
26.85
-61.11% kpi/serializers/v2/paired_data.py
63
34.55
-57.27% kpi/views/v2/paired_data.py
56
27.68
-50.0% kpi/utils/models.py
50
44.12
-49.02% kpi/views/v2/environment.py
42
49.47
-44.21% kpi/views/v2/asset_permission_assignment.py
41
43.7
-30.37% kpi/views/v2/asset_snapshot.py
32
66.91
-7.9% kpi/deployment_backends/base_backend.py
32
50.75
-47.76% kpi/views/v2/asset_export_settings.py
27
83.0
-13.5% kpi/utils/xml.py
26
27.5
-65.0% kpi/serializers/v2/attachment_delete.py
25
31.11
-55.56% kpi/serializers/v2/data.py
24
71.43
-28.57% kpi/serializers/v2/service_usage.py
24
59.32
-40.68% kpi/views/v2/export_task.py
23
40.48
-54.76% kpi/serializers/v2/deployment.py
22
50.98
-43.14% kpi/serializers/v2/asset_snapshot.py
22
55.56
-40.74% kpi/serializers/v2/permission.py
21
38.33
-35.0% kpi/serializers/v2/asset_export_settings.py
19
58.42
-9.41% kpi/filters.py
19
33.33
-63.33% kpi/utils/paired_data.py
19
51.06
-40.43% kpi/views/v2/import_task.py
19
49.25
-28.36% kpi/views/v2/user.py
18
66.4
-14.4% kpi/models/paired_data.py
17
44.12
-50.0% kpi/utils/rename_xls_sheet.py
16
62.9
-25.81% kpi/views/v2/attachment.py
15
69.23
-19.23% kpi/authentication.py
15
55.81
-34.88% kpi/backends.py
13
75.94
-9.77% kpi/paginators.py
13
74.18
-6.1% kpi/permissions.py
13
40.0
-43.33% kpi/serializers/v2/asset_counts.py
13
79.05
-12.38% kpi/utils/object_permission.py
13
33.33
-48.15% kpi/utils/prerequisite_migration_checker.py
13
30.43
-56.52% kpi/utils/private_storage.py
11
85.29
-10.78% kpi/models/asset_file.py
11
70.18
-19.3% kpi/utils/mailer.py
11
75.0
-21.15% kpi/views/v2/asset_file.py
10
44.0
-40.0% kobo/apps/stripe/signals.py
10
78.85
-19.23% kpi/serializers/v2/user.py
10
47.69
-15.38% kpi/utils/hash.py
10
63.33
-33.33% kpi/views/v2/asset_version.py
9
77.07
-4.39% kpi/utils/mongo_helper.py
8
58.51
-8.51% kobo/apps/stripe/utils/billing_dates.py
8
77.78
-8.08% kpi/password_validation.py
8
85.71
-11.43% kpi/utils/cache.py
7
75.0
-6.03% kpi/models/asset_snapshot.py
7
52.94
-41.18% kpi/serializers/v2/reports.py
7
61.9
-16.67% kpi/utils/urls.py
7
74.07
-25.93% kpi/views/v2/attachment_delete.py
7
75.86
-24.14% kpi/views/v2/tag.py
6
91.56
-1.05% kpi/models/asset.py
6
77.87
-1.0% kpi/models/import_export_task.py
6
80.0
-20.0% kpi/serializers/v2/tag.py
6
65.87
-4.76% kpi/utils/autoname.py
5
76.47
-4.2% kobo/apps/stripe/utils/subscription_limits.py
5
82.35
-14.71% kobo/apps/user_reports/views.py
5
62.07
-5.75% kpi/tasks.py
5
76.0
-20.0% kpi/views/v2/asset_submission_counts.py
5
61.54
-38.46% kpi/views/v2/logout.py
5
73.91
-21.74% kpi/views/v2/user_asset_subscription.py
4
76.19
-19.05% kpi/serializers/v2/user_asset_subscription.py
4
20.0
-80.0% kpi/utils/placeholders.py
3
86.27
-5.88% kpi/context_processors.py
3
87.61
-2.65% kpi/exceptions.py
3
70.0
-30.0% kpi/fields/serializer_method_file.py
3
78.57
-10.71% kpi/utils/submission.py
3
30.67
-4.0% kpi/utils/two_database_configuration_checker.py
3
75.0
-25.0% kpi/views/v2/open_rosa.py
3
84.21
-15.79% kpi/views/v2/permission.py
2
60.26
-2.56% kpi/deployment_backends/kc_access/utils.py
2
92.73
-3.64% kpi/signals.py
2
96.55
-2.3% kpi/utils/asset_content_analyzer.py
2
85.92
-2.82% kpi/utils/sluggify.py
2
42.17
-2.41% kpi/utils/storage.py
2
88.24
-11.76% kpi/views/v2/service_usage.py
1
70.97
-3.23% kpi/admin.py
1
96.67
-3.33% kpi/fields/kpi_uid.py
1
75.0
-25.0% kpi/fields/read_only.py
1
82.61
-4.35% kpi/fields/relative_prefix_hyperlinked_related.py
1
80.95
-4.76% kpi/fields/writable_json.py
1
94.15
-0.28% kpi/mixins/object_permission.py
1
66.67
-8.33% kpi/mixins/validation_password_permission.py
1
91.3
-4.35% kpi/serializers/v2/asset_version.py
1
62.5
-12.5% kpi/utils/datetime.py
1
93.94
-1.01% kpi/utils/django_orm_helper.py
1
81.25
-6.25% kpi/utils/drf_exceptions.py
1
50.0
-50.0% kpi/utils/export_task.py
1
75.0
-25.0% kpi/utils/gravatar_url.py
1
96.67
-3.33% kpi/utils/project_views.py
1
94.12
-5.88% kpi/utils/strings.py
1
98.06
-0.97% kpi/utils/usage_calculator.py
1
84.62
-7.69% kpi/versioning.py
1
55.56
-2.22% kpi/views/current_user.py
1
42.5
-2.5% kpi/views/__init__.py
1
93.33
-6.67% kpi/views/v2/asset_usage.py
Jobs
ID Job ID Ran Files Coverage
1 26601979292.1 28 May 2026 09:04PM UTC 877
50.64
2 26601979292.2 28 May 2026 09:05PM UTC 877
54.04
3 26601979292.3 28 May 2026 09:05PM UTC 877
45.28
4 26601979292.4 28 May 2026 09:06PM UTC 879
46.68
5 26601979292.5 28 May 2026 09:06PM UTC 879
55.34
6 26601979292.6 28 May 2026 09:07PM UTC 879
66.38
7 26601979292.7 28 May 2026 09:07PM UTC 877
59.93
8 26601979292.8 28 May 2026 09:08PM UTC 879
52.02
9 26601979292.9 28 May 2026 09:08PM UTC 879
61.12
10 26601979292.10 28 May 2026 09:09PM UTC 881
68.78
Source Files on build 26601979292
  • Tree
  • List 881
  • Changed 0
  • Source Changed 0
  • Coverage Changed 0
Coverage ∆ File Lines Relevant Covered Missed Hits/Line Branch Hits Branch Misses
  • Back to Repo
  • 88731972 on github
  • Prev Build on main (#26593269122)
  • Next Build on main (#26641046948)
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