{"action":"created","comment":{"url":"https://api.github.com/repos/oppia/oppia/pulls/comments/119947004","pull_request_review_id":41877899,"id":119947004,"diff_hunk":"@@ -737,3 +737,82 @@ def test_migration_job_skips_deleted_explorations(self):\n         # Ensure the exploration is still deleted.\n         with self.assertRaisesRegexp(Exception, 'Entity .* not found'):\n             exp_services.get_exploration_by_id(self.NEW_EXP_ID)\n+\n+\n+class FallbackOneOffJobTest(test_utils.GenericTestBase):\n+\n+    EXP_IDS = ['exp_id0', 'exp_id1']\n+    FALLBACK = [{\n+        'trigger': {\n+            'customization_args': {\n+                'num_submits': {\n+                    'value': i + 3\n+                }\n+            },\n+            'trigger_type': 'NthResubmission'\n+        },\n+        'outcome': {\n+            'feedback': [\n+                '<p>feedback %d</p>' % i\n+            ],\n+            'param_changes': [],\n+            'dest': 'Introduction'\n+        }\n+    } for i in xrange(3)]\n+    STATE_NAMES = ['Introduction', 'state 1']\n+\n+    def setUp(self):\n+        super(FallbackOneOffJobTest, self).setUp()\n+\n+        self.signup(self.OWNER_EMAIL, self.OWNER_USERNAME)\n+        self.owner_id = self.get_user_id_from_email(self.OWNER_EMAIL)\n+\n+    def test_fallbacks_are_listed(self):\n+        \"\"\"Tests that fallbacks are listed.\"\"\"\n+        explorations = [self.save_new_valid_exploration(\n+            EXP_ID, self.owner_id, objective='The objective',\n+            end_state_name='end') for EXP_ID in self.EXP_IDS]\n+        for exploration in explorations:\n+            init_state = exploration.states[exploration.init_state_name]\n+            init_interaction = init_state.interaction\n+            init_interaction.default_outcome.dest = 'state 1'\n+            init_state.update_interaction_fallbacks(self.FALLBACK)\n+            exploration.add_states(['state 1'])\n+            new_state = exploration.states['state 1']\n+            new_state.interaction.default_outcome.dest = 'end'\n+            new_state.update_interaction_fallbacks(self.FALLBACK)\n+            exploration.states['end'].update_interaction_id('EndExploration')\n+\n+            exp_services._save_exploration(self.owner_id, exploration, '', []) # pylint: disable=W0212","path":"core/domain/exp_jobs_one_off_test.py","position":50,"original_position":50,"commit_id":"ecf5b648270ce3366c131a564a3e34f7c64513ee","original_commit_id":"ecf5b648270ce3366c131a564a3e34f7c64513ee","user":{"login":"seanlip","id":10575562,"avatar_url":"https://avatars3.githubusercontent.com/u/10575562?v=3","gravatar_id":"","url":"https://api.github.com/users/seanlip","html_url":"https://github.com/seanlip","followers_url":"https://api.github.com/users/seanlip/followers","following_url":"https://api.github.com/users/seanlip/following{/other_user}","gists_url":"https://api.github.com/users/seanlip/gists{/gist_id}","starred_url":"https://api.github.com/users/seanlip/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/seanlip/subscriptions","organizations_url":"https://api.github.com/users/seanlip/orgs","repos_url":"https://api.github.com/users/seanlip/repos","events_url":"https://api.github.com/users/seanlip/events{/privacy}","received_events_url":"https://api.github.com/users/seanlip/received_events","type":"User","site_admin":false},"body":"Please use the human-readable name of the warning here, not W0212","created_at":"2017-06-02T20:35:50Z","updated_at":"2017-06-02T20:35:50Z","html_url":"https://github.com/oppia/oppia/pull/3496#discussion_r119947004","pull_request_url":"https://api.github.com/repos/oppia/oppia/pulls/3496","_links":{"self":{"href":"https://api.github.com/repos/oppia/oppia/pulls/comments/119947004"},"html":{"href":"https://github.com/oppia/oppia/pull/3496#discussion_r119947004"},"pull_request":{"href":"https://api.github.com/repos/oppia/oppia/pulls/3496"}}},"pull_request":{"url":"https://api.github.com/repos/oppia/oppia/pulls/3496","id":123207631,"html_url":"https://github.com/oppia/oppia/pull/3496","diff_url":"https://github.com/oppia/oppia/pull/3496.diff","patch_url":"https://github.com/oppia/oppia/pull/3496.patch","issue_url":"https://api.github.com/repos/oppia/oppia/issues/3496","number":3496,"state":"open","locked":false,"title":"Fix #3495: Implement a one-off job to list all current fallbacks ","user":{"login":"kevintab95","id":11008603,"avatar_url":"https://avatars3.githubusercontent.com/u/11008603?v=3","gravatar_id":"","url":"https://api.github.com/users/kevintab95","html_url":"https://github.com/kevintab95","followers_url":"https://api.github.com/users/kevintab95/followers","following_url":"https://api.github.com/users/kevintab95/following{/other_user}","gists_url":"https://api.github.com/users/kevintab95/gists{/gist_id}","starred_url":"https://api.github.com/users/kevintab95/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kevintab95/subscriptions","organizations_url":"https://api.github.com/users/kevintab95/orgs","repos_url":"https://api.github.com/users/kevintab95/repos","events_url":"https://api.github.com/users/kevintab95/events{/privacy}","received_events_url":"https://api.github.com/users/kevintab95/received_events","type":"User","site_admin":false},"body":"","created_at":"2017-05-31T07:15:38Z","updated_at":"2017-06-02T20:35:50Z","closed_at":null,"merged_at":null,"merge_commit_sha":"7c798237a1b6aed95b8f35bce1caf66948c94ac4","assignee":{"login":"kevintab95","id":11008603,"avatar_url":"https://avatars3.githubusercontent.com/u/11008603?v=3","gravatar_id":"","url":"https://api.github.com/users/kevintab95","html_url":"https://github.com/kevintab95","followers_url":"https://api.github.com/users/kevintab95/followers","following_url":"https://api.github.com/users/kevintab95/following{/other_user}","gists_url":"https://api.github.com/users/kevintab95/gists{/gist_id}","starred_url":"https://api.github.com/users/kevintab95/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kevintab95/subscriptions","organizations_url":"https://api.github.com/users/kevintab95/orgs","repos_url":"https://api.github.com/users/kevintab95/repos","events_url":"https://api.github.com/users/kevintab95/events{/privacy}","received_events_url":"https://api.github.com/users/kevintab95/received_events","type":"User","site_admin":false},"assignees":[{"login":"kevintab95","id":11008603,"avatar_url":"https://avatars3.githubusercontent.com/u/11008603?v=3","gravatar_id":"","url":"https://api.github.com/users/kevintab95","html_url":"https://github.com/kevintab95","followers_url":"https://api.github.com/users/kevintab95/followers","following_url":"https://api.github.com/users/kevintab95/following{/other_user}","gists_url":"https://api.github.com/users/kevintab95/gists{/gist_id}","starred_url":"https://api.github.com/users/kevintab95/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kevintab95/subscriptions","organizations_url":"https://api.github.com/users/kevintab95/orgs","repos_url":"https://api.github.com/users/kevintab95/repos","events_url":"https://api.github.com/users/kevintab95/events{/privacy}","received_events_url":"https://api.github.com/users/kevintab95/received_events","type":"User","site_admin":false}],"requested_reviewers":[],"milestone":null,"commits_url":"https://api.github.com/repos/oppia/oppia/pulls/3496/commits","review_comments_url":"https://api.github.com/repos/oppia/oppia/pulls/3496/comments","review_comment_url":"https://api.github.com/repos/oppia/oppia/pulls/comments{/number}","comments_url":"https://api.github.com/repos/oppia/oppia/issues/3496/comments","statuses_url":"https://api.github.com/repos/oppia/oppia/statuses/ecf5b648270ce3366c131a564a3e34f7c64513ee","head":{"label":"kevintab95:fallbacks-one-off","ref":"fallbacks-one-off","sha":"ecf5b648270ce3366c131a564a3e34f7c64513ee","user":{"login":"kevintab95","id":11008603,"avatar_url":"https://avatars3.githubusercontent.com/u/11008603?v=3","gravatar_id":"","url":"https://api.github.com/users/kevintab95","html_url":"https://github.com/kevintab95","followers_url":"https://api.github.com/users/kevintab95/followers","following_url":"https://api.github.com/users/kevintab95/following{/other_user}","gists_url":"https://api.github.com/users/kevintab95/gists{/gist_id}","starred_url":"https://api.github.com/users/kevintab95/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kevintab95/subscriptions","organizations_url":"https://api.github.com/users/kevintab95/orgs","repos_url":"https://api.github.com/users/kevintab95/repos","events_url":"https://api.github.com/users/kevintab95/events{/privacy}","received_events_url":"https://api.github.com/users/kevintab95/received_events","type":"User","site_admin":false},"repo":{"id":59802809,"name":"oppia","full_name":"kevintab95/oppia","owner":{"login":"kevintab95","id":11008603,"avatar_url":"https://avatars3.githubusercontent.com/u/11008603?v=3","gravatar_id":"","url":"https://api.github.com/users/kevintab95","html_url":"https://github.com/kevintab95","followers_url":"https://api.github.com/users/kevintab95/followers","following_url":"https://api.github.com/users/kevintab95/following{/other_user}","gists_url":"https://api.github.com/users/kevintab95/gists{/gist_id}","starred_url":"https://api.github.com/users/kevintab95/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kevintab95/subscriptions","organizations_url":"https://api.github.com/users/kevintab95/orgs","repos_url":"https://api.github.com/users/kevintab95/repos","events_url":"https://api.github.com/users/kevintab95/events{/privacy}","received_events_url":"https://api.github.com/users/kevintab95/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/kevintab95/oppia","description":"Tool for collaboratively building intelligent tutors.","fork":true,"url":"https://api.github.com/repos/kevintab95/oppia","forks_url":"https://api.github.com/repos/kevintab95/oppia/forks","keys_url":"https://api.github.com/repos/kevintab95/oppia/keys{/key_id}","collaborators_url":"https://api.github.com/repos/kevintab95/oppia/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/kevintab95/oppia/teams","hooks_url":"https://api.github.com/repos/kevintab95/oppia/hooks","issue_events_url":"https://api.github.com/repos/kevintab95/oppia/issues/events{/number}","events_url":"https://api.github.com/repos/kevintab95/oppia/events","assignees_url":"https://api.github.com/repos/kevintab95/oppia/assignees{/user}","branches_url":"https://api.github.com/repos/kevintab95/oppia/branches{/branch}","tags_url":"https://api.github.com/repos/kevintab95/oppia/tags","blobs_url":"https://api.github.com/repos/kevintab95/oppia/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/kevintab95/oppia/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/kevintab95/oppia/git/refs{/sha}","trees_url":"https://api.github.com/repos/kevintab95/oppia/git/trees{/sha}","statuses_url":"https://api.github.com/repos/kevintab95/oppia/statuses/{sha}","languages_url":"https://api.github.com/repos/kevintab95/oppia/languages","stargazers_url":"https://api.github.com/repos/kevintab95/oppia/stargazers","contributors_url":"https://api.github.com/repos/kevintab95/oppia/contributors","subscribers_url":"https://api.github.com/repos/kevintab95/oppia/subscribers","subscription_url":"https://api.github.com/repos/kevintab95/oppia/subscription","commits_url":"https://api.github.com/repos/kevintab95/oppia/commits{/sha}","git_commits_url":"https://api.github.com/repos/kevintab95/oppia/git/commits{/sha}","comments_url":"https://api.github.com/repos/kevintab95/oppia/comments{/number}","issue_comment_url":"https://api.github.com/repos/kevintab95/oppia/issues/comments{/number}","contents_url":"https://api.github.com/repos/kevintab95/oppia/contents/{+path}","compare_url":"https://api.github.com/repos/kevintab95/oppia/compare/{base}...{head}","merges_url":"https://api.github.com/repos/kevintab95/oppia/merges","archive_url":"https://api.github.com/repos/kevintab95/oppia/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/kevintab95/oppia/downloads","issues_url":"https://api.github.com/repos/kevintab95/oppia/issues{/number}","pulls_url":"https://api.github.com/repos/kevintab95/oppia/pulls{/number}","milestones_url":"https://api.github.com/repos/kevintab95/oppia/milestones{/number}","notifications_url":"https://api.github.com/repos/kevintab95/oppia/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/kevintab95/oppia/labels{/name}","releases_url":"https://api.github.com/repos/kevintab95/oppia/releases{/id}","deployments_url":"https://api.github.com/repos/kevintab95/oppia/deployments","created_at":"2016-05-27T03:59:04Z","updated_at":"2016-05-27T03:59:09Z","pushed_at":"2017-06-02T20:19:14Z","git_url":"git://github.com/kevintab95/oppia.git","ssh_url":"git@github.com:kevintab95/oppia.git","clone_url":"https://github.com/kevintab95/oppia.git","svn_url":"https://github.com/kevintab95/oppia","homepage":"https://www.oppia.org","size":51516,"stargazers_count":0,"watchers_count":0,"language":"Python","has_issues":false,"has_projects":true,"has_downloads":false,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"develop"}},"base":{"label":"oppia:develop","ref":"develop","sha":"c0eda67f2d29ecae939ba4f3c712f71cbd834bf3","user":{"login":"oppia","id":11620230,"avatar_url":"https://avatars2.githubusercontent.com/u/11620230?v=3","gravatar_id":"","url":"https://api.github.com/users/oppia","html_url":"https://github.com/oppia","followers_url":"https://api.github.com/users/oppia/followers","following_url":"https://api.github.com/users/oppia/following{/other_user}","gists_url":"https://api.github.com/users/oppia/gists{/gist_id}","starred_url":"https://api.github.com/users/oppia/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/oppia/subscriptions","organizations_url":"https://api.github.com/users/oppia/orgs","repos_url":"https://api.github.com/users/oppia/repos","events_url":"https://api.github.com/users/oppia/events{/privacy}","received_events_url":"https://api.github.com/users/oppia/received_events","type":"Organization","site_admin":false},"repo":{"id":40687563,"name":"oppia","full_name":"oppia/oppia","owner":{"login":"oppia","id":11620230,"avatar_url":"https://avatars2.githubusercontent.com/u/11620230?v=3","gravatar_id":"","url":"https://api.github.com/users/oppia","html_url":"https://github.com/oppia","followers_url":"https://api.github.com/users/oppia/followers","following_url":"https://api.github.com/users/oppia/following{/other_user}","gists_url":"https://api.github.com/users/oppia/gists{/gist_id}","starred_url":"https://api.github.com/users/oppia/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/oppia/subscriptions","organizations_url":"https://api.github.com/users/oppia/orgs","repos_url":"https://api.github.com/users/oppia/repos","events_url":"https://api.github.com/users/oppia/events{/privacy}","received_events_url":"https://api.github.com/users/oppia/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/oppia/oppia","description":"Tool for collaboratively building interactive lessons.","fork":false,"url":"https://api.github.com/repos/oppia/oppia","forks_url":"https://api.github.com/repos/oppia/oppia/forks","keys_url":"https://api.github.com/repos/oppia/oppia/keys{/key_id}","collaborators_url":"https://api.github.com/repos/oppia/oppia/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/oppia/oppia/teams","hooks_url":"https://api.github.com/repos/oppia/oppia/hooks","issue_events_url":"https://api.github.com/repos/oppia/oppia/issues/events{/number}","events_url":"https://api.github.com/repos/oppia/oppia/events","assignees_url":"https://api.github.com/repos/oppia/oppia/assignees{/user}","branches_url":"https://api.github.com/repos/oppia/oppia/branches{/branch}","tags_url":"https://api.github.com/repos/oppia/oppia/tags","blobs_url":"https://api.github.com/repos/oppia/oppia/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/oppia/oppia/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/oppia/oppia/git/refs{/sha}","trees_url":"https://api.github.com/repos/oppia/oppia/git/trees{/sha}","statuses_url":"https://api.github.com/repos/oppia/oppia/statuses/{sha}","languages_url":"https://api.github.com/repos/oppia/oppia/languages","stargazers_url":"https://api.github.com/repos/oppia/oppia/stargazers","contributors_url":"https://api.github.com/repos/oppia/oppia/contributors","subscribers_url":"https://api.github.com/repos/oppia/oppia/subscribers","subscription_url":"https://api.github.com/repos/oppia/oppia/subscription","commits_url":"https://api.github.com/repos/oppia/oppia/commits{/sha}","git_commits_url":"https://api.github.com/repos/oppia/oppia/git/commits{/sha}","comments_url":"https://api.github.com/repos/oppia/oppia/comments{/number}","issue_comment_url":"https://api.github.com/repos/oppia/oppia/issues/comments{/number}","contents_url":"https://api.github.com/repos/oppia/oppia/contents/{+path}","compare_url":"https://api.github.com/repos/oppia/oppia/compare/{base}...{head}","merges_url":"https://api.github.com/repos/oppia/oppia/merges","archive_url":"https://api.github.com/repos/oppia/oppia/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/oppia/oppia/downloads","issues_url":"https://api.github.com/repos/oppia/oppia/issues{/number}","pulls_url":"https://api.github.com/repos/oppia/oppia/pulls{/number}","milestones_url":"https://api.github.com/repos/oppia/oppia/milestones{/number}","notifications_url":"https://api.github.com/repos/oppia/oppia/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/oppia/oppia/labels{/name}","releases_url":"https://api.github.com/repos/oppia/oppia/releases{/id}","deployments_url":"https://api.github.com/repos/oppia/oppia/deployments","created_at":"2015-08-14T00:16:14Z","updated_at":"2017-06-02T18:38:32Z","pushed_at":"2017-06-02T20:19:15Z","git_url":"git://github.com/oppia/oppia.git","ssh_url":"git@github.com:oppia/oppia.git","clone_url":"https://github.com/oppia/oppia.git","svn_url":"https://github.com/oppia/oppia","homepage":"https://www.oppia.org","size":51904,"stargazers_count":314,"watchers_count":314,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":false,"has_wiki":true,"has_pages":false,"forks_count":431,"mirror_url":null,"open_issues_count":350,"forks":431,"open_issues":350,"watchers":314,"default_branch":"develop"}},"_links":{"self":{"href":"https://api.github.com/repos/oppia/oppia/pulls/3496"},"html":{"href":"https://github.com/oppia/oppia/pull/3496"},"issue":{"href":"https://api.github.com/repos/oppia/oppia/issues/3496"},"comments":{"href":"https://api.github.com/repos/oppia/oppia/issues/3496/comments"},"review_comments":{"href":"https://api.github.com/repos/oppia/oppia/pulls/3496/comments"},"review_comment":{"href":"https://api.github.com/repos/oppia/oppia/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/oppia/oppia/pulls/3496/commits"},"statuses":{"href":"https://api.github.com/repos/oppia/oppia/statuses/ecf5b648270ce3366c131a564a3e34f7c64513ee"}}}}
{"actor":{"display_login":"seanlip"}}