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

kobotoolbox / kpi / 26743326613
82%
master: 76%

Build:
Build:
LAST BUILD BRANCH: beccagraber/dev-2248-unable-to-delete-projects
DEFAULT BRANCH: master
Ran 01 Jun 2026 08:21AM UTC
Jobs 10
Files 881
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

01 Jun 2026 08:16AM UTC coverage: 81.682% (-0.008%) from 81.69%
26743326613

push

github

web-flow
refactor(libraryAssetForm): change component to functional and use proper metadata DEV-2126 (#7072)

### 📣 Summary

Library asset create and edit forms now fully honor instance-configured
project metadata fields, and the select controls used in that form were
modernized and stabilized (new shared Select and MultiSelect wrappers,
Mantine input migration, shared theme base styles, and UI parity fixes).

### 📖 Description

Until now, the create/edit form for library templates and collections
rendered a fixed set of metadata fields (description, sector, country)
regardless of what the instance had configured. If an admin disabled one
of those, it still showed up; if they enabled `operational_purpose`,
`collects_pii`, or any custom extra metadata field, it was nowhere to be
found. The form now behaves the same way Project Settings already does
and renders exactly the fields the environment exposes.

### 💭 Notes

Changes here:

Core DEV-2126 behavior and TypeScript migration:
- LibraryAssetForm.tsx
- Replaced legacy class and mixin flow with a functional TypeScript
component.
- Metadata visibility is driven by environment config via
getProjectMetadataFieldsAsSimpleDict.
- Supports operational_purpose, collects_pii, and extra metadata fields.
- Uses shared ExtraProjectMetadataFields and keeps submit payload
metadata-complete to avoid silent clobbering.
  - Reflux listeners are centralized with explicit cleanup.
  - Migrated text inputs from TextBox to Mantine TextInput and Textarea.
  - Migrated select usage to shared Select and MultiSelect wrappers.
- jsapp/js/components/modalForms/extraProjectMetadataFields.js to
ExtraProjectMetadataFields.tsx
  - Ported to TypeScript with typed props and same functional behavior.
- jsapp/js/components/modalForms/libraryAssetForm.js removed.
- LibraryAssetForm.module.scss renamed from lowercase filename.
- projectSettings.js and bigModal.js
  - Import path updates for migrated and renamed files.

Select and MultiSelect fol... (continued)

8891 of 12051 branches covered (73.78%)

29175 of 35718 relevant lines covered (81.68%)

5.59 hits per line

Coverage Regressions

Lines Coverage ∆ File
226
26.4
-63.48% kpi/serializers/v2/asset_permission_assignment.py
193
0.0
-93.69% kobo/apps/mass_emails/tasks.py
189
47.45
-31.14% kpi/deployment_backends/openrosa_backend.py
181
53.86
-43.72% kobo/apps/audit_log/models.py
175
30.03
-55.91% kobo/apps/kobo_scim/views.py
167
66.45
-27.33% kpi/serializers/v2/asset.py
151
37.46
-50.5% kpi/views/v2/data.py
150
40.73
-54.55% kobo/apps/organizations/serializers.py
134
32.64
-56.07% kobo/apps/subsequences/models.py
126
31.44
-64.95% kobo/apps/subsequences/actions/automatic_bedrock_qual.py
126
19.9
-64.29% kobo/apps/subsequences/utils/versioning.py
118
37.45
-48.56% kobo/apps/subsequences/actions/base.py
107
15.7
-47.98% kobo/apps/superuser_stats/tasks.py
98
61.89
-26.49% kpi/views/v2/asset.py
95
32.24
-51.91% kobo/apps/subsequences/serializers.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
87
29.29
-62.14% kpi/serializers/v2/asset_file.py
82
27.13
-63.57% kobo/apps/trash_bin/utils/trash.py
81
0.0
-93.1% kobo/apps/stripe/serializers.py
75
0.0
-41.9% kobo/apps/stripe/views.py
70
37.21
-40.7% kpi/serializers/current_user.py
69
57.23
-41.57% kobo/apps/organizations/views.py
68
41.03
-43.59% kobo/apps/organizations/admin/organization_user.py
66
31.62
-56.41% kpi/serializers/v2/export_task.py
66
26.85
-61.11% kpi/serializers/v2/paired_data.py
65
26.05
-54.62% kobo/apps/stripe/utils/subscription_limits.py
64
22.35
-75.29% kobo/apps/subsequences/actions/mixins.py
63
0.0
-51.64% kobo/apps/stripe/models.py
63
66.91
-15.56% kpi/deployment_backends/base_backend.py
63
34.55
-57.27% kpi/views/v2/paired_data.py
62
27.87
-50.82% kobo/apps/project_ownership/tasks.py
61
21.7
-28.77% kobo/apps/subsequences/integrations/google/google_translate.py
60
34.67
-40.0% kobo/apps/project_ownership/utils.py
59
0.0
-95.16% kobo/apps/long_running_migrations/jobs/0015_fix_duplicate_organizations.py
56
27.68
-50.0% kpi/utils/models.py
54
18.67
-72.0% kobo/apps/data_collectors/utils.py
54
27.96
-58.06% kobo/apps/hook/tasks.py
51
21.03
-21.89% kobo/apps/subsequences/integrations/google/google_transcribe.py
50
74.18
-23.47% kpi/permissions.py
50
44.12
-49.02% kpi/views/v2/environment.py
49
20.21
-52.13% kobo/apps/stripe/utils/billing_dates.py
46
41.0
-46.0% kobo/apps/accounts/mfa/models.py
44
77.87
-7.32% kpi/models/import_export_task.py
43
31.43
-40.95% kobo/apps/organizations/admin/organization.py
42
0.0
-79.25% kobo/apps/user_reports/tasks.py
42
49.47
-44.21% kpi/views/v2/asset_permission_assignment.py
41
32.81
-64.06% kobo/apps/trash_bin/utils/account.py
41
58.42
-20.3% kpi/filters.py
41
52.56
-19.07% kpi/renderers.py
41
43.7
-30.37% kpi/views/v2/asset_snapshot.py
40
36.11
-55.56% kobo/apps/long_running_migrations/models.py
40
61.21
-24.24% kobo/apps/organizations/models.py
38
37.14
-54.29% kobo/apps/organizations/permissions.py
37
53.01
-44.58% kobo/apps/subsequences/views.py
35
51.22
-42.68% kobo/apps/accounts/mfa/views.py
35
70.59
-25.74% kobo/apps/audit_log/signals.py
35
77.61
-17.41% kobo/apps/project_ownership/models/transfer.py
33
0.0
-97.06% kobo/apps/accounts/mfa/adapter.py
33
66.4
-26.4% kpi/models/paired_data.py
32
50.75
-47.76% kpi/views/v2/asset_export_settings.py
31
72.03
-26.27% kobo/apps/audit_log/views.py
31
26.42
-58.49% kobo/apps/trash_bin/utils/project.py
30
46.88
-31.25% kobo/apps/data_collectors/admin.py
30
26.83
-73.17% kobo/apps/subsequences/tasks.py
29
39.44
-40.85% kobo/apps/help/serializers.py
28
31.91
-59.57% kobo/apps/accounts/mfa/serializers.py
28
56.48
-25.93% kobo/apps/openrosa/apps/logger/utils/instance.py
27
55.71
-38.57% hub/utils/i18n.py
27
83.0
-13.5% kpi/utils/xml.py
26
32.97
-28.57% kobo/apps/mass_emails/user_queries.py
26
27.5
-65.0% kpi/serializers/v2/attachment_delete.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
59.72
-33.33% kobo/apps/project_ownership/serializers/invite.py
24
71.43
-28.57% kpi/serializers/v2/service_usage.py
24
59.32
-40.68% kpi/views/v2/export_task.py
23
52.73
-41.82% kobo/apps/languages/models/transcription.py
23
27.4
-31.51% kobo/apps/trackers/utils.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
28.21
-53.85% kobo/apps/accounts/mfa/flows.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
69.23
-26.92% kpi/authentication.py
21
38.33
-35.0% kpi/serializers/v2/asset_export_settings.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
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
47.73
-43.18% kobo/apps/trash_bin/models/attachment.py
19
51.28
-48.72% kobo/apps/trash_bin/tasks/__init__.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
0.0
-85.71% kobo/apps/beat/schedulers.py
17
0.0
-100.0% kobo/apps/accounts/mfa/forms.py
17
84.8
-3.11% kobo/apps/openrosa/libs/utils/logger_tools.py
17
44.12
-50.0% kpi/utils/rename_xls_sheet.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
55.81
-37.21% kpi/backends.py
16
75.0
-13.79% kpi/models/asset_snapshot.py
16
62.9
-25.81% kpi/views/v2/attachment.py
15
83.74
-12.2% kobo/apps/accounts/forms.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
28.57
-71.43% kobo/apps/trash_bin/utils/signals.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
40.7
-16.28% kobo/apps/subsequences/integrations/google/base.py
14
85.29
-13.73% kpi/models/asset_file.py
13
35.14
-35.14% hub/models/per_user_setting.py
13
57.5
-32.5% kobo/apps/accounts/serializers.py
13
33.33
-61.9% kobo/apps/accounts/signals.py
13
79.76
-15.48% kobo/apps/audit_log/base_views.py
13
39.13
-56.52% kobo/apps/kobo_scim/authentication.py
13
61.11
-36.11% kobo/apps/organizations/tasks.py
13
60.53
-34.21% kobo/apps/organizations/utils.py
13
45.71
-37.14% kobo/apps/user_reports/seralizers.py
13
75.94
-9.77% kpi/paginators.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
12
67.02
-12.77% kobo/apps/openrosa/libs/utils/middleware.py
12
35.0
-60.0% kobo/apps/stripe/utils/import_management.py
12
43.48
-52.17% kobo/apps/subsequences/throttling.py
12
57.14
-42.86% kobo/apps/subsequences/utils/supplement_data.py
12
91.56
-2.11% kpi/models/asset.py
11
65.31
-22.45% kobo/apps/hook/models/hook_log.py
11
70.18
-19.3% kpi/utils/mailer.py
11
75.0
-21.15% kpi/views/v2/asset_file.py
10
25.0
-62.5% kobo/apps/accounts/mixins.py
10
64.52
-32.26% kobo/apps/languages/serializers/base.py
10
80.28
-14.08% kobo/apps/project_ownership/models/invite.py
10
39.58
-20.83% kobo/apps/subsequences/prompts.py
10
33.33
-37.04% kpi/mixins/audio_transcoding.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
72.97
-24.32% kobo/apps/accounts/adapter.py
9
70.0
-30.0% kobo/apps/audit_log/tasks.py
9
73.68
-23.68% kobo/apps/data_collectors/signals.py
9
35.71
-64.29% kobo/apps/hook/utils/services.py
9
0.0
-29.03% kobo/apps/stripe/utils/manual_subscription.py
9
77.07
-4.39% kpi/utils/mongo_helper.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
77.78
-8.08% kpi/password_validation.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
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
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
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
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
80.0
-20.0% kpi/serializers/v2/tag.py
6
65.87
-4.76% kpi/utils/autoname.py
5
78.26
-21.74% kobo/apps/languages/models/translation.py
5
37.5
-62.5% kobo/apps/markdownx_uploader/tasks.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
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
46.45
-2.19% hub/admin/extend_user.py
4
84.31
-7.84% hub/models/extra_user_detail.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
88.0
-8.0% kobo/apps/data_collectors/authentication.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
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
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
70.05
-2.03% kpi/mixins/formpack_xlsform_utils.py
4
76.19
-19.05% kpi/serializers/v2/user_asset_subscription.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
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
75.0
-25.0% kobo/apps/superuser_stats/admin.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
80.95
-14.29% kpi/fields/writable_json.py
3
94.15
-0.84% kpi/mixins/object_permission.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
84.62
-15.38% kobo/apps/accounts/templatetags/customize_email_content.py
2
60.0
-40.0% kobo/apps/audit_log/filters.py
2
90.32
-6.45% kobo/apps/data_collectors/models.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
78.08
-2.74% kobo/apps/openrosa/libs/utils/image_tools.py
2
42.86
-28.57% kobo/apps/subsequences/utils/time.py
2
60.26
-2.56% kpi/deployment_backends/kc_access/utils.py
2
66.67
-16.67% kpi/mixins/validation_password_permission.py
2
96.3
-3.7% kpi/mixins/xls_exportable.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
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
84.27
-1.12% kobo/apps/reports/report_data.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
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
90.0
-10.0% kpi/mixins/mfa.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
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 26743326613.1 01 Jun 2026 08:21AM UTC 877
45.28
2 26743326613.2 01 Jun 2026 08:21AM UTC 877
50.64
3 26743326613.3 01 Jun 2026 08:21AM UTC 877
54.04
4 26743326613.4 01 Jun 2026 08:22AM UTC 879
52.02
5 26743326613.5 01 Jun 2026 08:23AM UTC 879
46.68
6 26743326613.6 01 Jun 2026 08:23AM UTC 879
55.34
7 26743326613.7 01 Jun 2026 08:23AM UTC 877
59.93
8 26743326613.8 01 Jun 2026 08:23AM UTC 879
66.38
9 26743326613.9 01 Jun 2026 08:25AM UTC 881
68.77
10 26743326613.10 01 Jun 2026 08:26AM UTC 879
61.12
Source Files on build 26743326613
  • Tree
  • List 881
  • Changed 2
  • Source Changed 0
  • Coverage Changed 2
Coverage ∆ File Lines Relevant Covered Missed Hits/Line Branch Hits Branch Misses
  • Back to Repo
  • 3e29a73c on github
  • Prev Build on main (#26641046948)
  • Next Build on main (#26744392563)
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