forked from oppia/oppia
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Fix part of oppia#1366: Unresolved answers part of creator dashboard (o…
…ppia#2101) * Service to get total unresolved answers for exp * Use get_multi instead of get * Get unresolved_answers counts exploration-wise * Revert previous code; Re-write implementation and tests * Update functionality; write more tests * Frontend fixes * Fix minor frontend bugs * Partially address review comments * Write tests to handle multiple cases * Added comment for explorations_states_tuples * Fix errors with code * Rename method and remove pylint ignore * Address review comments * Fix failing tests
- Loading branch information
1 parent
5dcfae6
commit 26ff6df
Showing
7 changed files
with
191 additions
and
21 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -469,6 +469,27 @@ class UnresolvedAnswersTests(test_utils.GenericTestBase): | |
"""Test the unresolved answers methods.""" | ||
|
||
DEFAULT_RULESPEC_STR = exp_domain.DEFAULT_RULESPEC_STR | ||
CLASSIFIER_RULESPEC_STR = exp_domain.CLASSIFIER_RULESPEC_STR | ||
STATE_2_NAME = 'State 2' | ||
|
||
def _create_and_update_fake_exploration(self, exp_id): | ||
exp = exp_domain.Exploration.create_default_exploration(exp_id) | ||
exp_services.save_new_exploration('[email protected]', exp) | ||
exp_services.update_exploration('[email protected]', exp_id, [{ | ||
'cmd': 'edit_state_property', | ||
'state_name': exp.init_state_name, | ||
'property_name': 'widget_id', | ||
'new_value': 'TextInput', | ||
}, { | ||
'cmd': 'add_state', | ||
'state_name': self.STATE_2_NAME, | ||
}, { | ||
'cmd': 'edit_state_property', | ||
'state_name': self.STATE_2_NAME, | ||
'property_name': 'widget_id', | ||
'new_value': 'TextInput', | ||
}], 'Add new state') | ||
return exp | ||
|
||
def test_get_top_unresolved_answers(self): | ||
self.assertEquals( | ||
|
@@ -493,6 +514,95 @@ def test_get_top_unresolved_answers(self): | |
stats_services.get_top_unresolved_answers_for_default_rule( | ||
'eid', 'sid'), {}) | ||
|
||
def test_unresolved_answers_count_for_single_exploration(self): | ||
exp_1 = self._create_and_update_fake_exploration('eid1') | ||
self.assertEquals( | ||
stats_services.get_exps_unresolved_answers_count_for_default_rule( | ||
['eid1']), {}) | ||
event_services.AnswerSubmissionEventHandler.record( | ||
'eid1', 1, exp_1.init_state_name, self.DEFAULT_RULESPEC_STR, 'a1') | ||
self.assertEquals( | ||
stats_services.get_exps_unresolved_answers_count_for_default_rule( | ||
['eid1']), {'eid1': 1}) | ||
|
||
def test_unresolved_answers_count_for_multiple_explorations(self): | ||
exp_1 = self._create_and_update_fake_exploration('eid1') | ||
exp_2 = self._create_and_update_fake_exploration('eid2') | ||
exp_3 = self._create_and_update_fake_exploration('eid3') | ||
self.assertEquals( | ||
stats_services.get_exps_unresolved_answers_count_for_default_rule( | ||
['eid1', 'eid2', 'eid3']), {}) | ||
event_services.AnswerSubmissionEventHandler.record( | ||
'eid1', 1, exp_1.init_state_name, self.DEFAULT_RULESPEC_STR, 'a1') | ||
event_services.AnswerSubmissionEventHandler.record( | ||
'eid2', 1, exp_2.init_state_name, self.DEFAULT_RULESPEC_STR, 'a3') | ||
event_services.AnswerSubmissionEventHandler.record( | ||
'eid2', 1, exp_2.init_state_name, self.DEFAULT_RULESPEC_STR, 'a2') | ||
event_services.AnswerSubmissionEventHandler.record( | ||
'eid3', 1, exp_3.init_state_name, self.DEFAULT_RULESPEC_STR, 'a2') | ||
self.assertEquals( | ||
stats_services.get_exps_unresolved_answers_count_for_default_rule( | ||
['eid1', 'eid2', 'eid3']), {'eid1': 1, 'eid2': 2, 'eid3': 1}) | ||
|
||
def test_unresolved_answers_count_when_answers_marked_as_resolved(self): | ||
exp_1 = self._create_and_update_fake_exploration('eid1') | ||
self.assertEquals( | ||
stats_services.get_exps_unresolved_answers_count_for_default_rule( | ||
['eid1']), {}) | ||
event_services.AnswerSubmissionEventHandler.record( | ||
'eid1', 1, exp_1.init_state_name, self.DEFAULT_RULESPEC_STR, 'a1') | ||
event_services.AnswerSubmissionEventHandler.record( | ||
'eid1', 1, exp_1.init_state_name, self.DEFAULT_RULESPEC_STR, 'a2') | ||
self.assertEquals( | ||
stats_services.get_exps_unresolved_answers_count_for_default_rule( | ||
['eid1']), {'eid1': 2}) | ||
|
||
event_services.DefaultRuleAnswerResolutionEventHandler.record( | ||
'eid1', exp_1.init_state_name, ['a1']) | ||
self.assertEquals( | ||
stats_services.get_exps_unresolved_answers_count_for_default_rule( | ||
['eid1']), {'eid1': 1}) | ||
|
||
exp_2 = self._create_and_update_fake_exploration('eid2') | ||
event_services.AnswerSubmissionEventHandler.record( | ||
'eid2', 1, exp_2.init_state_name, self.DEFAULT_RULESPEC_STR, 'a1') | ||
event_services.DefaultRuleAnswerResolutionEventHandler.record( | ||
'eid1', exp_1.init_state_name, ['a2']) | ||
event_services.DefaultRuleAnswerResolutionEventHandler.record( | ||
'eid2', exp_1.init_state_name, ['a1']) | ||
self.assertEquals( | ||
stats_services.get_exps_unresolved_answers_count_for_default_rule( | ||
['eid1', 'eid2']), {}) | ||
|
||
def test_unresolved_answers_count_for_multiple_states(self): | ||
exp_1 = self._create_and_update_fake_exploration('eid1') | ||
self.assertEquals( | ||
stats_services.get_exps_unresolved_answers_count_for_default_rule( | ||
['eid1']), {}) | ||
event_services.AnswerSubmissionEventHandler.record( | ||
'eid1', 1, exp_1.init_state_name, self.DEFAULT_RULESPEC_STR, 'a1') | ||
event_services.AnswerSubmissionEventHandler.record( | ||
'eid1', 1, self.STATE_2_NAME, self.DEFAULT_RULESPEC_STR, 'a1') | ||
event_services.AnswerSubmissionEventHandler.record( | ||
'eid1', 1, self.STATE_2_NAME, self.DEFAULT_RULESPEC_STR, 'a2') | ||
self.assertEquals( | ||
stats_services.get_exps_unresolved_answers_count_for_default_rule( | ||
['eid1']), {'eid1': 3}) | ||
|
||
def test_unresolved_answers_count_for_non_default_rules(self): | ||
exp_1 = self._create_and_update_fake_exploration('eid1') | ||
self.assertEquals( | ||
stats_services.get_exps_unresolved_answers_count_for_default_rule( | ||
['eid1']), {}) | ||
event_services.AnswerSubmissionEventHandler.record( | ||
'eid1', 1, exp_1.init_state_name, self.CLASSIFIER_RULESPEC_STR, 'a1' | ||
) | ||
event_services.AnswerSubmissionEventHandler.record( | ||
'eid1', 1, self.STATE_2_NAME, self.CLASSIFIER_RULESPEC_STR, 'a1') | ||
self.assertEquals( | ||
stats_services.get_exps_unresolved_answers_count_for_default_rule( | ||
['eid1']), {}) | ||
|
||
|
||
class EventLogEntryTests(test_utils.GenericTestBase): | ||
"""Test for the event log creation.""" | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters