redirect from ember quiz stats when no permission

also better organize testing of permission redirection into a module

closes CNVS-12829

test plan:
  - enable fabulous quizzes
  - as an instructor
    - visit a quiz show page
      - verify that user can navigate through Overview, Moderate,
        Statistics tabs
  - as a student
    - visist a quiz show page
      - verify that users gets redirected to the Overview when navigating to Moderate or
        Statistics Tab
      - verify that redirect happens if user enters the correct url for
        moderate or statistics as well.

Change-Id: Ib87c42c53d9e53f224914cdab34d1781592a8512
Reviewed-on: https://gerrit.instructure.com/34256
Tested-by: Jenkins <jenkins@instructure.com>
QA-Review: Caleb Guanzon <cguanzon@instructure.com>
Reviewed-by: Derek DeVries <ddevries@instructure.com>
Reviewed-by: Josh Simpson <jsimpson@instructure.com>
Product-Review: Jason Madsen <jmadsen@instructure.com>
This commit is contained in:
Jason Madsen 2014-05-02 13:51:09 -06:00
parent 9be9ca6c7f
commit 584c76285c
6 changed files with 64 additions and 32 deletions

View File

@ -1,7 +1,16 @@
define [ 'ember', 'underscore' ], (Ember, _) ->
define [
'ember'
'underscore'
'../mixins/redirect'
], (Ember, _, Redirect) ->
{RSVP} = Ember
Ember.Route.extend
Ember.Route.extend Redirect,
beforeModel: (transition) ->
@validateRoute('canManage', 'quiz.show')
model: (transition, options) ->
quiz = @modelFor('quiz')
quiz.get('quizStatistics').then((items)->
@ -18,4 +27,4 @@ define [ 'ember', 'underscore' ], (Ember, _) ->
# anyway, do it manually:
set = @modelFor('quizStatistics').get('questionStatistics')
set.clear()
set.pushObjects(@store.all('questionStatistics'))
set.pushObjects(@store.all('questionStatistics'))

View File

@ -13,6 +13,9 @@ define [
App = startApp()
fixtures.create()
subject = App.__container__.lookup('adapter:quizReport')
#tmp workaround. these tests shouldn't need to visit the route
env.setUserPermissions(true, true)
visit('/1/statistics')
teardown: ->
@ -20,4 +23,4 @@ define [
test 'it uses the report URL', ->
url = subject.buildURL 'quizReport', 14
ok url.match('/api/v1/courses/1/quizzes/1/reports/14')
ok url.match('/api/v1/courses/1/quizzes/1/reports/14')

View File

@ -7,3 +7,14 @@ define ['../shared/environment'], (env) ->
}
}
env.setEnv ENV
{
setUserPermissions: (canManage, canUpdate) ->
prevContextAsset = env.get('env').context_asset_string
env.setEnv
context_asset_string: prevContextAsset
PERMISSIONS:
manage: canManage
update: canUpdate
env
}

View File

@ -3,8 +3,9 @@ define [
'../start_app'
'../shared_ajax_fixtures'
'../environment_setup'
'../../shared/environment'
], (Ember, startApp, fixtures, env) ->
'../test_redirection'
]
, (Ember, startApp, fixtures, env, testRedirection) ->
module "Quiz Moderate: Integration",
@ -15,28 +16,7 @@ define [
teardown: ->
Ember.run App, 'destroy'
test 'redirect non-permissioned users to quiz.show', ->
env.setEnv
PERMISSIONS:
manage: false
update: false
visit('/1/moderate')
andThen ->
wait().then ->
# this can change to currentRoute() once we update ember >= 1.5.0
currentRoute = App.__container__.lookup('controller:application').get('currentRouteName')
equal currentRoute, 'quiz.show'
test 'permissioned users should see moderate page', ->
env.setEnv
PERMISSIONS:
manage: true
update: true
visit('/1/moderate')
andThen ->
wait().then ->
# this can change to currentRoute() once we update ember >= 1.5.0
currentRoute = App.__container__.lookup('controller:application').get('currentRouteName')
equal currentRoute, 'quiz.moderate'
testRedirection
path: '/1/moderate'
defaultRoute: 'quiz.moderate'
redirectRoute: 'quiz.show'

View File

@ -3,7 +3,8 @@ define [
'../start_app'
'../environment_setup'
'../shared_ajax_fixtures'
], (Ember, startApp, env, fixtures) ->
'../test_redirection'
], (Ember, startApp, env, fixtures, testRedirection) ->
App = null
{$} = Ember
@ -18,6 +19,7 @@ define [
testPage = (desc, callback) ->
test desc, ->
env.setUserPermissions(true, true)
visit('/1/statistics').then callback
testPage 'it renders', ->
@ -29,3 +31,8 @@ define [
equal q.get('quizReports.length'), 2, 'loads quiz reports'
ok qs = route.modelFor('quizStatistics'), 'loads quiz statistics'
equal qs.get('questionStatistics.length'), 11, 'loads question statistics'
testRedirection
path: '/1/statistics'
defaultRoute: 'quiz.statistics'
redirectRoute: 'quiz.show'

View File

@ -0,0 +1,22 @@
define [
'./environment_setup'
], (env) ->
verifyRoute = (path, expected) ->
visit(path)
andThen ->
wait().then ->
# this can change to currentRoute() once we update ember >= 1.5.0
currentRoute = App.__container__.lookup('controller:application').get('currentRouteName')
equal currentRoute, expected
testRedirection = (options) ->
{path, defaultRoute, redirectRoute} = options
test "permissioned users should see #{defaultRoute}", ->
env.setUserPermissions(true, true)
verifyRoute(path, defaultRoute)
test 'redirect non-permissioned users to #{redirectRoute}', ->
env.setUserPermissions(false, false)
verifyRoute(path, redirectRoute)
testRedirection