{"action":"created","comment":{"url":"https://api.github.com/repos/mozilla/addons-code-manager/pulls/comments/274142968","pull_request_review_id":225182552,"id":274142968,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDI3NDE0Mjk2OA==","diff_hunk":"@@ -0,0 +1,181 @@\n+import * as React from 'react';\n+import { Store } from 'redux';\n+\n+import configureStore from '../../configureStore';\n+import { RelativePathPosition } from '../../reducers/fileTree';\n+import { actions as versionActions } from '../../reducers/versions';\n+import {\n+  createFakeKeyboardEvent,\n+  createFakeThunk,\n+  shallowUntilTarget,\n+  spyOn,\n+} from '../../test-helpers';\n+import styles from './styles.module.scss';\n+\n+import KeyboardShortcuts, {\n+  DefaultProps,\n+  PublicProps,\n+  KeyboardShortcutsBase,\n+} from '.';\n+\n+describe(__filename, () => {\n+  type RenderParams = {\n+    store?: Store;\n+  } & Partial<PublicProps & DefaultProps>;\n+\n+  const render = ({\n+    currentPath = 'file1.js',\n+    pathList = ['file1.js'],\n+    store = configureStore(),\n+    versionId = 123,\n+    ...moreProps\n+  }: RenderParams = {}) => {\n+    const props = {\n+      _goToRelativeFile: jest.fn(),\n+      currentPath,\n+      pathList,\n+      versionId,\n+      ...moreProps,\n+    };\n+\n+    return shallowUntilTarget(\n+      <KeyboardShortcuts {...props} />,\n+      KeyboardShortcutsBase,\n+      {\n+        shallowOptions: { context: { store } },\n+      },\n+    );\n+  };\n+\n+  it('renders a list of keyboard shortcuts', () => {\n+    const root = render();\n+\n+    expect(root.find(`.${styles.KeyboardShortcuts}`)).toHaveLength(1);\n+  });\n+\n+  it('binds and unbinds keydown to the listener', () => {\n+    document.addEventListener = jest.fn();\n+    document.removeEventListener = jest.fn();\n+\n+    const root = render();\n+    const { keydownListener } = root.instance() as KeyboardShortcutsBase;\n+\n+    expect(document.addEventListener).toHaveBeenCalledWith(\n+      'keydown',\n+      keydownListener,\n+    );\n+\n+    root.unmount();\n+\n+    expect(document.removeEventListener).toHaveBeenCalledWith(\n+      'keydown',\n+      keydownListener,\n+    );\n+  });\n+\n+  it.each([\n+    ['previous', 'k', RelativePathPosition.previous],\n+    ['next', 'j', RelativePathPosition.next],\n+  ])(\n+    'dispatches goToRelativeFile with %s when \"%s\" is pressed',\n+    (direction, key, position) => {\n+      const currentPath = 'file1.js';\n+      const pathList = [currentPath];\n+      const versionId = 123;\n+\n+      const store = configureStore();\n+      const dispatch = spyOn(store, 'dispatch');\n+      const fakeThunk = createFakeThunk();\n+      const _goToRelativeFile = fakeThunk.createThunk;\n+\n+      const root = render({\n+        _goToRelativeFile,\n+        currentPath,\n+        pathList,\n+        store,\n+        versionId,\n+      });\n+\n+      const { keydownListener } = root.instance() as KeyboardShortcutsBase;\n+\n+      // TS cannot seem to figure out that `key` is a string.\n+      // @ts-ignore\n+      const event = createFakeKeyboardEvent({ key }) as KeyboardEvent;\n+\n+      keydownListener(event);\n+\n+      expect(dispatch).toHaveBeenCalledWith(fakeThunk.thunk);\n+      expect(_goToRelativeFile).toHaveBeenCalledWith({\n+        currentPath,\n+        pathList,\n+        position,\n+        versionId,\n+      });\n+    },\n+  );\n+\n+  it('dispatches expandTree when \"e\" is pressed', () => {\n+    const versionId = 123;\n+\n+    const store = configureStore();\n+    const dispatch = spyOn(store, 'dispatch');\n+\n+    const root = render({\n+      store,\n+      versionId,\n+    });\n+\n+    const { keydownListener } = root.instance() as KeyboardShortcutsBase;\n+\n+    const event = createFakeKeyboardEvent({ key: 'e' }) as KeyboardEvent;\n+\n+    keydownListener(event);\n+\n+    expect(dispatch).toHaveBeenCalledWith(\n+      versionActions.expandTree({ versionId }),\n+    );\n+  });\n+\n+  it('dispatches collapseTree when \"c\" is pressed', () => {\n+    const versionId = 123;\n+\n+    const store = configureStore();\n+    const dispatch = spyOn(store, 'dispatch');\n+\n+    const root = render({\n+      store,\n+      versionId,\n+    });\n+\n+    const { keydownListener } = root.instance() as KeyboardShortcutsBase;\n+\n+    const event = createFakeKeyboardEvent({ key: 'c' }) as KeyboardEvent;\n+\n+    keydownListener(event);","path":"src/components/KeyboardShortcuts/index.spec.tsx","position":154,"original_position":154,"commit_id":"e927e0b89a1eaaeb14a713230cd0e987a2227b76","original_commit_id":"e927e0b89a1eaaeb14a713230cd0e987a2227b76","user":{"login":"kumar303","id":55398,"node_id":"MDQ6VXNlcjU1Mzk4","avatar_url":"https://avatars1.githubusercontent.com/u/55398?v=4","gravatar_id":"","url":"https://api.github.com/users/kumar303","html_url":"https://github.com/kumar303","followers_url":"https://api.github.com/users/kumar303/followers","following_url":"https://api.github.com/users/kumar303/following{/other_user}","gists_url":"https://api.github.com/users/kumar303/gists{/gist_id}","starred_url":"https://api.github.com/users/kumar303/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kumar303/subscriptions","organizations_url":"https://api.github.com/users/kumar303/orgs","repos_url":"https://api.github.com/users/kumar303/repos","events_url":"https://api.github.com/users/kumar303/events{/privacy}","received_events_url":"https://api.github.com/users/kumar303/received_events","type":"User","site_admin":false},"body":"How about `renderAndTriggerKeyEvent(props, event)`? I think that would cut down on duplication across a couple tests.","created_at":"2019-04-10T20:30:38Z","updated_at":"2019-04-10T20:47:46Z","html_url":"https://github.com/mozilla/addons-code-manager/pull/468#discussion_r274142968","pull_request_url":"https://api.github.com/repos/mozilla/addons-code-manager/pulls/468","author_association":"MEMBER","_links":{"self":{"href":"https://api.github.com/repos/mozilla/addons-code-manager/pulls/comments/274142968"},"html":{"href":"https://github.com/mozilla/addons-code-manager/pull/468#discussion_r274142968"},"pull_request":{"href":"https://api.github.com/repos/mozilla/addons-code-manager/pulls/468"}}},"pull_request":{"url":"https://api.github.com/repos/mozilla/addons-code-manager/pulls/468","id":264582811,"node_id":"MDExOlB1bGxSZXF1ZXN0MjY0NTgyODEx","html_url":"https://github.com/mozilla/addons-code-manager/pull/468","diff_url":"https://github.com/mozilla/addons-code-manager/pull/468.diff","patch_url":"https://github.com/mozilla/addons-code-manager/pull/468.patch","issue_url":"https://api.github.com/repos/mozilla/addons-code-manager/issues/468","number":468,"state":"open","locked":false,"title":"Create a KeyboardShortcuts component","user":{"login":"bobsilverberg","id":142755,"node_id":"MDQ6VXNlcjE0Mjc1NQ==","avatar_url":"https://avatars1.githubusercontent.com/u/142755?v=4","gravatar_id":"","url":"https://api.github.com/users/bobsilverberg","html_url":"https://github.com/bobsilverberg","followers_url":"https://api.github.com/users/bobsilverberg/followers","following_url":"https://api.github.com/users/bobsilverberg/following{/other_user}","gists_url":"https://api.github.com/users/bobsilverberg/gists{/gist_id}","starred_url":"https://api.github.com/users/bobsilverberg/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bobsilverberg/subscriptions","organizations_url":"https://api.github.com/users/bobsilverberg/orgs","repos_url":"https://api.github.com/users/bobsilverberg/repos","events_url":"https://api.github.com/users/bobsilverberg/events{/privacy}","received_events_url":"https://api.github.com/users/bobsilverberg/received_events","type":"User","site_admin":false},"body":"Fixes #459 \r\n\r\nThis is ready for a review, but there are a number of outstanding issues, some of which could probably be addressed via follow-up issues:\r\n\r\n- The styling (and possibly positioning) of the legend needs to be improved/tightened up.\r\n- While the new selected file is automatically highlighted in the tree when `j` or `k` is pressed, folders do not automatically open, so a user cannot see the newly highlighted file if they navigate to a file in a closed folder.\r\n- I have not added or implemented the ability to hide and unhide the tree itself. I will open a follow-up about that.\r\n- There was discussion about either not looping around from the last file to the first (and vice versa), or at least displaying a message when we do loop around. Neither of those have been addressed so a follow-up should be opened about that.\r\n- I'm using the original shortcuts for expand and collapse, of `e` and `c`, but as the wording says \"open\" and \"close\", maybe `o` and `c` would be better?\r\n- There is a TS issue with the test for the `j` and `k` buttons which I wasn't able to figure out, so I added a `@ts-ignore` comment. I believe the problem is that TS is getting confused by the arguments being passed in via `it.each`. It would be nice to fix this if it's possible.\r\n\r\nNote also that I am displaying the shortcuts as a child of the `FileTree` component, which means that they will not be displayed/activated unless a tree actually exists, which I believe is what makes sense.\r\n\r\n","created_at":"2019-03-26T15:52:08Z","updated_at":"2019-04-10T20:47:46Z","closed_at":null,"merged_at":null,"merge_commit_sha":"79c5f055c63e16fd418226e1cfe67a9509849b3e","assignee":{"login":"kumar303","id":55398,"node_id":"MDQ6VXNlcjU1Mzk4","avatar_url":"https://avatars1.githubusercontent.com/u/55398?v=4","gravatar_id":"","url":"https://api.github.com/users/kumar303","html_url":"https://github.com/kumar303","followers_url":"https://api.github.com/users/kumar303/followers","following_url":"https://api.github.com/users/kumar303/following{/other_user}","gists_url":"https://api.github.com/users/kumar303/gists{/gist_id}","starred_url":"https://api.github.com/users/kumar303/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kumar303/subscriptions","organizations_url":"https://api.github.com/users/kumar303/orgs","repos_url":"https://api.github.com/users/kumar303/repos","events_url":"https://api.github.com/users/kumar303/events{/privacy}","received_events_url":"https://api.github.com/users/kumar303/received_events","type":"User","site_admin":false},"assignees":[{"login":"kumar303","id":55398,"node_id":"MDQ6VXNlcjU1Mzk4","avatar_url":"https://avatars1.githubusercontent.com/u/55398?v=4","gravatar_id":"","url":"https://api.github.com/users/kumar303","html_url":"https://github.com/kumar303","followers_url":"https://api.github.com/users/kumar303/followers","following_url":"https://api.github.com/users/kumar303/following{/other_user}","gists_url":"https://api.github.com/users/kumar303/gists{/gist_id}","starred_url":"https://api.github.com/users/kumar303/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kumar303/subscriptions","organizations_url":"https://api.github.com/users/kumar303/orgs","repos_url":"https://api.github.com/users/kumar303/repos","events_url":"https://api.github.com/users/kumar303/events{/privacy}","received_events_url":"https://api.github.com/users/kumar303/received_events","type":"User","site_admin":false}],"requested_reviewers":[{"login":"willdurand","id":217628,"node_id":"MDQ6VXNlcjIxNzYyOA==","avatar_url":"https://avatars0.githubusercontent.com/u/217628?v=4","gravatar_id":"","url":"https://api.github.com/users/willdurand","html_url":"https://github.com/willdurand","followers_url":"https://api.github.com/users/willdurand/followers","following_url":"https://api.github.com/users/willdurand/following{/other_user}","gists_url":"https://api.github.com/users/willdurand/gists{/gist_id}","starred_url":"https://api.github.com/users/willdurand/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/willdurand/subscriptions","organizations_url":"https://api.github.com/users/willdurand/orgs","repos_url":"https://api.github.com/users/willdurand/repos","events_url":"https://api.github.com/users/willdurand/events{/privacy}","received_events_url":"https://api.github.com/users/willdurand/received_events","type":"User","site_admin":false}],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/mozilla/addons-code-manager/pulls/468/commits","review_comments_url":"https://api.github.com/repos/mozilla/addons-code-manager/pulls/468/comments","review_comment_url":"https://api.github.com/repos/mozilla/addons-code-manager/pulls/comments{/number}","comments_url":"https://api.github.com/repos/mozilla/addons-code-manager/issues/468/comments","statuses_url":"https://api.github.com/repos/mozilla/addons-code-manager/statuses/e927e0b89a1eaaeb14a713230cd0e987a2227b76","head":{"label":"bobsilverberg:keyboard-shortcuts-459","ref":"keyboard-shortcuts-459","sha":"e927e0b89a1eaaeb14a713230cd0e987a2227b76","user":{"login":"bobsilverberg","id":142755,"node_id":"MDQ6VXNlcjE0Mjc1NQ==","avatar_url":"https://avatars1.githubusercontent.com/u/142755?v=4","gravatar_id":"","url":"https://api.github.com/users/bobsilverberg","html_url":"https://github.com/bobsilverberg","followers_url":"https://api.github.com/users/bobsilverberg/followers","following_url":"https://api.github.com/users/bobsilverberg/following{/other_user}","gists_url":"https://api.github.com/users/bobsilverberg/gists{/gist_id}","starred_url":"https://api.github.com/users/bobsilverberg/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bobsilverberg/subscriptions","organizations_url":"https://api.github.com/users/bobsilverberg/orgs","repos_url":"https://api.github.com/users/bobsilverberg/repos","events_url":"https://api.github.com/users/bobsilverberg/events{/privacy}","received_events_url":"https://api.github.com/users/bobsilverberg/received_events","type":"User","site_admin":false},"repo":{"id":166072613,"node_id":"MDEwOlJlcG9zaXRvcnkxNjYwNzI2MTM=","name":"addons-code-manager","full_name":"bobsilverberg/addons-code-manager","private":false,"owner":{"login":"bobsilverberg","id":142755,"node_id":"MDQ6VXNlcjE0Mjc1NQ==","avatar_url":"https://avatars1.githubusercontent.com/u/142755?v=4","gravatar_id":"","url":"https://api.github.com/users/bobsilverberg","html_url":"https://github.com/bobsilverberg","followers_url":"https://api.github.com/users/bobsilverberg/followers","following_url":"https://api.github.com/users/bobsilverberg/following{/other_user}","gists_url":"https://api.github.com/users/bobsilverberg/gists{/gist_id}","starred_url":"https://api.github.com/users/bobsilverberg/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bobsilverberg/subscriptions","organizations_url":"https://api.github.com/users/bobsilverberg/orgs","repos_url":"https://api.github.com/users/bobsilverberg/repos","events_url":"https://api.github.com/users/bobsilverberg/events{/privacy}","received_events_url":"https://api.github.com/users/bobsilverberg/received_events","type":"User","site_admin":false},"html_url":"https://github.com/bobsilverberg/addons-code-manager","description":"A web application to manage add-on source code","fork":true,"url":"https://api.github.com/repos/bobsilverberg/addons-code-manager","forks_url":"https://api.github.com/repos/bobsilverberg/addons-code-manager/forks","keys_url":"https://api.github.com/repos/bobsilverberg/addons-code-manager/keys{/key_id}","collaborators_url":"https://api.github.com/repos/bobsilverberg/addons-code-manager/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/bobsilverberg/addons-code-manager/teams","hooks_url":"https://api.github.com/repos/bobsilverberg/addons-code-manager/hooks","issue_events_url":"https://api.github.com/repos/bobsilverberg/addons-code-manager/issues/events{/number}","events_url":"https://api.github.com/repos/bobsilverberg/addons-code-manager/events","assignees_url":"https://api.github.com/repos/bobsilverberg/addons-code-manager/assignees{/user}","branches_url":"https://api.github.com/repos/bobsilverberg/addons-code-manager/branches{/branch}","tags_url":"https://api.github.com/repos/bobsilverberg/addons-code-manager/tags","blobs_url":"https://api.github.com/repos/bobsilverberg/addons-code-manager/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/bobsilverberg/addons-code-manager/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/bobsilverberg/addons-code-manager/git/refs{/sha}","trees_url":"https://api.github.com/repos/bobsilverberg/addons-code-manager/git/trees{/sha}","statuses_url":"https://api.github.com/repos/bobsilverberg/addons-code-manager/statuses/{sha}","languages_url":"https://api.github.com/repos/bobsilverberg/addons-code-manager/languages","stargazers_url":"https://api.github.com/repos/bobsilverberg/addons-code-manager/stargazers","contributors_url":"https://api.github.com/repos/bobsilverberg/addons-code-manager/contributors","subscribers_url":"https://api.github.com/repos/bobsilverberg/addons-code-manager/subscribers","subscription_url":"https://api.github.com/repos/bobsilverberg/addons-code-manager/subscription","commits_url":"https://api.github.com/repos/bobsilverberg/addons-code-manager/commits{/sha}","git_commits_url":"https://api.github.com/repos/bobsilverberg/addons-code-manager/git/commits{/sha}","comments_url":"https://api.github.com/repos/bobsilverberg/addons-code-manager/comments{/number}","issue_comment_url":"https://api.github.com/repos/bobsilverberg/addons-code-manager/issues/comments{/number}","contents_url":"https://api.github.com/repos/bobsilverberg/addons-code-manager/contents/{+path}","compare_url":"https://api.github.com/repos/bobsilverberg/addons-code-manager/compare/{base}...{head}","merges_url":"https://api.github.com/repos/bobsilverberg/addons-code-manager/merges","archive_url":"https://api.github.com/repos/bobsilverberg/addons-code-manager/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/bobsilverberg/addons-code-manager/downloads","issues_url":"https://api.github.com/repos/bobsilverberg/addons-code-manager/issues{/number}","pulls_url":"https://api.github.com/repos/bobsilverberg/addons-code-manager/pulls{/number}","milestones_url":"https://api.github.com/repos/bobsilverberg/addons-code-manager/milestones{/number}","notifications_url":"https://api.github.com/repos/bobsilverberg/addons-code-manager/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/bobsilverberg/addons-code-manager/labels{/name}","releases_url":"https://api.github.com/repos/bobsilverberg/addons-code-manager/releases{/id}","deployments_url":"https://api.github.com/repos/bobsilverberg/addons-code-manager/deployments","created_at":"2019-01-16T16:27:03Z","updated_at":"2019-04-10T18:33:11Z","pushed_at":"2019-04-10T18:33:09Z","git_url":"git://github.com/bobsilverberg/addons-code-manager.git","ssh_url":"git@github.com:bobsilverberg/addons-code-manager.git","clone_url":"https://github.com/bobsilverberg/addons-code-manager.git","svn_url":"https://github.com/bobsilverberg/addons-code-manager","homepage":"","size":3216,"stargazers_count":0,"watchers_count":0,"language":"TypeScript","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":0,"license":{"key":"mpl-2.0","name":"Mozilla Public License 2.0","spdx_id":"MPL-2.0","url":"https://api.github.com/licenses/mpl-2.0","node_id":"MDc6TGljZW5zZTE0"},"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"mozilla:master","ref":"master","sha":"8be436660564db55966a551136b2e370a35690e8","user":{"login":"mozilla","id":131524,"node_id":"MDEyOk9yZ2FuaXphdGlvbjEzMTUyNA==","avatar_url":"https://avatars2.githubusercontent.com/u/131524?v=4","gravatar_id":"","url":"https://api.github.com/users/mozilla","html_url":"https://github.com/mozilla","followers_url":"https://api.github.com/users/mozilla/followers","following_url":"https://api.github.com/users/mozilla/following{/other_user}","gists_url":"https://api.github.com/users/mozilla/gists{/gist_id}","starred_url":"https://api.github.com/users/mozilla/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mozilla/subscriptions","organizations_url":"https://api.github.com/users/mozilla/orgs","repos_url":"https://api.github.com/users/mozilla/repos","events_url":"https://api.github.com/users/mozilla/events{/privacy}","received_events_url":"https://api.github.com/users/mozilla/received_events","type":"Organization","site_admin":false},"repo":{"id":162321557,"node_id":"MDEwOlJlcG9zaXRvcnkxNjIzMjE1NTc=","name":"addons-code-manager","full_name":"mozilla/addons-code-manager","private":false,"owner":{"login":"mozilla","id":131524,"node_id":"MDEyOk9yZ2FuaXphdGlvbjEzMTUyNA==","avatar_url":"https://avatars2.githubusercontent.com/u/131524?v=4","gravatar_id":"","url":"https://api.github.com/users/mozilla","html_url":"https://github.com/mozilla","followers_url":"https://api.github.com/users/mozilla/followers","following_url":"https://api.github.com/users/mozilla/following{/other_user}","gists_url":"https://api.github.com/users/mozilla/gists{/gist_id}","starred_url":"https://api.github.com/users/mozilla/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mozilla/subscriptions","organizations_url":"https://api.github.com/users/mozilla/orgs","repos_url":"https://api.github.com/users/mozilla/repos","events_url":"https://api.github.com/users/mozilla/events{/privacy}","received_events_url":"https://api.github.com/users/mozilla/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/mozilla/addons-code-manager","description":"A web application to manage add-on source code","fork":false,"url":"https://api.github.com/repos/mozilla/addons-code-manager","forks_url":"https://api.github.com/repos/mozilla/addons-code-manager/forks","keys_url":"https://api.github.com/repos/mozilla/addons-code-manager/keys{/key_id}","collaborators_url":"https://api.github.com/repos/mozilla/addons-code-manager/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/mozilla/addons-code-manager/teams","hooks_url":"https://api.github.com/repos/mozilla/addons-code-manager/hooks","issue_events_url":"https://api.github.com/repos/mozilla/addons-code-manager/issues/events{/number}","events_url":"https://api.github.com/repos/mozilla/addons-code-manager/events","assignees_url":"https://api.github.com/repos/mozilla/addons-code-manager/assignees{/user}","branches_url":"https://api.github.com/repos/mozilla/addons-code-manager/branches{/branch}","tags_url":"https://api.github.com/repos/mozilla/addons-code-manager/tags","blobs_url":"https://api.github.com/repos/mozilla/addons-code-manager/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/mozilla/addons-code-manager/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/mozilla/addons-code-manager/git/refs{/sha}","trees_url":"https://api.github.com/repos/mozilla/addons-code-manager/git/trees{/sha}","statuses_url":"https://api.github.com/repos/mozilla/addons-code-manager/statuses/{sha}","languages_url":"https://api.github.com/repos/mozilla/addons-code-manager/languages","stargazers_url":"https://api.github.com/repos/mozilla/addons-code-manager/stargazers","contributors_url":"https://api.github.com/repos/mozilla/addons-code-manager/contributors","subscribers_url":"https://api.github.com/repos/mozilla/addons-code-manager/subscribers","subscription_url":"https://api.github.com/repos/mozilla/addons-code-manager/subscription","commits_url":"https://api.github.com/repos/mozilla/addons-code-manager/commits{/sha}","git_commits_url":"https://api.github.com/repos/mozilla/addons-code-manager/git/commits{/sha}","comments_url":"https://api.github.com/repos/mozilla/addons-code-manager/comments{/number}","issue_comment_url":"https://api.github.com/repos/mozilla/addons-code-manager/issues/comments{/number}","contents_url":"https://api.github.com/repos/mozilla/addons-code-manager/contents/{+path}","compare_url":"https://api.github.com/repos/mozilla/addons-code-manager/compare/{base}...{head}","merges_url":"https://api.github.com/repos/mozilla/addons-code-manager/merges","archive_url":"https://api.github.com/repos/mozilla/addons-code-manager/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/mozilla/addons-code-manager/downloads","issues_url":"https://api.github.com/repos/mozilla/addons-code-manager/issues{/number}","pulls_url":"https://api.github.com/repos/mozilla/addons-code-manager/pulls{/number}","milestones_url":"https://api.github.com/repos/mozilla/addons-code-manager/milestones{/number}","notifications_url":"https://api.github.com/repos/mozilla/addons-code-manager/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/mozilla/addons-code-manager/labels{/name}","releases_url":"https://api.github.com/repos/mozilla/addons-code-manager/releases{/id}","deployments_url":"https://api.github.com/repos/mozilla/addons-code-manager/deployments","created_at":"2018-12-18T17:11:00Z","updated_at":"2019-04-10T15:46:07Z","pushed_at":"2019-04-10T17:09:43Z","git_url":"git://github.com/mozilla/addons-code-manager.git","ssh_url":"git@github.com:mozilla/addons-code-manager.git","clone_url":"https://github.com/mozilla/addons-code-manager.git","svn_url":"https://github.com/mozilla/addons-code-manager","homepage":"","size":4823,"stargazers_count":3,"watchers_count":3,"language":"TypeScript","has_issues":true,"has_projects":false,"has_downloads":true,"has_wiki":false,"has_pages":true,"forks_count":10,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":58,"license":{"key":"mpl-2.0","name":"Mozilla Public License 2.0","spdx_id":"MPL-2.0","url":"https://api.github.com/licenses/mpl-2.0","node_id":"MDc6TGljZW5zZTE0"},"forks":10,"open_issues":58,"watchers":3,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/mozilla/addons-code-manager/pulls/468"},"html":{"href":"https://github.com/mozilla/addons-code-manager/pull/468"},"issue":{"href":"https://api.github.com/repos/mozilla/addons-code-manager/issues/468"},"comments":{"href":"https://api.github.com/repos/mozilla/addons-code-manager/issues/468/comments"},"review_comments":{"href":"https://api.github.com/repos/mozilla/addons-code-manager/pulls/468/comments"},"review_comment":{"href":"https://api.github.com/repos/mozilla/addons-code-manager/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/mozilla/addons-code-manager/pulls/468/commits"},"statuses":{"href":"https://api.github.com/repos/mozilla/addons-code-manager/statuses/e927e0b89a1eaaeb14a713230cd0e987a2227b76"}},"author_association":"CONTRIBUTOR"}}
{"actor":{"display_login":"kumar303"}}