Skip to content

Commit

Permalink
MkEvent
Browse files Browse the repository at this point in the history
  • Loading branch information
Yegor Bugayenko committed Dec 10, 2013
1 parent 1cd0ab1 commit c3f1244
Show file tree
Hide file tree
Showing 3 changed files with 129 additions and 8 deletions.
5 changes: 3 additions & 2 deletions src/main/java/com/jcabi/github/Issue.java
Original file line number Diff line number Diff line change
Expand Up @@ -96,10 +96,11 @@ public interface Issue extends Comparable<Issue>, JsonReadable, JsonPatchable {
/**
* Get all events of the issue.
* @return Events
* @throws IOException If there is any I/O problem
* @see <a href="http://developer.github.com/v3/issues/events/#list-events-for-an-issue">List Events for an Issue</a>
*/
@NotNull(message = "iterable of events is never NULL")
Iterable<Event> events();
Iterable<Event> events() throws IOException;

/**
* Smart Issue with extra features.
Expand Down Expand Up @@ -313,7 +314,7 @@ public IssueLabels labels() {
return this.issue.labels();
}
@Override
public Iterable<Event> events() {
public Iterable<Event> events() throws IOException {
return this.issue.events();
}
@Override
Expand Down
112 changes: 112 additions & 0 deletions src/main/java/com/jcabi/github/mock/MkEvent.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,112 @@
/**
* Copyright (c) 2012-2013, JCabi.com
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met: 1) Redistributions of source code must retain the above
* copyright notice, this list of conditions and the following
* disclaimer. 2) Redistributions in binary form must reproduce the above
* copyright notice, this list of conditions and the following
* disclaimer in the documentation and/or other materials provided
* with the distribution. 3) Neither the name of the jcabi.com nor
* the names of its contributors may be used to endorse or promote
* products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT
* NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
* THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
* OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package com.jcabi.github.mock;

import com.jcabi.aspects.Immutable;
import com.jcabi.aspects.Loggable;
import com.jcabi.github.Coordinates;
import com.jcabi.github.Event;
import com.jcabi.github.Repo;
import javax.json.Json;
import javax.json.JsonObject;
import lombok.EqualsAndHashCode;
import lombok.ToString;

/**
* Mock Github event.
*
* @author Yegor Bugayenko (yegor@tpc2.com)
* @version $Id$
* @since 0.6.1
*/
@Immutable
@Loggable(Loggable.DEBUG)
@ToString
@EqualsAndHashCode(of = "type")
final class MkEvent implements Event {

/**
* Storage.
*/
private final transient MkStorage storage;

/**
* Login of the user logged in.
*/
private final transient String self;

/**
* Repo name.
*/
private final transient Coordinates coords;

/**
* Type of event.
*/
private final transient String type;

/**
* Public ctor.
* @param stg Storage
* @param login User to login
* @param rep Repo
* @param tpe Type
* @checkstyle ParameterNumber (5 lines)
*/
MkEvent(final MkStorage stg, final String login,
final Coordinates rep, final String tpe) {
this.storage = stg;
this.self = login;
this.coords = rep;
this.type = tpe;
}

@Override
public Repo repo() {
return new MkRepo(this.storage, this.self, this.coords);
}

@Override
public int number() {
return 0;
}

@Override
public int compareTo(final Event event) {
throw new UnsupportedOperationException("#compareTo()");
}

@Override
public JsonObject json() {
return Json.createObjectBuilder().add("event", this.type).add(
"actor", Json.createObjectBuilder().add("login", "test").build()
).build();
}
}
20 changes: 14 additions & 6 deletions src/main/java/com/jcabi/github/mock/MkIssue.java
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,8 @@
import com.jcabi.github.IssueLabels;
import com.jcabi.github.Repo;
import java.io.IOException;
import java.util.Collections;
import java.util.Collection;
import java.util.LinkedList;
import javax.json.JsonObject;
import lombok.EqualsAndHashCode;
import lombok.ToString;
Expand All @@ -49,6 +50,7 @@
* @author Yegor Bugayenko (yegor@tpc2.com)
* @version $Id$
* @since 0.5
* @checkstyle ClassDataAbstractionCoupling (500 lines)
*/
@Immutable
@Loggable(Loggable.DEBUG)
Expand Down Expand Up @@ -124,12 +126,18 @@ public IssueLabels labels() {
}
}

/**
* {@inheritDoc}
*/
@Override
public Iterable<Event> events() {
return Collections.emptyList();
public Iterable<Event> events() throws IOException {
final Collection<Event> events = new LinkedList<Event>();
if (!new Issue.Smart(this).isOpen()) {
events.add(
new MkEvent(
this.storage, this.self, this.coords,
Event.CLOSED
)
);
}
return events;
}

@Override
Expand Down

0 comments on commit c3f1244

Please sign in to comment.