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

akvo / akvo-mis / #1349
91%

Build:
DEFAULT BRANCH: main
Ran 06 Oct 2026 03:45AM UTC
Jobs 1
Files 147
Run time 1min
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

06 Oct 2026 03:35AM UTC coverage: 90.538% (+0.06%) from 90.482%
#1349

push

coveralls-python

web-flow
[#508] Paginate the tenant list and total its counts (#510)

* [#508] Serve the console's tenant list a page at a time

The summary endpoint returned every workspace in one array, which was
defensible while a deployment held a dozen and is not at the scale the
console is now expected to serve: the response grows with every sign-up
and the table puts every row in the DOM.

It now returns the house pagination envelope from
`utils.custom_pagination`, so the console reads the same four keys as
every other paginated table in the application rather than a shape of
its own.

The page size is 25 rather than the house default of 10. This is an
operator's list on a desktop console, where 10 would mean 42 pages where
25 means 17.

The new tests count the expected workspaces from the table rather than
writing a literal. Every database carries a `default` workspace from
0004_backfill_default_tenant, so a test's own fixtures are never the
whole of it -- and an assertion against the table is the stronger one
anyway, since it fails if the endpoint drops a row as well as if it
invents one.

* [#508] Filter the tenant list where the rows are counted

Search and the state filter ran in the browser over an array of every
workspace. With the list paginated the browser holds 25 rows out of
however many match, so neither filter can stay there.

Search matches the subdomain or the workspace name, as it always has in
the console. The name is the root administration unit's rather than a
column on Tenant, and it is reached with an Exists subquery rather than
a join: a join to a multi-valued relation inside a queryset that already
carries five DISTINCT-counting annotations is the row multiplication
those annotations exist to survive.

A whitespace-only search is stripped to nothing and ignored, rather than
matching nothing and reporting an empty deployment to an operator who
has just cleared the box.

An unknown state is a 400 rather than a silent full list, which is the
behavio... (continued)

8305 of 9412 branches covered (88.24%)

Branch coverage included in aggregate %.

15301 of 16661 relevant lines covered (91.84%)

0.92 hits per line

Coverage Regressions

Lines Coverage ∆ File
2
99.3
0.33% api/v1/v1_users/admin_views.py
Jobs
ID Job ID Ran Files Coverage
1 #1349.1 06 Oct 2026 03:45AM UTC 147
90.54
Source Files on build #1349
  • Tree
  • List 147
  • Changed 4
  • Source Changed 0
  • Coverage Changed 4
Coverage ∆ File Lines Relevant Covered Missed Hits/Line Branch Hits Branch Misses
  • Back to Repo
  • a573a39e on github
  • Prev Build on main
  • Next Build on main
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE TRIAL · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc