Skip to content

Commit a0d3191

Browse files
author
Dan Minkevitch
committed
Add Blueprint Course course setting
Closes MC-40 Test Plan: * Go to any course's settings page with the Master Course's feature flag disabled * There shouldn't be a check box to mark the course as a Blueprint Course * Enable the course's account's Master Courses feature flag * Go back to the course's settings page * There should now be a checkbox for "Blueprint Courses" for users with `manage courses` permissions * If the user doesn't have the `manage courses` permission, then there should just be a label in place of the check box reading `Yes` or `No` depending on whether or not the setting is enabled. Change-Id: I3de1565acb10b8e4438f7a48e231d6b58aa0be55 Reviewed-on: https://gerrit.instructure.com/99283 Reviewed-by: James Williams <jamesw@instructure.com> Tested-by: Jenkins QA-Review: Heath Hales <hhales@instructure.com> Product-Review: Matt Goodwin <mattg@instructure.com>
1 parent c6a9a26 commit a0d3191

5 files changed

Lines changed: 57 additions & 4 deletions

File tree

app/controllers/courses_controller.rb

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2267,6 +2267,12 @@ def update
22672267
params_for_update[:conclude_at] = params[:course].delete(:end_at) if api_request? && params[:course].has_key?(:end_at)
22682268
@default_wiki_editing_roles_was = @course.default_wiki_editing_roles
22692269

2270+
if params[:course].has_key?(:master_course)
2271+
master_course = value_to_boolean(params[:course].delete(:master_course))
2272+
action = master_course ? "set" : "remove"
2273+
MasterCourses::MasterTemplate.send("#{action}_as_master_course", @course)
2274+
end
2275+
22702276
@course.attributes = params_for_update
22712277

22722278
if params[:course][:course_visibility].present?

app/models/course.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ class Course < ActiveRecord::Base
2828
include ContentLicenses
2929
include TurnitinID
3030

31-
attr_accessor :teacher_names
31+
attr_accessor :teacher_names, :master_course
3232
attr_writer :student_count, :primary_enrollment_type, :primary_enrollment_role_id, :primary_enrollment_rank, :primary_enrollment_state, :primary_enrollment_date, :invitation
3333

3434
time_zone_attribute :time_zone

app/models/master_courses/master_template.rb

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,16 @@ def self.is_master_course?(course_id)
4949

5050
def self.set_as_master_course(course)
5151
self.unique_constraint_retry do
52-
course.master_course_templates.active.for_full_course.first_or_create
52+
template = course.master_course_templates.for_full_course.first_or_create
53+
template.undestroy unless template.active?
54+
template
55+
end
56+
end
57+
58+
def self.remove_as_master_course(course)
59+
self.unique_constraint_retry do
60+
template = course.master_course_templates.active.for_full_course.first
61+
template.destroy && template if template.present?
5362
end
5463
end
5564

app/views/courses/settings.html.erb

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,12 @@
88

99
can_manage_courses = can_do(@context.account, @current_user, :manage_courses)
1010
can_rename_course = can_manage_courses || (can_manage && !@context.root_account.settings[:prevent_course_renaming_by_teachers])
11+
can_manage_master_courses = can_manage_courses && can_do(@context.account, @current_user, :manage_master_courses)
1112
has_multiple_sections = @context.course_sections.active.count > 1
1213

1314
can_see_users = can_do(@context, @current_user, :read_roster, :manage_students, :manage_admin_users)
15+
16+
is_master_course = MasterCourses::MasterTemplate.is_master_course?(@context)
1417
%>
1518

1619
<% content_for :right_side do %>
@@ -97,6 +100,19 @@
97100
<% end %>
98101
</td>
99102
</tr>
103+
<% if @context.root_account.feature_enabled?(:master_courses) %>
104+
<tr>
105+
<td class="form-label nobr"><%= f.blabel :blueprint_course, :en => "Blueprint Course" %></td>
106+
<td class="nobr">
107+
<% if can_manage_master_courses %>
108+
<%= f.check_box :master_course, :checked => is_master_course %>
109+
<%= f.label :master_course, :en => "Enable course as a Blueprint Course" %>
110+
<% else %>
111+
<span id="course_master_course"><%= is_master_course ? t("Yes") : t("No") %></span>
112+
<% end %>
113+
</td>
114+
</tr>
115+
<% end %>
100116
<tr>
101117
<td><%= f.blabel :time_zone, :en => "Time Zone" %></td>
102118
<td>

spec/models/master_courses/master_template_spec.rb

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,18 +15,40 @@
1515
expect(MasterCourses::MasterTemplate.full_template_for(@course)).to eq template
1616
end
1717

18-
it "should ignore deleted templates" do
18+
it "should restore deleted templates" do
1919
template = MasterCourses::MasterTemplate.set_as_master_course(@course)
2020
template.destroy!
2121

2222
expect(template).to be_deleted
2323

2424
template2 = MasterCourses::MasterTemplate.set_as_master_course(@course)
25-
expect(template2).to_not eq template
25+
expect(template2).to eq template
2626
expect(template2).to be_active
2727
end
2828
end
2929

30+
describe "remove_as_master_course" do
31+
it "should remove a template from a course" do
32+
template = MasterCourses::MasterTemplate.set_as_master_course(@course)
33+
expect(template.workflow_state).to eq "active"
34+
expect(template.active?).to eq true
35+
36+
expect{MasterCourses::MasterTemplate.remove_as_master_course(@course)}.to change{template.reload.workflow_state}.from("active").to("deleted")
37+
expect(MasterCourses::MasterTemplate.full_template_for(@course)).to be_nil
38+
end
39+
40+
it "should ignore deleted templates" do
41+
template = MasterCourses::MasterTemplate.set_as_master_course(@course)
42+
template.destroy
43+
expect(template).to be_deleted
44+
45+
MasterCourses::MasterTemplate.remove_as_master_course(@course)
46+
47+
template.expects(:destroy).never
48+
expect(template).to be_deleted
49+
end
50+
end
51+
3052
describe "is_master_course?" do
3153
def check
3254
MasterCourses::MasterTemplate.is_master_course?(@course)

0 commit comments

Comments
 (0)