{"action":"created","comment":{"url":"https://api.github.com/repos/ringcentral/integration-blog/pulls/comments/243502666","pull_request_review_id":187290130,"id":243502666,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDI0MzUwMjY2Ng==","diff_hunk":"@@ -0,0 +1,249 @@\n+\n+---\n+layout: post\n+title:  \"Explore a more complete front-end testing strategy\"\n+date:   2018-12-18 12:30:00 +0800\n+categories: blog\n+author: Michael Lin\n+---\n+\n+\n+![test-strategy](https://raw.githubusercontent.com/unadlib/integration-blog/testing_strategy/_site/assets/test-strategy.jpg)\n+\n+> The assumption in this article is that we are continuously developing a relatively large front-end project, and we have adopted a domain-driven design, as well as an object-oriented programming model. The front-end business logic is split into **`domain modules`**/**`UI components`**. So we may need to have a more complete testing strategy to assure such a front-end project.\n+\n+## General front-end testing\n+\n+Whether it's a traditional test model or a continuous delivery model, we typically define the following three types of tests:\n+\n+![generic-test](https://raw.githubusercontent.com/unadlib/integration-blog/testing_strategy/_site/assets/generic-test.png)\n+\n+- E2E\n+\n+End-to-end testing involves ensuring that the integrated components of an application function as expected. The entire application is tested in a real-world scenario such as communicating with the database, network, hardware and other applications.\n+\n+- IT\n+\n+Integration testing is a key software development life cycle strategy. Generally, small software systems are integrated and tested in a single phase, whereas larger systems involve several integration phases to build a complete system, such as integrating modules into low-level subsystems for integration with larger subsystems. Integration testing encompasses all aspects of a software system's performance, functionality and reliability.\n+\n+\n+- UT\n+\n+Unit testing is a software testing method by which individual units of source code, sets of one or more computer program modules together with associated control data, usage procedures, and operating procedures, are tested to determine whether they are fit for use.\n+\n+\n+\n+## What's wrong with the general front-end testing?\n+\n+When we are evaluating the integrity of a test strategy, we try to validate it with some of the following criteria:\n+\n+* Pass acceptance criteria\n+* Catch bugs as early as possible\n+* Faster running speed, especially at the top level of testing\n+* Find bugs efficiently\n+* Test writing costs and maintenance costs\n+* Continuous refactoring risks\n+\n+I think a better test strategy should be as common as possible with the above items.\n+\n+In the general testing strategy mentioned above, E2E can override more AC conditions, but usually it runs less frequently; IT is run more frequently than E2E, but IT often includes an integrated app in almost the entire system, which is often more bloated in this case, and UT typically accounts for a larger proportion of such this strategy, although the logical coverage is good, but in a large refactoring usually UT will also change, of course, most of these UT is not too much of a problem.\n+\n+From the point of view of catching bugs as early as possible, does that mean that the general testing strategy can be better improved? Because the E2E test is most likely to run once in a relatively long period of time, rather than every PR or even every code commit, because the e2e run is usually slow and unstable, it is the most expensive automated test to run.\n+\n+Sometimes we have some integration tests that start a bloated integrated system, maybe it already includes a lot of mock, and you can keep running tests over and over again, but when there are more and more cases of integration testing, we can't even guarantee faster completion within each PR, and in a resource-constrained CI environment, it could be half an hour, or even longer.\n+\n+As a system becomes more complex, we need a complete testing strategy to tell us what cases failed in these tests, and to enable us to catch bugs more efficiently through test reports. Whether it is network instability, back-end server APIs exceptions, front-end domain modules exceptions or UI components exceptions, and so on, we can quickly catch these bugs. Obviously, the general testing strategy can provide limited help in locating bugs. For example, UT has succeeded, IT has failed, and E2E has failed too. It is difficult for us to analyze clearer information from such test reports.\n+\n+The cost of writing test code should be balanced with a continuous delivery development model. When the AC definition is clear, it's just that our test code should be able to overwrite the information described by AC. In theory, if all AC is fully implemented by E2E, this will also enable the verification of AC. But obviously, this brings with it a highly unbalanced test instability and inefficient operation.","path":"_posts/2018-12-18-blog-a-more-complete-front-end-testing-strategy.md","position":57,"original_position":57,"commit_id":"e57bcee5198b40d49b007a50f8e52742efe64fe7","original_commit_id":"e57bcee5198b40d49b007a50f8e52742efe64fe7","user":{"login":"unadlib","id":18650460,"node_id":"MDQ6VXNlcjE4NjUwNDYw","avatar_url":"https://avatars0.githubusercontent.com/u/18650460?v=4","gravatar_id":"","url":"https://api.github.com/users/unadlib","html_url":"https://github.com/unadlib","followers_url":"https://api.github.com/users/unadlib/followers","following_url":"https://api.github.com/users/unadlib/following{/other_user}","gists_url":"https://api.github.com/users/unadlib/gists{/gist_id}","starred_url":"https://api.github.com/users/unadlib/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/unadlib/subscriptions","organizations_url":"https://api.github.com/users/unadlib/orgs","repos_url":"https://api.github.com/users/unadlib/repos","events_url":"https://api.github.com/users/unadlib/events{/privacy}","received_events_url":"https://api.github.com/users/unadlib/received_events","type":"User","site_admin":false},"body":"I agree.","created_at":"2018-12-21T07:06:33Z","updated_at":"2018-12-21T07:06:33Z","html_url":"https://github.com/ringcentral/integration-blog/pull/11#discussion_r243502666","pull_request_url":"https://api.github.com/repos/ringcentral/integration-blog/pulls/11","author_association":"NONE","_links":{"self":{"href":"https://api.github.com/repos/ringcentral/integration-blog/pulls/comments/243502666"},"html":{"href":"https://github.com/ringcentral/integration-blog/pull/11#discussion_r243502666"},"pull_request":{"href":"https://api.github.com/repos/ringcentral/integration-blog/pulls/11"}},"in_reply_to_id":243472857},"pull_request":{"url":"https://api.github.com/repos/ringcentral/integration-blog/pulls/11","id":239573137,"node_id":"MDExOlB1bGxSZXF1ZXN0MjM5NTczMTM3","html_url":"https://github.com/ringcentral/integration-blog/pull/11","diff_url":"https://github.com/ringcentral/integration-blog/pull/11.diff","patch_url":"https://github.com/ringcentral/integration-blog/pull/11.patch","issue_url":"https://api.github.com/repos/ringcentral/integration-blog/issues/11","number":11,"state":"open","locked":false,"title":"add article about testing strategy","user":{"login":"unadlib","id":18650460,"node_id":"MDQ6VXNlcjE4NjUwNDYw","avatar_url":"https://avatars0.githubusercontent.com/u/18650460?v=4","gravatar_id":"","url":"https://api.github.com/users/unadlib","html_url":"https://github.com/unadlib","followers_url":"https://api.github.com/users/unadlib/followers","following_url":"https://api.github.com/users/unadlib/following{/other_user}","gists_url":"https://api.github.com/users/unadlib/gists{/gist_id}","starred_url":"https://api.github.com/users/unadlib/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/unadlib/subscriptions","organizations_url":"https://api.github.com/users/unadlib/orgs","repos_url":"https://api.github.com/users/unadlib/repos","events_url":"https://api.github.com/users/unadlib/events{/privacy}","received_events_url":"https://api.github.com/users/unadlib/received_events","type":"User","site_admin":false},"body":"","created_at":"2018-12-18T17:34:23Z","updated_at":"2018-12-21T07:06:33Z","closed_at":null,"merged_at":null,"merge_commit_sha":"500aa6c3acddc9d6c56c8e3bede62183dc734943","assignee":null,"assignees":[],"requested_reviewers":[{"login":"ee01","id":2222227,"node_id":"MDQ6VXNlcjIyMjIyMjc=","avatar_url":"https://avatars2.githubusercontent.com/u/2222227?v=4","gravatar_id":"","url":"https://api.github.com/users/ee01","html_url":"https://github.com/ee01","followers_url":"https://api.github.com/users/ee01/followers","following_url":"https://api.github.com/users/ee01/following{/other_user}","gists_url":"https://api.github.com/users/ee01/gists{/gist_id}","starred_url":"https://api.github.com/users/ee01/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ee01/subscriptions","organizations_url":"https://api.github.com/users/ee01/orgs","repos_url":"https://api.github.com/users/ee01/repos","events_url":"https://api.github.com/users/ee01/events{/privacy}","received_events_url":"https://api.github.com/users/ee01/received_events","type":"User","site_admin":false},{"login":"LingForCC","id":5373202,"node_id":"MDQ6VXNlcjUzNzMyMDI=","avatar_url":"https://avatars1.githubusercontent.com/u/5373202?v=4","gravatar_id":"","url":"https://api.github.com/users/LingForCC","html_url":"https://github.com/LingForCC","followers_url":"https://api.github.com/users/LingForCC/followers","following_url":"https://api.github.com/users/LingForCC/following{/other_user}","gists_url":"https://api.github.com/users/LingForCC/gists{/gist_id}","starred_url":"https://api.github.com/users/LingForCC/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/LingForCC/subscriptions","organizations_url":"https://api.github.com/users/LingForCC/orgs","repos_url":"https://api.github.com/users/LingForCC/repos","events_url":"https://api.github.com/users/LingForCC/events{/privacy}","received_events_url":"https://api.github.com/users/LingForCC/received_events","type":"User","site_admin":false},{"login":"alvita","id":8720266,"node_id":"MDQ6VXNlcjg3MjAyNjY=","avatar_url":"https://avatars1.githubusercontent.com/u/8720266?v=4","gravatar_id":"","url":"https://api.github.com/users/alvita","html_url":"https://github.com/alvita","followers_url":"https://api.github.com/users/alvita/followers","following_url":"https://api.github.com/users/alvita/following{/other_user}","gists_url":"https://api.github.com/users/alvita/gists{/gist_id}","starred_url":"https://api.github.com/users/alvita/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/alvita/subscriptions","organizations_url":"https://api.github.com/users/alvita/orgs","repos_url":"https://api.github.com/users/alvita/repos","events_url":"https://api.github.com/users/alvita/events{/privacy}","received_events_url":"https://api.github.com/users/alvita/received_events","type":"User","site_admin":false},{"login":"YukiChen111","id":13598864,"node_id":"MDQ6VXNlcjEzNTk4ODY0","avatar_url":"https://avatars2.githubusercontent.com/u/13598864?v=4","gravatar_id":"","url":"https://api.github.com/users/YukiChen111","html_url":"https://github.com/YukiChen111","followers_url":"https://api.github.com/users/YukiChen111/followers","following_url":"https://api.github.com/users/YukiChen111/following{/other_user}","gists_url":"https://api.github.com/users/YukiChen111/gists{/gist_id}","starred_url":"https://api.github.com/users/YukiChen111/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/YukiChen111/subscriptions","organizations_url":"https://api.github.com/users/YukiChen111/orgs","repos_url":"https://api.github.com/users/YukiChen111/repos","events_url":"https://api.github.com/users/YukiChen111/events{/privacy}","received_events_url":"https://api.github.com/users/YukiChen111/received_events","type":"User","site_admin":false},{"login":"sylviawangfr","id":32857916,"node_id":"MDQ6VXNlcjMyODU3OTE2","avatar_url":"https://avatars1.githubusercontent.com/u/32857916?v=4","gravatar_id":"","url":"https://api.github.com/users/sylviawangfr","html_url":"https://github.com/sylviawangfr","followers_url":"https://api.github.com/users/sylviawangfr/followers","following_url":"https://api.github.com/users/sylviawangfr/following{/other_user}","gists_url":"https://api.github.com/users/sylviawangfr/gists{/gist_id}","starred_url":"https://api.github.com/users/sylviawangfr/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sylviawangfr/subscriptions","organizations_url":"https://api.github.com/users/sylviawangfr/orgs","repos_url":"https://api.github.com/users/sylviawangfr/repos","events_url":"https://api.github.com/users/sylviawangfr/events{/privacy}","received_events_url":"https://api.github.com/users/sylviawangfr/received_events","type":"User","site_admin":false}],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/ringcentral/integration-blog/pulls/11/commits","review_comments_url":"https://api.github.com/repos/ringcentral/integration-blog/pulls/11/comments","review_comment_url":"https://api.github.com/repos/ringcentral/integration-blog/pulls/comments{/number}","comments_url":"https://api.github.com/repos/ringcentral/integration-blog/issues/11/comments","statuses_url":"https://api.github.com/repos/ringcentral/integration-blog/statuses/e57bcee5198b40d49b007a50f8e52742efe64fe7","head":{"label":"unadlib:testing_strategy","ref":"testing_strategy","sha":"e57bcee5198b40d49b007a50f8e52742efe64fe7","user":{"login":"unadlib","id":18650460,"node_id":"MDQ6VXNlcjE4NjUwNDYw","avatar_url":"https://avatars0.githubusercontent.com/u/18650460?v=4","gravatar_id":"","url":"https://api.github.com/users/unadlib","html_url":"https://github.com/unadlib","followers_url":"https://api.github.com/users/unadlib/followers","following_url":"https://api.github.com/users/unadlib/following{/other_user}","gists_url":"https://api.github.com/users/unadlib/gists{/gist_id}","starred_url":"https://api.github.com/users/unadlib/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/unadlib/subscriptions","organizations_url":"https://api.github.com/users/unadlib/orgs","repos_url":"https://api.github.com/users/unadlib/repos","events_url":"https://api.github.com/users/unadlib/events{/privacy}","received_events_url":"https://api.github.com/users/unadlib/received_events","type":"User","site_admin":false},"repo":{"id":160692187,"node_id":"MDEwOlJlcG9zaXRvcnkxNjA2OTIxODc=","name":"integration-blog","full_name":"unadlib/integration-blog","private":false,"owner":{"login":"unadlib","id":18650460,"node_id":"MDQ6VXNlcjE4NjUwNDYw","avatar_url":"https://avatars0.githubusercontent.com/u/18650460?v=4","gravatar_id":"","url":"https://api.github.com/users/unadlib","html_url":"https://github.com/unadlib","followers_url":"https://api.github.com/users/unadlib/followers","following_url":"https://api.github.com/users/unadlib/following{/other_user}","gists_url":"https://api.github.com/users/unadlib/gists{/gist_id}","starred_url":"https://api.github.com/users/unadlib/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/unadlib/subscriptions","organizations_url":"https://api.github.com/users/unadlib/orgs","repos_url":"https://api.github.com/users/unadlib/repos","events_url":"https://api.github.com/users/unadlib/events{/privacy}","received_events_url":"https://api.github.com/users/unadlib/received_events","type":"User","site_admin":false},"html_url":"https://github.com/unadlib/integration-blog","description":null,"fork":true,"url":"https://api.github.com/repos/unadlib/integration-blog","forks_url":"https://api.github.com/repos/unadlib/integration-blog/forks","keys_url":"https://api.github.com/repos/unadlib/integration-blog/keys{/key_id}","collaborators_url":"https://api.github.com/repos/unadlib/integration-blog/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/unadlib/integration-blog/teams","hooks_url":"https://api.github.com/repos/unadlib/integration-blog/hooks","issue_events_url":"https://api.github.com/repos/unadlib/integration-blog/issues/events{/number}","events_url":"https://api.github.com/repos/unadlib/integration-blog/events","assignees_url":"https://api.github.com/repos/unadlib/integration-blog/assignees{/user}","branches_url":"https://api.github.com/repos/unadlib/integration-blog/branches{/branch}","tags_url":"https://api.github.com/repos/unadlib/integration-blog/tags","blobs_url":"https://api.github.com/repos/unadlib/integration-blog/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/unadlib/integration-blog/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/unadlib/integration-blog/git/refs{/sha}","trees_url":"https://api.github.com/repos/unadlib/integration-blog/git/trees{/sha}","statuses_url":"https://api.github.com/repos/unadlib/integration-blog/statuses/{sha}","languages_url":"https://api.github.com/repos/unadlib/integration-blog/languages","stargazers_url":"https://api.github.com/repos/unadlib/integration-blog/stargazers","contributors_url":"https://api.github.com/repos/unadlib/integration-blog/contributors","subscribers_url":"https://api.github.com/repos/unadlib/integration-blog/subscribers","subscription_url":"https://api.github.com/repos/unadlib/integration-blog/subscription","commits_url":"https://api.github.com/repos/unadlib/integration-blog/commits{/sha}","git_commits_url":"https://api.github.com/repos/unadlib/integration-blog/git/commits{/sha}","comments_url":"https://api.github.com/repos/unadlib/integration-blog/comments{/number}","issue_comment_url":"https://api.github.com/repos/unadlib/integration-blog/issues/comments{/number}","contents_url":"https://api.github.com/repos/unadlib/integration-blog/contents/{+path}","compare_url":"https://api.github.com/repos/unadlib/integration-blog/compare/{base}...{head}","merges_url":"https://api.github.com/repos/unadlib/integration-blog/merges","archive_url":"https://api.github.com/repos/unadlib/integration-blog/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/unadlib/integration-blog/downloads","issues_url":"https://api.github.com/repos/unadlib/integration-blog/issues{/number}","pulls_url":"https://api.github.com/repos/unadlib/integration-blog/pulls{/number}","milestones_url":"https://api.github.com/repos/unadlib/integration-blog/milestones{/number}","notifications_url":"https://api.github.com/repos/unadlib/integration-blog/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/unadlib/integration-blog/labels{/name}","releases_url":"https://api.github.com/repos/unadlib/integration-blog/releases{/id}","deployments_url":"https://api.github.com/repos/unadlib/integration-blog/deployments","created_at":"2018-12-06T15:13:11Z","updated_at":"2018-12-06T15:13:15Z","pushed_at":"2018-12-20T16:01:59Z","git_url":"git://github.com/unadlib/integration-blog.git","ssh_url":"git@github.com:unadlib/integration-blog.git","clone_url":"https://github.com/unadlib/integration-blog.git","svn_url":"https://github.com/unadlib/integration-blog","homepage":null,"size":850,"stargazers_count":0,"watchers_count":0,"language":"HTML","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":0,"license":null,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"ringcentral:master","ref":"master","sha":"f9991ba6f7555dcd5c458a567ae3f0c087e83ac8","user":{"login":"ringcentral","id":6549285,"node_id":"MDEyOk9yZ2FuaXphdGlvbjY1NDkyODU=","avatar_url":"https://avatars3.githubusercontent.com/u/6549285?v=4","gravatar_id":"","url":"https://api.github.com/users/ringcentral","html_url":"https://github.com/ringcentral","followers_url":"https://api.github.com/users/ringcentral/followers","following_url":"https://api.github.com/users/ringcentral/following{/other_user}","gists_url":"https://api.github.com/users/ringcentral/gists{/gist_id}","starred_url":"https://api.github.com/users/ringcentral/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ringcentral/subscriptions","organizations_url":"https://api.github.com/users/ringcentral/orgs","repos_url":"https://api.github.com/users/ringcentral/repos","events_url":"https://api.github.com/users/ringcentral/events{/privacy}","received_events_url":"https://api.github.com/users/ringcentral/received_events","type":"Organization","site_admin":false},"repo":{"id":157401435,"node_id":"MDEwOlJlcG9zaXRvcnkxNTc0MDE0MzU=","name":"integration-blog","full_name":"ringcentral/integration-blog","private":false,"owner":{"login":"ringcentral","id":6549285,"node_id":"MDEyOk9yZ2FuaXphdGlvbjY1NDkyODU=","avatar_url":"https://avatars3.githubusercontent.com/u/6549285?v=4","gravatar_id":"","url":"https://api.github.com/users/ringcentral","html_url":"https://github.com/ringcentral","followers_url":"https://api.github.com/users/ringcentral/followers","following_url":"https://api.github.com/users/ringcentral/following{/other_user}","gists_url":"https://api.github.com/users/ringcentral/gists{/gist_id}","starred_url":"https://api.github.com/users/ringcentral/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ringcentral/subscriptions","organizations_url":"https://api.github.com/users/ringcentral/orgs","repos_url":"https://api.github.com/users/ringcentral/repos","events_url":"https://api.github.com/users/ringcentral/events{/privacy}","received_events_url":"https://api.github.com/users/ringcentral/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/ringcentral/integration-blog","description":"Blog site of RingCentral Integration team","fork":false,"url":"https://api.github.com/repos/ringcentral/integration-blog","forks_url":"https://api.github.com/repos/ringcentral/integration-blog/forks","keys_url":"https://api.github.com/repos/ringcentral/integration-blog/keys{/key_id}","collaborators_url":"https://api.github.com/repos/ringcentral/integration-blog/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/ringcentral/integration-blog/teams","hooks_url":"https://api.github.com/repos/ringcentral/integration-blog/hooks","issue_events_url":"https://api.github.com/repos/ringcentral/integration-blog/issues/events{/number}","events_url":"https://api.github.com/repos/ringcentral/integration-blog/events","assignees_url":"https://api.github.com/repos/ringcentral/integration-blog/assignees{/user}","branches_url":"https://api.github.com/repos/ringcentral/integration-blog/branches{/branch}","tags_url":"https://api.github.com/repos/ringcentral/integration-blog/tags","blobs_url":"https://api.github.com/repos/ringcentral/integration-blog/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/ringcentral/integration-blog/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/ringcentral/integration-blog/git/refs{/sha}","trees_url":"https://api.github.com/repos/ringcentral/integration-blog/git/trees{/sha}","statuses_url":"https://api.github.com/repos/ringcentral/integration-blog/statuses/{sha}","languages_url":"https://api.github.com/repos/ringcentral/integration-blog/languages","stargazers_url":"https://api.github.com/repos/ringcentral/integration-blog/stargazers","contributors_url":"https://api.github.com/repos/ringcentral/integration-blog/contributors","subscribers_url":"https://api.github.com/repos/ringcentral/integration-blog/subscribers","subscription_url":"https://api.github.com/repos/ringcentral/integration-blog/subscription","commits_url":"https://api.github.com/repos/ringcentral/integration-blog/commits{/sha}","git_commits_url":"https://api.github.com/repos/ringcentral/integration-blog/git/commits{/sha}","comments_url":"https://api.github.com/repos/ringcentral/integration-blog/comments{/number}","issue_comment_url":"https://api.github.com/repos/ringcentral/integration-blog/issues/comments{/number}","contents_url":"https://api.github.com/repos/ringcentral/integration-blog/contents/{+path}","compare_url":"https://api.github.com/repos/ringcentral/integration-blog/compare/{base}...{head}","merges_url":"https://api.github.com/repos/ringcentral/integration-blog/merges","archive_url":"https://api.github.com/repos/ringcentral/integration-blog/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/ringcentral/integration-blog/downloads","issues_url":"https://api.github.com/repos/ringcentral/integration-blog/issues{/number}","pulls_url":"https://api.github.com/repos/ringcentral/integration-blog/pulls{/number}","milestones_url":"https://api.github.com/repos/ringcentral/integration-blog/milestones{/number}","notifications_url":"https://api.github.com/repos/ringcentral/integration-blog/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/ringcentral/integration-blog/labels{/name}","releases_url":"https://api.github.com/repos/ringcentral/integration-blog/releases{/id}","deployments_url":"https://api.github.com/repos/ringcentral/integration-blog/deployments","created_at":"2018-11-13T15:23:25Z","updated_at":"2018-12-13T02:02:43Z","pushed_at":"2018-12-21T05:52:34Z","git_url":"git://github.com/ringcentral/integration-blog.git","ssh_url":"git@github.com:ringcentral/integration-blog.git","clone_url":"https://github.com/ringcentral/integration-blog.git","svn_url":"https://github.com/ringcentral/integration-blog","homepage":"https://ringcentral.github.io/integration-blog/","size":69,"stargazers_count":2,"watchers_count":2,"language":"HTML","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":15,"mirror_url":null,"archived":false,"open_issues_count":4,"license":null,"forks":15,"open_issues":4,"watchers":2,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/ringcentral/integration-blog/pulls/11"},"html":{"href":"https://github.com/ringcentral/integration-blog/pull/11"},"issue":{"href":"https://api.github.com/repos/ringcentral/integration-blog/issues/11"},"comments":{"href":"https://api.github.com/repos/ringcentral/integration-blog/issues/11/comments"},"review_comments":{"href":"https://api.github.com/repos/ringcentral/integration-blog/pulls/11/comments"},"review_comment":{"href":"https://api.github.com/repos/ringcentral/integration-blog/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/ringcentral/integration-blog/pulls/11/commits"},"statuses":{"href":"https://api.github.com/repos/ringcentral/integration-blog/statuses/e57bcee5198b40d49b007a50f8e52742efe64fe7"}},"author_association":"NONE"}}
{"actor":{"display_login":"unadlib"}}