Skip to content
Snippets Groups Projects
Commit b865d6a1 authored by Daniel Gerhardt's avatar Daniel Gerhardt
Browse files

Provide hashCode, equals and toString implementations for Entity

parent 79ebd56c
No related merge requests found
Showing
with 464 additions and 373 deletions
......@@ -4,73 +4,21 @@ import com.fasterxml.jackson.annotation.JsonTypeInfo;
import com.fasterxml.jackson.annotation.JsonView;
import de.thm.arsnova.entities.serialization.View;
import java.util.Date;
import java.util.Map;
import java.util.Objects;
@JsonTypeInfo(
use = JsonTypeInfo.Id.MINIMAL_CLASS,
include = JsonTypeInfo.As.PROPERTY,
property = "type"
)
public abstract class Answer implements Entity {
private String id;
private String rev;
private Date creationTimestamp;
private Date updateTimestamp;
public abstract class Answer extends Entity {
private String contentId;
private String roomId;
private String creatorId;
private int round;
private Map<String, Map<String, ?>> extensions;
@Override
@JsonView({View.Persistence.class, View.Public.class})
public String getId() {
return id;
}
@Override
@JsonView({View.Persistence.class, View.Public.class})
public void setId(final String id) {
this.id = id;
}
@Override
@JsonView({View.Persistence.class, View.Public.class})
public String getRevision() {
return rev;
}
@Override
@JsonView({View.Persistence.class, View.Public.class})
public void setRevision(final String rev) {
this.rev = rev;
}
@Override
@JsonView(View.Persistence.class)
public Date getCreationTimestamp() {
return creationTimestamp;
}
@Override
@JsonView(View.Persistence.class)
public void setCreationTimestamp(final Date creationTimestamp) {
this.creationTimestamp = creationTimestamp;
}
@Override
@JsonView(View.Persistence.class)
public Date getUpdateTimestamp() {
return updateTimestamp;
}
@Override
@JsonView(View.Persistence.class)
public void setUpdateTimestamp(final Date updateTimestamp) {
this.updateTimestamp = updateTimestamp;
}
@JsonView({View.Persistence.class, View.Public.class})
public String getContentId() {
return contentId;
......@@ -119,4 +67,26 @@ public abstract class Answer implements Entity {
public void setExtensions(Map<String, Map<String, ?>> extensions) {
this.extensions = extensions;
}
/**
* {@inheritDoc}
*
* The following fields of <tt>Answer</tt> are excluded from equality checks:
* {@link #extensions}.
*/
@Override
public boolean equals(final Object o) {
if (this == o) {
return true;
}
if (!super.equals(o)) {
return false;
}
final Answer answer = (Answer) o;
return round == answer.round &&
Objects.equals(contentId, answer.contentId) &&
Objects.equals(roomId, answer.roomId) &&
Objects.equals(creatorId, answer.creatorId);
}
}
......@@ -3,13 +3,9 @@ package de.thm.arsnova.entities;
import com.fasterxml.jackson.annotation.JsonView;
import de.thm.arsnova.entities.serialization.View;
import java.util.Date;
import java.util.Objects;
public class Attachment implements Entity {
private String id;
private String rev;
private Date creationTimestamp;
private Date updateTimestamp;
public class Attachment extends Entity {
private String mediaType;
private long size;
private String originalSourceUrl;
......@@ -39,30 +35,6 @@ public class Attachment implements Entity {
this.rev = rev;
}
@Override
@JsonView(View.Persistence.class)
public Date getCreationTimestamp() {
return creationTimestamp;
}
@Override
@JsonView(View.Persistence.class)
public void setCreationTimestamp(final Date creationTimestamp) {
this.creationTimestamp = creationTimestamp;
}
@Override
@JsonView(View.Persistence.class)
public Date getUpdateTimestamp() {
return updateTimestamp;
}
@Override
@JsonView(View.Persistence.class)
public void setUpdateTimestamp(final Date updateTimestamp) {
this.updateTimestamp = updateTimestamp;
}
@JsonView({View.Persistence.class, View.Public.class})
public String getMediaType() {
return mediaType;
......@@ -102,4 +74,25 @@ public class Attachment implements Entity {
public void setStorageLocation(String storageLocation) {
this.storageLocation = storageLocation;
}
/**
* {@inheritDoc}
*
* All fields of <tt>Attachment</tt> are included in equality checks.
*/
@Override
public boolean equals(final Object o) {
if (this == o) {
return true;
}
if (!super.equals(o)) {
return false;
}
final Attachment that = (Attachment) o;
return size == that.size &&
Objects.equals(mediaType, that.mediaType) &&
Objects.equals(originalSourceUrl, that.originalSourceUrl) &&
Objects.equals(storageLocation, that.storageLocation);
}
}
......@@ -5,12 +5,9 @@ import de.thm.arsnova.entities.serialization.View;
import java.util.Date;
import java.util.Map;
import java.util.Objects;
public class Comment implements Entity {
private String id;
private String rev;
private Date creationTimestamp;
private Date updateTimestamp;
public class Comment extends Entity {
private String roomId;
private String creatorId;
private String subject;
......@@ -19,54 +16,6 @@ public class Comment implements Entity {
private boolean read;
private Map<String, Map<String, ?>> extensions;
@Override
@JsonView({View.Persistence.class, View.Public.class})
public String getId() {
return id;
}
@Override
@JsonView({View.Persistence.class, View.Public.class})
public void setId(final String id) {
this.id = id;
}
@Override
@JsonView({View.Persistence.class, View.Public.class})
public String getRevision() {
return rev;
}
@Override
@JsonView({View.Persistence.class, View.Public.class})
public void setRevision(final String rev) {
this.rev = rev;
}
@Override
@JsonView(View.Persistence.class)
public Date getCreationTimestamp() {
return creationTimestamp;
}
@Override
@JsonView(View.Persistence.class)
public void setCreationTimestamp(final Date creationTimestamp) {
this.creationTimestamp = creationTimestamp;
}
@Override
@JsonView(View.Persistence.class)
public Date getUpdateTimestamp() {
return updateTimestamp;
}
@Override
@JsonView(View.Persistence.class)
public void setUpdateTimestamp(final Date updateTimestamp) {
this.updateTimestamp = updateTimestamp;
}
@JsonView({View.Persistence.class, View.Public.class})
public String getRoomId() {
return roomId;
......@@ -136,4 +85,29 @@ public class Comment implements Entity {
public void setExtensions(Map<String, Map<String, ?>> extensions) {
this.extensions = extensions;
}
/**
* {@inheritDoc}
*
* The following fields of <tt>LogEntry</tt> are excluded from equality checks:
* {@link #extensions}.
*/
@Override
public boolean equals(final Object o) {
if (this == o) {
return true;
}
if (!super.equals(o)) {
return false;
}
final Comment comment = (Comment) o;
return read == comment.read &&
Objects.equals(roomId, comment.roomId) &&
Objects.equals(creatorId, comment.creatorId) &&
Objects.equals(subject, comment.subject) &&
Objects.equals(body, comment.body) &&
Objects.equals(timestamp, comment.timestamp) &&
Objects.equals(extensions, comment.extensions);
}
}
......@@ -6,13 +6,14 @@ import de.thm.arsnova.entities.serialization.View;
import java.util.Date;
import java.util.Map;
import java.util.Objects;
@JsonTypeInfo(
use = JsonTypeInfo.Id.MINIMAL_CLASS,
include = JsonTypeInfo.As.PROPERTY,
property = "type"
)
public class Content implements Entity {
public class Content extends Entity {
public enum Format {
CHOICE,
BINARY,
......@@ -91,10 +92,6 @@ public class Content implements Entity {
}
}
private String id;
private String rev;
private Date creationTimestamp;
private Date updateTimestamp;
private String roomId;
private String subject;
private String body;
......@@ -105,54 +102,6 @@ public class Content implements Entity {
private Map<String, Map<String, ?>> extensions;
private Map<String, String> attachments;
@Override
@JsonView({View.Persistence.class, View.Public.class})
public String getId() {
return id;
}
@Override
@JsonView({View.Persistence.class, View.Public.class})
public void setId(final String id) {
this.id = id;
}
@Override
@JsonView({View.Persistence.class, View.Public.class})
public String getRevision() {
return rev;
}
@Override
@JsonView({View.Persistence.class, View.Public.class})
public void setRevision(final String rev) {
this.rev = rev;
}
@Override
@JsonView(View.Persistence.class)
public Date getCreationTimestamp() {
return creationTimestamp;
}
@Override
@JsonView(View.Persistence.class)
public void setCreationTimestamp(final Date creationTimestamp) {
this.creationTimestamp = creationTimestamp;
}
@Override
@JsonView(View.Persistence.class)
public Date getUpdateTimestamp() {
return updateTimestamp;
}
@Override
@JsonView(View.Persistence.class)
public void setUpdateTimestamp(final Date updateTimestamp) {
this.updateTimestamp = updateTimestamp;
}
@JsonView({View.Persistence.class, View.Public.class})
public String getRoomId() {
return roomId;
......@@ -246,4 +195,28 @@ public class Content implements Entity {
public void setAttachments(final Map<String, String> attachments) {
this.attachments = attachments;
}
/**
* {@inheritDoc}
*
* The following fields of <tt>LogEntry</tt> are excluded from equality checks:
* {@link #state}, {@link #extensions}, {@link #attachments}.
*/
@Override
public boolean equals(final Object o) {
if (this == o) {
return true;
}
if (!super.equals(o)) {
return false;
}
final Content content = (Content) o;
return Objects.equals(roomId, content.roomId) &&
Objects.equals(subject, content.subject) &&
Objects.equals(body, content.body) &&
format == content.format &&
Objects.equals(group, content.group) &&
Objects.equals(timestamp, content.timestamp);
}
}
/*
* This file is part of ARSnova Backend.
* Copyright (C) 2012-2018 The ARSnova Team
*
* ARSnova Backend is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* ARSnova Backend is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package de.thm.arsnova.entities;
import com.fasterxml.jackson.annotation.JsonView;
import de.thm.arsnova.entities.serialization.View;
import org.springframework.core.style.ToStringCreator;
import java.util.Date;
import java.util.Objects;
public interface Entity {
String getId();
void setId(String id);
/**
* Used as base for classes that represent persistent data with an unique ID.
*
* @author Daniel Gerhardt
*/
public abstract class Entity {
protected String id;
protected String rev;
protected Date creationTimestamp;
protected Date updateTimestamp;
String getRevision();
void setRevision(String rev);
@JsonView({View.Persistence.class, View.Public.class})
public String getId() {
return id;
}
@JsonView({View.Persistence.class, View.Public.class})
public void setId(final String id) {
this.id = id;
}
@JsonView({View.Persistence.class, View.Public.class})
public String getRevision() {
return rev;
}
@JsonView({View.Persistence.class, View.Public.class})
public void setRevision(final String rev) {
this.rev = rev;
}
Date getCreationTimestamp();
void setCreationTimestamp(Date creationTimestamp);
@JsonView(View.Persistence.class)
public Date getCreationTimestamp() {
return creationTimestamp;
}
@JsonView(View.Persistence.class)
public void setCreationTimestamp(final Date creationTimestamp) {
this.creationTimestamp = creationTimestamp;
}
@JsonView(View.Persistence.class)
public Date getUpdateTimestamp() {
return updateTimestamp;
}
Date getUpdateTimestamp();
void setUpdateTimestamp(Date updateTimestamp);
@JsonView(View.Persistence.class)
public void setUpdateTimestamp(final Date updateTimestamp) {
this.updateTimestamp = updateTimestamp;
}
@JsonView(View.Persistence.class)
default Class<? extends Entity> getType() {
public Class<? extends Entity> getType() {
return getClass();
}
@Override
public int hashCode() {
return Objects.hash(id, rev, creationTimestamp, updateTimestamp);
}
/**
* Use this helper method when overriding {@link #hashCode()}.
*
* @param init The result of <tt>super.hashCode()</tt>
* @param additionalFields Fields introduced by the subclass which should be included in the hash code generation
*
* @see java.util.Arrays#hashCode(Object[])
*/
protected int hashCode(final int init, final Object... additionalFields) {
int result = init;
if (additionalFields == null) {
return result;
}
for (Object element : additionalFields) {
result = 31 * result + (element == null ? 0 : element.hashCode());
}
return result;
}
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
final Entity entity = (Entity) o;
return Objects.equals(id, entity.id) &&
Objects.equals(rev, entity.rev) &&
Objects.equals(creationTimestamp, entity.creationTimestamp) &&
Objects.equals(updateTimestamp, entity.updateTimestamp);
}
@Override
public String toString() {
return buildToString().toString();
}
/**
* Use this helper method to adjust the output of {@link #toString()}.
* Override this method instead of <tt>toString()</tt> and call <tt>super.buildToString()</tt>.
* Additional fields can be added to the String by calling
* {@link org.springframework.core.style.ToStringCreator#append} on the <tt>ToStringCreator</tt>.
*/
protected ToStringCreator buildToString() {
ToStringCreator toStringCreator = new ToStringCreator(this);
toStringCreator
.append("id", id)
.append("revision", rev)
.append("creationTimestamp", creationTimestamp)
.append("updateTimestamp", updateTimestamp);
return toStringCreator;
}
}
......@@ -6,8 +6,9 @@ import de.thm.arsnova.entities.serialization.View;
import java.util.Date;
import java.util.Map;
import java.util.Objects;
public class LogEntry implements Entity {
public class LogEntry extends Entity {
public enum LogLevel {
TRACE,
DEBUG,
......@@ -109,4 +110,28 @@ public class LogEntry implements Entity {
public void setPayload(final Map<String, Object> payload) {
this.payload = payload;
}
/**
* {@inheritDoc}
*
* The following fields of <tt>LogEntry</tt> are excluded from equality checks:
* {@link #payload}.
*/
@Override
public boolean equals(final Object o) {
if (this == o) {
return true;
}
if (!super.equals(o)) {
return false;
}
final LogEntry logEntry = (LogEntry) o;
return level == logEntry.level &&
Objects.equals(id, logEntry.id) &&
Objects.equals(rev, logEntry.rev) &&
Objects.equals(creationTimestamp, logEntry.creationTimestamp) &&
Objects.equals(updateTimestamp, logEntry.updateTimestamp) &&
Objects.equals(event, logEntry.event);
}
}
......@@ -6,8 +6,9 @@ import de.thm.arsnova.entities.serialization.View;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Objects;
public class MigrationState implements Entity {
public class MigrationState extends Entity {
public static class Migration {
private String id;
private Date start;
......@@ -38,12 +39,13 @@ public class MigrationState implements Entity {
}
public static final String ID = "MigrationState";
private String rev;
private Date creationTimestamp;
private Date updateTimestamp;
private Migration active;
private List<String> completed = new ArrayList<>();
{
id = ID;
}
@Override
@JsonView(View.Persistence.class)
public String getId() {
......@@ -70,30 +72,6 @@ public class MigrationState implements Entity {
this.rev = rev;
}
@Override
@JsonView(View.Persistence.class)
public Date getCreationTimestamp() {
return creationTimestamp;
}
@Override
@JsonView(View.Persistence.class)
public void setCreationTimestamp(final Date creationTimestamp) {
this.creationTimestamp = creationTimestamp;
}
@Override
@JsonView(View.Persistence.class)
public Date getUpdateTimestamp() {
return updateTimestamp;
}
@Override
@JsonView(View.Persistence.class)
public void setUpdateTimestamp(final Date updateTimestamp) {
this.updateTimestamp = updateTimestamp;
}
@JsonView({View.Persistence.class, View.Public.class})
public Migration getActive() {
return active;
......@@ -117,4 +95,23 @@ public class MigrationState implements Entity {
public void setCompleted(final List<String> completed) {
this.completed = completed;
}
/**
* {@inheritDoc}
*
* All fields of <tt>MigrationState</tt> are included in equality checks.
*/
@Override
public boolean equals(final Object o) {
if (this == o) {
return true;
}
if (!super.equals(o)) {
return false;
}
final MigrationState that = (MigrationState) o;
return Objects.equals(active, that.active) &&
Objects.equals(completed, that.completed);
}
}
......@@ -4,8 +4,9 @@ import com.fasterxml.jackson.annotation.JsonView;
import de.thm.arsnova.entities.serialization.View;
import java.util.Date;
import java.util.Objects;
public class Motd implements Entity {
public class Motd extends Entity {
public enum Audience {
ALL,
AUTHENTICATED,
......@@ -14,10 +15,6 @@ public class Motd implements Entity {
ROOM
}
private String id;
private String rev;
private Date creationTimestamp;
private Date updateTimestamp;
private String roomId;
private Date startDate;
private Date endDate;
......@@ -25,38 +22,6 @@ public class Motd implements Entity {
private String body;
private Audience audience;
@JsonView({View.Persistence.class, View.Public.class})
public String getId() {
return id;
}
@JsonView({View.Persistence.class, View.Public.class})
public void setId(final String id) {
this.id = id;
}
@JsonView({View.Persistence.class, View.Public.class})
public void setRevision(final String rev) {
this.rev = rev;
}
@JsonView({View.Persistence.class, View.Public.class})
public String getRevision() {
return rev;
}
@Override
@JsonView(View.Persistence.class)
public Date getCreationTimestamp() {
return creationTimestamp;
}
@Override
@JsonView(View.Persistence.class)
public void setCreationTimestamp(final Date creationTimestamp) {
this.creationTimestamp = creationTimestamp;
}
@Override
@JsonView(View.Persistence.class)
public Date getUpdateTimestamp() {
......@@ -128,4 +93,27 @@ public class Motd implements Entity {
public void setAudience(final Audience audience) {
this.audience = audience;
}
/**
* {@inheritDoc}
*
* All fields of <tt>Motd</tt> are included in equality checks.
*/
@Override
public boolean equals(final Object o) {
if (this == o) {
return true;
}
if (!super.equals(o)) {
return false;
}
final Motd motd = (Motd) o;
return Objects.equals(roomId, motd.roomId) &&
Objects.equals(startDate, motd.startDate) &&
Objects.equals(endDate, motd.endDate) &&
Objects.equals(title, motd.title) &&
Objects.equals(body, motd.body) &&
audience == motd.audience;
}
}
......@@ -3,11 +3,11 @@ package de.thm.arsnova.entities;
import com.fasterxml.jackson.annotation.JsonView;
import de.thm.arsnova.entities.serialization.View;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Objects;
public class Room implements Entity {
public class Room extends Entity {
public static class ContentGroup {
private List<String> contentIds;
private boolean autoSort;
......@@ -240,10 +240,6 @@ public class Room implements Entity {
}
}
private String id;
private String rev;
private Date creationTimestamp;
private Date updateTimestamp;
private String shortId;
private String ownerId;
private String name;
......@@ -258,54 +254,6 @@ public class Room implements Entity {
private Map<String, String> attachments;
private RoomStatistics statistics;
@Override
@JsonView({View.Persistence.class, View.Public.class})
public String getId() {
return id;
}
@Override
@JsonView({View.Persistence.class, View.Public.class})
public void setId(final String id) {
this.id = id;
}
@Override
@JsonView({View.Persistence.class, View.Public.class})
public String getRevision() {
return rev;
}
@Override
@JsonView({View.Persistence.class, View.Public.class})
public void setRevision(final String rev) {
this.rev = rev;
}
@Override
@JsonView(View.Persistence.class)
public Date getCreationTimestamp() {
return creationTimestamp;
}
@Override
@JsonView(View.Persistence.class)
public void setCreationTimestamp(final Date creationTimestamp) {
this.creationTimestamp = creationTimestamp;
}
@Override
@JsonView(View.Persistence.class)
public Date getUpdateTimestamp() {
return updateTimestamp;
}
@Override
@JsonView(View.Persistence.class)
public void setUpdateTimestamp(final Date updateTimestamp) {
this.updateTimestamp = updateTimestamp;
}
@JsonView({View.Persistence.class, View.Public.class})
public String getShortId() {
return shortId;
......@@ -438,4 +386,29 @@ public class Room implements Entity {
public void setStatistics(final RoomStatistics statistics) {
this.statistics = statistics;
}
/**
* {@inheritDoc}
*
* The following fields of <tt>Room</tt> are excluded from equality checks:
* {@link #contentGroups}, {@link #settings}, {@link #author}, {@link #poolProperties}, {@link #extensions},
* {@link #attachments}, {@link #statistics}.
*/
@Override
public boolean equals(final Object o) {
if (this == o) {
return true;
}
if (!super.equals(o)) {
return false;
}
final Room room = (Room) o;
return closed == room.closed &&
Objects.equals(shortId, room.shortId) &&
Objects.equals(ownerId, room.ownerId) &&
Objects.equals(name, room.name) &&
Objects.equals(abbreviation, room.abbreviation) &&
Objects.equals(description, room.description);
}
}
......@@ -8,9 +8,10 @@ import java.util.Date;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
public class UserProfile implements Entity {
public class UserProfile extends Entity {
public enum AuthProvider {
NONE,
UNKNOWN,
......@@ -100,10 +101,6 @@ public class UserProfile implements Entity {
}
}
private String id;
private String rev;
private Date creationTimestamp;
private Date updateTimestamp;
private AuthProvider authProvider;
private String loginId;
private Date lastLoginTimestamp;
......@@ -121,54 +118,6 @@ public class UserProfile implements Entity {
this.loginId = loginId;
}
@Override
@JsonView({View.Persistence.class, View.Public.class})
public String getId() {
return id;
}
@Override
@JsonView({View.Persistence.class, View.Public.class})
public void setId(final String id) {
this.id = id;
}
@Override
@JsonView({View.Persistence.class, View.Public.class})
public String getRevision() {
return rev;
}
@Override
@JsonView({View.Persistence.class, View.Public.class})
public void setRevision(final String rev) {
this.rev = rev;
}
@Override
@JsonView(View.Persistence.class)
public Date getCreationTimestamp() {
return creationTimestamp;
}
@Override
@JsonView(View.Persistence.class)
public void setCreationTimestamp(final Date creationTimestamp) {
this.creationTimestamp = creationTimestamp;
}
@Override
@JsonView(View.Persistence.class)
public Date getUpdateTimestamp() {
return updateTimestamp;
}
@Override
@JsonView(View.Persistence.class)
public void setUpdateTimestamp(final Date updateTimestamp) {
this.updateTimestamp = updateTimestamp;
}
@JsonView({View.Persistence.class, View.Public.class})
public AuthProvider getAuthProvider() {
return authProvider;
......@@ -238,4 +187,25 @@ public class UserProfile implements Entity {
public void setExtensions(Map<String, Map<String, ?>> extensions) {
this.extensions = extensions;
}
/**
* {@inheritDoc}
*
* The following fields of <tt>UserProfile</tt> are excluded from equality checks:
* {@link #account}, {@link #roomHistory}, {@link #acknowledgedMotds}, {@link #extensions}.
*/
@Override
public boolean equals(final Object o) {
if (this == o) {
return true;
}
if (!super.equals(o)) {
return false;
}
final UserProfile that = (UserProfile) o;
return authProvider == that.authProvider &&
Objects.equals(loginId, that.loginId) &&
Objects.equals(lastLoginTimestamp, that.lastLoginTimestamp);
}
}
/*
* This file is part of ARSnova Backend.
* Copyright (C) 2012-2018 The ARSnova Team
*
* ARSnova Backend is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* ARSnova Backend is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package de.thm.arsnova.entities;
import org.junit.Test;
import org.springframework.core.style.ToStringCreator;
import java.util.Date;
import static org.hamcrest.Matchers.*;
import static org.junit.Assert.*;
/**
* Tests {@link Entity}'s overrides for {@link Object#hashCode()}, {@link Object#equals(Object)}, and
* {@link Object#toString()}.
*
* @author Daniel Gerhardt
*/
public class EntityTest {
class SomeEntity extends Entity {
private String testA;
public SomeEntity(String id, String rev, Date creationTimestamp, Date updateTimestamp, String testA) {
this.id = id;
this.rev = rev;
this.creationTimestamp = creationTimestamp;
this.updateTimestamp = updateTimestamp;
this.testA = testA;
}
@Override
public int hashCode() {
return hashCode(super.hashCode(), testA);
}
@Override
public ToStringCreator buildToString() {
return super.buildToString().append("testA", testA);
}
}
class AnotherEntity extends SomeEntity {
private String testB;
public AnotherEntity(String id, String rev, Date creationTimestamp, Date updateTimestamp, String testA, String testB) {
super(id, rev, creationTimestamp, updateTimestamp, testA);
this.testB = testB;
}
@Override
public int hashCode() {
return hashCode(super.hashCode(), testB);
}
@Override
public ToStringCreator buildToString() {
return super.buildToString().append("testB", testB);
}
}
@Test
public void testHashCode() {
SomeEntity entity1 = new SomeEntity("id", "rev", new Date(0), new Date(0), "test");
SomeEntity entity2 = new SomeEntity("id", "rev", new Date(0), new Date(0), "test");
SomeEntity entity3 = new SomeEntity("wrongId", "rev", new Date(0), new Date(0), "test");
assertEquals(entity1.hashCode(), entity2.hashCode());
assertNotEquals(entity1.hashCode(), entity3.hashCode());
AnotherEntity entity4 = new AnotherEntity("id", "rev", new Date(0), new Date(0), "someTest", "anotherTest");
AnotherEntity entity5 = new AnotherEntity("id", "rev", new Date(0), new Date(0), "someTest", "anotherTest");
AnotherEntity entity6 = new AnotherEntity("id", "rev", new Date(0), new Date(0), "someTest", "wrong");
assertEquals(entity4.hashCode(), entity5.hashCode());
assertNotEquals(entity4.hashCode(), entity6.hashCode());
}
@Test
public void testEquals() {
SomeEntity entity1 = new SomeEntity("id", "rev", new Date(0), new Date(0), "test");
SomeEntity entity2 = new SomeEntity("id", "rev", new Date(0), new Date(0), "test");
SomeEntity entity3 = new SomeEntity("wrongId", "rev", new Date(0), new Date(0), "test");
assertEquals(entity1, entity2);
assertNotEquals(entity1, entity3);
}
@Test
public void testToString() {
SomeEntity entity1 = new SomeEntity("id", "rev", new Date(0), new Date(0), "test");
assertThat(entity1.toString(), startsWith("[EntityTest.SomeEntity"));
assertThat(entity1.toString(), endsWith("testA = 'test']"));
AnotherEntity entity2 = new AnotherEntity("id", "rev", new Date(0), new Date(0), "someTest", "anotherTest");
assertThat(entity2.toString(), startsWith("[EntityTest.AnotherEntity"));
assertThat(entity2.toString(), endsWith("testA = 'someTest', testB = 'anotherTest']"));
}
}
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment