示例#1
0
    def test_incomplete_and_default_flags(self):
        exp = exp_domain.Exploration.create_default_exploration(
            'eid', 'A title', 'A category')
        exp_services.save_new_exploration('*****@*****.**', exp)
        state_name = exp.init_state_name

        # Hit the default rule once, and fail to answer twice. The result
        # should be classified as incomplete.
        for _ in range(3):
            event_services.StateHitEventHandler.record('eid', state_name, True)
        event_services.AnswerSubmissionEventHandler.record(
            'eid', 1, state_name, self.SUBMIT_HANDLER, self.DEFAULT_RULESPEC,
            '1')
        self.assertEquals(stats_services.get_state_improvements('eid'),
                          [{
                              'rank': 2,
                              'type': 'incomplete',
                              'state_name': state_name
                          }])

        # Now hit the default two more times. The result should be classified
        # as default.
        for i in range(2):
            event_services.StateHitEventHandler.record('eid', state_name, True)
            event_services.AnswerSubmissionEventHandler.record(
                'eid', 1, state_name, self.SUBMIT_HANDLER,
                self.DEFAULT_RULESPEC, '1')
        self.assertEquals(stats_services.get_state_improvements('eid'),
                          [{
                              'rank': 3,
                              'type': 'default',
                              'state_name': state_name
                          }])
示例#2
0
    def test_incomplete_and_default_flags(self):
        exp = exp_domain.Exploration.create_default_exploration(
            'eid', 'A title', 'A category')
        exp_services.save_new_exploration('*****@*****.**', exp)
        state_name = exp.init_state_name

        # Hit the default rule once, and fail to answer twice. The result
        # should be classified as incomplete.
        for _ in range(3):
            event_services.StateHitEventHandler.record(
                'eid', state_name, True)
        event_services.AnswerSubmissionEventHandler.record(
            'eid', 1, state_name, self.SUBMIT_HANDLER,
            self.DEFAULT_RULESPEC, '1')
        self.assertEquals(stats_services.get_state_improvements('eid'), [{
            'rank': 2,
            'type': 'incomplete',
            'state_name': state_name
        }])

        # Now hit the default two more times. The result should be classified
        # as default.
        for i in range(2):
            event_services.StateHitEventHandler.record(
                'eid', state_name, True)
            event_services.AnswerSubmissionEventHandler.record(
                'eid', 1, state_name, self.SUBMIT_HANDLER,
                self.DEFAULT_RULESPEC, '1')
        self.assertEquals(stats_services.get_state_improvements('eid'), [{
            'rank': 3,
            'type': 'default',
            'state_name': state_name
        }])
示例#3
0
    def test_incomplete_and_default_flags(self):
        exp = exp_domain.Exploration.create_default_exploration(
            'eid', 'A title', 'A category')
        exp_services.save_new_exploration('*****@*****.**', exp)
        state_name = exp.init_state_name

        # Fail to answer twice.
        for i in range(2):
            event_services.StartExplorationEventHandler.record(
                'eid', 1, state_name, 'session_id %d' % i, {},
                feconf.PLAY_TYPE_NORMAL)
            event_services.StateHitEventHandler.record('eid', 1, state_name,
                                                       'session_id %d' % i, {},
                                                       feconf.PLAY_TYPE_NORMAL)
            event_services.MaybeLeaveExplorationEventHandler.record(
                'eid', 1, state_name, 'session_id %d' % i, 10.0, {},
                feconf.PLAY_TYPE_NORMAL)

        # Hit the default rule once.
        event_services.StateHitEventHandler.record('eid', 1, state_name,
                                                   'session_id 3', {},
                                                   feconf.PLAY_TYPE_NORMAL)
        event_services.AnswerSubmissionEventHandler.record(
            'eid', 1, state_name, self.DEFAULT_RULESPEC_STR, '1')

        # The result should be classified as incomplete.
        ModifiedStatisticsAggregator.start_computation()
        self.process_and_flush_pending_tasks()
        with self.swap(stats_jobs_continuous.StatisticsAggregator,
                       'get_statistics',
                       ModifiedStatisticsAggregator.get_statistics):
            self.assertEquals(stats_services.get_state_improvements('eid', 1),
                              [{
                                  'rank': 2,
                                  'type': 'incomplete',
                                  'state_name': state_name
                              }])

        # Now hit the default two more times. The result should be classified
        # as default.
        for i in range(2):
            event_services.StateHitEventHandler.record('eid', 1, state_name,
                                                       'session_id', {},
                                                       feconf.PLAY_TYPE_NORMAL)
            event_services.AnswerSubmissionEventHandler.record(
                'eid', 1, state_name, self.DEFAULT_RULESPEC_STR, '1')
        with self.swap(stats_jobs_continuous.StatisticsAggregator,
                       'get_statistics',
                       ModifiedStatisticsAggregator.get_statistics):
            self.assertEquals(stats_services.get_state_improvements('eid', 1),
                              [{
                                  'rank': 3,
                                  'type': 'default',
                                  'state_name': state_name
                              }])
示例#4
0
    def test_two_state_default_hit(self):
        exp = exp_domain.Exploration.create_default_exploration(
            'eid', 'A title', 'A category')
        exp_services.save_new_exploration('*****@*****.**', exp)

        FIRST_STATE_NAME = exp.init_state_name
        SECOND_STATE_NAME = 'State 2'
        exp.add_states([SECOND_STATE_NAME])
        exp_services._save_exploration('*****@*****.**', exp, '', [])

        # Hit the default rule of state 1 once, and the default rule of state 2
        # twice.
        event_services.StateHitEventHandler.record('eid', FIRST_STATE_NAME,
                                                   True)
        event_services.AnswerSubmissionEventHandler.record(
            'eid', 1, FIRST_STATE_NAME, self.SUBMIT_HANDLER,
            self.DEFAULT_RULESPEC, '1')

        for i in range(2):
            event_services.StateHitEventHandler.record('eid',
                                                       SECOND_STATE_NAME, True)
            event_services.AnswerSubmissionEventHandler.record(
                'eid', 1, SECOND_STATE_NAME, self.SUBMIT_HANDLER,
                self.DEFAULT_RULESPEC, '1')

        states = stats_services.get_state_improvements('eid')
        self.assertEquals(states, [{
            'rank': 2,
            'type': 'default',
            'state_name': SECOND_STATE_NAME
        }, {
            'rank': 1,
            'type': 'default',
            'state_name': FIRST_STATE_NAME
        }])

        # Hit the default rule of state 1 two more times.
        for i in range(2):
            event_services.StateHitEventHandler.record('eid', FIRST_STATE_NAME,
                                                       True)
            event_services.AnswerSubmissionEventHandler.record(
                'eid', 1, FIRST_STATE_NAME, self.SUBMIT_HANDLER,
                self.DEFAULT_RULESPEC, '1')

        states = stats_services.get_state_improvements('eid')
        self.assertEquals(states, [{
            'rank': 3,
            'type': 'default',
            'state_name': FIRST_STATE_NAME
        }, {
            'rank': 2,
            'type': 'default',
            'state_name': SECOND_STATE_NAME
        }])
示例#5
0
    def test_incomplete_and_default_flags(self):
        exp = exp_domain.Exploration.create_default_exploration(
            'eid', 'A title', 'A category')
        exp_services.save_new_exploration('*****@*****.**', exp)
        state_name = exp.init_state_name

        # Fail to answer twice.
        for i in range(2):
            event_services.StartExplorationEventHandler.record(
                'eid', 1, state_name, 'session_id %d' % i, {},
                feconf.PLAY_TYPE_NORMAL)
            event_services.StateHitEventHandler.record(
                'eid', 1, state_name, 'session_id %d' % i,
                {}, feconf.PLAY_TYPE_NORMAL)
            event_services.MaybeLeaveExplorationEventHandler.record(
                'eid', 1, state_name, 'session_id %d' % i, 10.0, {},
                feconf.PLAY_TYPE_NORMAL)

        # Hit the default rule once.
        event_services.StateHitEventHandler.record(
            'eid', 1, state_name, 'session_id 3', {}, feconf.PLAY_TYPE_NORMAL)
        event_services.AnswerSubmissionEventHandler.record(
            'eid', 1, state_name, feconf.SUBMIT_HANDLER_NAME,
            self.DEFAULT_RULESPEC, '1')

        # The result should be classified as incomplete.
        ModifiedStatisticsAggregator.start_computation()
        self.process_and_flush_pending_tasks()
        with self.swap(stats_jobs.StatisticsAggregator, 'get_statistics',
                       ModifiedStatisticsAggregator.get_statistics):
            self.assertEquals(
                stats_services.get_state_improvements('eid', 1), [{
                    'rank': 2,
                    'type': 'incomplete',
                    'state_name': state_name
                }])

        # Now hit the default two more times. The result should be classified
        # as default.
        for i in range(2):
            event_services.StateHitEventHandler.record(
                'eid', 1, state_name, 'session_id',
                {}, feconf.PLAY_TYPE_NORMAL)
            event_services.AnswerSubmissionEventHandler.record(
                'eid', 1, state_name, feconf.SUBMIT_HANDLER_NAME,
                self.DEFAULT_RULESPEC, '1')
        with self.swap(stats_jobs.StatisticsAggregator, 'get_statistics',
                       ModifiedStatisticsAggregator.get_statistics):
            self.assertEquals(
                stats_services.get_state_improvements('eid', 1), [{
                    'rank': 3,
                    'type': 'default',
                    'state_name': state_name
                }])
