def test_incomplete_and_default_flags(self): exp = Exploration.get(exp_services.create_new( '*****@*****.**', 'exploration', 'category', 'eid')) state_id = exp.init_state_id # Hit the default once, and do an incomplete twice. The result should # be classified as incomplete. for i in range(3): EventHandler.record_state_hit('eid', state_id) EventHandler.record_rule_hit( 'eid', state_id, Rule(name='Default', dest=state_id), extra_info='1') states = stats_services.get_top_ten_improvable_states([exp]) self.assertEquals(len(states), 1) self.assertEquals(states[0]['rank'], 2) self.assertEquals(states[0]['type'], 'incomplete') # Now hit the default two more times. The result should be classified # as default. for i in range(2): EventHandler.record_state_hit('eid', state_id) EventHandler.record_rule_hit( 'eid', state_id, Rule(name='Default', dest=state_id), extra_info='1') states = stats_services.get_top_ten_improvable_states([exp]) self.assertEquals(len(states), 1) self.assertEquals(states[0]['rank'], 3) self.assertEquals(states[0]['type'], 'default')
def test_two_state_default_hit(self): SECOND_STATE = 'State 2' exp = Exploration.get(exp_services.create_new( '*****@*****.**', 'exploration', 'category', 'eid')) second_state = exp.add_state(SECOND_STATE) state_1_id = exp.init_state_id state_2_id = second_state.id # Hit the default rule of state 1 once, and the default rule of state 2 # twice. EventHandler.record_state_hit('eid', state_1_id) EventHandler.record_rule_hit( 'eid', state_1_id, Rule(name='Default', dest=state_1_id), extra_info='1') for i in range(2): EventHandler.record_state_hit('eid', state_2_id) EventHandler.record_rule_hit( 'eid', state_2_id, Rule(name='Default', dest=state_2_id), extra_info='1') states = stats_services.get_top_ten_improvable_states([exp]) self.assertEquals(len(states), 2) self.assertEquals(states[0]['rank'], 2) self.assertEquals(states[0]['type'], 'default') self.assertEquals(states[0]['state_id'], state_2_id) self.assertEquals(states[1]['rank'], 1) self.assertEquals(states[1]['type'], 'default') self.assertEquals(states[1]['state_id'], state_1_id) # Hit the default rule of state 1 two more times. for i in range(2): EventHandler.record_state_hit('eid', state_1_id) EventHandler.record_rule_hit( 'eid', state_1_id, Rule(name='Default', dest=state_1_id), extra_info='1') states = stats_services.get_top_ten_improvable_states([exp]) self.assertEquals(len(states), 2) self.assertEquals(states[0]['rank'], 3) self.assertEquals(states[0]['type'], 'default') self.assertEquals(states[0]['state_id'], state_1_id) self.assertEquals(states[1]['rank'], 2) self.assertEquals(states[1]['type'], 'default') self.assertEquals(states[1]['state_id'], state_2_id)
def test_get_top_ten_improvable_states(self): exp = Exploration.get(exp_services.create_new( '*****@*****.**', 'exploration', 'category', 'eid')) state_id = exp.init_state_id EventHandler.record_rule_hit( 'eid', state_id, Rule(name='Default', dest=state_id), extra_info='1') EventHandler.record_rule_hit( 'eid', state_id, Rule(name='Default', dest=state_id), extra_info='2') EventHandler.record_rule_hit( 'eid', state_id, Rule(name='Default', dest=state_id), extra_info='1') EventHandler.record_state_hit('eid', state_id) EventHandler.record_state_hit('eid', state_id) EventHandler.record_state_hit('eid', state_id) EventHandler.record_state_hit('eid', state_id) EventHandler.record_state_hit('eid', state_id) states = stats_services.get_top_ten_improvable_states([exp]) self.assertEquals(len(states), 1) self.assertEquals(states[0]['exp_id'], 'eid') self.assertEquals(states[0]['type'], 'default') self.assertEquals(states[0]['rank'], 3) self.assertEquals(states[0]['state_id'], exp.init_state_id)
def get(self): """Handles GET requests.""" if users.is_current_user_admin(): exps = exp_services.get_all_explorations() else: exps = exp_services.get_editable_explorations(self.user_id) self.values.update({ 'explorations': [{ 'id': exp.id, 'image_id': exp.image_id, 'name': exp.title, } for exp in exps], 'improvable': stats_services.get_top_ten_improvable_states(exps), }) self.render_json(self.values)
def test_no_improvement_flag_hit(self): exp = Exploration.get(exp_services.create_new( '*****@*****.**', 'exploration', 'category', 'eid')) init_state = exp.init_state init_state.widget.handlers[0].rules = [ Rule(name='NotDefault', dest=init_state.id), Rule(name='Default', dest=init_state.id), ] init_state.put() EventHandler.record_rule_hit( 'eid', init_state.id, Rule(name='NotDefault', dest=init_state.id), extra_info='1') EventHandler.record_state_hit('eid', init_state.id) states = stats_services.get_top_ten_improvable_states([exp]) self.assertEquals(len(states), 0)
def get(self, exploration): """Gets the question name and state list for a question page.""" state_list = {} for state_id in exploration.state_ids: state = exploration.get_state_by_id(state_id) state_list[state.id] = get_state_for_frontend(state, exploration) parameters = [] for param in exploration.parameters: parameters.append({ 'name': param.name, 'obj_type': param.obj_type, 'description': param.description, 'values': param.values }) self.values.update({ 'exploration_id': exploration.id, 'init_state_id': exploration.init_state_id, 'is_public': exploration.is_public, 'image_id': exploration.image_id, 'category': exploration.category, 'title': exploration.title, 'editors': exploration.editor_ids, 'states': state_list, 'parameters': parameters, }) statistics = get_exploration_stats(exploration) self.values.update({ 'num_visits': statistics['num_visits'], 'num_completions': statistics['num_completions'], 'state_stats': statistics['state_stats'], }) improvements = stats_services.get_top_ten_improvable_states( [exploration]) self.values.update({ 'imp': improvements, }) self.render_json(self.values)