/*
* Copyright (c) 2015 PocketHub
*
* 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.pockethub.android.tests;
import android.content.Context;
import android.test.InstrumentationTestCase;
import android.test.UiThreadTest;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.TextView;
import com.meisolsson.githubsdk.model.Gist;
import com.meisolsson.githubsdk.model.GitHubEvent;
import com.meisolsson.githubsdk.model.GitHubEventType;
import com.meisolsson.githubsdk.model.Issue;
import com.meisolsson.githubsdk.model.Repository;
import com.meisolsson.githubsdk.model.Team;
import com.meisolsson.githubsdk.model.User;
import com.github.pockethub.android.R.id;
import com.github.pockethub.android.ui.user.NewsListAdapter;
import com.github.pockethub.android.util.AvatarLoader;
import com.meisolsson.githubsdk.model.payload.CommitCommentPayload;
import com.meisolsson.githubsdk.model.payload.CreatePayload;
import com.meisolsson.githubsdk.model.payload.DeletePayload;
import com.meisolsson.githubsdk.model.payload.FollowPayload;
import com.meisolsson.githubsdk.model.payload.GistPayload;
import com.meisolsson.githubsdk.model.payload.GitHubPayload;
import com.meisolsson.githubsdk.model.payload.IssueCommentPayload;
import com.meisolsson.githubsdk.model.payload.IssuesPayload;
import com.meisolsson.githubsdk.model.payload.MemberPayload;
import com.meisolsson.githubsdk.model.payload.PullRequestPayload;
import com.meisolsson.githubsdk.model.payload.PushPayload;
import com.meisolsson.githubsdk.model.payload.TeamAddPayload;
import java.util.Date;
/**
* Tests of the news text rendering
*/
public class NewsEventTextTest extends InstrumentationTestCase {
private NewsListAdapter adapter;
private TextView text;
private User actor;
private Repository repo;
@Override
protected void setUp() throws Exception {
super.setUp();
actor = User.builder().login("user").build();
repo = Repository.builder().name("user/repo").build();
Context context = getInstrumentation().getTargetContext();
adapter = new NewsListAdapter(LayoutInflater.from(context),
new AvatarLoader(context));
}
private GitHubEvent createEvent(GitHubEventType type, GitHubPayload payload) {
return GitHubEvent.builder()
.createdAt(new Date())
.type(type)
.payload(payload)
.actor(actor)
.repo(repo)
.build();
}
private void verify(String expected) {
CharSequence actual = text.getText();
assertNotNull(actual);
assertEquals(expected, actual.toString());
}
private void updateView(GitHubEvent 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
*/
@UiThreadTest
public void testCommitCommentEvent() {
GitHubEvent event = createEvent(GitHubEventType.CommitCommentEvent,
CommitCommentPayload.builder().build());
updateView(event);
verify("user commented on user/repo");
}
/**
* Verify text of create event
*/
@UiThreadTest
public void testCreateRepositoryEvent() {
CreatePayload payload = CreatePayload.builder()
.refType("repository")
.build();
GitHubEvent event = createEvent(GitHubEventType.CreateEvent, payload);
updateView(event);
verify("user created repository repo");
}
/**
* Verify text of create event
*/
@UiThreadTest
public void testCreateBranchEvent() {
CreatePayload payload = CreatePayload.builder()
.refType("branch")
.ref("b1")
.build();
GitHubEvent event = createEvent(GitHubEventType.CreateEvent, payload);
updateView(event);
verify("user created branch b1 at user/repo");
}
/**
* Verify text of delete event
*/
@UiThreadTest
public void testDelete() {
DeletePayload payload = DeletePayload.builder()
.refType("branch")
.ref("b1")
.build();
GitHubEvent event = createEvent(GitHubEventType.DeleteEvent, payload);
updateView(event);
verify("user deleted branch b1 at user/repo");
}
/**
* Verify text of follow event
*/
@UiThreadTest
public void testFollow() {
User target = User.builder()
.login("user2")
.build();
FollowPayload payload = FollowPayload.builder()
.target(target)
.build();
GitHubEvent event = createEvent(GitHubEventType.FollowEvent, payload);
updateView(event);
verify("user started following user2");
}
/**
* Verify text of Gist event
*/
@UiThreadTest
public void testGist() {
Gist gist = Gist.builder()
.id("1")
.build();
GistPayload payload = GistPayload.builder()
.action("create")
.gist(gist)
.build();
GitHubEvent event = createEvent(GitHubEventType.GistEvent, payload);
updateView(event);
verify("user created Gist 1");
}
/**
* Verify text of wiki event
*/
@UiThreadTest
public void testWiki() {
GitHubEvent event = createEvent(GitHubEventType.GollumEvent, null);
updateView(event);
verify("user updated the wiki in user/repo");
}
/**
* Verify text of issue comment event
*/
@UiThreadTest
public void testIssueComment() {
Issue issue = Issue.builder()
.number(5)
.build();
IssueCommentPayload payload = IssueCommentPayload.builder()
.issue(issue)
.build();
GitHubEvent event = createEvent(GitHubEventType.IssueCommentEvent, payload);
updateView(event);
verify("user commented on issue 5 on user/repo");
}
/**
* Verify text of issue event
*/
@UiThreadTest
public void testIssue() {
Issue issue = Issue.builder()
.number(8)
.build();
IssuesPayload payload = IssuesPayload.builder()
.action("closed")
.issue(issue)
.build();
GitHubEvent event = createEvent(GitHubEventType.IssuesEvent, payload);
updateView(event);
verify("user closed issue 8 on user/repo");
}
/**
* Verify text of member event
*/
@UiThreadTest
public void testAddMember() {
User user = User.builder()
.login("person")
.build();
MemberPayload payload = MemberPayload.builder()
.member(user)
.build();
GitHubEvent event = createEvent(GitHubEventType.MemberEvent, payload);
updateView(event);
verify("user added person as a collaborator to user/repo");
}
/**
* Verify text of open sourced event
*/
@UiThreadTest
public void testOpenSourced() {
GitHubEvent event = createEvent(GitHubEventType.PublicEvent, null);
updateView(event);
verify("user open sourced repository user/repo");
}
/**
* Verify text of watch event
*/
@UiThreadTest
public void testWatch() {
GitHubEvent event = createEvent(GitHubEventType.WatchEvent, null);
updateView(event);
verify("user starred user/repo");
}
/**
* Verify text of pull request event
*/
@UiThreadTest
public void testPullRequest() {
PullRequestPayload payload = PullRequestPayload.builder()
.number(30)
.action("merged")
.build();
GitHubEvent event = createEvent(GitHubEventType.PullRequestEvent, payload);
updateView(event);
verify("user merged pull request 30 on user/repo");
}
/**
* Verify text of push event
*/
@UiThreadTest
public void testPush() {
PushPayload payload = PushPayload.builder()
.ref("refs/heads/master")
.build();
GitHubEvent event = createEvent(GitHubEventType.PushEvent, payload);
updateView(event);
verify("user pushed to master at user/repo");
}
/**
* Verify text of push event
*/
@UiThreadTest
public void testTeamAdd() {
Team team = Team.builder()
.name("t1")
.build();
Repository repo = Repository.builder()
.name("r2")
.build();
TeamAddPayload payload = TeamAddPayload.builder()
.repository(repo)
.team(team)
.build();
GitHubEvent event = createEvent(GitHubEventType.TeamAddEvent, payload);
updateView(event);
verify("user added r2 to team t1");
}
}