/* * Copyright 2009 David Linsin * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package de.linsin.github.rest.service; import de.linsin.github.rest.domain.Issue; import de.linsin.github.rest.resource.IssueResponse; import de.linsin.github.rest.resource.IssuesResponse; import de.linsin.github.rest.resource.CommentIssueResponse; import de.linsin.github.rest.domain.Repository; import de.linsin.github.rest.domain.Comment; import static org.easymock.classextension.EasyMock.*; import static org.easymock.EasyMock.eq; import org.junit.After; import static org.junit.Assert.*; import org.junit.Before; import org.junit.Test; import org.springframework.web.client.RestTemplate; /** * Testing {@link IssueBrowser} * * @author David Linsin - dlinsin@gmail.com */ public class IssueBrowserTest { private IssueBrowser classUnderTest; private RestTemplate mockRestTemplate; @Before public void setUp() { mockRestTemplate = createMock(RestTemplate.class); classUnderTest = new IssueBrowser() { @Override protected RestTemplate initTemplate() { return mockRestTemplate; } }; } @After public void tearDown() { reset(mockRestTemplate); } @Test public void browse_open() { Repository repo = setupTestRepo(); IssuesResponse response = new IssuesResponse(); response.setIssues(new Issue[]{new Issue()}); expect(mockRestTemplate.getForObject(IssueBrowser.ISSUES_OPEN_URL, IssuesResponse.class, repo.getOwner(), repo.getName())).andReturn(response); replay(mockRestTemplate); assertFalse(classUnderTest.browseOpen(repo).isEmpty()); verify(mockRestTemplate); } @Test public void browse_open_empty() { Repository repo = setupTestRepo(); IssuesResponse response = new IssuesResponse(); response.setIssues(new Issue[0]); expect(mockRestTemplate.getForObject(IssueBrowser.ISSUES_OPEN_URL, IssuesResponse.class, repo.getOwner(), repo.getName())).andReturn(response); replay(mockRestTemplate); assertTrue(classUnderTest.browseOpen(repo).isEmpty()); verify(mockRestTemplate); } @Test public void browse_open_nothing() { Repository repo = setupTestRepo(); IssuesResponse response = new IssuesResponse(); expect(mockRestTemplate.getForObject(IssueBrowser.ISSUES_OPEN_URL, IssuesResponse.class, repo.getOwner(), repo.getName())).andReturn(response); replay(mockRestTemplate); assertTrue(classUnderTest.browseOpen(repo).isEmpty()); verify(mockRestTemplate); } @Test(expected = NullPointerException.class) public void browse_open_invalid_repo() { classUnderTest.browseOpen(null); } @Test public void browse_closed() { Repository repo = setupTestRepo(); IssuesResponse response = new IssuesResponse(); response.setIssues(new Issue[]{new Issue()}); expect(mockRestTemplate.getForObject(IssueBrowser.ISSUES_CLOSED_URL, IssuesResponse.class, repo.getOwner(), repo.getName())).andReturn(response); replay(mockRestTemplate); assertFalse(classUnderTest.browseClosed(repo).isEmpty()); verify(mockRestTemplate); } @Test public void browse_closed_empty() { Repository repo = setupTestRepo(); IssuesResponse response = new IssuesResponse(); response.setIssues(new Issue[0]); expect(mockRestTemplate.getForObject(IssueBrowser.ISSUES_OPEN_URL, IssuesResponse.class, repo.getOwner(), repo.getName())).andReturn(response); replay(mockRestTemplate); assertTrue(classUnderTest.browseOpen(repo).isEmpty()); verify(mockRestTemplate); } @Test public void browse_closed_nothing() { Repository repo = setupTestRepo(); IssuesResponse response = new IssuesResponse(); expect(mockRestTemplate.getForObject(IssueBrowser.ISSUES_OPEN_URL, IssuesResponse.class, repo.getOwner(), repo.getName())).andReturn(response); replay(mockRestTemplate); assertTrue(classUnderTest.browseOpen(repo).isEmpty()); verify(mockRestTemplate); } @Test(expected = NullPointerException.class) public void browse_closed_invalid_repo() { classUnderTest.browseOpen(null); } @Test public void browse_issue() { Repository repo = setupTestRepo(); IssueResponse response = new IssueResponse(); response.setIssue(new Issue()); String issueNo = "1"; expect(mockRestTemplate.getForObject(IssueBrowser.ISSUE_URL, IssueResponse.class, repo.getOwner(), repo.getName(), issueNo)).andReturn(response); replay(mockRestTemplate); assertNotNull(classUnderTest.browse(repo, Integer.valueOf(issueNo))); verify(mockRestTemplate); } @Test(expected = NullPointerException.class) public void browse_issue_response_null() { Repository repo = setupTestRepo(); String issueNo = "1"; expect(mockRestTemplate.getForObject(IssueBrowser.ISSUE_URL, IssueResponse.class, repo.getOwner(), repo.getName(), issueNo)).andReturn(null); replay(mockRestTemplate); assertNotNull(classUnderTest.browse(repo, Integer.valueOf(issueNo))); } @Test(expected = NullPointerException.class) public void browse_passed_null_repo() { classUnderTest.browse(null, 1); } @Test public void open_issue() { Repository repo = setupTestRepo(); Issue issue = new Issue(); issue.setTitle("Test"); issue.setBody("test"); IssueResponse response = new IssueResponse(); response.setIssue(issue); expect(mockRestTemplate.postForObject(eq(IssueBrowser.OPEN_ISSUE_URL), anyObject(), eq(IssueResponse.class), eq(repo.getOwner()), eq(repo.getName()))).andReturn(response); replay(mockRestTemplate); assertNotNull(classUnderTest.open(repo, issue)); verify(mockRestTemplate); } @Test(expected = IllegalArgumentException.class) public void open_issue_no_title_passed() { classUnderTest.open(setupTestRepo(), new Issue()); } @Test(expected = IllegalArgumentException.class) public void open_issue_no_body_passed() { Issue issue = new Issue(); issue.setTitle("test"); classUnderTest.open(setupTestRepo(), issue); } @Test(expected = NullPointerException.class) public void open_issue_null_issue_passed() { classUnderTest.open(setupTestRepo(), null); } @Test(expected = NullPointerException.class) public void open_issue_null_repo_passed() { Issue issue = new Issue(); issue.setTitle("Test"); issue.setBody("test"); classUnderTest.open(null, issue); } @Test public void close_issue() { Repository repo = setupTestRepo(); Issue issue = new Issue(); issue.setNumber(1); expect(mockRestTemplate.postForObject(eq(IssueBrowser.CLOSE_ISSUE_URL), anyObject(), eq(IssueResponse.class), eq(repo.getOwner()), eq(repo.getName()), eq(String.valueOf(issue.getNumber())))).andReturn(new IssueResponse()); replay(mockRestTemplate); classUnderTest.close(repo, issue); verify(mockRestTemplate); } @Test(expected = IllegalArgumentException.class) public void close_issue_no_number_in_issue() { classUnderTest.close(setupTestRepo(), new Issue()); } @Test(expected = NullPointerException.class) public void close_issue_null_issue_passed() { classUnderTest.close(setupTestRepo(), null); } @Test(expected = NullPointerException.class) public void close_issue_null_repo_passed() { Issue issue = new Issue(); issue.setNumber(1); classUnderTest.close(null, issue); } @Test public void reopen_issue() { Repository repo = setupTestRepo(); Issue issue = new Issue(); issue.setNumber(1); IssueResponse response = new IssueResponse(); response.setIssue(issue); expect(mockRestTemplate.postForObject(eq(IssueBrowser.REOPEN_ISSUE_URL), anyObject(), eq(IssueResponse.class), eq(repo.getOwner()), eq(repo.getName()), eq(String.valueOf(issue.getNumber())))).andReturn(response); replay(mockRestTemplate); assertNotNull(classUnderTest.reopen(repo, issue)); verify(mockRestTemplate); } @Test(expected = IllegalArgumentException.class) public void reopen_issue_no_number_in_issue() { classUnderTest.reopen(setupTestRepo(), new Issue()); } @Test(expected = NullPointerException.class) public void reopen_issue_null_issue_passed() { classUnderTest.reopen(setupTestRepo(), null); } @Test(expected = NullPointerException.class) public void reopen_issue_null_repo_passed() { Issue issue = new Issue(); issue.setNumber(1); classUnderTest.reopen(null, issue); } @Test public void edit_issue() { Issue issue = setupTestIssue(); Repository repo = setupTestRepo(); IssueResponse response = new IssueResponse(); response.setIssue(issue); expect(mockRestTemplate.postForObject(eq(IssueBrowser.EDIT_ISSUE_URL), anyObject(), eq(IssueResponse.class), eq(repo.getOwner()), eq(repo.getName()), eq(String.valueOf(issue.getNumber())))).andReturn(response); replay(mockRestTemplate); assertNotNull(classUnderTest.edit(repo, issue)); verify(mockRestTemplate); } private Issue setupTestIssue() { Issue issue = new Issue(); issue.setNumber(1); issue.setTitle("test"); issue.setBody("test body"); return issue; } @Test(expected = IllegalArgumentException.class) public void edit_issue_no_number_in_issue() { classUnderTest.edit(setupTestRepo(), new Issue()); } @Test(expected = IllegalArgumentException.class) public void edit_issue_no_title() { Issue issue = new Issue(); issue.setNumber(1); classUnderTest.edit(setupTestRepo(), issue); } @Test(expected = IllegalArgumentException.class) public void edit_issue_no_body() { Issue issue = new Issue(); issue.setNumber(1); issue.setTitle("test"); classUnderTest.edit(setupTestRepo(), issue); } @Test(expected = NullPointerException.class) public void edit_issue_null_issue_passed() { classUnderTest.edit(setupTestRepo(), null); } @Test(expected = NullPointerException.class) public void edit_issue_null_repo_passed() { Issue issue = setupTestIssue(); classUnderTest.edit(null, issue); } @Test public void comment_issue() { Repository repo = setupTestRepo(); Issue issue = setupTestIssue(); Comment comment = new Comment(); comment.setComment("hello moto"); CommentIssueResponse response = new CommentIssueResponse(); response.setComment(comment); expect(mockRestTemplate.postForObject(eq(IssueBrowser.COMMENT_ISSUE_URL), anyObject(), eq(CommentIssueResponse.class), eq(repo.getOwner()), eq(repo.getName()), eq(String.valueOf(issue.getNumber())))).andReturn(response); replay(mockRestTemplate); assertNotNull(classUnderTest.comment(repo, issue, comment)); verify(mockRestTemplate); } @Test(expected = IllegalArgumentException.class) public void comment_issue_no_number_in_issue() { Repository repo = setupTestRepo(); Issue issue = new Issue(); Comment comment = new Comment(); comment.setComment("hello moto"); classUnderTest.comment(repo, issue, comment); } @Test(expected = IllegalArgumentException.class) public void comment_issue_no_comment_text() { Repository repo = setupTestRepo(); Issue issue = setupTestIssue(); Comment comment = new Comment(); classUnderTest.comment(repo, issue, comment); } @Test(expected = NullPointerException.class) public void comment_issue_null_repo_passed() { Issue issue = setupTestIssue(); Comment comment = new Comment(); comment.setComment("hello moto"); classUnderTest.comment(null, issue, comment); } @Test(expected = NullPointerException.class) public void comment_issue_null_issue_passed() { Repository repo = setupTestRepo(); Comment comment = new Comment(); comment.setComment("hello moto"); classUnderTest.comment(repo, null, comment); } @Test(expected = NullPointerException.class) public void comment_issue_null_comment_passed() { Repository repo = setupTestRepo(); Issue issue = setupTestIssue(); classUnderTest.comment(repo, issue, null); } private Repository setupTestRepo() { Repository repo = new Repository(); repo.setName("area51"); repo.setOwner("dlinsin"); return repo; } }