From 612616b8a550821427ee5e909b09097f0c01ca88 Mon Sep 17 00:00:00 2001 From: Anton Khorev Date: Thu, 15 May 2025 15:04:15 +0300 Subject: [PATCH] Add user.default_diary_language setter --- app/controllers/diary_entries_controller.rb | 8 +----- app/models/user.rb | 5 ++++ test/models/user_test.rb | 32 +++++++++++++++++++++ 3 files changed, 38 insertions(+), 7 deletions(-) diff --git a/app/controllers/diary_entries_controller.rb b/app/controllers/diary_entries_controller.rb index 036d02081..7a9cba3ca 100644 --- a/app/controllers/diary_entries_controller.rb +++ b/app/controllers/diary_entries_controller.rb @@ -109,13 +109,7 @@ class DiaryEntriesController < ApplicationController @diary_entry.user = current_user if @diary_entry.save - diary_language_preference = current_user.preferences.find_by(:k => "diary.default_language") - if diary_language_preference - diary_language_preference.v = @diary_entry.language_code - diary_language_preference.save! - else - current_user.preferences.create(:k => "diary.default_language", :v => @diary_entry.language_code) - end + current_user.default_diary_language = @diary_entry.language_code # Subscribe user to diary comments @diary_entry.subscriptions.create(:user => current_user) diff --git a/app/models/user.rb b/app/models/user.rb index 31fb0d051..eb5345098 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -263,6 +263,11 @@ class User < ApplicationRecord end end + def default_diary_language=(language) + preference = preferences.find_or_create_by(:k => "diary.default_language") + preference.update!(:v => language) + end + def home_location? home_lat && home_lon end diff --git a/test/models/user_test.rb b/test/models/user_test.rb index 8c1cee290..b051cc731 100644 --- a/test/models/user_test.rb +++ b/test/models/user_test.rb @@ -284,6 +284,38 @@ class UserTest < ActiveSupport::TestCase assert_equal "en", user.default_diary_language end + def test_default_diary_language_set + create(:language, :code => "en") + user = create(:user, :languages => []) + + assert_difference "user.preferences.count", 1 do + assert_equal "en", (user.default_diary_language = "en") + end + + user.reload + assert_equal "en", user.default_diary_language + preference = user.preferences.find_by(:k => "diary.default_language") + assert_equal "en", preference.v + end + + def test_default_diary_language_set_twice + create(:language, :code => "en") + create(:language, :code => "fr") + user = create(:user, :languages => []) + + assert_difference "user.preferences.count", 1 do + assert_equal "en", (user.default_diary_language = "en") + end + assert_difference "user.preferences.count", 0 do + assert_equal "fr", (user.default_diary_language = "fr") + end + + user.reload + assert_equal "fr", user.default_diary_language + preference = user.preferences.find_by(:k => "diary.default_language") + assert_equal "fr", preference.v + end + def test_visible? assert_predicate build(:user, :pending), :visible? assert_predicate build(:user, :active), :visible? -- 2.39.5