Skip to content

Commit

Permalink
Add and update tests to use new program manager permission
Browse files Browse the repository at this point in the history
  • Loading branch information
Clare Constantine committed Feb 23, 2018
1 parent 79d28b9 commit 80e6424
Show file tree
Hide file tree
Showing 12 changed files with 513 additions and 71 deletions.
318 changes: 299 additions & 19 deletions dashboard/test/controllers/api/v1/pd/applications_controller_test.rb

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ class Api::V1::Pd::CourseFacilitatorsControllerTest < ::ActionController::TestCa
{
admin: :success,
workshop_organizer: :success,
program_manager: :success,
facilitator: :forbidden,
teacher: :forbidden
}.each do |user_type, response|
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,22 +11,28 @@ class RegionalPartnerWorkshopsControllerTest < ::ActionController::TestCase
Pd::Workshop.any_instance.stubs(:process_location)
first_session_time = Time.new(2018, 3, 15, 9)

@partner_organizer = create :workshop_organizer, :as_regional_partner_program_manager
@program_manager = create :program_manager
@partner_organizer = create :workshop_organizer, regional_partners: [@program_manager.regional_partners.first]
@non_partner_organizer = create :workshop_organizer

csd_options = {course: Pd::Workshop::COURSE_CSD, subject: Pd::Workshop::SUBJECT_CSD_SUMMER_WORKSHOP}
csp_options = {course: Pd::Workshop::COURSE_CSP, subject: Pd::Workshop::SUBJECT_CSP_SUMMER_WORKSHOP}

@partner_csd_workshop, @partner_csp_workshop, @non_partner_csd_workshop, @non_partner_csp_workshop =
[@partner_organizer, @non_partner_organizer].map do |organizer|
@program_manager_csd_workshop,
@program_manager_csp_workshop,
@partner_organizer_csd_workshop,
@partner_organizer_csp_workshop,
@non_partner_organizer_csd_workshop,
@non_partner_organizer_csp_workshop =
[@program_manager, @partner_organizer, @non_partner_organizer].map do |organizer|
[csd_options, csp_options].map do |course_options|
create :pd_workshop, organizer: organizer, num_sessions: 5, sessions_from: first_session_time,
location_address: 'Code.org, Seattle, WA', **course_options
end
end.flatten

@school = create :school, zip: '99999'
@regional_partner = @partner_organizer.regional_partners.first
@regional_partner = @program_manager.regional_partners.first
@regional_partner.mappings << Pd::RegionalPartnerMapping.create!(regional_partner: @regional_partner, zip_code: '99999')

@regional_partner_teachercon = create :regional_partner, group: 3, name: REGIONAL_PARTNER_TC_MAPPING.keys.first
Expand All @@ -51,21 +57,25 @@ class RegionalPartnerWorkshopsControllerTest < ::ActionController::TestCase
get :index
assert_response :success

assert workshop_in_index_results @partner_csd_workshop
assert workshop_in_index_results @partner_csp_workshop
refute workshop_in_index_results @non_partner_csd_workshop
refute workshop_in_index_results @non_partner_csp_workshop
assert workshop_in_index_results @program_manager_csd_workshop
assert workshop_in_index_results @program_manager_csp_workshop
assert workshop_in_index_results @partner_organizer_csd_workshop
assert workshop_in_index_results @partner_organizer_csp_workshop
refute workshop_in_index_results @non_partner_organizer_csd_workshop
refute workshop_in_index_results @non_partner_organizer_csp_workshop
end

test 'index filters on course and subject' do
sign_in @teacher
get :index, params: {course: Pd::Workshop::COURSE_CSD, subject: Pd::Workshop::SUBJECT_CSD_SUMMER_WORKSHOP}
assert_response :success

assert workshop_in_index_results @partner_csd_workshop
refute workshop_in_index_results @partner_csp_workshop
refute workshop_in_index_results @non_partner_csd_workshop
refute workshop_in_index_results @non_partner_csp_workshop
assert workshop_in_index_results @program_manager_csd_workshop
refute workshop_in_index_results @program_manager_csp_workshop
assert workshop_in_index_results @partner_organizer_csd_workshop
refute workshop_in_index_results @partner_organizer_csp_workshop
refute workshop_in_index_results @non_partner_organizer_csd_workshop
refute workshop_in_index_results @non_partner_organizer_csp_workshop
end

test 'index with no match returns empty set' do
Expand Down Expand Up @@ -176,11 +186,19 @@ def expected_partner_workshops_all
name: @regional_partner.name,
group: @regional_partner.group,
workshops: [{
id: @partner_csd_workshop.id,
id: @program_manager_csd_workshop.id,
dates: 'March 15-19, 2018',
location: 'Code.org, Seattle, WA'
}, {
id: @partner_csp_workshop.id,
id: @program_manager_csp_workshop.id,
dates: 'March 15-19, 2018',
location: 'Code.org, Seattle, WA'
}, {
id: @partner_organizer_csd_workshop.id,
dates: 'March 15-19, 2018',
location: 'Code.org, Seattle, WA'
}, {
id: @partner_organizer_csp_workshop.id,
dates: 'March 15-19, 2018',
location: 'Code.org, Seattle, WA'
}],
Expand All @@ -194,7 +212,11 @@ def expected_partner_workshops_csd
name: @regional_partner.name,
group: @regional_partner.group,
workshops: [{
id: @partner_csd_workshop.id,
id: @program_manager_csd_workshop.id,
dates: 'March 15-19, 2018',
location: 'Code.org, Seattle, WA'
}, {
id: @partner_organizer_csd_workshop.id,
dates: 'March 15-19, 2018',
location: 'Code.org, Seattle, WA'
}],
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,13 @@ class Api::V1::Pd::TeacherAttendanceReportControllerTest < ::ActionController::T
setup_all do
@workshop_admin = create :workshop_admin
@organizer = create :workshop_organizer
@program_manager = create :program_manager

# CSF workshop from this program manager with 10 teachers.
@pm_workshop = create :pd_ended_workshop, organizer: @program_manager, course: Pd::Workshop::COURSE_CSF
10.times do
create :pd_workshop_participant, workshop: @pm_workshop, enrolled: true, attended: true
end

# CSF workshop from this organizer with 10 teachers.
@workshop = create :pd_ended_workshop, organizer: @organizer, course: Pd::Workshop::COURSE_CSF
Expand All @@ -54,6 +61,7 @@ class Api::V1::Pd::TeacherAttendanceReportControllerTest < ::ActionController::T

test_user_gets_response_for :index, user: :workshop_admin
test_user_gets_response_for :index, user: :workshop_organizer
test_user_gets_response_for :index, user: :program_manager
test_user_gets_response_for :index, response: :forbidden, user: :teacher

test 'workshop admins get payment info' do
Expand All @@ -67,6 +75,7 @@ class Api::V1::Pd::TeacherAttendanceReportControllerTest < ::ActionController::T
assert_payment_fields response.first
end

# TODO: remove this test when workshop_organizer is deprecated
test 'organizers do not get payment info' do
sign_in @organizer

Expand All @@ -78,17 +87,29 @@ class Api::V1::Pd::TeacherAttendanceReportControllerTest < ::ActionController::T
refute_payment_fields response.first
end

test 'program managers do not get payment info' do
sign_in @program_manager

get :index
assert_response :success
response = JSON.parse(@response.body)

assert_common_fields response.first
refute_payment_fields response.first
end

test 'workshop admins see all workshops' do
sign_in @workshop_admin

get :index
assert_response :success
response = JSON.parse(@response.body)

assert_equal 11, response.count
assert_equal [@workshop.id, @other_workshop.id].sort, response.map {|r| r['workshop_id']}.uniq.sort
assert_equal 21, response.count
assert_equal [@pm_workshop.id, @workshop.id, @other_workshop.id].sort, response.map {|r| r['workshop_id']}.uniq.sort
end

# TODO: remove this test when workshop_organizer is deprecated
test 'organizers only see their own workshops' do
sign_in @organizer

Expand All @@ -99,6 +120,16 @@ class Api::V1::Pd::TeacherAttendanceReportControllerTest < ::ActionController::T
assert_equal [@workshop.id], response.map {|r| r['workshop_id']}.uniq
end

test 'program managers only see their own workshops' do
sign_in @program_manager

get :index
assert_response :success
response = JSON.parse(@response.body)
assert_equal 10, response.count
assert_equal [@pm_workshop.id], response.map {|r| r['workshop_id']}.uniq
end

test 'Returns only workshops that have ended and have teachers' do
# New workshop, not ended, with teachers that should not be returned.
workshop_in_progress = create :pd_workshop, num_sessions: 1
Expand All @@ -114,8 +145,8 @@ class Api::V1::Pd::TeacherAttendanceReportControllerTest < ::ActionController::T
get :index
assert_response :success
response = JSON.parse(@response.body)
assert_equal 11, response.count
assert_equal [@workshop.id, @other_workshop.id].sort, response.map {|r| r['workshop_id']}.uniq.sort
assert_equal 21, response.count
assert_equal [@pm_workshop.id, @workshop.id, @other_workshop.id].sort, response.map {|r| r['workshop_id']}.uniq.sort
end

test 'filter by schedule' do
Expand Down Expand Up @@ -169,16 +200,16 @@ class Api::V1::Pd::TeacherAttendanceReportControllerTest < ::ActionController::T
test 'filter by course' do
sign_in @workshop_admin

# @workshop is CSF; @other_workshop is not
# @pm_workshop and @workshop are CSF; @other_workshop is not
{
'csf' => {workshop_id: @workshop.id, teacher_count: 10},
'-csf' => {workshop_id: @other_workshop.id, teacher_count: 1}
'csf' => {workshop_id: [@pm_workshop.id, @workshop.id], teacher_count: 20},
'-csf' => {workshop_id: [@other_workshop.id], teacher_count: 1}
}.each do |course_param, expected|
get :index, params: {course: course_param}
assert_response :success
response = JSON.parse(@response.body)
assert_equal expected[:teacher_count], response.count
assert_equal [expected[:workshop_id]], response.map {|r| r['workshop_id']}.uniq.sort
assert_equal expected[:workshop_id], response.map {|r| r['workshop_id']}.uniq.sort
end
end

Expand All @@ -188,8 +219,8 @@ class Api::V1::Pd::TeacherAttendanceReportControllerTest < ::ActionController::T
assert_response :success
response = CSV.parse(@response.body)

# 12 rows (header + 11 teacher rows)
assert_equal 12, response.count
# 22 rows (header + 21 teacher rows)
assert_equal 22, response.count
assert_equal EXPECTED_COMMON_FIELDS.count + EXPECTED_PAYMENT_FIELDS.count, response.first.count
end

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ class Teachercon1819RegistrationsControllerTest < ::ActionController::TestCase
end

test 'only regional partner users can submit partner registrations' do
partner = create :workshop_organizer, :as_regional_partner_program_manager
partner = create :program_manager

assert_no_difference 'Pd::Teachercon1819Registration.count' do
put :create_partner, params: {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,13 @@
class Api::V1::Pd::WorkshopEnrollmentsControllerTest < ::ActionController::TestCase
setup do
@organizer = create :workshop_organizer
@program_manager = create :program_manager
@facilitator = create :facilitator

@workshop = create :pd_workshop, organizer: @organizer, facilitators: [@facilitator]
@organizer_workshop = create :pd_workshop, organizer: @organizer, facilitators: [@facilitator]
@organizer_workshop_enrollment = create :pd_enrollment, workshop: @organizer_workshop

@workshop = create :pd_workshop, organizer: @program_manager, facilitators: [@facilitator]
@enrollment = create :pd_enrollment, workshop: @workshop

@unrelated_workshop = create :pd_workshop
Expand Down Expand Up @@ -35,21 +39,38 @@ class Api::V1::Pd::WorkshopEnrollmentsControllerTest < ::ActionController::TestC
assert_equal @unrelated_enrollment.email, response_json[0]['email']
end

test 'workshop organizers can see enrollemnts in their workshops' do
# TODO: remove this test when workshop_organizer is deprecated
test 'workshop organizers can see enrollments in their workshops' do
sign_in @organizer
get :index, params: {workshop_id: @workshop.id}
get :index, params: {workshop_id: @organizer_workshop.id}
assert_response :success
response_json = JSON.parse(@response.body)
assert_equal 1, response_json.length
assert_equal @enrollment.email, response_json[0]['email']
assert_equal @organizer_workshop_enrollment.email, response_json[0]['email']
end

# TODO: remove this test when workshop_organizer is deprecated
test 'workshop organizers cannot see enrollments in workshops they are not organizing' do
sign_in @organizer
get :index, params: {workshop_id: @unrelated_workshop.id}
assert_response :forbidden
end

test 'program managers can see enrollments in their workshops' do
sign_in @program_manager
get :index, params: {workshop_id: @workshop.id}
assert_response :success
response_json = JSON.parse(@response.body)
assert_equal 1, response_json.length
assert_equal @enrollment.email, response_json[0]['email']
end

test 'program managers cannot see enrollments in workshops they are not organizing' do
sign_in @program_manager
get :index, params: {workshop_id: @unrelated_workshop.id}
assert_response :forbidden
end

test 'facilitators can see enrollments in their workshops' do
sign_in @facilitator
get :index, params: {workshop_id: @workshop.id}
Expand Down Expand Up @@ -83,14 +104,16 @@ class Api::V1::Pd::WorkshopEnrollmentsControllerTest < ::ActionController::TestC
refute Pd::Enrollment.exists?(@unrelated_enrollment.id)
end

# TODO: remove this test when workshop_organizer is deprecated
test 'organizers can delete enrollments from their own workshops' do
sign_in @organizer

delete :destroy, params: {workshop_id: @workshop.id, id: @enrollment.id}
delete :destroy, params: {workshop_id: @organizer_workshop.id, id: @organizer_workshop_enrollment.id}
assert_response :success
refute Pd::Enrollment.exists?(@enrollment.id)
refute Pd::Enrollment.exists?(@organizer_workshop_enrollment.id)
end

# TODO: remove this test when workshop_organizer is deprecated
test 'organizers cannot delete enrollments from workshops they are not organizing' do
sign_in @organizer

Expand All @@ -101,6 +124,24 @@ class Api::V1::Pd::WorkshopEnrollmentsControllerTest < ::ActionController::TestC
assert_response :forbidden
end

test 'program managers can delete enrollments from their own workshops' do
sign_in @program_manager

delete :destroy, params: {workshop_id: @workshop.id, id: @enrollment.id}
assert_response :success
refute Pd::Enrollment.exists?(@enrollment.id)
end

test 'program managers cannot delete enrollments from workshops they are not organizing' do
sign_in @program_manager

delete :destroy, params: {
workshop_id: @unrelated_workshop.id,
id: @unrelated_enrollment.id
}
assert_response :forbidden
end

test 'facilitators can delete enrollments from their own workshops' do
sign_in @facilitator

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ class Api::V1::Pd::WorkshopOrganizerSurveyReportControllerTest < ::ActionControl
AWS::S3.stubs(:download_from_bucket).returns(Hash[@course.to_sym, {}].to_json)
end

[:admin, :workshop_organizer].each do |user_type|
[:admin, :workshop_organizer, :program_manager].each do |user_type|
test_user_gets_response_for(
:index,
user: user_type,
Expand Down

0 comments on commit 80e6424

Please sign in to comment.