7 commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
bebd1d459c
|
Remove brand_color2 from users_settings (#18473)
* Remove brand_color2 from users_settings * Remove occurences of brand_color2 |
||
|
|
1a07ad8d9e
|
Profile attribute names should be unique and non-empty (#16396)
* transliterate when generating attribute names to avoid emptiness If you enter a non-ascii (non `\w` matching) string as the profile field label, the attribute name is the empty string. This causes problems outlined in #16391 To avoid losing user provided data, transliterate (Sterile is the same tool we're using for Article#title_to_slug) before matching against the word regex. If we persist an empty string, or persist a non-`\w` name, the coordinating regex in Profile::ATTRIBUTE_NAME_REGEX will leave a nil match and raise NoMethodError (the method missing is for match[:attribute_name] when match was nil, not Profile - that's the next commit. * Guard against nil matches If an attribute name doesn't match the regex, the match is nil, and trying to access (nil)[:attribute_name] raises a NoMethodError. If there was no match, assume profile does not respond to the selector, and don't handle it in method missing. * Ensure generated attribute name is valid before saving This raises a validation error if the generated name (from the label) would be empty. It's not an optimal error message (since the user can't see the internal attribute name) but it prevents persisting broken/empty data * actually raise error when validating validate/valid? only return true or false (and set errors on the object). In order to reject the creation, we need to raise a validation error, not only call validate. I think this is because the execution of before_create hooks happens after validation (which is why the validation was only checked on update, not create). * Generate an attribute name completely independent of the field label This prevents mistakenly labeling a field "Class" or "Association" or one of the other hundred public methods an AR model like Profile exposes. Since attribute_name will be passed to `profile.public_send` we really shouldn't build selectors from user supplied inputs. * Use the admin supplied label in the sidebar The profile decorator is used in the Users#show page to populate the sidebar fields. Don't use the attribute name (which we mangled during creation, and now generate randomly) as the label, use the label. * Make the label lookup null safe, and filter attributes more * Update data update script to not expect predictable labels This is low impact since it ran in july, but we no longer know what attribute name a label will create. * Fix moderator spec "Test Field" label no longer predictably generates :test_field as an attribute name. Ask the field what it's name is before asking profile about it. * Fix profile preview card request spec Remove the assumption that profile responds to a method name based on the label for Work and Education fields. * Update old DUS and its test This can probably be archived * Update profile spec to use fields generated attribute names We used to "know" how attributes were generated from labels. Now we don't. * update e2e seeds for profile field change * Don't expect attribute name to be based on the label * expect created profile fields respond to their attribute name * Update system test The label, not the attribute name, is shown on the profile form (the field has an id related to the attribute name, but the view shows the mutable/human-readable label). * Keep the field title lowercase when sending the json preview card The userMetadata component expects "work" and "education" to be attributes of the metadata, but the ui_attributes_for() method was titlizing these (for display). Ideally we wouldn't have "special purposed" these two field names, but they're there. * update profile field by attribute name, not based on label * Update profile field removal assumptions We don't know what the method selectors will be, we have to ask. * remove old test * Update translations for Education and Work Since the ui_attributes_for(area:) now gives the label, not the attribute, we need to match the label of the profile field. Note to self: this exposes an issue in localizing the custom profile fields (probably a bigger problem for large, international communities like DEV than some others, but trying to match static translation files against user-modifiable database records seems like a problem we'll see again). * Empty commit to retrigger buildkite * Remove profile field migration update scripts Cloned the specs from the other "remove unused scripts" script. * Remove unused scripts The data update script removes the entry from the table (recording that these have run) - we also want to remove the files (preventing them from running again). * remove unneeded spec for removed file * when translation for header area field not found, use the title Only Work and Education already have keys in the yml translation file, and there's not a great (or easy?) way to make multiple translations on these fields right now. Since an admin can create a new field, and assign it to the header area, we can't assume the code has a configured translation key for this field. Fallback to the title (we do this in another context already) if there's no translation. * PR feedback: Avoid n+1 query for labels the original implementation of "label_for_attribute" had an n+1 query looping over each matched key. Follow suggested improvement and pull labels and attributes at once from the db and modify the returned hash. * Downcase title before looking for translation key This avoids putting "odd" capitalized keys into the yml translation file Revert addition of "Work" and "Education" to the users files. * use a let binding for duplicated test data * Update app/models/profile_field.rb prefer SecureRandom.hex for a dashless uuid (instead of removing the dashes). Co-authored-by: Jamie Gaskins <jgaskins@hey.com> Co-authored-by: Jamie Gaskins <jgaskins@hey.com> |
||
|
|
cde4e08534
|
Automatically create user profile if it's missing (#15787)
I don't know how it's nil, but it is, so we can remediate that here |
||
|
|
7511ee1fe2
|
Removed resaving articles after changing username (#15704) | ||
|
|
0403e78f08
|
Spelling (#15702)
* spelling: access Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: additional Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: administrative Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: aggregate Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: assigns Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: attributes Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: autocomplete Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: because Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: between Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: bootstrap Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: calculating Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: captcha Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: character Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: chosen Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: commenter Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: competitor Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: componentize Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: contrast Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: corresponding Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: description Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: destroyed Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: destroys Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: discussion Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: episode Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: escaped Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: evaluates Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: expired Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: explicitly Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: facebook Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: fragment Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: functionality Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: improper Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: incentive Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: interfere Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: latest Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: message Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: minimum Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: moderator Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: mouseover Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: mutual Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: nonexistent Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: notification Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: occasionally Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: occurrence Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: occurs Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: octokit Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: offset Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: omitted Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: opacity Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: organization Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: organizations Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: overridden Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: override Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: overriding Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: prefill Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: previous Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: profile Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: recycling Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: registered Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: repositories Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: rescuing Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: response Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: returns Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: second Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: separator Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: services Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: subscriber Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: subscription Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: success Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: successful Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: successfully Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: suppress Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: test Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: thought Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: uniqueness Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: unknown Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: unproductive Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: unreachable Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: unsuccessful Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: utilities Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: utility Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: valid Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: voluntarily Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: vomited Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: website Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: withholding Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> Co-authored-by: Josh Soref <jsoref@users.noreply.github.com> |
||
|
|
1b87cc7626
|
Profile generalization cleanup phase 2 (#14555)
* Remove ignored profile columns * Update test.rb * Remove dev profile fields CSV * Fix first round of specs * Add additional .includes * More spec fixes * Preload user in more locations * Fix typo * Spec/preloading fixes * Specy McSpecFace * Update e2e seeds * Update e2e sees with correct display area * Remove unused eager loading * Update test.rb * Add another entry to Bullet.safe_list * Fix e2e seeds |
||
|
|
08d82e7256
|
Profile generalization: cleanup (#12947)
* Remove hardcoded instances of education field * WIP Access display_email_on_profile via User Settings * Remove unused profile column * WIP Fix reference to bg_color_hex and text_color_hex * WIP fix issues revealed by systems specs * WIP fix issues revealed by services specs * WIP Fix failing tests * WIP Fix spec failures * wip * Move two attributes from controller to decorator * Update comment * Match user settings changes * More consistently use user.tag_line Even before the profile changes we sometimes used the user.summary attribute directly but used the user.tag_line method in other places. * Remove delegation, rename inline concern * Drop profile columns from users table * Remove duplicated work display from header * Update work profile field handling * Update DUS + spec * Delegate more carefully * Update delegation guard * Adapt for removed delegation * Undo accidental schema changes * Fix seeds * Remove accidentaly change * Fix User#processed_website_url * Update guard clause * Update profile card content * Add Organization#profile * Be more conservative with profile fields * Spec fixes round 1 * Fix typo * Update spec * Limit number of header fields and update card content * Decorate correct model * Update factory * Update schema.rb * Fix validation * How bad could this possibly be? * Pretty bad, nevermind * Remove obsolete code * Reset profile fields during test runs * Move profile fields back to before(:suite) * Spec fixes * Remove accidentally re-added files * More spec fixes * Specs * Change User#tag_keywords_for_search * More spec fixes * Add comment * Undo accidental schema changes * Attempt spec fix * Remove fix attempt * Fix e2e test * Update spec * Remove guard clause * Remove hardcoded instances of education field * WIP Access display_email_on_profile via User Settings * Remove unused profile column * WIP fix issues revealed by systems specs * WIP fix issues revealed by services specs * WIP Fix failing tests * WIP Fix spec failures * wip * Move two attributes from controller to decorator * Update comment * More consistently use user.tag_line Even before the profile changes we sometimes used the user.summary attribute directly but used the user.tag_line method in other places. * Remove education * Add comment * WIP * Clean up mostly_work_with * WIP * Update work profile field handling * More work-related changes * Remove settings_only from display_area enum * Remove quickfix from _metadata partial * Remove special attributes * Remove leftover spec * Retrieve location from profile, not user * Profile.special_attributes no longer exists * Update specs * More spec fixes * Update UsersController * Update UsersController and spec * Fix e2e seeds * Minor cleanup * More e2e seed fixes * Fix profile field CSV * Fix e2e seeds * Move one more attribute in e2e seeds * Remove duplicate line * Clear inputs before typing in them * Fix formatting issues * Profiles::Update -> Users::Update * Remove RegistrationsController#resolve_profile_field_issues * Fix schema.rb * More cleanup * Fix specs * Fix remaining spec Co-authored-by: Jacob Herrington <jacobherringtondeveloper@gmail.com> |
Renamed from spec/services/profiles/update_spec.rb (Browse further)