Update user edit page and user table for picture login#14573
Update user edit page and user table for picture login#14573LianaHarris360 merged 5 commits intolearningequality:developfrom
Conversation
rtibblesbot
left a comment
There was a problem hiding this comment.
Clean, well-scoped implementation. CI is still running. Screenshots provided and verified against acceptance criteria.
- suggestion: See inline comment on
iconName— could be silent rendering failure ificon_styleis ever unset - nitpick:
aria-readonlyon<ol>(see inline) - praise: Defensive check in
disableLearnerRoleOptionandsubmitFormguard (see inline)
@rtibblesbot's comments are generated by an LLM, and should be evaluated accordingly
How was this generated?
Reviewed the pull request diff checking for:
- Correctness: bugs, edge cases, undocumented behavior, resource leaks, hardcoded values
- Design: unnecessary complexity, naming, readability, comment accuracy, redundant state
- Architecture: duplicated concerns, minimal interfaces, composition over inheritance
- Testing: behavior-based assertions, mocks only at hard boundaries, accurate coverage
- Completeness: missing dependencies, unupdated usages, i18n, accessibility, security
- Principles: DRY (same reason to change), SRP, Rule of Three (no premature abstraction)
- Checked CI status and linked issue acceptance criteria
- For UI changes: inspected screenshots for layout, visual completeness, and consistency
Build Artifacts
Smoke test screenshot |
|
I'm still working on a test for the user-edit page changes. It doesn't have any existing tests, so I'm keeping it scoped to the new changes (bare minimum). Battling it a bit though 😅 |
a92611e to
9c23138
Compare
| if (this.disableLearnerRoleOption && this.newUserKind === UserKinds.LEARNER) { | ||
| this.isLearnerLimitModalOpen = true; | ||
| return; | ||
| } |
There was a problem hiding this comment.
AI added this. I don't think hitting this is possible, but is it worth keeping?
There was a problem hiding this comment.
Missed this earlier, sorry. It doesn't seem like we'll ever this point, but it is only defensive so should be fine.
rtibblesbot
left a comment
There was a problem hiding this comment.
Prior findings resolved; no new blocking issues found.
Prior findings
Resolved:
aria-readonlyon<ol>had no a11y effect (nitpick) — removed fromUserPicturePassword.vue
Acknowledged (not re-raised):
icon.iconNameundefined for unrecognizediconStyle(suggestion) — author confirmedicon_styleis always set whenpicture_password_settingsis non-null
2/2 prior findings accounted for. 0 re-raised.
CI passing (APK build failure appears pre-existing and unrelated to these changes). Screenshots verified: learner view correctly shows picture password section with 3 colorful icons and captions; coach view correctly hides the section and shows the learner limit warning with "Learn more" link — both match the acceptance criteria.
- nitpick: See inline comment on
UserEditPage.spec.js:188 - praise: See inline comment on
UserPicturePassword.vue:3
@rtibblesbot's comments are generated by an LLM, and should be evaluated accordingly
How was this generated?
Compared the current PR state against findings from a prior review:
- Retrieved prior bot reviews deterministically via the GitHub API
- Classified each prior finding as RESOLVED, UNADDRESSED, ACKNOWLEDGED, or CONTESTED
- Only raised NEW findings for newly introduced code
- Reviewed the pull request diff checking for correctness, design, architecture, testing, completeness, and adherence to DRY/SRP principles
- Checked CI status and linked issue acceptance criteria
| @@ -0,0 +1,93 @@ | |||
| <template> | |||
|
|
|||
| <ol class="picture-password-icons"> | |||
There was a problem hiding this comment.
praise: Extracting the picture password display into its own component is the right call — it keeps UserEditPage readable and gives the sub-component a clear single responsibility. The semantic structure (<ol>/<li>/<figure>/<figcaption>) is well-chosen: <ol> correctly conveys ordered sequence, and <figcaption> ties each label to its icon in a way screen readers understand. The prop validator catching malformed strings at the boundary is good defensive practice.
9c23138 to
1ae6b58
Compare
rtibblesbot
left a comment
There was a problem hiding this comment.
Tests added, prior finding resolved — good to go.
CI: frontend tests pass; APK build failure is pre-existing. Screenshots verified: learner view shows picture password section with icons and captions, coach view shows learner limit warning with "Learn more" link.
Prior findings
All prior findings remain resolved or acknowledged — no changes since last review.
Newly resolved:
- Test setup used
{ ...mockUser, kind: UserKinds.ADMIN }instead ofcreateUser(UserKinds.ADMIN)(nitpick) ← was UNADDRESSED — fixed atUserEditPage.spec.js:188
1/1 prior finding resolved.
@rtibblesbot's comments are generated by an LLM, and should be evaluated accordingly
How was this generated?
Compared the current PR state against findings from a prior review:
- Retrieved prior bot reviews deterministically via the GitHub API
- Classified each prior finding as RESOLVED, UNADDRESSED, ACKNOWLEDGED, or CONTESTED
- Only raised NEW findings for newly introduced code
- Reviewed the pull request diff checking for correctness, design, architecture, testing, completeness, and adherence to DRY/SRP principles
- Checked CI status and linked issue acceptance criteria
| member_of: [], | ||
| }; | ||
|
|
||
| function createUser(kind = UserKinds.LEARNER, overrides = {}) { |
There was a problem hiding this comment.
praise: createUser() helper is now used consistently throughout all test cases — roles is correctly populated so UserType() will read it properly, and the overrides param keeps individual tests concise. Good clean-up.
1ae6b58 to
f2ca100
Compare
|
Hi @bjester - I confirm that everything is implemented as specified. I just have the following clarifying questions:
settings.mp4
limit.reached.mp4 |
|
Ah, I see that point 2 is being implemented in #14600, please ignore it :) |
|
For point 1, there is currently an issue written & assigned to address it. |
LianaHarris360
left a comment
There was a problem hiding this comment.
The userEditPage + userTable have been updated as specced and no issues found through QA testing, thanks Blaine!
6457a41
into
learningequality:develop
…ity#14573) * Update utility to use constants * Add ambiguous key for iconName * Update user edit page to show picture password and disable learner role * Disable reset password when piclo enabled * Create basic test for UserEditPage changes
Summary
UserPicturePasswordcomponent for rendering a picture password with semantic structureReferences
closes #14426
Reviewer guidance
LEARNER_PICTURE_PASSWORD_LIMITinkolibri/core/auth/constants/picture_passwords.pyto temporarily lower the learner limitAI usage
I used AI to implement most of the changes at first. Then I revised much of the changes to the user edit page to simplify and improve it. Then used AI to help write the tests, which it got stuck, then I got stuck, then figured it out.