示例#6
0
    def test_two_state_default_hit(self):
        exp = exp_domain.Exploration.create_default_exploration(
            'eid', 'A title', 'A category')
        exp_services.save_new_exploration('*****@*****.**', exp)

        FIRST_STATE_NAME = exp.init_state_name
        SECOND_STATE_NAME = 'State 2'
        exp.add_states([SECOND_STATE_NAME])
        exp_services._save_exploration('*****@*****.**', exp, '', [])

        # Hit the default rule of state 1 once, and the default rule of state 2
        # twice.
        event_services.StateHitEventHandler.record(
            'eid', FIRST_STATE_NAME, True)
        event_services.AnswerSubmissionEventHandler.record(
            'eid', 1, FIRST_STATE_NAME, self.SUBMIT_HANDLER,
            self.DEFAULT_RULESPEC, '1')

        for i in range(2):
            event_services.StateHitEventHandler.record(
                'eid', SECOND_STATE_NAME, True)
            event_services.AnswerSubmissionEventHandler.record(
                'eid', 1, SECOND_STATE_NAME, self.SUBMIT_HANDLER,
                self.DEFAULT_RULESPEC, '1')

        states = stats_services.get_state_improvements('eid')
        self.assertEquals(states, [{
            'rank': 2,
            'type': 'default',
            'state_name': SECOND_STATE_NAME
        }, {
            'rank': 1,
            'type': 'default',
            'state_name': FIRST_STATE_NAME
        }])

        # Hit the default rule of state 1 two more times.
        for i in range(2):
            event_services.StateHitEventHandler.record(
                'eid', FIRST_STATE_NAME, True)
            event_services.AnswerSubmissionEventHandler.record(
                'eid', 1, FIRST_STATE_NAME, self.SUBMIT_HANDLER,
                self.DEFAULT_RULESPEC, '1')

        states = stats_services.get_state_improvements('eid')
        self.assertEquals(states, [{
            'rank': 3,
            'type': 'default',
            'state_name': FIRST_STATE_NAME
        }, {
            'rank': 2,
            'type': 'default',
            'state_name': SECOND_STATE_NAME
        }])
示例#7
0
    def test_get_state_improvements(self):
        exp = exp_domain.Exploration.create_default_exploration(
            'eid', 'A title', 'A category')
        exp_services.save_new_exploration('*****@*****.**', exp)

        for ind in range(5):
            event_services.StartExplorationEventHandler.record(
                'eid', 1, exp.init_state_name, 'session_id_%s' % ind, {},
                feconf.PLAY_TYPE_NORMAL)
            event_services.StateHitEventHandler.record('eid', 1,
                                                       exp.init_state_name,
                                                       'session_id_%s' % ind,
                                                       {},
                                                       feconf.PLAY_TYPE_NORMAL)
        event_services.AnswerSubmissionEventHandler.record(
            'eid', 1, exp.init_state_name, self.DEFAULT_RULESPEC_STR, '1')
        for _ in range(2):
            event_services.AnswerSubmissionEventHandler.record(
                'eid', 1, exp.init_state_name, self.DEFAULT_RULESPEC_STR, '2')
        ModifiedStatisticsAggregator.start_computation()
        self.process_and_flush_pending_tasks()
        with self.swap(stats_jobs_continuous.StatisticsAggregator,
                       'get_statistics',
                       ModifiedStatisticsAggregator.get_statistics):
            self.assertEquals(stats_services.get_state_improvements('eid', 1),
                              [{
                                  'type': 'default',
                                  'rank': 3,
                                  'state_name': exp.init_state_name
                              }])
示例#8
0
    def test_get_state_improvements(self):
        exp = exp_domain.Exploration.create_default_exploration(
            'eid', 'A title', 'A category')
        exp_services.save_new_exploration('*****@*****.**', exp)

        for ind in range(5):
            event_services.StartExplorationEventHandler.record(
                'eid', 1, exp.init_state_name, 'session_id_%s' % ind,
                {}, feconf.PLAY_TYPE_NORMAL)
            event_services.StateHitEventHandler.record(
                'eid', 1, exp.init_state_name, 'session_id_%s' % ind,
                {}, feconf.PLAY_TYPE_NORMAL)
        event_services.AnswerSubmissionEventHandler.record(
            'eid', 1, exp.init_state_name, self.DEFAULT_RULESPEC_STR, '1')
        for _ in range(2):
            event_services.AnswerSubmissionEventHandler.record(
                'eid', 1, exp.init_state_name, self.DEFAULT_RULESPEC_STR, '2')
        ModifiedStatisticsAggregator.start_computation()
        self.process_and_flush_pending_tasks()
        with self.swap(stats_jobs.StatisticsAggregator, 'get_statistics',
                       ModifiedStatisticsAggregator.get_statistics):
            self.assertEquals(
                stats_services.get_state_improvements('eid', 1), [{
                    'type': 'default',
                    'rank': 3,
                    'state_name': exp.init_state_name
                }])
示例#9
0
    def test_no_improvement_flag_hit(self):
        exp = exp_domain.Exploration.create_default_exploration(
            'eid', 'A title', 'A category')
        exp_services.save_new_exploration('*****@*****.**', exp)

        not_default_rule_spec = exp_domain.RuleSpec(
            {
                'rule_type': rule_domain.ATOMIC_RULE_TYPE,
                'name': 'NotDefault',
                'inputs': {},
                'subject': 'answer'
            }, exp.init_state_name, [], [], 'NormalizedString')
        default_rule_spec = exp_domain.RuleSpec.get_default_rule_spec(
            feconf.END_DEST, 'NormalizedString')
        exp.init_state.widget.handlers[0].rule_specs = [
            not_default_rule_spec, default_rule_spec
        ]
        exp_services._save_exploration('*****@*****.**', exp, '', [])

        event_services.StateHitEventHandler.record('eid', exp.init_state_name,
                                                   True)
        event_services.AnswerSubmissionEventHandler.record(
            'eid', 1, exp.init_state_name, self.SUBMIT_HANDLER,
            not_default_rule_spec, '1')
        self.assertEquals(stats_services.get_state_improvements('eid'), [])
示例#10
0
    def test_single_default_rule_hit(self):
        exp = exp_domain.Exploration.create_default_exploration(
            'eid', 'A title', 'A category')
        exp_services.save_new_exploration('*****@*****.**', exp)
        state_name = exp.init_state_name

        event_services.StateHitEventHandler.record('eid', state_name, True)
        event_services.AnswerSubmissionEventHandler.record(
            'eid', 1, state_name, self.SUBMIT_HANDLER,
            self.DEFAULT_RULESPEC, '1')
        self.assertEquals(stats_services.get_state_improvements('eid'), [{
            'type': 'default',
            'rank': 1,
            'state_name': exp.init_state_name
        }])
示例#11
0
    def test_single_default_rule_hit(self):
        exp = exp_domain.Exploration.create_default_exploration(
            'eid', 'A title', 'A category')
        exp_services.save_new_exploration('*****@*****.**', exp)
        state_name = exp.init_state_name

        event_services.StateHitEventHandler.record('eid', state_name, True)
        event_services.AnswerSubmissionEventHandler.record(
            'eid', 1, state_name, self.SUBMIT_HANDLER, self.DEFAULT_RULESPEC,
            '1')
        self.assertEquals(stats_services.get_state_improvements('eid'),
                          [{
                              'type': 'default',
                              'rank': 1,
                              'state_name': exp.init_state_name
                          }])
示例#12
0
文件: editor.py 项目: miyucy/oppia
    def get(self, exploration_id):
        """Handles GET requests."""
        try:
            exp_services.get_exploration_by_id(exploration_id)
        except:
            raise self.PageNotFoundException

        self.render_json({
            'num_starts': stats_services.get_exploration_start_count(
                exploration_id),
            'num_completions': stats_services.get_exploration_completed_count(
                exploration_id),
            'state_stats': stats_services.get_state_stats_for_exploration(
                exploration_id),
            'improvements': stats_services.get_state_improvements(
                exploration_id),
        })
示例#13
0
    def test_no_improvement_flag_hit(self):
        self.save_new_valid_exploration(
            'eid', '*****@*****.**', end_state_name='End')
        exp = exp_services.get_exploration_by_id('eid')

        not_default_rule_spec = exp_domain.RuleSpec('Equals', {'x': 'Text'})
        init_interaction = exp.init_state.interaction
        init_interaction.answer_groups.append(exp_domain.AnswerGroup(
            exp_domain.Outcome(exp.init_state_name, [], {}),
            [not_default_rule_spec]))
        init_interaction.default_outcome = exp_domain.Outcome(
            'End', [], {})
        exp_services._save_exploration('*****@*****.**', exp, '', [])

        event_services.AnswerSubmissionEventHandler.record(
            'eid', 1, exp.init_state_name,
            not_default_rule_spec.stringify_classified_rule(),
            '1')
        self.assertEquals(stats_services.get_state_improvements('eid', 1), [])
示例#14
0
    def test_no_improvement_flag_hit(self):
        self.save_new_valid_exploration('eid',
                                        '*****@*****.**',
                                        end_state_name='End')
        exp = exp_services.get_exploration_by_id('eid')

        not_default_rule_spec = exp_domain.RuleSpec('Equals', {'x': 'Text'})
        init_interaction = exp.init_state.interaction
        init_interaction.answer_groups.append(
            exp_domain.AnswerGroup(
                exp_domain.Outcome(exp.init_state_name, [], {}),
                [not_default_rule_spec]))
        init_interaction.default_outcome = exp_domain.Outcome('End', [], {})
        exp_services._save_exploration('*****@*****.**', exp, '', [])

        event_services.AnswerSubmissionEventHandler.record(
            'eid', 1, exp.init_state_name,
            not_default_rule_spec.stringify_classified_rule(), '1')
        self.assertEquals(stats_services.get_state_improvements('eid', 1), [])
示例#15
0
    def test_no_improvement_flag_hit(self):
        self.save_new_valid_exploration('eid', '*****@*****.**')
        exp = exp_services.get_exploration_by_id('eid')

        not_default_rule_spec = exp_domain.RuleSpec({
            'rule_type': rule_domain.ATOMIC_RULE_TYPE,
            'name': 'NotDefault',
            'inputs': {},
            'subject': 'answer'
        }, exp.init_state_name, [], [], 'NormalizedString')
        default_rule_spec = exp_domain.RuleSpec.get_default_rule_spec(
            feconf.END_DEST, 'NormalizedString')
        exp.init_state.interaction.handlers[0].rule_specs = [
            not_default_rule_spec, default_rule_spec
        ]
        exp_services._save_exploration('*****@*****.**', exp, '', [])

        event_services.AnswerSubmissionEventHandler.record(
            'eid', 1, exp.init_state_name, feconf.SUBMIT_HANDLER_NAME,
            not_default_rule_spec, '1')
        self.assertEquals(stats_services.get_state_improvements('eid', 1), [])
示例#16
0
    def test_single_default_rule_hit(self):
        exp = exp_domain.Exploration.create_default_exploration('eid')
        exp_services.save_new_exploration('*****@*****.**', exp)
        state_name = exp.init_state_name

        event_services.StartExplorationEventHandler.record(
            'eid', 1, state_name, 'session_id', {}, feconf.PLAY_TYPE_NORMAL)
        event_services.StateHitEventHandler.record('eid', 1, state_name,
                                                   'session_id', {},
                                                   feconf.PLAY_TYPE_NORMAL)
        event_services.AnswerSubmissionEventHandler.record(
            'eid', 1, state_name, self.DEFAULT_RULESPEC_STR, '1')
        ModifiedStatisticsAggregator.start_computation()
        self.process_and_flush_pending_tasks()

        with self._get_swap_context():
            self.assertEquals(stats_services.get_state_improvements('eid', 1),
                              [{
                                  'type': 'default',
                                  'rank': 1,
                                  'state_name': exp.init_state_name
                              }])
