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

akvo / akvo-mis / #661
88%

Build:
DEFAULT BRANCH: main
Ran 10 Jun 2026 12:31AM UTC
Jobs 1
Files 110
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

10 Jun 2026 12:24AM UTC coverage: 88.607% (+0.6%) from 88.049%
#661

push

coveralls-python

web-flow
#229: Form Builder Backend CRUD API (FB-002 / FB-002A) (#230)

* [#229] Rename QuestionTypes.photo to image across the backend

- Rename QuestionTypes.photo = 8 to QuestionTypes.image = 8 in constants.py
- Update all usages: v1_data models/serializers/views/functions/tests,
  v1_jobs, v1_mobile tests, seeder_answer_processor, example-1.json
- Add migration 0007 to update the DB FieldStr for the renamed constant
- Update generate_config.py import formatting (flake8)

No DB integer value change — image = 8 matches the prior photo = 8.
akvo-react-form-editor emits "image"; this rename aligns the backend.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* [#229] Implement form builder backend CRUD API (FB-002)

- Add FormStatus (draft=1, published=2) to v1_forms/constants.py
- Add status, published_at, previous_version FK fields to Forms model
- Migration 0008: sets status=PUBLISHED (2) for all existing rows
- Add FormDetailSerializer, FormDetailQuestionSerializer,
  FormDetailQuestionGroupSerializer, FormVersionSerializer;
  extend ListFormSerializer with status field
- New functions.py: save_form, version_on_edit, duplicate_form,
  validate_form_payload (all atomic where write)
- New CRUD views with @extend_schema(tags=["Form Builder"]):
  GET/POST /api/v1/forms, GET/PUT/DELETE /api/v1/forms/{id},
  POST /api/v1/forms/{id}/publish, POST /api/v1/forms/{id}/duplicate,
  GET /api/v1/forms/{id}/versions
- PUT on PUBLISHED form creates new draft with version+1 (returns 201);
  PUT on DRAFT replaces in-place (returns 200)
- DELETE requires superuser; blocked with 409 if submissions exist
- Add IsFormBuilder(BasePermission) to custom_permissions.py using
  FeatureAccessTypes.form_builder / FeatureTypes.form_builder
- Add form_builder feature type to v1_profile constants and migrations
- Seed form_builder feature access in default_roles_seeder
- Add tests_form_crud.py with 21 tests (all ... (continued)

5355 of 6205 branches covered (86.3%)

Branch coverage included in aggregate %.

10223 of 11376 relevant lines covered (89.86%)

0.9 hits per line

Coverage Regressions

Lines Coverage ∆ File
68
79.64
0.02% api/v1/v1_jobs/job.py
35
75.0
1.03% api/v1/v1_jobs/seed_data.py
29
85.12
0.0% api/v1/v1_users/serializers.py
26
88.63
-2.07% api/v1/v1_forms/views.py
25
87.5
-3.41% api/v1/v1_profile/views.py
22
92.74
9.06% api/v1/v1_data/serializers.py
19
75.34
-0.0% api/v1/v1_jobs/validate_upload.py
8
95.28
0.0% api/v1/v1_mobile/views.py
7
77.65
-4.79% utils/functions.py
6
95.15
0.0% api/v1/v1_data/models.py
5
96.0
1.41% api/v1/v1_forms/models.py
4
98.51
0.05% api/v1/v1_forms/serializers.py
2
88.63
0.0% api/v1/v1_data/functions.py
2
98.45
-0.51% api/v1/v1_profile/models.py
2
85.17
0.0% utils/seeder_data_processor.py
1
95.45
-2.27% api/v1/v1_users/management/commands/fake_user_seeder.py
1
95.29
-2.0% utils/custom_permissions.py
1
93.39
-0.75% utils/seeder_answer_processor.py
Jobs
ID Job ID Ran Files Coverage
1 #661.1 10 Jun 2026 12:31AM UTC 110
88.61
Source Files on build #661
  • Tree
  • List 110
  • Changed 25
  • Source Changed 0
  • Coverage Changed 25
Coverage ∆ File Lines Relevant Covered Missed Hits/Line Branch Hits Branch Misses
  • Back to Repo
  • 27add394 on github
  • Prev Build on main
  • Next Build on main
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