/*
* Copyright 2012 GitHub Inc.
*
* 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 com.github.mobile.tests;
import static org.eclipse.egit.github.core.event.Event.TYPE_COMMIT_COMMENT;
import static org.eclipse.egit.github.core.event.Event.TYPE_CREATE;
import static org.eclipse.egit.github.core.event.Event.TYPE_DELETE;
import static org.eclipse.egit.github.core.event.Event.TYPE_FOLLOW;
import static org.eclipse.egit.github.core.event.Event.TYPE_GIST;
import static org.eclipse.egit.github.core.event.Event.TYPE_GOLLUM;
import static org.eclipse.egit.github.core.event.Event.TYPE_ISSUES;
import static org.eclipse.egit.github.core.event.Event.TYPE_ISSUE_COMMENT;
import static org.eclipse.egit.github.core.event.Event.TYPE_MEMBER;
import static org.eclipse.egit.github.core.event.Event.TYPE_PUBLIC;
import static org.eclipse.egit.github.core.event.Event.TYPE_PULL_REQUEST;
import static org.eclipse.egit.github.core.event.Event.TYPE_PUSH;
import static org.eclipse.egit.github.core.event.Event.TYPE_TEAM_ADD;
import static org.eclipse.egit.github.core.event.Event.TYPE_WATCH;
import android.test.AndroidTestCase;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.TextView;
import com.github.mobile.R.id;
import com.github.mobile.ui.user.NewsListAdapter;
import com.github.mobile.util.AvatarLoader;
import java.util.Date;
import org.eclipse.egit.github.core.Gist;
import org.eclipse.egit.github.core.Issue;
import org.eclipse.egit.github.core.Team;
import org.eclipse.egit.github.core.User;
import org.eclipse.egit.github.core.event.CommitCommentPayload;
import org.eclipse.egit.github.core.event.CreatePayload;
import org.eclipse.egit.github.core.event.DeletePayload;
import org.eclipse.egit.github.core.event.Event;
import org.eclipse.egit.github.core.event.EventRepository;
import org.eclipse.egit.github.core.event.FollowPayload;
import org.eclipse.egit.github.core.event.GistPayload;
import org.eclipse.egit.github.core.event.IssueCommentPayload;
import org.eclipse.egit.github.core.event.IssuesPayload;
import org.eclipse.egit.github.core.event.MemberPayload;
import org.eclipse.egit.github.core.event.PullRequestPayload;
import org.eclipse.egit.github.core.event.PushPayload;
import org.eclipse.egit.github.core.event.TeamAddPayload;
/**
* Tests of the news text rendering
*/
public class NewsEventTextTest extends AndroidTestCase {
private NewsListAdapter adapter;
private TextView text;
private User actor;
private EventRepository repo;
private Date date;
@Override
protected void setUp() throws Exception {
super.setUp();
date = new Date();
actor = new User().setLogin("user");
repo = new EventRepository().setName("user/repo");
adapter = new NewsListAdapter(LayoutInflater.from(mContext),
new AvatarLoader(mContext));
}
private Event createEvent(String type) {
Event event = new Event();
event.setCreatedAt(date);
event.setType(type);
event.setActor(actor);
event.setRepo(repo);
return event;
}
private void verify(String expected) {
CharSequence actual = text.getText();
assertNotNull(actual);
assertEquals(expected, actual.toString());
}
private void updateView(Event event) {
adapter.setItems(new Object[] { event });
View view = adapter.getView(0, null, null);
assertNotNull(view);
text = (TextView) view.findViewById(id.tv_event);
assertNotNull(text);
}
/**
* Verify text of commit comment event
*/
public void testCommitCommentEvent() {
Event event = createEvent(TYPE_COMMIT_COMMENT);
event.setPayload(new CommitCommentPayload());
updateView(event);
CharSequence content = text.getText();
assertNotNull(content);
assertEquals("user commented on user/repo", content.toString());
}
/**
* Verify text of create event
*/
public void testCreateRepositoryEvent() {
Event event = createEvent(TYPE_CREATE);
CreatePayload payload = new CreatePayload();
payload.setRefType("repository");
event.setPayload(payload);
updateView(event);
verify("user created repository repo");
}
/**
* Verify text of create event
*/
public void testCreateBranchEvent() {
Event event = createEvent(TYPE_CREATE);
CreatePayload payload = new CreatePayload();
payload.setRefType("branch");
payload.setRef("b1");
event.setPayload(payload);
updateView(event);
verify("user created branch b1 at user/repo");
}
/**
* Verify text of deleve event
*/
public void testDelete() {
Event event = createEvent(TYPE_DELETE);
DeletePayload payload = new DeletePayload();
payload.setRefType("branch");
payload.setRef("b1");
event.setPayload(payload);
updateView(event);
verify("user deleted branch b1 at user/repo");
}
/**
* Verify text of follow event
*/
public void testFollow() {
Event event = createEvent(TYPE_FOLLOW);
FollowPayload payload = new FollowPayload();
payload.setTarget(new User().setLogin("user2"));
event.setPayload(payload);
updateView(event);
verify("user started following user2");
}
/**
* Verify text of Gist event
*/
public void testGist() {
Event event = createEvent(TYPE_GIST);
GistPayload payload = new GistPayload();
payload.setAction("create");
payload.setGist(new Gist().setId("1"));
event.setPayload(payload);
updateView(event);
verify("user created Gist 1");
}
/**
* Verify text of wiki event
*/
public void testWiki() {
Event event = createEvent(TYPE_GOLLUM);
updateView(event);
verify("user updated the wiki in user/repo");
}
/**
* Verify text of issue comment event
*/
public void testIssueComment() {
Event event = createEvent(TYPE_ISSUE_COMMENT);
IssueCommentPayload payload = new IssueCommentPayload();
payload.setIssue(new Issue().setNumber(5));
event.setPayload(payload);
updateView(event);
verify("user commented on issue 5 on user/repo");
}
/**
* Verify text of issue event
*/
public void testIssue() {
Event event = createEvent(TYPE_ISSUES);
IssuesPayload payload = new IssuesPayload();
payload.setAction("closed");
payload.setIssue(new Issue().setNumber(8));
event.setPayload(payload);
updateView(event);
verify("user closed issue 8 on user/repo");
}
/**
* Verify text of member event
*/
public void testAddMember() {
Event event = createEvent(TYPE_MEMBER);
event.setPayload(new MemberPayload().setMember(new User()
.setLogin("person")));
updateView(event);
verify("user added person as a collaborator to user/repo");
}
/**
* Verify text of open sourced event
*/
public void testOpenSourced() {
Event event = createEvent(TYPE_PUBLIC);
updateView(event);
verify("user open sourced repository user/repo");
}
/**
* Verify text of watch event
*/
public void testWatch() {
Event event = createEvent(TYPE_WATCH);
updateView(event);
verify("user starred user/repo");
}
/**
* Verify text of pull request event
*/
public void testPullRequest() {
Event event = createEvent(TYPE_PULL_REQUEST);
PullRequestPayload payload = new PullRequestPayload();
payload.setNumber(30);
payload.setAction("merged");
event.setPayload(payload);
updateView(event);
verify("user merged pull request 30 on user/repo");
}
/**
* Verify text of push event
*/
public void testPush() {
Event event = createEvent(TYPE_PUSH);
PushPayload payload = new PushPayload();
payload.setRef("refs/heads/master");
event.setPayload(payload);
updateView(event);
verify("user pushed to master at user/repo");
}
/**
* Verify text of push event
*/
public void testTeamAdd() {
Event event = createEvent(TYPE_TEAM_ADD);
TeamAddPayload payload = new TeamAddPayload();
payload.setTeam(new Team().setName("t1"));
payload.setUser(new User().setLogin("u2"));
event.setPayload(payload);
updateView(event);
verify("user added u2 to team t1");
}
}