From 7837c71c33d0e92df1e1439dc0f6474ce2e614bd Mon Sep 17 00:00:00 2001 From: Maddie Kasula Date: Mon, 29 Apr 2019 13:40:39 -0700 Subject: [PATCH 1/8] Add is_stable to properties hash in .course files --- dashboard/config/courses/allthethingscourse.course | 3 ++- dashboard/config/courses/andrea-test-dlp.course | 3 ++- dashboard/config/courses/csd-2017.course | 5 +++-- dashboard/config/courses/csd-2018.course | 5 +++-- dashboard/config/courses/csp-2017.course | 5 +++-- dashboard/config/courses/csp-2018.course | 3 ++- 6 files changed, 15 insertions(+), 9 deletions(-) diff --git a/dashboard/config/courses/allthethingscourse.course b/dashboard/config/courses/allthethingscourse.course index e0e11a966bd74..4536f4dd4292a 100644 --- a/dashboard/config/courses/allthethingscourse.course +++ b/dashboard/config/courses/allthethingscourse.course @@ -5,5 +5,6 @@ "allthehiddenthings" ], "properties": { + "is_stable": true } -} \ No newline at end of file +} diff --git a/dashboard/config/courses/andrea-test-dlp.course b/dashboard/config/courses/andrea-test-dlp.course index aa991b685d44e..b5f273f2b6c83 100644 --- a/dashboard/config/courses/andrea-test-dlp.course +++ b/dashboard/config/courses/andrea-test-dlp.course @@ -4,5 +4,6 @@ ], "properties": { + "is_stable": true } -} \ No newline at end of file +} diff --git a/dashboard/config/courses/csd-2017.course b/dashboard/config/courses/csd-2017.course index 9ebb382ea559a..8553c2c525b84 100644 --- a/dashboard/config/courses/csd-2017.course +++ b/dashboard/config/courses/csd-2017.course @@ -21,6 +21,7 @@ ], "has_verified_resources": true, "family_name": "csd", - "version_year": "2017" + "version_year": "2017", + "is_stable": true } -} \ No newline at end of file +} diff --git a/dashboard/config/courses/csd-2018.course b/dashboard/config/courses/csd-2018.course index bfa31ffaa30c5..cf6b2ebd0d683 100644 --- a/dashboard/config/courses/csd-2018.course +++ b/dashboard/config/courses/csd-2018.course @@ -21,6 +21,7 @@ ], "has_verified_resources": true, "family_name": "csd", - "version_year": "2018" + "version_year": "2018", + "is_stable": true } -} \ No newline at end of file +} diff --git a/dashboard/config/courses/csp-2017.course b/dashboard/config/courses/csp-2017.course index 6dbb918268368..8dfcef8eac45e 100644 --- a/dashboard/config/courses/csp-2017.course +++ b/dashboard/config/courses/csp-2017.course @@ -40,6 +40,7 @@ ], "has_verified_resources": true, "family_name": "csp", - "version_year": "2017" + "version_year": "2017", + "is_stable": true } -} \ No newline at end of file +} diff --git a/dashboard/config/courses/csp-2018.course b/dashboard/config/courses/csp-2018.course index 0bb4c7132eeab..dd35d207c4bde 100644 --- a/dashboard/config/courses/csp-2018.course +++ b/dashboard/config/courses/csp-2018.course @@ -23,6 +23,7 @@ ], "has_verified_resources": true, "family_name": "csp", - "version_year": "2018" + "version_year": "2018", + "is_stable": true } } \ No newline at end of file From a9d7e39c40fb8954c75166f89e88743bf5463a0c Mon Sep 17 00:00:00 2001 From: Maddie Kasula Date: Mon, 29 Apr 2019 14:23:43 -0700 Subject: [PATCH 2/8] Add is_stable serialized property to course --- dashboard/app/models/course.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/dashboard/app/models/course.rb b/dashboard/app/models/course.rb index bb744773fd5d3..39e2fb4b5385f 100644 --- a/dashboard/app/models/course.rb +++ b/dashboard/app/models/course.rb @@ -37,6 +37,7 @@ def skip_name_format_validation has_verified_resources family_name version_year + is_stable ) def to_param From c6143316499bf6396f8ce7985f44607eb436f2d1 Mon Sep 17 00:00:00 2001 From: Maddie Kasula Date: Mon, 29 Apr 2019 14:31:12 -0700 Subject: [PATCH 3/8] Add stable_or_default course helper --- dashboard/app/models/course.rb | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/dashboard/app/models/course.rb b/dashboard/app/models/course.rb index 39e2fb4b5385f..ee89f9af209fe 100644 --- a/dashboard/app/models/course.rb +++ b/dashboard/app/models/course.rb @@ -56,6 +56,13 @@ def localized_version_title I18n.t("data.course.name.#{name}.version_title", default: version_year) end + # Any course with a plc_course or no family_name is considered stable. + # All other courses should specify an is_stable boolean property. + def stable_or_default + return true if plc_course || !family_name + is_stable + end + def self.file_path(name) Rails.root.join("config/courses/#{name}.course") end @@ -189,8 +196,7 @@ def assignable_info(user = nil) info[:assignment_family_title] = localized_assignment_family_title info[:version_year] = version_year || ScriptConstants::DEFAULT_VERSION_YEAR info[:version_title] = localized_version_title - # For now, all course versions visible in the UI are stable. - info[:is_stable] = true + info[:is_stable] = stable_or_default info[:category] = I18n.t('courses_category') info[:script_ids] = user ? scripts_for_user(user).map(&:id) : @@ -297,9 +303,7 @@ def summarize_versions(user = nil) version_year: c.version_year, version_title: c.localized_version_title, can_view_version: c.can_view_version?(user), - # TODO: (madelynkasula) Update is_stable to no longer be hard-coded once - # properties[:is_stable] is implemented for courses. - is_stable: true + is_stable: stable_or_default } end From ff6071d9979fa0b0261ee675602a3f78923a1f29 Mon Sep 17 00:00:00 2001 From: Maddie Kasula Date: Mon, 29 Apr 2019 14:33:41 -0700 Subject: [PATCH 4/8] Remove newlines added in previous commit --- dashboard/config/courses/allthethingscourse.course | 2 +- dashboard/config/courses/andrea-test-dlp.course | 2 +- dashboard/config/courses/csd-2017.course | 2 +- dashboard/config/courses/csd-2018.course | 2 +- dashboard/config/courses/csp-2017.course | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/dashboard/config/courses/allthethingscourse.course b/dashboard/config/courses/allthethingscourse.course index 4536f4dd4292a..40edd9c685586 100644 --- a/dashboard/config/courses/allthethingscourse.course +++ b/dashboard/config/courses/allthethingscourse.course @@ -7,4 +7,4 @@ "properties": { "is_stable": true } -} +} \ No newline at end of file diff --git a/dashboard/config/courses/andrea-test-dlp.course b/dashboard/config/courses/andrea-test-dlp.course index b5f273f2b6c83..72193f78d2493 100644 --- a/dashboard/config/courses/andrea-test-dlp.course +++ b/dashboard/config/courses/andrea-test-dlp.course @@ -6,4 +6,4 @@ "properties": { "is_stable": true } -} +} \ No newline at end of file diff --git a/dashboard/config/courses/csd-2017.course b/dashboard/config/courses/csd-2017.course index 8553c2c525b84..fc5d73203cb8f 100644 --- a/dashboard/config/courses/csd-2017.course +++ b/dashboard/config/courses/csd-2017.course @@ -24,4 +24,4 @@ "version_year": "2017", "is_stable": true } -} +} \ No newline at end of file diff --git a/dashboard/config/courses/csd-2018.course b/dashboard/config/courses/csd-2018.course index cf6b2ebd0d683..2246bb867f1c9 100644 --- a/dashboard/config/courses/csd-2018.course +++ b/dashboard/config/courses/csd-2018.course @@ -24,4 +24,4 @@ "version_year": "2018", "is_stable": true } -} +} \ No newline at end of file diff --git a/dashboard/config/courses/csp-2017.course b/dashboard/config/courses/csp-2017.course index 8dfcef8eac45e..c47f527557ff8 100644 --- a/dashboard/config/courses/csp-2017.course +++ b/dashboard/config/courses/csp-2017.course @@ -43,4 +43,4 @@ "version_year": "2017", "is_stable": true } -} +} \ No newline at end of file From ec89b09ae33d07cd4b0c6161cab782ca03c8ba6d Mon Sep 17 00:00:00 2001 From: Maddie Kasula Date: Mon, 29 Apr 2019 14:49:47 -0700 Subject: [PATCH 5/8] Fallback to false if course doesn't have is_stable property defined --- dashboard/app/models/course.rb | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/dashboard/app/models/course.rb b/dashboard/app/models/course.rb index ee89f9af209fe..be82a69a6da33 100644 --- a/dashboard/app/models/course.rb +++ b/dashboard/app/models/course.rb @@ -57,10 +57,11 @@ def localized_version_title end # Any course with a plc_course or no family_name is considered stable. - # All other courses should specify an is_stable boolean property. + # All other courses must specify an is_stable boolean property. def stable_or_default return true if plc_course || !family_name - is_stable + + is_stable || false end def self.file_path(name) From 273350df26be9f20952c04a6239ac59102257397 Mon Sep 17 00:00:00 2001 From: Maddie Kasula Date: Mon, 29 Apr 2019 16:18:34 -0700 Subject: [PATCH 6/8] Unit test stable_or_default --- dashboard/test/models/course_test.rb | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/dashboard/test/models/course_test.rb b/dashboard/test/models/course_test.rb index 2f8a3531cb5e7..daf4dd7c6c524 100644 --- a/dashboard/test/models/course_test.rb +++ b/dashboard/test/models/course_test.rb @@ -61,7 +61,7 @@ class NameValidationTests < ActiveSupport::TestCase end test "should serialize to json" do - course = create(:course, name: 'my-course') + course = create(:course, name: 'my-course', is_stable: true) create(:course_script, course: course, position: 1, script: create(:script, name: "script1")) create(:course_script, course: course, position: 2, script: create(:script, name: "script2")) create(:course_script, course: course, position: 3, script: create(:script, name: "script3")) @@ -71,6 +71,30 @@ class NameValidationTests < ActiveSupport::TestCase obj = JSON.parse(serialization) assert_equal 'my-course', obj['name'] assert_equal ['script1', 'script2', 'script3'], obj['script_names'] + assert obj['properties']['is_stable'] + end + + test "stable_or_default: true if course has plc_course" do + course = Course.new(family_name: 'plc') + course.plc_course = Plc::Course.new(course: course) + course.save + + assert course.stable_or_default + end + + test "stable_or_default: true if course is not in a family" do + course = create :course + assert course.stable_or_default + end + + test "stable_or_default: true if course in family has is_stable set" do + course = create :course, family_name: 'csd', is_stable: true + assert course.stable_or_default + end + + test "stable_or_default: defaults to false if course in family does not have is_stable set" do + course = create :course, family_name: 'csd' + refute course.stable_or_default end class UpdateScriptsTests < ActiveSupport::TestCase From 95ad1be40f3d097b0c70a47434ee02ad7f17a02c Mon Sep 17 00:00:00 2001 From: Maddie Kasula Date: Mon, 29 Apr 2019 16:27:15 -0700 Subject: [PATCH 7/8] Remove is_stable property from courses not in families --- dashboard/config/courses/allthethingscourse.course | 1 - dashboard/config/courses/andrea-test-dlp.course | 1 - 2 files changed, 2 deletions(-) diff --git a/dashboard/config/courses/allthethingscourse.course b/dashboard/config/courses/allthethingscourse.course index 40edd9c685586..e0e11a966bd74 100644 --- a/dashboard/config/courses/allthethingscourse.course +++ b/dashboard/config/courses/allthethingscourse.course @@ -5,6 +5,5 @@ "allthehiddenthings" ], "properties": { - "is_stable": true } } \ No newline at end of file diff --git a/dashboard/config/courses/andrea-test-dlp.course b/dashboard/config/courses/andrea-test-dlp.course index 72193f78d2493..aa991b685d44e 100644 --- a/dashboard/config/courses/andrea-test-dlp.course +++ b/dashboard/config/courses/andrea-test-dlp.course @@ -4,6 +4,5 @@ ], "properties": { - "is_stable": true } } \ No newline at end of file From b7c5fd82a07add3ce79aad031ea859f2570ed9f3 Mon Sep 17 00:00:00 2001 From: Maddie Kasula Date: Tue, 30 Apr 2019 12:52:05 -0700 Subject: [PATCH 8/8] Rename stable_or_default to stable? --- dashboard/app/models/course.rb | 6 +++--- dashboard/test/models/course_test.rb | 16 ++++++++-------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/dashboard/app/models/course.rb b/dashboard/app/models/course.rb index be82a69a6da33..7f7aeb0cb9906 100644 --- a/dashboard/app/models/course.rb +++ b/dashboard/app/models/course.rb @@ -58,7 +58,7 @@ def localized_version_title # Any course with a plc_course or no family_name is considered stable. # All other courses must specify an is_stable boolean property. - def stable_or_default + def stable? return true if plc_course || !family_name is_stable || false @@ -197,7 +197,7 @@ def assignable_info(user = nil) info[:assignment_family_title] = localized_assignment_family_title info[:version_year] = version_year || ScriptConstants::DEFAULT_VERSION_YEAR info[:version_title] = localized_version_title - info[:is_stable] = stable_or_default + info[:is_stable] = stable? info[:category] = I18n.t('courses_category') info[:script_ids] = user ? scripts_for_user(user).map(&:id) : @@ -304,7 +304,7 @@ def summarize_versions(user = nil) version_year: c.version_year, version_title: c.localized_version_title, can_view_version: c.can_view_version?(user), - is_stable: stable_or_default + is_stable: stable? } end diff --git a/dashboard/test/models/course_test.rb b/dashboard/test/models/course_test.rb index daf4dd7c6c524..d33c2b02619a3 100644 --- a/dashboard/test/models/course_test.rb +++ b/dashboard/test/models/course_test.rb @@ -74,27 +74,27 @@ class NameValidationTests < ActiveSupport::TestCase assert obj['properties']['is_stable'] end - test "stable_or_default: true if course has plc_course" do + test "stable?: true if course has plc_course" do course = Course.new(family_name: 'plc') course.plc_course = Plc::Course.new(course: course) course.save - assert course.stable_or_default + assert course.stable? end - test "stable_or_default: true if course is not in a family" do + test "stable?: true if course is not in a family" do course = create :course - assert course.stable_or_default + assert course.stable? end - test "stable_or_default: true if course in family has is_stable set" do + test "stable?: true if course in family has is_stable set" do course = create :course, family_name: 'csd', is_stable: true - assert course.stable_or_default + assert course.stable? end - test "stable_or_default: defaults to false if course in family does not have is_stable set" do + test "stable?: defaults to false if course in family does not have is_stable set" do course = create :course, family_name: 'csd' - refute course.stable_or_default + refute course.stable? end class UpdateScriptsTests < ActiveSupport::TestCase