package org.mongodb.morphia.mapping;
import org.bson.types.ObjectId;
import org.junit.Assert;
import org.junit.Test;
import org.mongodb.morphia.Datastore;
import org.mongodb.morphia.Key;
import org.mongodb.morphia.TestBase;
import org.mongodb.morphia.annotations.Entity;
import org.mongodb.morphia.annotations.Id;
import java.util.ArrayList;
import java.util.List;
public class KeyMappingTest extends TestBase {
@Test
public void keyMapping() {
getMorphia().map(User.class, Channel.class);
insertData();
final Datastore datastore = getDs();
User user = datastore.find(User.class).get();
List<Key<Channel>> followedChannels = user.followedChannels;
Channel channel = datastore.find(Channel.class).filter("name", "Sport channel").get();
Key<Channel> key = datastore.getKey(channel);
Assert.assertTrue(followedChannels.contains(key));
}
@Test
public void testKeyComparisons() throws Exception {
final User user = new User("Luke Skywalker");
getDs().save(user);
final Key<User> k1 = new Key<User>(User.class, "User", user.id);
final Key<User> k2 = getDs().getKey(user);
Assert.assertTrue(k1.equals(k2));
Assert.assertTrue(k2.equals(k1));
}
private void insertData() {
final Datastore datastore = getDs();
Channel sportChannel = new Channel("Sport channel");
datastore.save(sportChannel);
datastore.save(new Channel("Art channel"));
Channel fitnessChannel = new Channel("Fitness channel");
datastore.save(fitnessChannel);
final List<Key<Channel>> followedChannels = new ArrayList<Key<Channel>>();
followedChannels.add(datastore.getKey(sportChannel));
followedChannels.add(datastore.getKey(fitnessChannel));
datastore.save(new User("Roberto", datastore.getKey(sportChannel), followedChannels));
}
@Entity(noClassnameStored = true)
static class User {
@Id
private ObjectId id;
private Key<Channel> favoriteChannels;
private List<Key<Channel>> followedChannels = new ArrayList<Key<Channel>>();
private String name;
public User() {
}
public User(final String name, final Key<Channel> favoriteChannels,
final List<Key<Channel>> followedChannels) {
this.name = name;
this.favoriteChannels = favoriteChannels;
this.followedChannels = followedChannels;
}
public User(final String name) {
this.name = name;
}
}
@Entity(noClassnameStored = true)
static class Channel {
@Id
private ObjectId id;
private String name;
public Channel() {
}
public Channel(final String name) {
this.name = name;
}
}
}