{"action":"created","comment":{"url":"https://api.github.com/repos/eciis/web/pulls/comments/226730757","pull_request_review_id":166496553,"id":226730757,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIyNjczMDc1Nw==","diff_hunk":"@@ -0,0 +1,584 @@\n+'use strict';\n+\n+(describe('Test CommentController', function() {\n+    beforeEach(module('app'));\n+    \n+    const POSTS_URI = \"/api/posts\";\n+    let commentCtrl, scope, httpBackend, mdDialog;\n+    let commentService, messageService;\n+    \n+    const user = {\n+        name: 'name',\n+        key: 'user-key',\n+        state: 'active',\n+        current_institution: {name: 'inst', key:'inst-key'}\n+    };\n+\n+    let nilReply = {};\n+    let reply = {\n+        text: \"reply\", \n+        id: 1,\n+        likes: []\n+    };\n+\n+    let comment = {\n+        text: \"comment\",\n+        id: 5,\n+        data_comments: [],\n+        replies: {},\n+        author_key: user.key,\n+        likes: []\n+    };\n+\n+    const post = {\n+        title: 'post principal', author_key: user.key,\n+        key: \"123456\", comments: \"/api/posts/123456/comments\",\n+        likes: \"/api/posts/123456/likes\", \n+        number_of_likes: 0, number_of_comments: 0,\n+        state: 'published'\n+    };\n+    \n+    const fakeCallback = function(){\n+        return {\n+            then: function(callback) {\n+                return callback();\n+            }\n+        };\n+    };\n+\n+    beforeEach(inject(function ($controller, $httpBackend, $mdDialog,\n+            AuthService, $rootScope, CommentService, MessageService) {\n+        httpBackend = $httpBackend;\n+        mdDialog = $mdDialog;\n+        commentService = CommentService;\n+        messageService = MessageService;\n+\n+        AuthService.login(user);\n+\n+        scope = $rootScope.$new();\n+        commentCtrl = $controller('CommentController', {\n+            scope: scope\n+        });\n+\n+        commentCtrl.user = AuthService.getCurrentUser();\n+        commentCtrl.comment = {...comment, likes: [], replies: {}};\n+        commentCtrl.post = {...post};\n+        commentCtrl.setReplyId();\n+        commentCtrl.setCurrentComment();\n+    }));\n+\n+    afterEach(function() {\n+        scope.$destroy();\n+        comment = {...comment, likes: [], replies: {}};\n+        reply = {...reply, likes: []};\n+        nilReply = {};\n+        httpBackend.verifyNoOutstandingExpectation();\n+        httpBackend.verifyNoOutstandingRequest();\n+    });\n+\n+    describe('setReplyId', function() {\n+        it('shoult set replyId to null', function() {\n+            commentCtrl.reply = null;\n+            commentCtrl.setReplyId();\n+            expect(commentCtrl.replyId).toEqual(null);\n+        });\n+\n+        it('shoult set replyId to null', function() {\n+            commentCtrl.reply = reply;\n+            commentCtrl.setReplyId();\n+            expect(commentCtrl.replyId).toEqual(reply.id);\n+        });\n+    });\n+\n+    describe('setCurrentComment', function () {\n+        it('should set the currentComment to be the comment', function () {\n+            commentCtrl.currentComment = {};\n+            commentCtrl.reply = null;\n+            commentCtrl.setCurrentComment();\n+            expect(commentCtrl.currentComment).toEqual(comment);\n+        });\n+\n+        it('should set the currentComment to be the reply', function () {\n+            commentCtrl.currentComment = {};\n+            commentCtrl.reply = {...reply};\n+            commentCtrl.setCurrentComment();\n+            expect(commentCtrl.currentComment).toEqual(reply);\n+        });\n+    });\n+\n+    describe('canDeleteComment()', function() {\n+        it('Should be true when the user is the author', function() {\n+            expect(commentCtrl.canDeleteComment()).toBeTruthy();\n+        });\n+\n+        it('Should be false when the user is not the author', function() {\n+            commentCtrl.comment = {author_key: \"other-key\", text: \"testando\"};\n+            commentCtrl.setCurrentComment();\n+            expect(commentCtrl.canDeleteComment()).toBeFalsy();\n+        });\n+\n+        it('Should be false when the post is deleted', function() {\n+            commentCtrl.post.state = 'deleted';\n+            expect(commentCtrl.canDeleteComment()).toBeFalsy();\n+        });\n+\n+        it('Should be false when the comment has replies', function() {\n+            commentCtrl.comment.replies = {1: reply};\n+            expect(commentCtrl.canDeleteComment()).toBeFalsy();\n+        });\n+    });\n+\n+    describe('canReply()', function() {\n+        it('Should return true', function() {\n+            commentCtrl.post.state = \"active\";\n+            commentCtrl.showReplies = true;\n+            expect(commentCtrl.canReply()).toBeTruthy();\n+        });\n+\n+        it('Should return false', function() {\n+            commentCtrl.post.state = \"deleted\";\n+            commentCtrl.showReplies = true;\n+            expect(commentCtrl.canReply()).toBeFalsy();\n+        });\n+\n+        it('Should return false', function() {\n+            commentCtrl.post.state = \"active\";\n+            commentCtrl.post.institution_state = 'inactive';\n+            commentCtrl.showReplies = true;\n+            expect(commentCtrl.canReply()).toBeFalsy();\n+        });\n+    });\n+\n+    describe('like', function () {\n+        it('should like the comment', function() {\n+            commentCtrl.reply = null;\n+            commentCtrl.setCurrentComment();\n+            spyOn(commentService, 'like').and.callFake(fakeCallback);\n+            spyOn(commentCtrl, 'addLike').and.callThrough();\n+            expect(commentCtrl.numberOfLikes()).toEqual(0);\n+            commentCtrl.like();\n+            expect(commentService.like).toHaveBeenCalledWith(post.key, comment.id, null);\n+            expect(commentCtrl.addLike).toHaveBeenCalled();\n+            expect(commentCtrl.numberOfLikes()).toEqual(1);\n+            expect(commentCtrl.saving).toBeFalsy();\n+        });\n+\n+        it('should like the reply', function() {\n+            commentCtrl.reply = {...reply};\n+            commentCtrl.setReplyId();\n+            commentCtrl.setCurrentComment();\n+            spyOn(commentService, 'like').and.callFake(fakeCallback);\n+            spyOn(commentCtrl, 'addLike').and.callThrough();\n+            expect(commentCtrl.numberOfLikes()).toEqual(0);\n+            commentCtrl.like();\n+            expect(commentService.like).toHaveBeenCalledWith(post.key, comment.id, reply.id);\n+            expect(commentCtrl.addLike).toHaveBeenCalled();\n+            expect(commentCtrl.numberOfLikes()).toEqual(1);\n+            expect(commentCtrl.saving).toBeFalsy();\n+        });\n+    });\n+\n+    describe('dislike', function () {\n+        it('should dislike the comment', function() {\n+            commentCtrl.reply = null;\n+            commentCtrl.setCurrentComment();\n+            commentCtrl.addLike();\n+            spyOn(commentService, 'dislike').and.callFake(fakeCallback);\n+            spyOn(commentCtrl, 'removeLike').and.callThrough();\n+            expect(commentCtrl.numberOfLikes()).toEqual(1);\n+            commentCtrl.dislike();\n+            expect(commentService.dislike).toHaveBeenCalledWith(post.key, comment.id, null);\n+            expect(commentCtrl.removeLike).toHaveBeenCalled();\n+            expect(commentCtrl.numberOfLikes()).toEqual(0);\n+            expect(commentCtrl.saving).toBeFalsy();\n+        });\n+\n+        it('should dislike the reply', function() {\n+            commentCtrl.reply = {...reply};\n+            commentCtrl.setCurrentComment();\n+            commentCtrl.addLike();\n+            spyOn(commentService, 'dislike').and.callFake(fakeCallback);\n+            spyOn(commentCtrl, 'removeLike').and.callThrough();\n+            expect(commentCtrl.numberOfLikes()).toEqual(1);\n+            commentCtrl.dislike();\n+            expect(commentService.dislike).toHaveBeenCalledWith(post.key, comment.id, null);\n+            expect(commentCtrl.removeLike).toHaveBeenCalled();\n+            expect(commentCtrl.numberOfLikes()).toEqual(0);\n+            expect(commentCtrl.saving).toBeFalsy();\n+        });\n+    });\n+\n+    describe('replyComment', function () {\n+        it('should add a reply to the comment', function () {\n+            commentCtrl.newReply = reply.text;\n+            expect(commentCtrl.comment.replies).toEqual({});\n+            const data = {...reply, id: 'new-reply-id'};\n+            spyOn(commentService, 'replyComment').and.callFake(function(){\n+                return {\n+                    then: function(callback) {\n+                        return callback(data);\n+                    }\n+                };\n+            });\n+            commentCtrl.replyComment();\n+            expect(commentService.replyComment).toHaveBeenCalledWith(\n+                post.key, reply.text, user.current_institution.key, comment.id\n+            );\n+            const replies = {};\n+            replies[data.id] = data;\n+            expect(commentCtrl.comment.replies).toEqual(replies);\n+        });\n+\n+        it('should not create a new reply when newReply is null', function () {\n+            commentCtrl.newReply = null;\n+            expect(commentCtrl.comment.replies).toEqual({});\n+            spyOn(commentService, 'replyComment').and.callFake(fakeCallback);\n+            commentCtrl.replyComment();\n+            expect(commentService.replyComment).not.toHaveBeenCalled();\n+            expect(commentCtrl.comment.replies).toEqual({});\n+        });\n+    });\n+\n+    describe('deleteReply', function () {\n+        it('should delete the reply', function () {\n+            const replies = {};\n+            commentCtrl.reply = {...reply};\n+            replies[reply.id] = commentCtrl.reply;\n+            replies['nil-key'] = nilReply;\n+            commentCtrl.comment = {...comment , replies};\n+            commentCtrl.setReplyId();\n+            expect(commentCtrl.comment.replies).toEqual(replies);\n+            spyOn(commentService, 'deleteReply').and.callFake(fakeCallback);\n+            spyOn(messageService, 'showToast');\n+            commentCtrl.deleteReply();\n+            expect(commentService.deleteReply).toHaveBeenCalledWith(post.key, comment.id, reply.id);\n+            expect(messageService.showToast).toHaveBeenCalledWith('Comentário excluído com sucesso');\n+            expect(commentCtrl.comment.replies).toEqual({'nil-key': nilReply});\n+        });\n+    });\n+\n+    describe('deleteComment', function () {\n+        it('should delete the comment', function () {\n+            commentCtrl.post.data_comments = [comment];\n+            expect(commentCtrl.post.data_comments).toEqual([comment]);\n+            spyOn(commentService, 'deleteComment').and.callFake(fakeCallback);\n+            spyOn(messageService, 'showToast');\n+            commentCtrl.deleteComment();\n+            expect(commentService.deleteComment).toHaveBeenCalledWith(post.key, comment.id);\n+            expect(messageService.showToast).toHaveBeenCalledWith('Comentário excluído com sucesso');\n+            expect(commentCtrl.post.data_comments).toEqual([]);\n+        });\n+    });\n+\n+    describe('confirmCommentDeletion()', function(){\n+\n+        it('Should delete the comment', function() {\n+            spyOn(mdDialog, 'confirm').and.callThrough();\n+            spyOn(mdDialog, 'show').and.callFake(fakeCallback);\n+            spyOn(commentService, 'deleteComment').and.callThrough();\n+            commentCtrl.post.data_comments = [comment];\n+            httpBackend.expect('DELETE', POSTS_URI + '/' + post.key + '/comments/' + \"5\").respond(comment);\n+            commentCtrl.confirmCommentDeletion(\"$event\");\n+            httpBackend.flush();\n+            expect(commentService.deleteComment).toHaveBeenCalledWith(commentCtrl.post.key, 5);\n+            expect(commentCtrl.post.data_comments).toEqual([]);\n+            expect(mdDialog.confirm).toHaveBeenCalled();\n+            expect(mdDialog.show).toHaveBeenCalled();\n+        });\n+\n+        it('Should call deleteReply', function() {\n+            comment.replies[reply.id] = reply;\n+            commentCtrl.reply = reply;\n+            commentCtrl.setReplyId();\n+            commentCtrl.setCurrentComment();\n+            \n+            spyOn(mdDialog, 'confirm').and.callThrough();\n+            spyOn(mdDialog, 'show').and.callFake(fakeCallback);\n+            spyOn(commentService, 'deleteReply').and.callThrough();\n+            \n+            httpBackend.expect(\n+                'DELETE', POSTS_URI + '/' + post.key + '/comments/'+ comment.id +'/replies/'+ reply.id\n+            ).respond(reply);\n+            commentCtrl.confirmCommentDeletion(\"$event\", reply);\n+            httpBackend.flush();\n+\n+            expect(commentService.deleteReply).toHaveBeenCalledWith(commentCtrl.post.key, comment.id, reply.id);\n+            expect(commentCtrl.comment.replies).toEqual({});\n+            expect(mdDialog.confirm).toHaveBeenCalled();\n+            expect(mdDialog.show).toHaveBeenCalled();\n+        });\n+    });\n+\n+    describe('addLike', function() {\n+        it('should add a like to the comment', function () {\n+            expect(commentCtrl.currentComment.likes).toEqual([]);\n+            commentCtrl.addLike();\n+            expect(commentCtrl.currentComment.likes).toEqual([user.key]);\n+        });\n+\n+        it('should add a like to the reply', function () {\n+            commentCtrl.reply = {...reply};\n+            commentCtrl.setCurrentComment();\n+            expect(commentCtrl.currentComment.likes).toEqual([]);\n+            commentCtrl.addLike();\n+            expect(commentCtrl.currentComment.likes).toEqual([user.key]);\n+        });\n+    });\n+\n+    describe('removeLike', function() {\n+        it('should remove a like from the comment', function () {\n+            commentCtrl.comment = {...comment, likes: [user.key]};\n+            commentCtrl.setCurrentComment();\n+            expect(commentCtrl.currentComment.likes).toEqual([user.key]);\n+            commentCtrl.removeLike();\n+            expect(commentCtrl.currentComment.likes).toEqual([]);\n+        });\n+\n+        it('should remove a like from the reply', function () {\n+            commentCtrl.reply = {...reply, likes: [user.key]};\n+            commentCtrl.setCurrentComment();\n+            expect(commentCtrl.currentComment.likes).toEqual([user.key]);\n+            commentCtrl.removeLike();\n+            expect(commentCtrl.currentComment.likes).toEqual([]);\n+        });\n+    })\n+\n+    describe('isDeletedPost', function() {\n+        it('should be true when the post is deleted', function() {\n+            commentCtrl.post.state = 'deleted';\n+            expect(commentCtrl.isDeletedPost()).toBeTruthy();\n+        });\n+\n+        it('should be false when the post is published', function() {\n+            commentCtrl.post.state = 'published';\n+            expect(commentCtrl.isDeletedPost()).toBeFalsy();\n+        });\n+    });\n+\n+    describe('isLikedByUser', function() {\n+        it('should be true when the post is liked by the user', function() {\n+            commentCtrl.addLike();\n+            expect(commentCtrl.isLikedByUser()).toBeTruthy();\n+        });\n+\n+        it('should be false when the post is not liked by the user', function() {\n+            commentCtrl.removeLike();\n+            expect(commentCtrl.isLikedByUser()).toBeFalsy();\n+        });\n+    });\n+\n+    describe('getReplies', function() {\n+        it('should get the comment replies', function () {\n+            expect(commentCtrl.getReplies()).toEqual([]);\n+            commentCtrl.comment.replies[reply.id] = {...reply};\n+            // add reply to comment\n+            const commentReplies = Object.values(commentCtrl.comment.replies);\n+            expect(commentCtrl.getReplies()).toEqual(commentReplies);\n+        });\n+\n+        it('should return an empty list when the comment is a reply', function () {\n+            commentCtrl.comment.replies[reply.id] = {...reply};\n+            commentCtrl.reply = {...reply};\n+            expect(commentCtrl.getReplies()).toEqual([]);\n+        });\n+    });\n+\n+    describe('numberOfLikes', function () {\n+        it('should return the number of likes of a comment', function () {\n+            commentCtrl.comment.likes = [];\n+            expect(commentCtrl.numberOfLikes()).toEqual(0);\n+            commentCtrl.comment.likes = ['user-key-01', 'user-key-02'];\n+            expect(commentCtrl.numberOfLikes()).toEqual(2);\n+        });\n+\n+        it('should return the number of likes of a reply', function () {\n+            commentCtrl.reply = {...reply, likes:[]};\n+            commentCtrl.setCurrentComment();\n+            expect(commentCtrl.numberOfLikes()).toEqual(0);\n+            commentCtrl.reply = {\n+                ...reply, \n+                likes: ['user-key-01', 'user-key-02']\n+            };\n+            commentCtrl.setCurrentComment();\n+            expect(commentCtrl.numberOfLikes()).toEqual(2);\n+        });\n+    }); \n+\n+    describe('numberOfReplies', function () {\n+        it('should return the number of replies of a comment', function() {\n+            commentCtrl.comment.replies = {};\n+            expect(commentCtrl.numberOfReplies()).toEqual(0);\n+            commentCtrl.comment.replies = {1: nilReply, 2: nilReply};\n+            expect(commentCtrl.numberOfReplies()).toEqual(2);\n+        });\n+    });\n+\n+    describe('canDeleteComment', function () {\n+        beforeEach(function() {\n+            commentCtrl.comment.likes = [];\n+            commentCtrl.comment.replies = {};\n+            commentCtrl.comment.author_key = user.key;\n+            commentCtrl.post.state = 'published';\n+        })\n+\n+        it('should be true when the post has no activity', function () {\n+            expect(commentCtrl.canDeleteComment()).toBeTruthy();\n+        });\n+\n+        it('should be false when the post is deleted', function () {\n+            commentCtrl.post.state = 'deleted';\n+            expect(commentCtrl.canDeleteComment()).toBeFalsy();\n+        });\n+\n+        it('should be false when the comment has likes', function () {\n+            commentCtrl.addLike();\n+            expect(commentCtrl.canDeleteComment()).toBeFalsy();\n+        });\n+\n+        it('should be false when the comment has replies', function () {\n+            commentCtrl.comment.replies = {1: nilReply};\n+            expect(commentCtrl.canDeleteComment()).toBeFalsy();\n+        });\n+\n+        it('should be false when the user is not the post author', function () {\n+            commentCtrl.comment.author_key = 'other-user-key';\n+            expect(commentCtrl.canDeleteComment()).toBeFalsy();\n+        });\n+    });\n+\n+    describe('canReply', function () {\n+        beforeEach(function() {\n+            commentCtrl.showReplies = true;\n+            commentCtrl.post.state = 'published';\n+            commentCtrl.post.institution_state ='active';\n+        })\n+\n+        it(`should be true when the post inst is active, \n+            the post is published and the showReplies is true`, function() {\n+            expect(commentCtrl.canReply()).toBeTruthy();\n+        })\n+\n+        it('should be false when the flag showReplies is false', function () {\n+            commentCtrl.showReplies = false;\n+            expect(commentCtrl.canReply()).toBeFalsy();\n+        });\n+\n+        it('should be false when the post is deleted', function () {\n+            commentCtrl.post.state = 'deleted';\n+            expect(commentCtrl.canReply()).toBeFalsy();\n+        });\n+\n+        it('should be false when the post institution is inactive', function () {\n+            commentCtrl.post.institution_state ='inactive';\n+            expect(commentCtrl.canReply()).toBeFalsy();\n+        });\n+        \n+    });\n+\n+    describe('hideReplies', function () {\n+        beforeEach(function() {\n+            commentCtrl.comment.replies = {1: nilReply};\n+            commentCtrl.saving = false;\n+            commentCtrl.post.state = 'published';\n+        });\n+\n+        it('should be true when the post has no replies and is deleted', function () {\n+            commentCtrl.comment.replies = {};\n+            commentCtrl.post.state = 'deleted';\n+            expect(commentCtrl.hideReplies()).toBeTruthy();\n+        });\n+\n+        it('should be true when the flag saving is true', function () {\n+            commentCtrl.saving = true;\n+            expect(commentCtrl.hideReplies()).toBeTruthy();\n+        });\n+\n+        it(`should be false when the flag saving is false and the post \n+            is not delete or the comment has no replies`, function () {\n+            expect(commentCtrl.hideReplies()).toBeFalsy();\n+        });\n+    });\n+\n+    describe('disableButton', function () {\n+        beforeEach(function() {\n+            commentCtrl.saving = false;\n+            commentCtrl.post.state = 'published';\n+            commentCtrl.post.institution_state = 'active';\n+        })\n+\n+        it(`should be false when the post inst is active, \n+            the post is published and the saving flag is false`, function() {\n+            expect(commentCtrl.disableButton()).toBeFalsy();\n+        })\n+\n+        it('should be true when the saving flag is true', function () {\n+            commentCtrl.saving = true;\n+            expect(commentCtrl.disableButton()).toBeTruthy();\n+        });\n+\n+        it('should be true when the post is deleted', function () {\n+            commentCtrl.post.state = 'deleted';\n+            expect(commentCtrl.disableButton()).toBeTruthy();\n+        });\n+\n+        it('should be true when the post institution is inactive', function () {\n+            commentCtrl.post.institution_state = 'inactive';\n+            expect(commentCtrl.disableButton()).toBeTruthy();\n+        });\n+    });\n+\n+    describe('isInstInactive', function () {\n+        it('should be true when the post institution is inactive', function() {\n+            commentCtrl.post.institution_state = 'inactive';\n+            expect(commentCtrl.isInstInactive()).toBeTruthy();\n+        });\n+\n+        it('should be true when the post institution is inactive', function() {\n+            commentCtrl.post.institution_state = 'active';\n+            expect(commentCtrl.isInstInactive()).toBeFalsy();\n+        });\n+    });\n+\n+    describe('numberOfLikesMessage', function() {\n+        it('should return a message when there is no like ', function () {\n+            commentCtrl.comment.likes = [];\n+            expect(commentCtrl.numberOfLikesMessage()).toEqual('Nenhuma curtida');\n+        });\n+\n+        it('should return a message when there is just one like ', function () {\n+            commentCtrl.comment.likes = ['user-key-01'];\n+            expect(commentCtrl.numberOfLikesMessage()).toEqual('1 pessoa curtiu');\n+        });\n+\n+        it('should return a message when there is more than one like ', function () {\n+            commentCtrl.comment.likes = ['user-key-01', 'user-key-02'];\n+            expect(commentCtrl.numberOfLikesMessage()).toEqual('2 pessoas curtiram');\n+        });\n+    });\n+\n+    describe('numberOfRepliesMessage', function() {\n+        it('should return a message when there is no reply ', function () {\n+            commentCtrl.comment.replies = {};\n+            expect(commentCtrl.numberOfRepliesMessage()).toEqual('Nenhuma resposta');\n+        });\n+\n+        it('should return a message when there is just one like ', function () {","path":"frontend/test/specs/comment/commentControllerSpec.js","position":565,"original_position":565,"commit_id":"f3c46a0cefa3d6d74ac664f3cf7ef23bd58df60f","original_commit_id":"f3c46a0cefa3d6d74ac664f3cf7ef23bd58df60f","user":{"login":"JuliePessoa","id":7011394,"node_id":"MDQ6VXNlcjcwMTEzOTQ=","avatar_url":"https://avatars0.githubusercontent.com/u/7011394?v=4","gravatar_id":"","url":"https://api.github.com/users/JuliePessoa","html_url":"https://github.com/JuliePessoa","followers_url":"https://api.github.com/users/JuliePessoa/followers","following_url":"https://api.github.com/users/JuliePessoa/following{/other_user}","gists_url":"https://api.github.com/users/JuliePessoa/gists{/gist_id}","starred_url":"https://api.github.com/users/JuliePessoa/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/JuliePessoa/subscriptions","organizations_url":"https://api.github.com/users/JuliePessoa/orgs","repos_url":"https://api.github.com/users/JuliePessoa/repos","events_url":"https://api.github.com/users/JuliePessoa/events{/privacy}","received_events_url":"https://api.github.com/users/JuliePessoa/received_events","type":"User","site_admin":false},"body":"one reply","created_at":"2018-10-19T17:51:09Z","updated_at":"2018-10-19T17:51:58Z","html_url":"https://github.com/eciis/web/pull/1277#discussion_r226730757","pull_request_url":"https://api.github.com/repos/eciis/web/pulls/1277","author_association":"COLLABORATOR","_links":{"self":{"href":"https://api.github.com/repos/eciis/web/pulls/comments/226730757"},"html":{"href":"https://github.com/eciis/web/pull/1277#discussion_r226730757"},"pull_request":{"href":"https://api.github.com/repos/eciis/web/pulls/1277"}}},"pull_request":{"url":"https://api.github.com/repos/eciis/web/pulls/1277","id":223986327,"node_id":"MDExOlB1bGxSZXF1ZXN0MjIzOTg2MzI3","html_url":"https://github.com/eciis/web/pull/1277","diff_url":"https://github.com/eciis/web/pull/1277.diff","patch_url":"https://github.com/eciis/web/pull/1277.patch","issue_url":"https://api.github.com/repos/eciis/web/issues/1277","number":1277,"state":"open","locked":false,"title":"Comment component","user":{"login":"ruanres","id":13683704,"node_id":"MDQ6VXNlcjEzNjgzNzA0","avatar_url":"https://avatars0.githubusercontent.com/u/13683704?v=4","gravatar_id":"","url":"https://api.github.com/users/ruanres","html_url":"https://github.com/ruanres","followers_url":"https://api.github.com/users/ruanres/followers","following_url":"https://api.github.com/users/ruanres/following{/other_user}","gists_url":"https://api.github.com/users/ruanres/gists{/gist_id}","starred_url":"https://api.github.com/users/ruanres/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ruanres/subscriptions","organizations_url":"https://api.github.com/users/ruanres/orgs","repos_url":"https://api.github.com/users/ruanres/repos","events_url":"https://api.github.com/users/ruanres/events{/privacy}","received_events_url":"https://api.github.com/users/ruanres/received_events","type":"User","site_admin":false},"body":"**Feature/Bug description:** The comment directive was replaced by a comment component, and the test set was improved. \r\n\r\n**Solution:** ...\r\n\r\n**TODO/FIXME:** n/a","created_at":"2018-10-18T14:48:06Z","updated_at":"2018-10-19T17:51:57Z","closed_at":null,"merged_at":null,"merge_commit_sha":"c2523049e64483fb80bf45bfc5b3bbd2f25f9d1c","assignee":{"login":"ruanres","id":13683704,"node_id":"MDQ6VXNlcjEzNjgzNzA0","avatar_url":"https://avatars0.githubusercontent.com/u/13683704?v=4","gravatar_id":"","url":"https://api.github.com/users/ruanres","html_url":"https://github.com/ruanres","followers_url":"https://api.github.com/users/ruanres/followers","following_url":"https://api.github.com/users/ruanres/following{/other_user}","gists_url":"https://api.github.com/users/ruanres/gists{/gist_id}","starred_url":"https://api.github.com/users/ruanres/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ruanres/subscriptions","organizations_url":"https://api.github.com/users/ruanres/orgs","repos_url":"https://api.github.com/users/ruanres/repos","events_url":"https://api.github.com/users/ruanres/events{/privacy}","received_events_url":"https://api.github.com/users/ruanres/received_events","type":"User","site_admin":false},"assignees":[{"login":"ruanres","id":13683704,"node_id":"MDQ6VXNlcjEzNjgzNzA0","avatar_url":"https://avatars0.githubusercontent.com/u/13683704?v=4","gravatar_id":"","url":"https://api.github.com/users/ruanres","html_url":"https://github.com/ruanres","followers_url":"https://api.github.com/users/ruanres/followers","following_url":"https://api.github.com/users/ruanres/following{/other_user}","gists_url":"https://api.github.com/users/ruanres/gists{/gist_id}","starred_url":"https://api.github.com/users/ruanres/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ruanres/subscriptions","organizations_url":"https://api.github.com/users/ruanres/orgs","repos_url":"https://api.github.com/users/ruanres/repos","events_url":"https://api.github.com/users/ruanres/events{/privacy}","received_events_url":"https://api.github.com/users/ruanres/received_events","type":"User","site_admin":false}],"requested_reviewers":[{"login":"MaianaB","id":18709274,"node_id":"MDQ6VXNlcjE4NzA5Mjc0","avatar_url":"https://avatars1.githubusercontent.com/u/18709274?v=4","gravatar_id":"","url":"https://api.github.com/users/MaianaB","html_url":"https://github.com/MaianaB","followers_url":"https://api.github.com/users/MaianaB/followers","following_url":"https://api.github.com/users/MaianaB/following{/other_user}","gists_url":"https://api.github.com/users/MaianaB/gists{/gist_id}","starred_url":"https://api.github.com/users/MaianaB/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/MaianaB/subscriptions","organizations_url":"https://api.github.com/users/MaianaB/orgs","repos_url":"https://api.github.com/users/MaianaB/repos","events_url":"https://api.github.com/users/MaianaB/events{/privacy}","received_events_url":"https://api.github.com/users/MaianaB/received_events","type":"User","site_admin":false},{"login":"tiagolimpe","id":20300259,"node_id":"MDQ6VXNlcjIwMzAwMjU5","avatar_url":"https://avatars3.githubusercontent.com/u/20300259?v=4","gravatar_id":"","url":"https://api.github.com/users/tiagolimpe","html_url":"https://github.com/tiagolimpe","followers_url":"https://api.github.com/users/tiagolimpe/followers","following_url":"https://api.github.com/users/tiagolimpe/following{/other_user}","gists_url":"https://api.github.com/users/tiagolimpe/gists{/gist_id}","starred_url":"https://api.github.com/users/tiagolimpe/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tiagolimpe/subscriptions","organizations_url":"https://api.github.com/users/tiagolimpe/orgs","repos_url":"https://api.github.com/users/tiagolimpe/repos","events_url":"https://api.github.com/users/tiagolimpe/events{/privacy}","received_events_url":"https://api.github.com/users/tiagolimpe/received_events","type":"User","site_admin":false}],"requested_teams":[],"labels":[{"id":858264818,"node_id":"MDU6TGFiZWw4NTgyNjQ4MTg=","url":"https://api.github.com/repos/eciis/web/labels/enhancement","name":"enhancement","color":"e2c88e","default":true},{"id":606546317,"node_id":"MDU6TGFiZWw2MDY1NDYzMTc=","url":"https://api.github.com/repos/eciis/web/labels/frontend","name":"frontend","color":"1d76db","default":false}],"milestone":null,"commits_url":"https://api.github.com/repos/eciis/web/pulls/1277/commits","review_comments_url":"https://api.github.com/repos/eciis/web/pulls/1277/comments","review_comment_url":"https://api.github.com/repos/eciis/web/pulls/comments{/number}","comments_url":"https://api.github.com/repos/eciis/web/issues/1277/comments","statuses_url":"https://api.github.com/repos/eciis/web/statuses/f3c46a0cefa3d6d74ac664f3cf7ef23bd58df60f","head":{"label":"eciis:comment-component","ref":"comment-component","sha":"f3c46a0cefa3d6d74ac664f3cf7ef23bd58df60f","user":{"login":"eciis","id":28706805,"node_id":"MDEyOk9yZ2FuaXphdGlvbjI4NzA2ODA1","avatar_url":"https://avatars3.githubusercontent.com/u/28706805?v=4","gravatar_id":"","url":"https://api.github.com/users/eciis","html_url":"https://github.com/eciis","followers_url":"https://api.github.com/users/eciis/followers","following_url":"https://api.github.com/users/eciis/following{/other_user}","gists_url":"https://api.github.com/users/eciis/gists{/gist_id}","starred_url":"https://api.github.com/users/eciis/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/eciis/subscriptions","organizations_url":"https://api.github.com/users/eciis/orgs","repos_url":"https://api.github.com/users/eciis/repos","events_url":"https://api.github.com/users/eciis/events{/privacy}","received_events_url":"https://api.github.com/users/eciis/received_events","type":"Organization","site_admin":false},"repo":{"id":91336041,"node_id":"MDEwOlJlcG9zaXRvcnk5MTMzNjA0MQ==","name":"web","full_name":"eciis/web","private":false,"owner":{"login":"eciis","id":28706805,"node_id":"MDEyOk9yZ2FuaXphdGlvbjI4NzA2ODA1","avatar_url":"https://avatars3.githubusercontent.com/u/28706805?v=4","gravatar_id":"","url":"https://api.github.com/users/eciis","html_url":"https://github.com/eciis","followers_url":"https://api.github.com/users/eciis/followers","following_url":"https://api.github.com/users/eciis/following{/other_user}","gists_url":"https://api.github.com/users/eciis/gists{/gist_id}","starred_url":"https://api.github.com/users/eciis/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/eciis/subscriptions","organizations_url":"https://api.github.com/users/eciis/orgs","repos_url":"https://api.github.com/users/eciis/repos","events_url":"https://api.github.com/users/eciis/events{/privacy}","received_events_url":"https://api.github.com/users/eciis/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/eciis/web","description":"AngularJS Frontend with Appengine Python Backend","fork":false,"url":"https://api.github.com/repos/eciis/web","forks_url":"https://api.github.com/repos/eciis/web/forks","keys_url":"https://api.github.com/repos/eciis/web/keys{/key_id}","collaborators_url":"https://api.github.com/repos/eciis/web/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/eciis/web/teams","hooks_url":"https://api.github.com/repos/eciis/web/hooks","issue_events_url":"https://api.github.com/repos/eciis/web/issues/events{/number}","events_url":"https://api.github.com/repos/eciis/web/events","assignees_url":"https://api.github.com/repos/eciis/web/assignees{/user}","branches_url":"https://api.github.com/repos/eciis/web/branches{/branch}","tags_url":"https://api.github.com/repos/eciis/web/tags","blobs_url":"https://api.github.com/repos/eciis/web/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/eciis/web/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/eciis/web/git/refs{/sha}","trees_url":"https://api.github.com/repos/eciis/web/git/trees{/sha}","statuses_url":"https://api.github.com/repos/eciis/web/statuses/{sha}","languages_url":"https://api.github.com/repos/eciis/web/languages","stargazers_url":"https://api.github.com/repos/eciis/web/stargazers","contributors_url":"https://api.github.com/repos/eciis/web/contributors","subscribers_url":"https://api.github.com/repos/eciis/web/subscribers","subscription_url":"https://api.github.com/repos/eciis/web/subscription","commits_url":"https://api.github.com/repos/eciis/web/commits{/sha}","git_commits_url":"https://api.github.com/repos/eciis/web/git/commits{/sha}","comments_url":"https://api.github.com/repos/eciis/web/comments{/number}","issue_comment_url":"https://api.github.com/repos/eciis/web/issues/comments{/number}","contents_url":"https://api.github.com/repos/eciis/web/contents/{+path}","compare_url":"https://api.github.com/repos/eciis/web/compare/{base}...{head}","merges_url":"https://api.github.com/repos/eciis/web/merges","archive_url":"https://api.github.com/repos/eciis/web/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/eciis/web/downloads","issues_url":"https://api.github.com/repos/eciis/web/issues{/number}","pulls_url":"https://api.github.com/repos/eciis/web/pulls{/number}","milestones_url":"https://api.github.com/repos/eciis/web/milestones{/number}","notifications_url":"https://api.github.com/repos/eciis/web/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/eciis/web/labels{/name}","releases_url":"https://api.github.com/repos/eciis/web/releases{/id}","deployments_url":"https://api.github.com/repos/eciis/web/deployments","created_at":"2017-05-15T12:37:06Z","updated_at":"2018-10-16T16:43:27Z","pushed_at":"2018-10-19T13:56:57Z","git_url":"git://github.com/eciis/web.git","ssh_url":"git@github.com:eciis/web.git","clone_url":"https://github.com/eciis/web.git","svn_url":"https://github.com/eciis/web","homepage":"","size":10368,"stargazers_count":9,"watchers_count":9,"language":"JavaScript","has_issues":false,"has_projects":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":1,"mirror_url":null,"archived":false,"open_issues_count":5,"license":{"key":"gpl-3.0","name":"GNU General Public License v3.0","spdx_id":"GPL-3.0","url":"https://api.github.com/licenses/gpl-3.0","node_id":"MDc6TGljZW5zZTk="},"forks":1,"open_issues":5,"watchers":9,"default_branch":"dev"}},"base":{"label":"eciis:responsive","ref":"responsive","sha":"bd91ca0e9d2eded090c8fd5284788d038d4adf49","user":{"login":"eciis","id":28706805,"node_id":"MDEyOk9yZ2FuaXphdGlvbjI4NzA2ODA1","avatar_url":"https://avatars3.githubusercontent.com/u/28706805?v=4","gravatar_id":"","url":"https://api.github.com/users/eciis","html_url":"https://github.com/eciis","followers_url":"https://api.github.com/users/eciis/followers","following_url":"https://api.github.com/users/eciis/following{/other_user}","gists_url":"https://api.github.com/users/eciis/gists{/gist_id}","starred_url":"https://api.github.com/users/eciis/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/eciis/subscriptions","organizations_url":"https://api.github.com/users/eciis/orgs","repos_url":"https://api.github.com/users/eciis/repos","events_url":"https://api.github.com/users/eciis/events{/privacy}","received_events_url":"https://api.github.com/users/eciis/received_events","type":"Organization","site_admin":false},"repo":{"id":91336041,"node_id":"MDEwOlJlcG9zaXRvcnk5MTMzNjA0MQ==","name":"web","full_name":"eciis/web","private":false,"owner":{"login":"eciis","id":28706805,"node_id":"MDEyOk9yZ2FuaXphdGlvbjI4NzA2ODA1","avatar_url":"https://avatars3.githubusercontent.com/u/28706805?v=4","gravatar_id":"","url":"https://api.github.com/users/eciis","html_url":"https://github.com/eciis","followers_url":"https://api.github.com/users/eciis/followers","following_url":"https://api.github.com/users/eciis/following{/other_user}","gists_url":"https://api.github.com/users/eciis/gists{/gist_id}","starred_url":"https://api.github.com/users/eciis/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/eciis/subscriptions","organizations_url":"https://api.github.com/users/eciis/orgs","repos_url":"https://api.github.com/users/eciis/repos","events_url":"https://api.github.com/users/eciis/events{/privacy}","received_events_url":"https://api.github.com/users/eciis/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/eciis/web","description":"AngularJS Frontend with Appengine Python Backend","fork":false,"url":"https://api.github.com/repos/eciis/web","forks_url":"https://api.github.com/repos/eciis/web/forks","keys_url":"https://api.github.com/repos/eciis/web/keys{/key_id}","collaborators_url":"https://api.github.com/repos/eciis/web/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/eciis/web/teams","hooks_url":"https://api.github.com/repos/eciis/web/hooks","issue_events_url":"https://api.github.com/repos/eciis/web/issues/events{/number}","events_url":"https://api.github.com/repos/eciis/web/events","assignees_url":"https://api.github.com/repos/eciis/web/assignees{/user}","branches_url":"https://api.github.com/repos/eciis/web/branches{/branch}","tags_url":"https://api.github.com/repos/eciis/web/tags","blobs_url":"https://api.github.com/repos/eciis/web/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/eciis/web/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/eciis/web/git/refs{/sha}","trees_url":"https://api.github.com/repos/eciis/web/git/trees{/sha}","statuses_url":"https://api.github.com/repos/eciis/web/statuses/{sha}","languages_url":"https://api.github.com/repos/eciis/web/languages","stargazers_url":"https://api.github.com/repos/eciis/web/stargazers","contributors_url":"https://api.github.com/repos/eciis/web/contributors","subscribers_url":"https://api.github.com/repos/eciis/web/subscribers","subscription_url":"https://api.github.com/repos/eciis/web/subscription","commits_url":"https://api.github.com/repos/eciis/web/commits{/sha}","git_commits_url":"https://api.github.com/repos/eciis/web/git/commits{/sha}","comments_url":"https://api.github.com/repos/eciis/web/comments{/number}","issue_comment_url":"https://api.github.com/repos/eciis/web/issues/comments{/number}","contents_url":"https://api.github.com/repos/eciis/web/contents/{+path}","compare_url":"https://api.github.com/repos/eciis/web/compare/{base}...{head}","merges_url":"https://api.github.com/repos/eciis/web/merges","archive_url":"https://api.github.com/repos/eciis/web/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/eciis/web/downloads","issues_url":"https://api.github.com/repos/eciis/web/issues{/number}","pulls_url":"https://api.github.com/repos/eciis/web/pulls{/number}","milestones_url":"https://api.github.com/repos/eciis/web/milestones{/number}","notifications_url":"https://api.github.com/repos/eciis/web/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/eciis/web/labels{/name}","releases_url":"https://api.github.com/repos/eciis/web/releases{/id}","deployments_url":"https://api.github.com/repos/eciis/web/deployments","created_at":"2017-05-15T12:37:06Z","updated_at":"2018-10-16T16:43:27Z","pushed_at":"2018-10-19T13:56:57Z","git_url":"git://github.com/eciis/web.git","ssh_url":"git@github.com:eciis/web.git","clone_url":"https://github.com/eciis/web.git","svn_url":"https://github.com/eciis/web","homepage":"","size":10368,"stargazers_count":9,"watchers_count":9,"language":"JavaScript","has_issues":false,"has_projects":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":1,"mirror_url":null,"archived":false,"open_issues_count":5,"license":{"key":"gpl-3.0","name":"GNU General Public License v3.0","spdx_id":"GPL-3.0","url":"https://api.github.com/licenses/gpl-3.0","node_id":"MDc6TGljZW5zZTk="},"forks":1,"open_issues":5,"watchers":9,"default_branch":"dev"}},"_links":{"self":{"href":"https://api.github.com/repos/eciis/web/pulls/1277"},"html":{"href":"https://github.com/eciis/web/pull/1277"},"issue":{"href":"https://api.github.com/repos/eciis/web/issues/1277"},"comments":{"href":"https://api.github.com/repos/eciis/web/issues/1277/comments"},"review_comments":{"href":"https://api.github.com/repos/eciis/web/pulls/1277/comments"},"review_comment":{"href":"https://api.github.com/repos/eciis/web/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/eciis/web/pulls/1277/commits"},"statuses":{"href":"https://api.github.com/repos/eciis/web/statuses/f3c46a0cefa3d6d74ac664f3cf7ef23bd58df60f"}},"author_association":"CONTRIBUTOR"}}
{"actor":{"display_login":"JuliePessoa"}}