Skip to content

Commit

Permalink
Merge pull request #7699 from fjordllc/bug/mismatch_complete_practice…
Browse files Browse the repository at this point in the history
…_counts

修了プラクティスと修了したプラクティスの数がずれている問題の解消
  • Loading branch information
komagata committed May 20, 2024
2 parents da9872b + fa5b1da commit 0cc0ca1
Show file tree
Hide file tree
Showing 22 changed files with 235 additions and 55 deletions.
8 changes: 8 additions & 0 deletions app/decorators/user_decorator.rb
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,14 @@ def cached_completed_percentage
end
end

def completed_fraction
"修了: #{completed_practices.size} (必須: #{completed_practices_include_progress.size}/#{practices_include_progress.size})"
end

def completed_fraction_in_metas
"#{completed_practices.size} (必須:#{completed_practices_include_progress.size})"
end

def customer_url
"https://dashboard.stripe.com/customers/#{customer_id}"
end
Expand Down
18 changes: 16 additions & 2 deletions app/javascript/components/UserPracticeProgress.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,22 @@ export default function UserPracticeProgress({ user }) {
role="progressbar"
style={{ width: roundedPercentage }}></div>
</div>
<div className="completed-practices-progress__number">
{completedPracticesProgressNumber}
<div className="completed-practices-progress__counts">
<input
className="a-toggle-checkbox"
type="checkbox"
id={`userid_${user.id}`}
/>
<label
className="completed-practices-progress__counts-inner"
htmlFor={`userid_${user.id}`}>
<div className="completed-practices-progress__percentage">
{roundedPercentage}
</div>
<div className="completed-practices-progress__number">
{completedPracticesProgressNumber}
</div>
</label>
</div>
</div>
)
Expand Down
10 changes: 8 additions & 2 deletions app/javascript/components/user-practice-progress.vue
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,14 @@
:aria-valuenow='ariaValuenow()',
role='progressbar',
:style='`width: ${roundedPercentage}`')
.completed-practices-progress__number
| {{ completedPracticesProgressNumber() }}
.completed-practices-progress__counts
input.a-toggle-checkbox(type='checkbox', :id='`userid_${this.user.id}`')
label.completed-practices-progress__counts-inner(
:for='`userid_${this.user.id}`')
.completed-practices-progress__percentage
| {{ roundedPercentage }}
.completed-practices-progress__number
| {{ completedPracticesProgressNumber() }}
</template>
<script>
export default {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
$bar-height: .75rem
.completed-practices-progress
padding-block: .75rem
padding-inline: 1rem
padding: .75rem 1rem
display: flex
align-items: center
gap: .5rem

.completed-practices-progress__bar-container
flex: 1
Expand All @@ -21,7 +21,34 @@ $bar-height: .75rem
+position(relative, top $bar-height * -1)
box-shadow: rgba(black, .2) 0 .0625rem .0625rem

.completed-practices-progress__counts
position: relative
cursor: pointer
display: block

.completed-practices-progress__counts-inner
cursor: pointer
&:hover
.completed-practices-progress__percentage
text-decoration: underline

.completed-practices-progress__percentage
+text-block(.8125rem, right nowrap)

.completed-practices-progress__number
+text-block(.8125rem 1rem, right nowrap)
height: 1rem
margin-left: .5rem
position: absolute
right: 0
bottom: calc(100% + .5rem)
background-color: var(--base)
border: solid 1px var(--border)
padding: .25rem .5rem
+text-block(.8125rem 1.4, right nowrap)
border-radius: .25rem

.completed-practices-progress__counts
input:checked ~ label .completed-practices-progress__number
display: block

.completed-practices-progress__counts
input:not(:checked) ~ label .completed-practices-progress__number
display: none
14 changes: 5 additions & 9 deletions app/models/user.rb
Original file line number Diff line number Diff line change
Expand Up @@ -473,10 +473,6 @@ def completed_percentage
completed_practices_include_progress.size.to_f / practices_include_progress.size * MAX_PERCENTAGE
end

def completed_fraction
"#{completed_practices_include_progress.size}/#{practices_include_progress.size}"
end

def completed_practices_size_by_category
Practice
.joins({ categories: :categories_practices }, :learnings)
Expand All @@ -490,6 +486,11 @@ def completed_practices_size_by_category
.count('DISTINCT practices.id')
end

def completed_practices_include_progress
practices_include_progress.joins(:learnings)
.merge(Learning.complete.where(user_id: id))
end

def active?
(last_activity_at && (last_activity_at > 1.month.ago)) || created_at > 1.month.ago
end
Expand Down Expand Up @@ -801,11 +802,6 @@ def practices_include_progress
course.practices.where(include_progress: true)
end

def completed_practices_include_progress
practices_include_progress.joins(:learnings)
.merge(Learning.complete.where(user_id: id))
end

def unstarted_practices
@unstarted_practices ||= practices -
practices.joins(:learnings).where(learnings: { user_id: id, status: :started })
Expand Down
2 changes: 1 addition & 1 deletion app/views/users/_metas.html.slim
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@
.user-metas__item-label
| 修了プラクティス
.user-metas__item-value
= user.completed_practices.size
= user.completed_fraction_in_metas
- unless user.admin? || user.adviser?
.user-metas__item
.user-metas__item-label
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,5 +8,10 @@
.completed-practices-progress__bar-container
.completed-practices-progress__bar
.completed-practices-progress__percentage-bar(aria-valuemax='100' aria-valuemin='0' aria-valuenow="#{percentage}" role='progressbar' style="width: #{number_to_percentage percentage, precision: 0};")
.completed-practices-progress__number
= fraction
.completed-practices-progress__counts
input.a-toggle-checkbox(type='checkbox' id="userid_#{user.id}")
label.completed-practices-progress__counts-inner(for="userid_#{user.id}")
.completed-practices-progress__percentage
= "#{percentage.floor(0)}%"
.completed-practices-progress__number
= fraction
5 changes: 5 additions & 0 deletions db/fixtures/categories.yml
Original file line number Diff line number Diff line change
Expand Up @@ -102,3 +102,8 @@ category21:
name: "ゲームのテスト"
slug: "game-test"
description: "まずはここからはじめましょう。ここでの学習の進め方を学びます。"

category22:
name: "就職活動"
slug: "job-hunting"
description: "就職に向けての準備に入ります。"
5 changes: 5 additions & 0 deletions db/fixtures/categories_practices.yml
Original file line number Diff line number Diff line change
Expand Up @@ -297,3 +297,8 @@ categories_practice60:
practice: practice60
category: category2
position: 6

categories_practice61:
practice: practice61
category: category22
position: 1
5 changes: 5 additions & 0 deletions db/fixtures/courses_categories.yml
Original file line number Diff line number Diff line change
Expand Up @@ -117,3 +117,8 @@ courses_category24:
course: course3
category: category15
position: 3

courses_category25:
course: course1
category: category22
position: 17
5 changes: 5 additions & 0 deletions db/fixtures/discord_profiles.yml
Original file line number Diff line number Diff line change
Expand Up @@ -300,3 +300,8 @@ discord_profile_paginataion-jirou:
user: paginataion-jirou
account_name:
times_url:

discord_profire_harikirio:
user: harikirio
account_name:
times_url:
12 changes: 12 additions & 0 deletions db/fixtures/learnings.yml
Original file line number Diff line number Diff line change
Expand Up @@ -117,3 +117,15 @@ learning<%= i + 18 %>:
created_at: <%= (today - 2.weeks + 2.day + 12.hours - i.day).to_formatted_s(:db) %>
updated_at: <%= (today - 2.weeks + 2.day + 12.hours - i.day).to_formatted_s(:db) %>
<% end %>

learning23:
user: harikirio
practice: practice1
status: "complete"
completion_message_displayed: false

learning24:
user: harikirio
practice: practice61
status: "complete"
completion_message_displayed: false
8 changes: 8 additions & 0 deletions db/fixtures/practices.yml
Original file line number Diff line number Diff line change
Expand Up @@ -386,3 +386,11 @@ practice60:
description: "概要欄(概要文&OGP画像)を表示します"
goal: "goal..."
memo: "memo for mentors..."

practice61:
title: "企業研究"
summary: "概要です"
description: "就職したい企業について調べます。(進捗の計算には含めません)"
goal: "goal..."
include_progress: false
memo: "memo for mentors..."
4 changes: 4 additions & 0 deletions db/fixtures/talks.yml
Original file line number Diff line number Diff line change
Expand Up @@ -227,3 +227,7 @@ talk_kensyu-end-over-1-week:
talk_kensyu-not-setting-end-date:
user: kensyu-not-setting-end-date
action_completed: true

talk_harikirio:
user: harikirio
action_completed: true
20 changes: 20 additions & 0 deletions db/fixtures/users.yml
Original file line number Diff line number Diff line change
Expand Up @@ -1422,3 +1422,23 @@ pjord:
created_at: "2024-03-05 00:00:30"
sent_student_followup_message: true
last_activity_at: "2021-02-01 00:00:30"

harikirio: #必修でないプラクティスも修了しているユーザー
login_name: harikirio
email: harikiro@fjord.jp
crypted_password: $2a$10$n/xv4/1luueN6plzm2OyDezWlZFyGHjQEf4hwAW1r3k.lCm0frPK. # testtest
salt: zW3kQ9ubsxQQtzzzs4ap
name: Hari Kirio
name_kana: ハリ キリオ
github_account: harikirio
twitter_account: harikirio
description: "必修でないプラクティスも取り組みます!"
course: course1
job: office_worker
experience: rails
job_seeker: true
unsubscribe_email_token: Z2tKHxSjj7FreyqQ95Yd9g
updated_at: "2020-01-01 00:00:12"
created_at: "2020-01-01 00:00:12"
sent_student_followup_message: true
last_activity_at: "2020-01-01 00:00:12"
34 changes: 34 additions & 0 deletions test/decorators/user_decorator_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ class UserDecoratorTest < ActiveDecoratorTestCase
@japanese_user = decorate(users(:kimura))
@american_user = decorate(users(:tom))
@subdivision_not_registered_user = decorate(users(:hatsuno))
@non_required_subject_completed_user = decorate(users(:harikirio))
end

test '#icon_title' do
Expand Down Expand Up @@ -69,4 +70,37 @@ class UserDecoratorTest < ActiveDecoratorTestCase
assert_equal @admin_mentor_user.editor_or_other_editor, 'textbringer'
assert_equal @student_user.editor_or_other_editor, 'VSCode'
end

test '#completed_fraction don\'t calculate practice that include_progress: false' do
user = @admin_mentor_user
old_fraction = user.completed_practices_include_progress.size
user.completed_practices << practices(:practice5)

assert_not_equal old_fraction, user.completed_fraction

old_fraction = user.completed_practices_include_progress.size
user.completed_practices << practices(:practice53)

assert_equal old_fraction, user.completed_practices_include_progress.size
end

test '#completed_fraction don\'t calculate practice unrelated cource' do
old_fraction = @admin_mentor_user.completed_practices_include_progress.size
@admin_mentor_user.completed_practices << practices(:practice5)

assert_not_equal old_fraction, @admin_mentor_user.completed_practices_include_progress.size

old_fraction = @admin_mentor_user.completed_practices_include_progress.size
@admin_mentor_user.completed_practices << practices(:practice55)

assert_equal old_fraction, @admin_mentor_user.completed_practices_include_progress.size
end

test '#completed_fraction_in_metas' do
fraction_in_metas = '2 (必須:1)'
@non_required_subject_completed_user.completed_practices << practices(:practice5)
@non_required_subject_completed_user.completed_practices << practices(:practice61)

assert_equal fraction_in_metas, @non_required_subject_completed_user.completed_fraction_in_metas
end
end
5 changes: 5 additions & 0 deletions test/fixtures/discord_profiles.yml
Original file line number Diff line number Diff line change
Expand Up @@ -209,3 +209,8 @@ discord_profile_marumarushain<%= i %>:
account_name:
times_url:
<% end %>

discord_profire_harikirio:
user: harikirio
account_name:
times_url:
8 changes: 8 additions & 0 deletions test/fixtures/practices.yml
Original file line number Diff line number Diff line change
Expand Up @@ -366,3 +366,11 @@ practice57:
goal: "goal..."
include_progress: false
last_updated_user: komagata

practice61:
title: "企業研究"
summary: "概要です"
description: "就職したい企業について調べます。(進捗の計算には含めません)"
goal: "goal..."
include_progress: false
memo: "memo for mentors..."
4 changes: 4 additions & 0 deletions test/fixtures/talks.yml
Original file line number Diff line number Diff line change
Expand Up @@ -150,3 +150,7 @@ marumarushain<%= i %>: # ページネーション確認のためのユーザー
user: marumarushain<%= i %>
action_completed: true
<% end %>

talk42:
user: harikirio
action_completed: true
20 changes: 20 additions & 0 deletions test/fixtures/users.yml
Original file line number Diff line number Diff line change
Expand Up @@ -998,3 +998,23 @@ marumarushain<%= i %>: # ページネーション確認のためのユーザー
last_activity_at: "2014-01-01 00:00:0<%= 2 + (i - 1) / 2 %>"
sent_student_followup_message: true
<% end %>

harikirio: #必修でないプラクティスも修了しているユーザー
login_name: harikirio
email: harikiro@fjord.jp
crypted_password: $2a$10$n/xv4/1luueN6plzm2OyDezWlZFyGHjQEf4hwAW1r3k.lCm0frPK. # testtest
salt: zW3kQ9ubsxQQtzzzs4ap
name: Hari Kirio
name_kana: ハリ キリオ
github_account: harikirio
twitter_account: harikirio
description: "必修でないプラクティスも取り組みます!"
course: course1
job: office_worker
experience: rails
job_seeker: true
unsubscribe_email_token: Z2tKHxSjj7FreyqQ95Yd9g
updated_at: "2020-01-01 00:00:12"
created_at: "2020-01-01 00:00:12"
sent_student_followup_message: true
last_activity_at: "2020-01-01 00:00:12"
Loading

0 comments on commit 0cc0ca1

Please sign in to comment.