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

kobotoolbox / kpi / 26396593459
82%
master: 76%

Build:
Build:
LAST BUILD BRANCH: main
DEFAULT BRANCH: master
Ran 25 May 2026 10:51AM UTC
Jobs 10
Files 916
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

25 May 2026 10:47AM UTC coverage: 82.039% (+0.03%) from 82.009%
26396593459

push

github

web-flow
refactor(libraryAssetForm): remove mixins DEV-2126 (#7068)

### 💭 Notes

Tiny cleanup for `libraryAssetForm.js` - stop using the deprecated
`contextRouter` mixin, and drop a Reflux listener mixin that wasn't
doing anything.

Changes here:

- `jsapp/js/components/modalForms/libraryAssetForm.js`
- Removed `reactMixin(..., mixins.contextRouter)`. The only two methods
it provided to this component were `this.isLibrarySingle()` and
`this.currentAssetID()`, both of which are thin wrappers around
`routerUtils`. Replaced them at the one call site with
`isAnyLibraryRoute()` + `getRouteAssetUid()` from
`#/router/routerUtils`, reusing the uid for both the guard and the
`managedCollectionsStore.find(...)` call so we don't read the route
twice.
- Removed `reactMixin(..., Reflux.ListenerMixin)`. The component already
manages its own `this.unlisteners` array and never calls `this.listenTo`
/ `this.stopListeningToAll`, so the mixin was effectively dead weight.
  - Dropped the now-unused `reactMixin`, `Reflux`, and `mixins` imports.

No behavior changes — same code path, same guard, same store lookup,
just without the inheritance gymnastics. Reviewer should find this
boring in the best way.

This is 1st part of preparation for actual DEV-2126 fix.

### 👀 Preview steps

1. â„šī¸ have an account
2. go to **Library**
3. open a collection (so you're on a "library single" page)
4. click **NEW** → **Template** to open the create-template modal
5. fill in a name and hit **Create**
6. đŸŸĸ notice the new template lands inside the collection you were
viewing (parent relationship still works)
7. go back to **Library** root (not inside any collection)
8. click **NEW** → **Template**, create one
9. đŸŸĸ notice it lands at the library root, not parented to anything
10. for good measure: edit an existing template's details and save
11. đŸŸĸ notice it saves and the modal closes as before

9237 of 12470 branches covered (74.07%)

30552 of 37241 relevant lines covered (82.04%)

5.73 hits per line

Coverage Regressions

Lines Coverage ∆ File
321
0.0
-90.68% kobo/apps/openrosa/apps/viewer/pandas_mongo_bridge.py
228
44.14
-41.76% kobo/apps/openrosa/libs/utils/logger_tools.py
215
18.97
-52.96% kobo/apps/openrosa/libs/utils/export_tools.py
206
0.0
-86.19% kobo/apps/openrosa/libs/utils/briefcase_client.py
93
33.96
-58.49% kobo/apps/openrosa/apps/api/permissions.py
93
42.11
-48.95% kobo/apps/openrosa/apps/api/viewsets/xform_list_api.py
87
0.0
-87.88% kobo/apps/openrosa/libs/utils/backup_tools.py
86
28.67
-60.14% kobo/apps/openrosa/apps/viewer/views.py
81
33.11
-53.64% kobo/apps/openrosa/apps/api/viewsets/briefcase_api.py
71
33.62
-61.21% kobo/apps/openrosa/libs/filters.py
66
32.23
-54.55% kobo/apps/openrosa/apps/api/viewsets/data_viewset.py
59
46.96
-51.3% kobo/apps/openrosa/apps/api/viewsets/xform_submission_api.py
58
0.0
-90.63% kobo/apps/openrosa/libs/data/query.py
52
34.81
-32.91% kobo/apps/openrosa/apps/api/viewsets/xform_viewset.py
52
60.5
-26.0% kpi/utils/xml.py
50
0.0
-47.17% kobo/apps/openrosa/apps/logger/tasks.py
49
28.57
-43.75% kobo/apps/openrosa/apps/logger/views.py
46
54.92
-37.7% kobo/apps/openrosa/libs/serializers/xform_serializer.py
43
46.1
-15.99% kobo/apps/openrosa/apps/viewer/models/data_dictionary.py
43
57.87
-16.93% kobo/apps/openrosa/apps/viewer/models/parsed_instance.py
41
23.29
-56.16% kobo/apps/openrosa/libs/utils/image_tools.py
40
0.0
-40.82% kobo/apps/openrosa/apps/viewer/xls_writer.py
39
23.08
-30.0% kobo/apps/openrosa/apps/viewer/tasks.py
37
61.11
-29.37% kobo/apps/openrosa/apps/logger/signals.py
37
32.97
-40.66% kobo/apps/openrosa/libs/serializers/metadata_serializer.py
36
24.49
-73.47% kobo/apps/openrosa/apps/logger/import_tools.py
36
55.29
-42.35% kobo/apps/openrosa/libs/renderers/renderers.py
34
37.96
-31.48% kobo/apps/openrosa/apps/logger/utils/instance.py
33
49.51
-32.04% kobo/apps/openrosa/apps/viewer/models/export.py
30
0.0
-75.0% kobo/apps/openrosa/apps/django_digest_backends/cache.py
29
40.48
-17.26% kobo/apps/openrosa/apps/main/models/meta_data.py
29
30.14
-19.86% kobo/apps/openrosa/libs/utils/viewer_tools.py
28
41.27
-44.44% kobo/apps/openrosa/libs/serializers/data_serializer.py
27
34.0
-54.0% kobo/apps/data_collectors/authentication.py
27
49.06
-50.94% kobo/apps/openrosa/libs/serializers/attachment_serializer.py
26
35.71
-61.9% kobo/apps/openrosa/libs/mixins/labels_mixin.py
26
27.78
-72.22% kobo/apps/openrosa/libs/utils/decorators.py
23
55.46
-19.33% kobo/apps/openrosa/apps/logger/models/attachment.py
20
29.67
-21.98% kobo/apps/openrosa/libs/utils/user_auth.py
19
51.22
-23.17% kobo/apps/accounts/mfa/views.py
19
38.24
-55.88% kpi/parsers.py
17
16.22
-45.95% kobo/apps/openrosa/apps/logger/utils/database_query.py
17
81.25
-6.64% kobo/apps/openrosa/apps/logger/xform_instance_parser.py
15
20.0
-60.0% kobo/apps/openrosa/apps/api/utils/xml.py
15
31.71
-36.59% kobo/apps/openrosa/apps/logger/xform_fs.py
15
41.94
-48.39% kobo/apps/openrosa/libs/authentication.py
15
34.78
-65.22% kobo/apps/openrosa/libs/models/signals.py
14
0.0
-41.18% kobo/apps/accounts/mfa/adapter.py
14
44.0
-56.0% kobo/apps/openrosa/libs/utils/model_tools.py
13
75.39
-6.81% kobo/apps/openrosa/apps/logger/models/xform.py
13
62.82
-16.67% kpi/authentication.py
12
28.21
-30.77% kobo/apps/accounts/mfa/flows.py
12
76.02
-6.12% kobo/apps/openrosa/apps/logger/models/instance.py
12
44.9
-24.49% kobo/apps/openrosa/apps/logger/utils/counters.py
12
70.0
-30.0% kobo/apps/openrosa/libs/serializers/user_profile_serializer.py
11
62.5
-34.38% kobo/apps/openrosa/apps/api/viewsets/attachment_viewset.py
10
58.33
-41.67% kobo/apps/openrosa/apps/api/viewsets/note_viewset.py
10
30.12
-12.05% kpi/utils/storage.py
9
41.0
-9.0% kobo/apps/accounts/mfa/models.py
9
30.56
-8.33% kobo/apps/openrosa/apps/api/tools.py
9
62.07
-31.03% kobo/apps/openrosa/apps/api/viewsets/metadata_viewset.py
9
57.45
-9.57% kobo/apps/openrosa/libs/utils/middleware.py
7
31.25
-43.75% kobo/apps/openrosa/libs/utils/string.py
6
66.67
-28.57% kobo/apps/openrosa/apps/api/viewsets/connect_viewset.py
6
69.57
-26.09% kobo/apps/openrosa/libs/permissions.py
5
66.18
-1.21% kobo/apps/audit_log/models.py
5
83.64
-9.09% kobo/apps/openrosa/apps/logger/exceptions.py
5
72.22
-27.78% kobo/apps/openrosa/apps/logger/models/daily_xform_submission_counter.py
5
75.0
-25.0% kobo/apps/openrosa/apps/logger/models/monthly_xform_submission_counter.py
5
0.0
-38.46% kobo/apps/openrosa/apps/main/context_processors.py
5
50.0
-50.0% kobo/apps/openrosa/libs/mixins/openrosa_headers_mixin.py
5
66.67
-33.33% kobo/apps/openrosa/libs/serializers/note_serializer.py
4
63.33
-6.67% kobo/apps/openrosa/apps/main/models/user_profile.py
4
45.45
-36.36% kobo/apps/openrosa/koboform/__init__.py
4
75.12
-1.95% kpi/utils/mongo_helper.py
3
80.0
-20.0% kobo/apps/openrosa/apps/viewer/signals.py
3
50.0
-37.5% kobo/apps/openrosa/libs/mixins/anonymous_user_public_forms_mixin.py
3
46.67
-20.0% kobo/apps/openrosa/libs/serializers/tag_list_serializer.py
2
72.06
-1.47% kobo/apps/audit_log/signals.py
2
76.6
-4.26% kobo/apps/kobo_auth/models.py
2
61.54
-15.38% kobo/apps/openrosa/libs/utils/gravatar.py
2
82.14
-7.14% kobo/urls.py
2
80.0
-20.0% kpi/mixins/mfa.py
1
63.64
-9.09% kobo/apps/accounts/mfa/permissions.py
1
0.0
-100.0% kobo/apps/openrosa/apps/logger/constants.py
1
75.0
-25.0% kobo/apps/openrosa/libs/utils/storage.py
1
93.02
-2.33% kpi/backends.py
1
50.7
-0.47% kpi/renderers.py
1
75.0
-6.25% kpi/utils/drf_exceptions.py
1
86.67
-0.95% kpi/utils/object_permission.py
Jobs
ID Job ID Ran Files Coverage
1 26396593459.1 25 May 2026 10:51AM UTC 912
53.64
2 26396593459.2 25 May 2026 10:52AM UTC 912
52.0
3 26396593459.3 25 May 2026 10:53AM UTC 914
53.23
4 26396593459.4 25 May 2026 10:53AM UTC 912
52.25
5 26396593459.5 25 May 2026 10:54AM UTC 914
54.89
6 26396593459.6 25 May 2026 10:54AM UTC 912
59.46
7 26396593459.7 25 May 2026 10:54AM UTC 914
66.11
8 26396593459.8 25 May 2026 10:56AM UTC 916
68.41
9 26396593459.9 25 May 2026 10:56AM UTC 914
60.59
10 26396593459.10 25 May 2026 10:56AM UTC 914
53.6
Source Files on build 26396593459
  • Tree
  • List 916
  • Changed 2
  • Source Changed 0
  • Coverage Changed 2
Coverage ∆ File Lines Relevant Covered Missed Hits/Line Branch Hits Branch Misses
  • Back to Repo
  • 5f1e8e4a on github
  • Prev Build on main (#26371466996)
  • Next Build on main (#26401549835)
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