{"action":"created","comment":{"url":"https://api.github.com/repos/mitodl/open-discussions/pulls/comments/215760862","pull_request_review_id":153099813,"id":215760862,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIxNTc2MDg2Mg==","diff_hunk":"@@ -0,0 +1,221 @@\n+// @flow\n+import React from \"react\"\n+import sinon from \"sinon\"\n+import { assert } from \"chai\"\n+\n+import {\n+  makeChannelPostList,\n+  makePagination,\n+  makePost\n+} from \"../factories/posts\"\n+\n+import withPostList from \"./withPostList\"\n+import IntegrationTestHelper from \"../util/integration_test_helper\"\n+import * as apiActions from \"../util/api_actions\"\n+import R from \"ramda\"\n+\n+class Page extends React.Component<*, *> {\n+  render() {\n+    const { renderPosts } = this.props\n+    return <div>{renderPosts()}</div>\n+  }\n+}\n+\n+const WrappedPage = withPostList(Page)\n+\n+describe(\"withPostList\", () => {\n+  let helper, render, postList, loadPosts\n+\n+  beforeEach(() => {\n+    helper = new IntegrationTestHelper()\n+    loadPosts = helper.sandbox.stub()\n+    postList = makeChannelPostList()\n+    render = helper.configureHOCRenderer(\n+      WrappedPage,\n+      Page,\n+      {},\n+      {\n+        posts:     postList,\n+        loadPosts: loadPosts,\n+        location:  { search: {} }\n+      }\n+    )\n+  })\n+\n+  afterEach(() => {\n+    helper.cleanup()\n+  })\n+\n+  describe(\"pagination\", () => {\n+    [{ sort: \"new\" }, null].forEach(pagination => {\n+      it(`has PostList and ${\n+        pagination ? \"\" : \"no \"\n+      }InfiniteScroll if there is ${\n+        pagination ? \"\" : \"no \"\n+      }pagination`, async () => {\n+        const { inner } = await render(\n+          {},\n+          {\n+            pagination\n+          }\n+        )\n+        assert.equal(inner.find(\"InfiniteScroll\").length, pagination ? 1 : 0)\n+        assert.equal(inner.find(\"PostList\").length, 1)\n+      })\n+    })\n+    ;[\"after\", null].forEach(afterUrl => {\n+      it(`sets hasMore=${String(!!afterUrl)} if it ${\n+        afterUrl ? \"has\" : \"doesn't have\"\n+      } an after url`, async () => {\n+        const { inner } = await render(\n+          {},\n+          {\n+            pagination: {\n+              sort:  \"new\",\n+              after: afterUrl\n+            }\n+          }\n+        )\n+\n+        assert.equal(inner.find(\"InfiniteScroll\").props().hasMore, !!afterUrl)\n+      })\n+    })\n+\n+    describe(\"loadMore\", () => {\n+      let pagination\n+\n+      beforeEach(() => {\n+        pagination = makePagination()\n+      })\n+\n+      it(\"doesn't do anything if canLoadMore is not set\", async () => {\n+        const { inner } = await render(\n+          {},\n+          {\n+            canLoadMore: false,\n+            pagination:  pagination\n+          }\n+        )\n+        const props = inner.find(\"InfiniteScroll\").props()\n+        await props.loadMore()\n+        sinon.assert.notCalled(loadPosts)\n+      })\n+      ;[\n+        [\"?sort=some_sort&after=different_after\", { sort: \"some_sort\" }],\n+        [\"\", {}]\n+      ].forEach(([search, expectedExtraParams]) => {\n+        it(`${\n+          search ? \"has\" : \"doesn't have\"\n+        } query parameters from the URL for the pagination`, async () => {\n+          const { inner } = await render(\n+            {},\n+            {\n+              canLoadMore: true,\n+              pagination:  pagination,\n+              location:    {\n+                search\n+              }\n+            }\n+          )\n+          const props = inner.find(\"InfiniteScroll\").props()\n+          await props.loadMore()\n+          assert.equal(loadPosts.callCount, 1)\n+          sinon.assert.calledWith(loadPosts, {\n+            after: pagination.after,\n+            count: pagination.after_count,\n+            ...expectedExtraParams\n+          })\n+        })\n+      })\n+    })\n+\n+    describe(\"PostList\", () => {\n+      it(\"has posts\", async () => {\n+        const { inner } = await render()\n+        const props = inner.find(\"PostList\").props()\n+\n+        assert.deepEqual(props.posts, postList)\n+      })\n+\n+      it(\"toggles an upvote\", async () => {\n+        const post = makePost()\n+        const innerStub = helper.sandbox.stub()\n+        const stub = helper.sandbox.stub(apiActions, \"toggleUpvote\")\n+        stub.get(() =>\n+          R.curry(async (dispatch, post) => innerStub(dispatch, post))\n+        )\n+        const { inner } = await render()\n+        const props = inner.find(\"PostList\").props()\n+        await props.toggleUpvote(post)\n+\n+        assert.equal(innerStub.callCount, 1)\n+        assert.equal(innerStub.firstCall.args[1], post)\n+      })\n+      ;[\n+        [\"reportPost\", \"showReportPost\", true],\n+        [\"removePost\", \"showRemovePost\", true],\n+        [\"reportPost\", \"showReportPost\", false],\n+        [\"removePost\", \"showRemovePost\", false]\n+      ].forEach(([prop, showProp, showPropValue]) => {\n+        it(`${\n+          showProp ? \"passes\" : \"doesn't pass\"\n+        } through ${prop} when ${String(showProp)}=${String(\n+          showPropValue\n+        )}`, async () => {\n+          const { inner } = await render(\n+            {},\n+            {\n+              [prop]:     prop,\n+              [showProp]: showProp","path":"static/js/hoc/withPostList_test.js","position":169,"original_position":169,"commit_id":"d26fecf4448333a2362552489d7e93c1eafb3d06","original_commit_id":"d26fecf4448333a2362552489d7e93c1eafb3d06","user":{"login":"gsidebo","id":14932219,"node_id":"MDQ6VXNlcjE0OTMyMjE5","avatar_url":"https://avatars2.githubusercontent.com/u/14932219?v=4","gravatar_id":"","url":"https://api.github.com/users/gsidebo","html_url":"https://github.com/gsidebo","followers_url":"https://api.github.com/users/gsidebo/followers","following_url":"https://api.github.com/users/gsidebo/following{/other_user}","gists_url":"https://api.github.com/users/gsidebo/gists{/gist_id}","starred_url":"https://api.github.com/users/gsidebo/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/gsidebo/subscriptions","organizations_url":"https://api.github.com/users/gsidebo/orgs","repos_url":"https://api.github.com/users/gsidebo/repos","events_url":"https://api.github.com/users/gsidebo/events{/privacy}","received_events_url":"https://api.github.com/users/gsidebo/received_events","type":"User","site_admin":false},"body":"I don't think this test is correctly written. `showProp` is a string, and the value of the prop should be a boolean. Looks like you need to replace `showProp` with `showPropValue` for the value here and at line 174. Also, you can use `inner.find(\"PostList\").prop(prop)` instead of `inner.find(\"PostList\").props()[prop]`","created_at":"2018-09-06T20:09:09Z","updated_at":"2018-09-06T20:09:16Z","html_url":"https://github.com/mitodl/open-discussions/pull/1104#discussion_r215760862","pull_request_url":"https://api.github.com/repos/mitodl/open-discussions/pulls/1104","author_association":"CONTRIBUTOR","_links":{"self":{"href":"https://api.github.com/repos/mitodl/open-discussions/pulls/comments/215760862"},"html":{"href":"https://github.com/mitodl/open-discussions/pull/1104#discussion_r215760862"},"pull_request":{"href":"https://api.github.com/repos/mitodl/open-discussions/pulls/1104"}}},"pull_request":{"url":"https://api.github.com/repos/mitodl/open-discussions/pulls/1104","id":209859823,"node_id":"MDExOlB1bGxSZXF1ZXN0MjA5ODU5ODIz","html_url":"https://github.com/mitodl/open-discussions/pull/1104","diff_url":"https://github.com/mitodl/open-discussions/pull/1104.diff","patch_url":"https://github.com/mitodl/open-discussions/pull/1104.patch","issue_url":"https://api.github.com/repos/mitodl/open-discussions/issues/1104","number":1104,"state":"open","locked":false,"title":"Implement infinite scroll","user":{"login":"noisecapella","id":863262,"node_id":"MDQ6VXNlcjg2MzI2Mg==","avatar_url":"https://avatars2.githubusercontent.com/u/863262?v=4","gravatar_id":"","url":"https://api.github.com/users/noisecapella","html_url":"https://github.com/noisecapella","followers_url":"https://api.github.com/users/noisecapella/followers","following_url":"https://api.github.com/users/noisecapella/following{/other_user}","gists_url":"https://api.github.com/users/noisecapella/gists{/gist_id}","starred_url":"https://api.github.com/users/noisecapella/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/noisecapella/subscriptions","organizations_url":"https://api.github.com/users/noisecapella/orgs","repos_url":"https://api.github.com/users/noisecapella/repos","events_url":"https://api.github.com/users/noisecapella/events{/privacy}","received_events_url":"https://api.github.com/users/noisecapella/received_events","type":"User","site_admin":false},"body":"#### Pre-Flight checklist\r\n\r\n- [x] Testing\r\n  - [x] Code is tested\r\n  - [x] Changes have been manually tested\r\n\r\n#### What are the relevant tickets?\r\nFixes #1045 \r\n\r\n#### What's this PR do?\r\nReplaces the pagination links on the home and channel pages with an infinite scroll\r\n\r\nTBD: do we care about pagination in the URL?\r\n\r\n#### How should this be manually tested?\r\nScroll down the home and channel pages, making sure there are enough posts to paginate. The loader that appears should look appropriate.\r\n\r\nIf you change the sort it should clear and reload the posts. Also verify that refreshing the browser with the `sort=...` in the query parameters will show the appropriately sorted posts.","created_at":"2018-08-21T15:07:50Z","updated_at":"2018-09-06T20:09:16Z","closed_at":null,"merged_at":null,"merge_commit_sha":"90acd7d20a489cdb746039bf287f2a05d3d3b383","assignee":{"login":"gsidebo","id":14932219,"node_id":"MDQ6VXNlcjE0OTMyMjE5","avatar_url":"https://avatars2.githubusercontent.com/u/14932219?v=4","gravatar_id":"","url":"https://api.github.com/users/gsidebo","html_url":"https://github.com/gsidebo","followers_url":"https://api.github.com/users/gsidebo/followers","following_url":"https://api.github.com/users/gsidebo/following{/other_user}","gists_url":"https://api.github.com/users/gsidebo/gists{/gist_id}","starred_url":"https://api.github.com/users/gsidebo/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/gsidebo/subscriptions","organizations_url":"https://api.github.com/users/gsidebo/orgs","repos_url":"https://api.github.com/users/gsidebo/repos","events_url":"https://api.github.com/users/gsidebo/events{/privacy}","received_events_url":"https://api.github.com/users/gsidebo/received_events","type":"User","site_admin":false},"assignees":[{"login":"gsidebo","id":14932219,"node_id":"MDQ6VXNlcjE0OTMyMjE5","avatar_url":"https://avatars2.githubusercontent.com/u/14932219?v=4","gravatar_id":"","url":"https://api.github.com/users/gsidebo","html_url":"https://github.com/gsidebo","followers_url":"https://api.github.com/users/gsidebo/followers","following_url":"https://api.github.com/users/gsidebo/following{/other_user}","gists_url":"https://api.github.com/users/gsidebo/gists{/gist_id}","starred_url":"https://api.github.com/users/gsidebo/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/gsidebo/subscriptions","organizations_url":"https://api.github.com/users/gsidebo/orgs","repos_url":"https://api.github.com/users/gsidebo/repos","events_url":"https://api.github.com/users/gsidebo/events{/privacy}","received_events_url":"https://api.github.com/users/gsidebo/received_events","type":"User","site_admin":false}],"requested_reviewers":[],"requested_teams":[],"labels":[{"id":627437808,"node_id":"MDU6TGFiZWw2Mjc0Mzc4MDg=","url":"https://api.github.com/repos/mitodl/open-discussions/labels/Needs%20Review","name":"Needs Review","color":"f9d0c4","default":false}],"milestone":null,"commits_url":"https://api.github.com/repos/mitodl/open-discussions/pulls/1104/commits","review_comments_url":"https://api.github.com/repos/mitodl/open-discussions/pulls/1104/comments","review_comment_url":"https://api.github.com/repos/mitodl/open-discussions/pulls/comments{/number}","comments_url":"https://api.github.com/repos/mitodl/open-discussions/issues/1104/comments","statuses_url":"https://api.github.com/repos/mitodl/open-discussions/statuses/d26fecf4448333a2362552489d7e93c1eafb3d06","head":{"label":"mitodl:gs/infinite_scroll","ref":"gs/infinite_scroll","sha":"d26fecf4448333a2362552489d7e93c1eafb3d06","user":{"login":"mitodl","id":7918516,"node_id":"MDEyOk9yZ2FuaXphdGlvbjc5MTg1MTY=","avatar_url":"https://avatars2.githubusercontent.com/u/7918516?v=4","gravatar_id":"","url":"https://api.github.com/users/mitodl","html_url":"https://github.com/mitodl","followers_url":"https://api.github.com/users/mitodl/followers","following_url":"https://api.github.com/users/mitodl/following{/other_user}","gists_url":"https://api.github.com/users/mitodl/gists{/gist_id}","starred_url":"https://api.github.com/users/mitodl/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mitodl/subscriptions","organizations_url":"https://api.github.com/users/mitodl/orgs","repos_url":"https://api.github.com/users/mitodl/repos","events_url":"https://api.github.com/users/mitodl/events{/privacy}","received_events_url":"https://api.github.com/users/mitodl/received_events","type":"Organization","site_admin":false},"repo":{"id":93760926,"node_id":"MDEwOlJlcG9zaXRvcnk5Mzc2MDkyNg==","name":"open-discussions","full_name":"mitodl/open-discussions","owner":{"login":"mitodl","id":7918516,"node_id":"MDEyOk9yZ2FuaXphdGlvbjc5MTg1MTY=","avatar_url":"https://avatars2.githubusercontent.com/u/7918516?v=4","gravatar_id":"","url":"https://api.github.com/users/mitodl","html_url":"https://github.com/mitodl","followers_url":"https://api.github.com/users/mitodl/followers","following_url":"https://api.github.com/users/mitodl/following{/other_user}","gists_url":"https://api.github.com/users/mitodl/gists{/gist_id}","starred_url":"https://api.github.com/users/mitodl/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mitodl/subscriptions","organizations_url":"https://api.github.com/users/mitodl/orgs","repos_url":"https://api.github.com/users/mitodl/repos","events_url":"https://api.github.com/users/mitodl/events{/privacy}","received_events_url":"https://api.github.com/users/mitodl/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/mitodl/open-discussions","description":null,"fork":false,"url":"https://api.github.com/repos/mitodl/open-discussions","forks_url":"https://api.github.com/repos/mitodl/open-discussions/forks","keys_url":"https://api.github.com/repos/mitodl/open-discussions/keys{/key_id}","collaborators_url":"https://api.github.com/repos/mitodl/open-discussions/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/mitodl/open-discussions/teams","hooks_url":"https://api.github.com/repos/mitodl/open-discussions/hooks","issue_events_url":"https://api.github.com/repos/mitodl/open-discussions/issues/events{/number}","events_url":"https://api.github.com/repos/mitodl/open-discussions/events","assignees_url":"https://api.github.com/repos/mitodl/open-discussions/assignees{/user}","branches_url":"https://api.github.com/repos/mitodl/open-discussions/branches{/branch}","tags_url":"https://api.github.com/repos/mitodl/open-discussions/tags","blobs_url":"https://api.github.com/repos/mitodl/open-discussions/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/mitodl/open-discussions/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/mitodl/open-discussions/git/refs{/sha}","trees_url":"https://api.github.com/repos/mitodl/open-discussions/git/trees{/sha}","statuses_url":"https://api.github.com/repos/mitodl/open-discussions/statuses/{sha}","languages_url":"https://api.github.com/repos/mitodl/open-discussions/languages","stargazers_url":"https://api.github.com/repos/mitodl/open-discussions/stargazers","contributors_url":"https://api.github.com/repos/mitodl/open-discussions/contributors","subscribers_url":"https://api.github.com/repos/mitodl/open-discussions/subscribers","subscription_url":"https://api.github.com/repos/mitodl/open-discussions/subscription","commits_url":"https://api.github.com/repos/mitodl/open-discussions/commits{/sha}","git_commits_url":"https://api.github.com/repos/mitodl/open-discussions/git/commits{/sha}","comments_url":"https://api.github.com/repos/mitodl/open-discussions/comments{/number}","issue_comment_url":"https://api.github.com/repos/mitodl/open-discussions/issues/comments{/number}","contents_url":"https://api.github.com/repos/mitodl/open-discussions/contents/{+path}","compare_url":"https://api.github.com/repos/mitodl/open-discussions/compare/{base}...{head}","merges_url":"https://api.github.com/repos/mitodl/open-discussions/merges","archive_url":"https://api.github.com/repos/mitodl/open-discussions/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/mitodl/open-discussions/downloads","issues_url":"https://api.github.com/repos/mitodl/open-discussions/issues{/number}","pulls_url":"https://api.github.com/repos/mitodl/open-discussions/pulls{/number}","milestones_url":"https://api.github.com/repos/mitodl/open-discussions/milestones{/number}","notifications_url":"https://api.github.com/repos/mitodl/open-discussions/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/mitodl/open-discussions/labels{/name}","releases_url":"https://api.github.com/repos/mitodl/open-discussions/releases{/id}","deployments_url":"https://api.github.com/repos/mitodl/open-discussions/deployments","created_at":"2017-06-08T14:46:35Z","updated_at":"2018-09-06T19:46:39Z","pushed_at":"2018-09-06T19:46:40Z","git_url":"git://github.com/mitodl/open-discussions.git","ssh_url":"git@github.com:mitodl/open-discussions.git","clone_url":"https://github.com/mitodl/open-discussions.git","svn_url":"https://github.com/mitodl/open-discussions","homepage":null,"size":3243,"stargazers_count":3,"watchers_count":3,"language":"JavaScript","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":101,"license":{"key":"bsd-3-clause","name":"BSD 3-Clause \"New\" or \"Revised\" License","spdx_id":"BSD-3-Clause","url":"https://api.github.com/licenses/bsd-3-clause","node_id":"MDc6TGljZW5zZTU="},"forks":0,"open_issues":101,"watchers":3,"default_branch":"master"}},"base":{"label":"mitodl:master","ref":"master","sha":"88b7cbe85b00fbe2e92c793eedd66dd90ee3d274","user":{"login":"mitodl","id":7918516,"node_id":"MDEyOk9yZ2FuaXphdGlvbjc5MTg1MTY=","avatar_url":"https://avatars2.githubusercontent.com/u/7918516?v=4","gravatar_id":"","url":"https://api.github.com/users/mitodl","html_url":"https://github.com/mitodl","followers_url":"https://api.github.com/users/mitodl/followers","following_url":"https://api.github.com/users/mitodl/following{/other_user}","gists_url":"https://api.github.com/users/mitodl/gists{/gist_id}","starred_url":"https://api.github.com/users/mitodl/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mitodl/subscriptions","organizations_url":"https://api.github.com/users/mitodl/orgs","repos_url":"https://api.github.com/users/mitodl/repos","events_url":"https://api.github.com/users/mitodl/events{/privacy}","received_events_url":"https://api.github.com/users/mitodl/received_events","type":"Organization","site_admin":false},"repo":{"id":93760926,"node_id":"MDEwOlJlcG9zaXRvcnk5Mzc2MDkyNg==","name":"open-discussions","full_name":"mitodl/open-discussions","owner":{"login":"mitodl","id":7918516,"node_id":"MDEyOk9yZ2FuaXphdGlvbjc5MTg1MTY=","avatar_url":"https://avatars2.githubusercontent.com/u/7918516?v=4","gravatar_id":"","url":"https://api.github.com/users/mitodl","html_url":"https://github.com/mitodl","followers_url":"https://api.github.com/users/mitodl/followers","following_url":"https://api.github.com/users/mitodl/following{/other_user}","gists_url":"https://api.github.com/users/mitodl/gists{/gist_id}","starred_url":"https://api.github.com/users/mitodl/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mitodl/subscriptions","organizations_url":"https://api.github.com/users/mitodl/orgs","repos_url":"https://api.github.com/users/mitodl/repos","events_url":"https://api.github.com/users/mitodl/events{/privacy}","received_events_url":"https://api.github.com/users/mitodl/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/mitodl/open-discussions","description":null,"fork":false,"url":"https://api.github.com/repos/mitodl/open-discussions","forks_url":"https://api.github.com/repos/mitodl/open-discussions/forks","keys_url":"https://api.github.com/repos/mitodl/open-discussions/keys{/key_id}","collaborators_url":"https://api.github.com/repos/mitodl/open-discussions/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/mitodl/open-discussions/teams","hooks_url":"https://api.github.com/repos/mitodl/open-discussions/hooks","issue_events_url":"https://api.github.com/repos/mitodl/open-discussions/issues/events{/number}","events_url":"https://api.github.com/repos/mitodl/open-discussions/events","assignees_url":"https://api.github.com/repos/mitodl/open-discussions/assignees{/user}","branches_url":"https://api.github.com/repos/mitodl/open-discussions/branches{/branch}","tags_url":"https://api.github.com/repos/mitodl/open-discussions/tags","blobs_url":"https://api.github.com/repos/mitodl/open-discussions/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/mitodl/open-discussions/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/mitodl/open-discussions/git/refs{/sha}","trees_url":"https://api.github.com/repos/mitodl/open-discussions/git/trees{/sha}","statuses_url":"https://api.github.com/repos/mitodl/open-discussions/statuses/{sha}","languages_url":"https://api.github.com/repos/mitodl/open-discussions/languages","stargazers_url":"https://api.github.com/repos/mitodl/open-discussions/stargazers","contributors_url":"https://api.github.com/repos/mitodl/open-discussions/contributors","subscribers_url":"https://api.github.com/repos/mitodl/open-discussions/subscribers","subscription_url":"https://api.github.com/repos/mitodl/open-discussions/subscription","commits_url":"https://api.github.com/repos/mitodl/open-discussions/commits{/sha}","git_commits_url":"https://api.github.com/repos/mitodl/open-discussions/git/commits{/sha}","comments_url":"https://api.github.com/repos/mitodl/open-discussions/comments{/number}","issue_comment_url":"https://api.github.com/repos/mitodl/open-discussions/issues/comments{/number}","contents_url":"https://api.github.com/repos/mitodl/open-discussions/contents/{+path}","compare_url":"https://api.github.com/repos/mitodl/open-discussions/compare/{base}...{head}","merges_url":"https://api.github.com/repos/mitodl/open-discussions/merges","archive_url":"https://api.github.com/repos/mitodl/open-discussions/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/mitodl/open-discussions/downloads","issues_url":"https://api.github.com/repos/mitodl/open-discussions/issues{/number}","pulls_url":"https://api.github.com/repos/mitodl/open-discussions/pulls{/number}","milestones_url":"https://api.github.com/repos/mitodl/open-discussions/milestones{/number}","notifications_url":"https://api.github.com/repos/mitodl/open-discussions/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/mitodl/open-discussions/labels{/name}","releases_url":"https://api.github.com/repos/mitodl/open-discussions/releases{/id}","deployments_url":"https://api.github.com/repos/mitodl/open-discussions/deployments","created_at":"2017-06-08T14:46:35Z","updated_at":"2018-09-06T19:46:39Z","pushed_at":"2018-09-06T19:46:40Z","git_url":"git://github.com/mitodl/open-discussions.git","ssh_url":"git@github.com:mitodl/open-discussions.git","clone_url":"https://github.com/mitodl/open-discussions.git","svn_url":"https://github.com/mitodl/open-discussions","homepage":null,"size":3243,"stargazers_count":3,"watchers_count":3,"language":"JavaScript","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":101,"license":{"key":"bsd-3-clause","name":"BSD 3-Clause \"New\" or \"Revised\" License","spdx_id":"BSD-3-Clause","url":"https://api.github.com/licenses/bsd-3-clause","node_id":"MDc6TGljZW5zZTU="},"forks":0,"open_issues":101,"watchers":3,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/mitodl/open-discussions/pulls/1104"},"html":{"href":"https://github.com/mitodl/open-discussions/pull/1104"},"issue":{"href":"https://api.github.com/repos/mitodl/open-discussions/issues/1104"},"comments":{"href":"https://api.github.com/repos/mitodl/open-discussions/issues/1104/comments"},"review_comments":{"href":"https://api.github.com/repos/mitodl/open-discussions/pulls/1104/comments"},"review_comment":{"href":"https://api.github.com/repos/mitodl/open-discussions/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/mitodl/open-discussions/pulls/1104/commits"},"statuses":{"href":"https://api.github.com/repos/mitodl/open-discussions/statuses/d26fecf4448333a2362552489d7e93c1eafb3d06"}},"author_association":"MEMBER"}}
{"actor":{"display_login":"gsidebo"}}