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

veeso / mastic / 24767913249
92%

Build:
DEFAULT BRANCH: main
Ran 22 Apr 2026 08:27AM UTC
Jobs 1
Files 86
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

22 Apr 2026 08:17AM UTC coverage: 93.09% (+0.09%) from 92.997%
24767913249

push

github

veeso
feat(user): implement update_profile flow (UC3)

Closes #13.

Adds the `update_profile(UpdateProfileArgs)` method on the User Canister
that allows the owner to partially update their profile (display name,
bio) and propagates the change to followers via an `Update(Person)`
ActivityPub activity through the Federation Canister.

User Canister
- `did::user::UpdateProfileArgs { display_name, bio }` using
  `FieldUpdate<T>` (`Leave` / `Clear` / `Set`); `UpdateProfileResponse`
  and `UpdateProfileError { Internal }`.
- `api::update_profile` + `lib.rs` + `inspect_message` enforce owner-only
  access.
- `ProfileRepository::update_profile` returns `CanisterResult<bool>`:
  `true` when a row was written, `false` when all fields are `Leave`.
  Advances `updated_at` on every mutation.
- `domain::profile::update_profile` reloads the profile, builds an
  `Update(Person)` activity (actor URI, Mastodon-style `name`/`summary`,
  RFC 3339 `updated`, inbox/outbox/followers URIs), addresses
  `to=[AS_PUBLIC], cc=[followers_url]`, fans out one activity per
  follower minus blocked actors, and dispatches via the Federation
  adapter as `SendActivityArgs::Batch`.
- New `domain::block::BlockRepository::list_blocked_uris` read path
  over the existing `blocks` table (full `block_user` RPC stays WI-1.10).
- `handle_incoming`: unknown activity types are silently accepted
  (logged) instead of returning `ProcessingFailed`. ActivityPub receivers
  should absorb verbs they do not implement so the sender does not treat
  the delivery as a federation failure; this unblocks fanout to
  followers who will not apply `Update(Person)` until M3.

Shared utilities
- `FieldUpdate<T>` stays in `did::common` (pure API type). Its
  database-facing conversion `field_update_to_nullable` moves to the
  `db-utils` crate so every repository doing partial updates can reuse
  it.
- `ic_utils::rfc3339` + private `civil_from_unix` render millisecond
  Unix timestamps into RFC 3339 UTC strings, reusable... (continued)

428 of 455 new or added lines in 15 files covered. (94.07%)

8636 of 9277 relevant lines covered (93.09%)

14.4 hits per line

Uncovered Changes

Lines Coverage ∆ File
10
96.27
crates/canisters/user/src/domain/profile/update_profile.rs
6
53.9
-2.4% crates/canisters/user/src/api.rs
3
0.0
0.0% crates/canisters/user/src/lib.rs
2
80.14
0.0% crates/canisters/user/src/domain/activity/handle_incoming.rs
2
0.0
0.0% crates/canisters/user/src/inspect.rs
2
0.0
0.0% crates/libs/did/src/user.rs
1
97.44
crates/libs/activitypub/src/activity.rs
1
54.55
54.55% crates/libs/did/src/common.rs
Jobs
ID Job ID Ran Files Coverage
1 24767913249.1 22 Apr 2026 08:27AM UTC 86
93.09
GitHub Action Run
Source Files on build 24767913249
  • Tree
  • List 86
  • Changed 12
  • Source Changed 12
  • Coverage Changed 12
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • Github Actions Build #24767913249
  • f49e6b51 on github
  • Prev Build on main (#24687878401)
  • Next Build on main (#24797475601)
  • Delete
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