示例#17
0
    def test_single_default_rule_hit(self):
        exp = exp_domain.Exploration.create_default_exploration('eid')
        exp_services.save_new_exploration('*****@*****.**', exp)
        state_name = exp.init_state_name

        event_services.StartExplorationEventHandler.record(
            'eid', 1, state_name, 'session_id', {}, feconf.PLAY_TYPE_NORMAL)
        event_services.StateHitEventHandler.record(
            'eid', 1, state_name, 'session_id', {},
            feconf.PLAY_TYPE_NORMAL)
        event_services.AnswerSubmissionEventHandler.record(
            'eid', 1, state_name, self.DEFAULT_RULESPEC_STR, '1')
        ModifiedStatisticsAggregator.start_computation()
        self.process_and_flush_pending_tasks()

        with self._get_swap_context():
            self.assertEquals(
                stats_services.get_state_improvements('eid', 1), [{
                    'type': 'default',
                    'rank': 1,
                    'state_name': exp.init_state_name
                }])
示例#18
0
    def test_no_improvement_flag_hit(self):
        exp = exp_domain.Exploration.create_default_exploration(
            'eid', 'A title', 'A category')
        exp_services.save_new_exploration('*****@*****.**', exp)

        not_default_rule_spec = exp_domain.RuleSpec({
            'rule_type': rule_domain.ATOMIC_RULE_TYPE,
            'name': 'NotDefault',
            'inputs': {},
            'subject': 'answer'
        }, exp.init_state_name, [], [], 'NormalizedString')
        default_rule_spec = exp_domain.RuleSpec.get_default_rule_spec(
            feconf.END_DEST, 'NormalizedString')
        exp.init_state.widget.handlers[0].rule_specs = [
            not_default_rule_spec, default_rule_spec
        ]
        exp_services._save_exploration('*****@*****.**', exp, '', [])

        event_services.StateHitEventHandler.record(
            'eid', exp.init_state_name, True)
        event_services.AnswerSubmissionEventHandler.record(
            'eid', 1, exp.init_state_name, self.SUBMIT_HANDLER,
            not_default_rule_spec, '1')
        self.assertEquals(stats_services.get_state_improvements('eid'), [])
示例#19
0
    def test_two_state_default_hit(self):
        self.save_new_default_exploration('eid', '*****@*****.**')
        exp = exp_services.get_exploration_by_id('eid')

        FIRST_STATE_NAME = exp.init_state_name
        SECOND_STATE_NAME = 'State 2'
        exp_services.update_exploration('*****@*****.**', 'eid', [{
            'cmd': 'edit_state_property',
            'state_name': FIRST_STATE_NAME,
            'property_name': 'widget_id',
            'new_value': 'TextInput',
        }, {
            'cmd': 'add_state',
            'state_name': SECOND_STATE_NAME,
        }, {
            'cmd': 'edit_state_property',
            'state_name': SECOND_STATE_NAME,
            'property_name': 'widget_id',
            'new_value': 'TextInput',
        }], 'Add new state')

        # Hit the default rule of state 1 once, and the default rule of state 2
        # twice. Note that both rules are self-loops.
        event_services.StartExplorationEventHandler.record(
            'eid', 1, FIRST_STATE_NAME, 'session_id', {},
            feconf.PLAY_TYPE_NORMAL)
        event_services.StateHitEventHandler.record(
            'eid', 1, FIRST_STATE_NAME, 'session_id',
            {}, feconf.PLAY_TYPE_NORMAL)
        event_services.AnswerSubmissionEventHandler.record(
            'eid', 1, FIRST_STATE_NAME, self.DEFAULT_RULESPEC_STR, '1')

        for i in range(2):
            event_services.StateHitEventHandler.record(
                'eid', 1, SECOND_STATE_NAME, 'session_id',
                {}, feconf.PLAY_TYPE_NORMAL)
            event_services.AnswerSubmissionEventHandler.record(
                'eid', 1, SECOND_STATE_NAME, self.DEFAULT_RULESPEC_STR, '1')
        ModifiedStatisticsAggregator.start_computation()
        self.process_and_flush_pending_tasks()
        with self.swap(stats_jobs.StatisticsAggregator, 'get_statistics',
                       ModifiedStatisticsAggregator.get_statistics):
            states = stats_services.get_state_improvements('eid', 1)
        self.assertEquals(states, [{
            'rank': 2,
            'type': 'default',
            'state_name': SECOND_STATE_NAME
        }, {
            'rank': 1,
            'type': 'default',
            'state_name': FIRST_STATE_NAME
        }])

        # Hit the default rule of state 1 two more times.
        for i in range(2):
            event_services.StateHitEventHandler.record(
                'eid', 1, FIRST_STATE_NAME, 'session_id',
                {}, feconf.PLAY_TYPE_NORMAL)
            event_services.AnswerSubmissionEventHandler.record(
                'eid', 1, FIRST_STATE_NAME, self.DEFAULT_RULESPEC_STR, '1')

        with self.swap(stats_jobs.StatisticsAggregator, 'get_statistics',
                       ModifiedStatisticsAggregator.get_statistics):
            states = stats_services.get_state_improvements('eid', 1)
        self.assertEquals(states, [{
            'rank': 3,
            'type': 'default',
            'state_name': FIRST_STATE_NAME
        }, {
            'rank': 2,
            'type': 'default',
            'state_name': SECOND_STATE_NAME
        }])
示例#20
0
    def test_two_state_default_hit(self):
        self.save_new_default_exploration('eid', '*****@*****.**')
        exp = exp_services.get_exploration_by_id('eid')

        FIRST_STATE_NAME = exp.init_state_name
        SECOND_STATE_NAME = 'State 2'
        exp_services.update_exploration('*****@*****.**', 'eid',
                                        [{
                                            'cmd': 'edit_state_property',
                                            'state_name': FIRST_STATE_NAME,
                                            'property_name': 'widget_id',
                                            'new_value': 'TextInput',
                                        }, {
                                            'cmd': 'add_state',
                                            'state_name': SECOND_STATE_NAME,
                                        }, {
                                            'cmd': 'edit_state_property',
                                            'state_name': SECOND_STATE_NAME,
                                            'property_name': 'widget_id',
                                            'new_value': 'TextInput',
                                        }], 'Add new state')

        # Hit the default rule of state 1 once, and the default rule of state 2
        # twice. Note that both rules are self-loops.
        event_services.StartExplorationEventHandler.record(
            'eid', 1, FIRST_STATE_NAME, 'session_id', {},
            feconf.PLAY_TYPE_NORMAL)
        event_services.StateHitEventHandler.record('eid', 1, FIRST_STATE_NAME,
                                                   'session_id', {},
                                                   feconf.PLAY_TYPE_NORMAL)
        event_services.AnswerSubmissionEventHandler.record(
            'eid', 1, FIRST_STATE_NAME, self.DEFAULT_RULESPEC_STR, '1')

        for i in range(2):
            event_services.StateHitEventHandler.record('eid', 1,
                                                       SECOND_STATE_NAME,
                                                       'session_id', {},
                                                       feconf.PLAY_TYPE_NORMAL)
            event_services.AnswerSubmissionEventHandler.record(
                'eid', 1, SECOND_STATE_NAME, self.DEFAULT_RULESPEC_STR, '1')
        ModifiedStatisticsAggregator.start_computation()
        self.process_and_flush_pending_tasks()
        with self.swap(stats_jobs_continuous.StatisticsAggregator,
                       'get_statistics',
                       ModifiedStatisticsAggregator.get_statistics):
            states = stats_services.get_state_improvements('eid', 1)
        self.assertEquals(states, [{
            'rank': 2,
            'type': 'default',
            'state_name': SECOND_STATE_NAME
        }, {
            'rank': 1,
            'type': 'default',
            'state_name': FIRST_STATE_NAME
        }])

        # Hit the default rule of state 1 two more times.
        for i in range(2):
            event_services.StateHitEventHandler.record('eid', 1,
                                                       FIRST_STATE_NAME,
                                                       'session_id', {},
                                                       feconf.PLAY_TYPE_NORMAL)
            event_services.AnswerSubmissionEventHandler.record(
                'eid', 1, FIRST_STATE_NAME, self.DEFAULT_RULESPEC_STR, '1')

        with self.swap(stats_jobs_continuous.StatisticsAggregator,
                       'get_statistics',
                       ModifiedStatisticsAggregator.get_statistics):
            states = stats_services.get_state_improvements('eid', 1)
        self.assertEquals(states, [{
            'rank': 3,
            'type': 'default',
            'state_name': FIRST_STATE_NAME
        }, {
            'rank': 2,
            'type': 'default',
            'state_name': SECOND_STATE_NAME
        }])