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

kobotoolbox / kpi / 23218570559 / 8
82%
master: 76%

Build:
Build:
LAST BUILD BRANCH: dev-2025-fix-v1-access-logging-token-auth
DEFAULT BRANCH: master
Ran 17 Mar 2026 10:14PM UTC
Files 896
Run time 21s
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

17 Mar 2026 10:05PM UTC coverage: 54.483% (+0.05%) from 54.432%
23218570559.8

push

github

web-flow
feat(scim): add groups and service provider config endpoints DEV-1815 (#6797)

### 📣 Summary
This PR complements the SCIM implementation in kobo with Groups and
ServiceProviderConfig endpoints, which are required for providers like
Okta and Authentik.

* Added a ScimGroup model to store synced groups natively. 
* Created the /ServiceProviderConfig endpoint mapping to statically
announce our SCIM capabilities (e.g. PATCH is supported, bulk operations
are disabled).
* Created the /Groups CRUD endpoints to support list, create, update,
and patch requests from the IdP.
* Updated urls.py and serializers to correctly route and validate the
new payloads.
* Added unit tests in test_scim_groups_api.py
* Added simple provisioning to enable proper integration with test cases
* Handling of multi tenant IdP

### 👀 Preview steps

1. Test ServiceProviderConfig. The IdP uses this endpoint on
initialization to figure out what Kobo's SCIM layer supports.

```
curl -X GET http://localhost:8000/api/scim/v2/{idp_slug}/ServiceProviderConfig \
  -H "Authorization: Bearer {SCIM_TOKEN}"
```

2. Create a group, test how the IdP provisions a completely new group
directly to Kobo.

```
curl -X POST http://localhost:8000/api/scim/v2/{idp_slug}/Groups \
  -H "Authorization: Bearer {SCIM_TOKEN}" \
  -H "Content-Type: application/json" \
  -d '{
    "schemas": ["urn:ietf:params:scim:schemas:core:2.0:Group"],
    "displayName": "Test Admins Group",
    "externalId": "ext-group-123"
  }'
```
Note the returned id for the next step.

3. List groups, the IdP uses this to verify the initial sync state.
```
curl -X GET http://localhost:8000/api/scim/v2/{idp_slug}/Groups \
  -H "Authorization: Bearer {SCIM_TOKEN}"
```
4. Patch a Group (Add Members) simulating the IdP adding a user to the
group during an assignment event. (Replace group_id with the SCG id from
step 2, and user_id with a valid Django User ID).

```
curl -X PATCH http://localhost:8000/api/scim/v2/{idp_slug}/Groups/{group_id} \... (continued)

3568 of 11629 branches covered (30.68%)

19346 of 35508 relevant lines covered (54.48%)

0.54 hits per line

Source Files on job 23218570559.8
  • Tree
  • List 896
  • Changed 201
  • Source Changed 0
  • Coverage Changed 201
Coverage ∆ File Lines Relevant Covered Missed Hits/Line Branch Hits Branch Misses
  • Back to Build 23218570559
  • 82446df5 on github
  • Prev Job for on main (#23213286713.1)
  • Next Job for on main (#23228590570.9)
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