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

kobotoolbox / kpi / 27817635233
82%
master: 76%

Build:
Build:
LAST BUILD BRANCH: main
DEFAULT BRANCH: master
Ran 19 Jun 2026 09:35AM UTC
Jobs 11
Files 887
Run time 2min
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

19 Jun 2026 09:31AM UTC coverage: 81.612% (+0.005%) from 81.607%
27817635233

push

github

web-flow
feat(bulkProcessing): in progress banner and request toast DEV-2274 (#7156)

### 📣 Summary

Show bulk processing banner immediatelly after bulk job is created. Show
additional activity log link for users who created jobs. Also show a
toast on bulk job creation success.

### 💭 Notes

Changes here:

**BulkProcessingBanner component:**
- Shows banner for everyone when bulk jobs are running (previously only
showed for "other users")
- Adds "Click here to monitor your progress or to cancel this job" link
to activity log for users who created at least one active job
- Banner dismissal persists in session storage per asset, re-appears
when new bulk job starts

**BulkTranscriptionModal:**
- Success toast
- Invalidates `useAssetsAdvancedFeaturesBulkActionsList` query on
success to trigger banner display

**useDataTableBulkActions hook:**
- Renamed boolean from `hasActiveBulkActionsCreatedByAnotherUser` to
`hasActiveBulkActionsCreatedByCurrentUser` (flipped logic)
- Now returns `activeBulkActions` array instead of just count
- Updated tests to cover new behavior

**Table layout:**
- Both `BulkProcessingBanner` and `LimitNotifications` (OverLimitBanner)
now sit in a Mantine Stack with consistent spacing
- Fixed OverLimitBanner margin; now Stack handles spacing

**TextWithInternalLink component:**
- New component for replacing square brackets in translations with
`Link` component for internal navigation

**Storybook:**
- Added 7 new DataTableWrapper stories: ProcessingColumnAndBanner,
ProcessingAndLimitsBannersTogether, plus 5 limit banner scenarios (to
make it easier to test the styling tweaks)
- Created `organizationServiceUsage.factory.ts` with DRY presets
(storageWarning, storageExceeded, submissionExceeded, bothExceeded)
- Created `subscription.mocks.ts` for MSW mock (needed because
subscriptionStore uses jQuery AJAX which MSW doesn't intercept)
- Added decorator to manually initialize subscriptionStore singleton
with proper cleanup between stories
- Deep me... (continued)

9066 of 12306 branches covered (73.67%)

29791 of 36503 relevant lines covered (81.61%)

6.15 hits per line

Coverage Regressions

Lines Coverage ∆ File
311
28.01
-51.24% kpi/models/import_export_task.py
229
42.27
-55.31% kobo/apps/audit_log/models.py
211
26.4
-59.27% kpi/serializers/v2/asset_permission_assignment.py
194
58.52
-34.09% kpi/models/asset.py
193
0.0
-93.69% kobo/apps/mass_emails/tasks.py
185
14.34
-66.31% kobo/apps/subsequences/tasks.py
175
30.03
-55.91% kobo/apps/kobo_scim/views.py
166
30.61
-56.46% kobo/apps/subsequences/models.py
165
37.56
-27.18% kpi/deployment_backends/openrosa_backend.py
150
40.73
-54.55% kobo/apps/organizations/serializers.py
136
14.8
-69.39% kobo/apps/subsequences/utils/versioning.py
133
36.93
-43.46% kpi/views/v2/data.py
132
29.35
-65.67% kobo/apps/project_ownership/models/transfer.py
126
31.44
-64.95% kobo/apps/subsequences/actions/automatic_bedrock_qual.py
124
35.69
-48.63% kobo/apps/subsequences/actions/base.py
117
64.3
-18.48% kpi/serializers/v2/asset.py
110
29.95
-53.14% kobo/apps/subsequences/serializers.py
107
15.7
-47.98% kobo/apps/superuser_stats/tasks.py
92
0.0
-80.0% kobo/apps/hook/models/service_definition_interface.py
91
19.51
-73.98% kobo/apps/subsequences/actions/qual.py
89
25.71
-42.38% kpi/filters.py
88
70.3
-23.98% kpi/mixins/object_permission.py
87
16.67
-58.0% kobo/apps/project_ownership/utils.py
86
46.99
-51.81% kobo/apps/organizations/views.py
86
26.12
-64.18% kobo/apps/trash_bin/utils/trash.py
82
54.57
-20.25% kpi/deployment_backends/base_backend.py
81
0.0
-93.1% kobo/apps/stripe/serializers.py
78
32.52
-63.41% kobo/apps/accounts/forms.py
75
21.6
-60.0% kobo/apps/stripe/utils/subscription_limits.py
75
0.0
-41.9% kobo/apps/stripe/views.py
71
20.58
-29.22% kobo/apps/subsequences/integrations/google/google_translate.py
70
37.21
-40.7% kpi/serializers/current_user.py
68
41.03
-43.59% kobo/apps/organizations/admin/organization_user.py
68
35.34
-51.13% kpi/paginators.py
65
12.36
-73.03% kobo/apps/reports/report_data.py
64
22.35
-75.29% kobo/apps/subsequences/actions/mixins.py
63
0.0
-51.64% kobo/apps/stripe/models.py
62
27.87
-50.82% kobo/apps/project_ownership/tasks.py
62
19.77
-24.03% kobo/apps/subsequences/integrations/google/google_transcribe.py
60
26.85
-55.56% kpi/serializers/v2/paired_data.py
59
0.0
-95.16% kobo/apps/long_running_migrations/jobs/0015_fix_duplicate_organizations.py
58
31.46
-65.17% kpi/deployment_backends/mock_backend.py
58
29.29
-41.43% kpi/serializers/v2/asset_file.py
57
35.2
-45.6% kpi/models/paired_data.py
57
28.28
-57.58% kpi/password_validation.py
55
31.62
-47.01% kpi/serializers/v2/export_task.py
54
18.67
-72.0% kobo/apps/data_collectors/utils.py
54
27.96
-58.06% kobo/apps/hook/tasks.py
52
42.86
-49.52% kpi/views/v2/environment.py
51
34.52
-60.71% kobo/apps/audit_log/base_views.py
51
58.82
-37.5% kobo/apps/audit_log/signals.py
51
54.55
-30.91% kobo/apps/organizations/models.py
51
37.07
-43.97% kpi/models/asset_snapshot.py
49
20.21
-52.13% kobo/apps/stripe/utils/billing_dates.py
46
41.0
-46.0% kobo/apps/accounts/mfa/models.py
43
31.43
-40.95% kobo/apps/organizations/admin/organization.py
43
30.0
-61.43% kobo/apps/organizations/permissions.py
43
53.92
-42.16% kpi/models/asset_file.py
42
0.0
-79.25% kobo/apps/user_reports/tasks.py
41
32.81
-64.06% kobo/apps/trash_bin/utils/account.py
40
37.14
-57.14% hub/utils/i18n.py
40
36.11
-55.56% kobo/apps/long_running_migrations/models.py
40
51.72
-45.98% kobo/apps/subsequences/views.py
40
61.89
-10.81% kpi/views/v2/asset.py
39
67.97
-30.47% kobo/apps/audit_log/views.py
39
63.5
-19.5% kpi/utils/xml.py
38
49.47
-40.0% kpi/views/v2/asset_permission_assignment.py
37
51.27
-18.78% kpi/mixins/formpack_xlsform_utils.py
36
0.0
-97.3% kobo/apps/accounts/adapter.py
36
43.06
-50.0% kobo/apps/project_ownership/serializers/invite.py
35
51.22
-42.68% kobo/apps/accounts/mfa/views.py
34
64.65
-15.81% kpi/permissions.py
33
0.0
-97.06% kobo/apps/accounts/mfa/adapter.py
31
26.42
-58.49% kobo/apps/trash_bin/utils/project.py
30
46.88
-31.25% kobo/apps/data_collectors/admin.py
29
0.0
-100.0% kobo/apps/audit_log/tasks.py
29
39.44
-40.85% kobo/apps/help/serializers.py
29
55.36
-25.89% kobo/apps/openrosa/apps/logger/utils/instance.py
28
31.91
-59.57% kobo/apps/accounts/mfa/serializers.py
27
48.33
-45.0% kobo/apps/languages/models/transcription.py
27
82.97
-4.95% kobo/apps/openrosa/libs/utils/logger_tools.py
26
44.0
-52.0% kobo/apps/data_collectors/authentication.py
26
32.97
-28.57% kobo/apps/mass_emails/user_queries.py
26
77.37
-13.68% kobo/apps/openrosa/apps/api/viewsets/xform_list_api.py
26
45.6
-20.8% kobo/apps/project_views/views.py
25
30.77
-32.05% kpi/deployment_backends/kc_access/utils.py
25
31.11
-55.56% kpi/serializers/v2/data.py
25
74.76
-24.27% kpi/utils/usage_calculator.py
24
0.0
-100.0% kobo/apps/hook/services/service_json.py
24
27.63
-31.58% kobo/apps/subsequences/integrations/google/rate_limit.py
24
40.0
-53.33% kpi/fields/jsonschema_form_field.py
23
47.06
-45.1% hub/models/extra_user_detail.py
23
27.4
-31.51% kobo/apps/trackers/utils.py
22
79.66
-18.64% kobo/apps/openrosa/apps/api/viewsets/xform_submission_api.py
21
28.21
-53.85% kobo/apps/accounts/mfa/flows.py
21
42.11
-55.26% kobo/apps/data_collectors/signals.py
21
0.0
-100.0% kobo/apps/long_running_migrations/tasks.py
21
0.0
-84.0% kobo/apps/stripe/signals.py
21
48.84
-48.84% kobo/apps/trash_bin/models/project.py
21
42.79
-9.77% kpi/renderers.py
20
56.25
-41.67% kobo/apps/hook/serializers/v2/hook.py
20
30.3
-60.61% kobo/apps/long_running_migrations/app.py
20
66.2
-28.17% kobo/apps/project_ownership/models/invite.py
20
71.43
-23.81% kpi/serializers/v2/service_usage.py
20
43.7
-14.81% kpi/views/v2/asset_snapshot.py
19
67.21
-31.15% kobo/apps/kobo_scim/serializers.py
19
47.22
-52.78% kobo/apps/languages/views/language.py
19
26.0
-38.0% kobo/apps/service_health/views.py
19
0.0
-65.52% kobo/apps/stripe/admin.py
19
32.14
-67.86% kobo/apps/subsequences/utils/supplement_data.py
19
47.73
-43.18% kobo/apps/trash_bin/models/attachment.py
19
51.28
-48.72% kobo/apps/trash_bin/tasks/__init__.py
18
26.92
-69.23% kobo/apps/accounts/signals.py
18
0.0
-85.71% kobo/apps/beat/schedulers.py
18
47.22
-50.0% kobo/apps/organizations/tasks.py
18
35.56
-40.0% kpi/fields/file.py
17
0.0
-100.0% kobo/apps/accounts/mfa/forms.py
17
50.0
-44.74% kobo/apps/organizations/utils.py
16
67.74
-25.81% kobo/apps/hook/models/hook.py
16
32.0
-64.0% kobo/apps/openrosa/apps/logger/utils/attachment.py
16
0.0
-100.0% kobo/apps/service_health/test_service_health.py
16
31.82
-36.36% kobo/apps/stripe/utils/limit_enforcement.py
16
67.95
-20.51% kpi/authentication.py
16
59.32
-27.12% kpi/views/v2/export_task.py
16
34.55
-14.55% kpi/views/v2/paired_data.py
15
63.27
-30.61% kobo/apps/hook/views/v2/hook_log.py
15
48.48
-45.45% kobo/apps/mass_emails/admin.py
15
59.8
-14.71% kobo/apps/mass_emails/models.py
15
63.83
-15.96% kobo/apps/openrosa/libs/utils/middleware.py
15
28.57
-71.43% kobo/apps/trash_bin/utils/signals.py
15
55.81
-34.88% kpi/backends.py
15
40.48
-35.71% kpi/serializers/v2/deployment.py
14
54.76
-33.33% hub/models/configuration_file.py
14
43.1
-24.14% kobo/apps/accounts/mfa/admin.py
14
0.0
-100.0% kobo/apps/long_running_migrations/jobs/0017_remove_organizations_of_deleted_users.py
14
41.3
-15.22% kobo/apps/subsequences/integrations/google/base.py
14
26.09
-60.87% kpi/fields/relative_prefix_hyperlinked_related.py
13
35.14
-35.14% hub/models/per_user_setting.py
13
57.5
-32.5% kobo/apps/accounts/serializers.py
13
39.13
-56.52% kobo/apps/kobo_scim/authentication.py
13
45.71
-37.14% kobo/apps/user_reports/seralizers.py
13
33.33
-48.15% kpi/utils/prerequisite_migration_checker.py
12
35.0
-60.0% kobo/apps/stripe/utils/import_management.py
12
43.48
-52.17% kobo/apps/subsequences/throttling.py
12
51.06
-25.53% kpi/views/v2/import_task.py
11
60.71
-39.29% kobo/apps/audit_log/utils.py
11
65.31
-22.45% kobo/apps/hook/models/hook_log.py
11
69.44
-30.56% kpi/models/asset_user_partial_permission.py
11
70.18
-19.3% kpi/utils/mailer.py
10
25.0
-62.5% kobo/apps/accounts/mixins.py
10
64.52
-32.26% kobo/apps/languages/serializers/base.py
10
40.0
-40.0% kobo/apps/openrosa/apps/api/utils/xml.py
10
39.58
-20.83% kobo/apps/subsequences/prompts.py
10
74.0
-20.0% kpi/models/asset_version.py
9
67.74
-29.03% kobo/apps/data_collectors/models.py
9
35.71
-64.29% kobo/apps/hook/utils/services.py
9
47.62
-21.43% kobo/apps/markdownx_uploader/models.py
9
0.0
-29.03% kobo/apps/stripe/utils/manual_subscription.py
9
74.51
-17.65% kpi/context_processors.py
9
79.17
-18.75% kpi/views/v2/asset_file.py
8
71.67
-3.33% kobo/apps/openrosa/apps/viewer/models/parsed_instance.py
8
0.0
-100.0% kobo/apps/service_health/test_service_health_minimal.py
8
0.0
-100.0% kobo/apps/stripe/urls.py
8
85.71
-11.43% kpi/utils/cache.py
7
0.0
-87.5% kobo/apps/hook/services/service_xml.py
7
66.67
-33.33% kobo/apps/languages/serializers/translation.py
7
61.76
-20.59% kobo/apps/storage_backends/base.py
7
0.0
-100.0% kobo/apps/stripe/apps.py
7
50.0
-31.82% kobo/apps/trash_bin/mixins/admin.py
7
53.33
-46.67% kobo/apps/trash_bin/utils/attachment.py
7
57.14
-33.33% kpi/fields/paginated_api.py
7
53.33
-46.67% kpi/maintenance_tasks.py
7
70.37
-25.93% kpi/models/extra_project_metadata_field.py
7
79.05
-6.67% kpi/utils/object_permission.py
6
53.85
-46.15% kobo/apps/accounts/templatetags/customize_email_content.py
6
44.44
-33.33% kobo/apps/kobo_scim/pagination.py
6
84.62
-15.38% kobo/apps/languages/serializers/language.py
6
70.0
-30.0% kobo/apps/languages/serializers/transcription.py
6
89.02
-7.32% kobo/apps/openrosa/libs/serializers/xform_serializer.py
6
37.5
-37.5% kobo/apps/openrosa/libs/utils/string.py
6
62.5
-37.5% kobo/apps/organizations/signals.py
6
43.75
-37.5% kobo/apps/project_ownership/filters.py
6
72.09
-13.95% kobo/apps/project_ownership/serializers/transfer.py
6
0.0
-100.0% kobo/apps/project_views/tasks.py
6
0.0
-100.0% kobo/apps/stripe/exceptions.py
6
0.0
-37.5% kobo/apps/stripe/utils/view_utils.py
6
68.42
-31.58% kobo/apps/subsequences/schemas.py
6
58.46
-4.62% kobo/apps/trash_bin/admin.py
6
62.96
-22.22% kobo/apps/trash_bin/models/account.py
6
57.14
-28.57% kpi/fields/writable_json.py
6
42.86
-42.86% kpi/mixins/asset.py
6
61.9
-14.29% kpi/utils/urls.py
5
78.26
-21.74% kobo/apps/languages/models/translation.py
5
37.5
-62.5% kobo/apps/markdownx_uploader/tasks.py
5
89.41
-5.88% kobo/apps/openrosa/libs/renderers/renderers.py
5
57.69
-19.23% kobo/apps/subsequences/integrations/google/locations.py
5
65.22
-21.74% kobo/apps/trash_bin/tasks/project.py
5
82.35
-14.71% kobo/apps/user_reports/views.py
5
85.84
-4.42% kpi/exceptions.py
5
75.0
-20.83% kpi/models/authorized_application.py
5
40.0
-50.0% kpi/utils/fuzzy_int.py
5
77.07
-2.44% kpi/utils/mongo_helper.py
4
46.45
-2.19% hub/admin/extend_user.py
4
63.64
-36.36% kobo/apps/accounts/mfa/permissions.py
4
84.38
-12.5% kobo/apps/accounts/models.py
4
60.0
-40.0% kobo/apps/accounts/tos.py
4
88.89
-11.11% kobo/apps/accounts/views.py
4
66.67
-33.33% kobo/apps/audit_log/permissions.py
4
85.71
-9.52% kobo/apps/help/models.py
4
17.65
-23.53% kobo/apps/help/permissions.py
4
59.32
-6.78% kobo/apps/hook/views/v2/hook.py
4
77.5
-10.0% kobo/apps/kobo_auth/signals.py
4
72.22
-22.22% kobo/apps/subsequences/actions/automatic_google_transcription.py
4
72.22
-22.22% kobo/apps/subsequences/actions/automatic_google_translation.py
4
33.33
-14.81% kobo/apps/subsequences/audit.py
4
83.33
-16.67% kobo/apps/trackers/models.py
4
68.18
-18.18% kobo/apps/trash_bin/tasks/account.py
4
37.5
-5.0% kobo/apps/trash_bin/tasks/attachment.py
4
89.47
-7.02% kpi/deployment_backends/mixin.py
4
20.0
-80.0% kpi/utils/placeholders.py
3
49.15
-5.08% hub/admin/password_validation.py
3
91.67
-8.33% kobo/apps/audit_log/serializers.py
3
76.6
-6.38% kobo/apps/kobo_auth/models.py
3
67.5
-7.5% kobo/apps/openrosa/apps/django_digest_backends/cache.py
3
90.48
-2.38% kobo/apps/openrosa/apps/logger/signals.py
3
62.16
-8.11% kobo/apps/openrosa/apps/logger/utils/database_query.py
3
63.33
-5.0% kobo/apps/openrosa/apps/main/models/user_profile.py
3
58.06
-9.68% kobo/apps/organizations/admin/organization_owner.py
3
42.86
-4.29% kobo/apps/project_ownership/admin.py
3
85.71
-8.57% kobo/apps/project_views/models/assignment.py
3
89.19
-8.11% kobo/apps/project_views/models/project_view.py
3
75.0
-25.0% kobo/apps/superuser_stats/admin.py
3
70.0
-30.0% kpi/fields/serializer_method_file.py
3
62.07
-3.45% kpi/tasks.py
3
78.57
-10.71% kpi/utils/submission.py
3
30.67
-4.0% kpi/utils/two_database_configuration_checker.py
2
60.0
-40.0% kobo/apps/audit_log/filters.py
2
66.67
-33.33% kobo/apps/external_integrations/signals.py
2
85.71
-9.52% kobo/apps/help/views.py
2
87.5
-12.5% kobo/apps/hook/serializers/v2/hook_log.py
2
90.0
-10.0% kobo/apps/kobo_scim/admin.py
2
81.44
-1.03% kobo/apps/openrosa/apps/logger/models/instance.py
2
87.8
-4.88% kobo/apps/openrosa/libs/filters.py
2
78.08
-2.74% kobo/apps/openrosa/libs/utils/image_tools.py
2
91.3
-8.7% kobo/apps/project_ownership/views/invite.py
2
95.12
-4.88% kobo/apps/subsequences/exceptions.py
2
42.86
-28.57% kobo/apps/subsequences/utils/time.py
2
83.33
-6.67% kobo/urls.py
2
64.52
-6.45% kpi/mixins/standardize_searchable_field.py
2
92.73
-3.64% kpi/signals.py
2
75.0
-12.5% kpi/utils/drf_exceptions.py
2
42.17
-2.41% kpi/utils/storage.py
2
75.0
-16.67% kpi/views/v2/open_rosa.py
2
88.24
-11.76% kpi/views/v2/service_usage.py
1
44.44
-5.56% kobo/apps/accounts/templatetags/get_provider_appname.py
1
94.12
-5.88% kobo/apps/audit_log/middleware.py
1
80.0
-20.0% kobo/apps/hook/templatetags/strings.py
1
88.89
-11.11% kobo/apps/long_running_migrations/admin.py
1
92.52
-0.93% kobo/apps/openrosa/apps/api/viewsets/briefcase_api.py
1
86.11
-2.78% kobo/apps/openrosa/apps/logger/fields.py
1
87.11
-0.39% kobo/apps/openrosa/apps/logger/xform_instance_parser.py
1
87.5
-12.5% kobo/apps/service_health/middleware.py
1
88.89
-11.11% kobo/apps/subsequences/actions/manual_qual.py
1
92.31
-7.69% kobo/apps/user_reports/utils/migrations.py
1
70.73
-2.44% kpi/admin.py
1
57.89
-2.63% kpi/db_routers.py
1
96.67
-3.33% kpi/fields/kpi_uid.py
1
75.0
-25.0% kpi/fields/read_only.py
1
66.67
-8.33% kpi/mixins/validation_password_permission.py
1
72.73
-4.55% kpi/urls/__init__.py
1
62.5
-12.5% kpi/utils/datetime.py
1
93.94
-1.01% kpi/utils/django_orm_helper.py
1
75.0
-25.0% kpi/utils/gravatar_url.py
1
27.68
-0.89% kpi/utils/models.py
1
94.12
-5.88% kpi/utils/strings.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
Jobs
ID Job ID Ran Files Coverage
1 27817635233.1 19 Jun 2026 09:35AM UTC 883
50.16
2 27817635233.2 19 Jun 2026 09:36AM UTC 883
53.52
3 27817635233.3 19 Jun 2026 09:37AM UTC 885
46.3
4 27817635233.4 19 Jun 2026 09:37AM UTC 883
44.91
5 27817635233.5 19 Jun 2026 09:38AM UTC 885
54.8
6 27817635233.6 19 Jun 2026 09:39AM UTC 885
66.6
7 27817635233.7 19 Jun 2026 09:39AM UTC 885
51.52
8 27817635233.8 19 Jun 2026 09:39AM UTC 883
59.54
9 27817635233.9 19 Jun 2026 09:40AM UTC 883
59.54
10 27817635233.10 19 Jun 2026 09:41AM UTC 885
60.72
11 27817635233.11 19 Jun 2026 09:41AM UTC 887
68.95
Source Files on build 27817635233
  • Tree
  • List 887
  • Changed 1
  • Source Changed 0
  • Coverage Changed 1
Coverage ∆ File Lines Relevant Covered Missed Hits/Line Branch Hits Branch Misses
  • Back to Repo
  • 7c0a413b on github
  • Prev Build on main (#27815650762)
  • Next Build on main (#27824719555)
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